scapy를 사용하여 새 레이어를 만들고 싶습니다. 새 레이어를 만들었지 만 다른 컴퓨터로 보내면 잃어 버렸고 wireshark도 인식 할 수 없었습니다. 어떻게이 문제를 해결할 수 있습니까?scapy로 새 레이어 또는 새 프로토콜을 만드는 방법은 무엇입니까?
class OMER(Packet):
name = "OMER"
fields_desc = [StrLenField("Omer", "", None)]
scapy를 사용하여 새 레이어를 만들고 싶습니다. 새 레이어를 만들었지 만 다른 컴퓨터로 보내면 잃어 버렸고 wireshark도 인식 할 수 없었습니다. 어떻게이 문제를 해결할 수 있습니까?scapy로 새 레이어 또는 새 프로토콜을 만드는 방법은 무엇입니까?
class OMER(Packet):
name = "OMER"
fields_desc = [StrLenField("Omer", "", None)]
당신은 그들이 당신의 프로토콜의 특성의 인식하지 때문에 wireshark
(및 기타)와 같은 새로운 프로토콜이나 scapy
와 새 레이어, 다른 네트워크 도구를 만들 때가 자동으로 구문 분석 할 수 없습니다 바르게.
새로운 프로토콜을 실험하려면 자신의 로컬 디코더를 만들어야합니다. 의 인식이 scapy을 볼 수 있듯이
[+] Writing net.pcap file...
[+] Examining net.pcap file...
###[ myprotocol ]###
fld1 = 0
fld2 = 0x3
###[ myprotocol ]###
fld1 = 1
fld2 = 0x3
###[ myprotocol ]###
fld1 = 2
fld2 = 0x3
...skip...
:
#!/usr/bin/env python
from scapy.all import *
# create a simple protocol
# (example similar with the one in the scapy docs...)
class Exmpl(Packet):
name = "myprotocol"
fields_desc=[ ShortField("fld1",5),
XByteField("fld2",3) ]
from scapy.utils import PcapWriter
# write data in a pcap file to examine later with
# 1 -> scapy
# 2 -> wireshark
print '\n[+] Writing net.pcap file...'
cap = PcapWriter("net.pcap", append=True, sync=True)
for i in range(10):
packet = Exmpl(fld1=i)
cap.write(packet)
# read the data and examine them with scapy
# scapy is aware of the "Exmpl" protocol (e.g. its fields etc...)
# and how to decode it, while wireshark is not
print '[+] Examining net.pcap file...\n'
packets = rdpcap('net.pcap')
for p in packets:
Exmpl(str(p)).show()
위 스크립트의 출력은 같은 것입니다 : 다음 예는 심지어 최소한의, 그것은 위의 모든 방법을 보여줍니다 프로토콜을 사용하여 데이터를 올바르게 구문 분석 할 수 있습니다.
wireshark이 프로토콜을 인식하지 그 결과는 는가 올바르게 구문 분석 할 수 없습니다 : 당신이 wireshark
과 함께 "net.pcap"파일을 검사하려고하면 지금 당신은 다음을 참조한다 .
알림 : 알다시피, 다른 장치에 패킷을 보내더라도 (실제로 다른 장치도 구현해야 함) 알 수 있듯이 해당 장치는 프로토콜을 알고 있어야합니다. 올바르게 구문 분석 할 수 없습니다. 그래서 한 컴퓨터에서 다른 컴퓨터로 패킷을 보내려고하면 수신기가 패킷을 성공적으로 디코딩 할 수 없었습니다.
을 제외한 모든 레이어에 나타나는지 확인하고 다른 컴퓨터가 내 프로토콜을 인식하도록 만드는 것입니다. – Omer
다른 컴퓨터의 스크립트에'Exmpl'을 임포트하고 코드 스 니펫과 같이 pcap을 파싱해야합니다. 그건 그렇고, 아무도 당신의 프로토콜의 특성을 알 수 없기 때문에 이것은 네트워크에서 데이터를 숨기는 방법입니다. 프로토콜 표준에 대한 추가 정보가 들어있는 [이 위키 링크] (https://en.wikipedia.org/wiki/Communications_protocol)를 확인하십시오. – coder
좋아, 내가이 코드를 작성하면 ip 또는 tcp와 같은 다른 레이어가 취소됩니까? IP()/UDP()/my_protocol()을 쓸 수 있습니까? – Omer
새 레이어/프로토콜을 이전 레이어/프로토콜에 바인딩 했습니까? 예 : bind_layers (Ether, OMER) OMER 계층이 Ether 계층 바로 뒤에 오는 경우.
['wireshark'] (https://www.wireshark.org/)가 자신의 프로토콜 사양을 이해하고 디코딩 할 수 있으려면 어떻게해야합니까? 이 문제를 해결하기 위해 로컬 디코더를 작성할 수 있습니다. 자세한 내용은 ['scapy's docs] (https://scapy.readthedocs.io/en/latest/build_dissect.html)를 읽어보십시오. – coder
이 정보를 읽으려고했으나 깊이 이해하지 못했습니다. 너에게 설명 할 수 있니? 또 다른 질문은 왜 내 컴퓨터의 패킷을 하나의 컴퓨터에서 다른 컴퓨터로 보낼 때 모든 레이어가 내 레이어 – Omer