UDPパケットを解析して、着信UDPパケットを検証するために、UDPサーバーを構築しています。私はパケットを受信して解析することができますが、ヘッダ値は私が期待した値ではありません。UDPパケットの解析
これは着信パケットの構造
パケットID(4バイト)
パケット列(4バイト)
XORキー(2バイト)は、パケット内のチェックサムの
数(2バイト)
環状でありますチェックサムCRC32パケットを送信するために(変数)
、
with open('payloadfile.bin') as op:
payload = pickle.load(op)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for i in payload:
sock.sentto(payload, ('127.0.0.1',4545))
私はこれまで理解し何から
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind('127.0.0.1',4545)
while 1:
packet = sock.recvfrom(65565)
packet = packet[0]
# parse IP
ip_header = packet[0:20]
iph = struct.unpack('!BBHHHBBH4s4s' , ip_header)
#all the following values are incorrect
version_ihl = iph[0]
version = version_ihl >> 4
ihl = version_ihl & 0xF
ttl = iph[5]
protocol = iph[6]
s_addr = socket.inet_ntoa(iph[8]);
d_addr = socket.inet_ntoa(iph[9]);
# parse UDP
packet = packet[20:28]
data = packet[header_length:]
source_port, dest_port, data_length, checksum = struct.unpack("!HHHH", header)
このパケットを受信して解析するには、これは一般的な構造
IP_HEADER(UDP_HEADER(ペイロード))でなければなりません)
私は正しくヘッダを解析すると、ペイロードを抽出します。
もし私が正しい方向を指すことができるのであれば、本当にありがたいです
あなたはIP/UDPヘッダーを取得せず、データグラムペイロードだけを取得します。これは目的に応じて行われます。あなたはIP4/UDPとしてこのソケットを開いたことがありましたが、 'socket'は複数のトランスポートプロトコルで動作する汎用インタレースです。例えば、IP6やIPXでも透過的に動作するはずです。 – tdelaney