Ich baue einen UDP-Server, um eingehende UDP-Pakete zu analysieren und zu überprüfen. Ich bin in der Lage, Pakete zu empfangen und zu analysieren, aber die Header-Werte sind nicht das, was ich erwartet habe.Parsen von UDP-Paketen
Dies ist die Struktur des ankommenden Pakets
Packet ID (4 Byte)
Packet Sequence (4 Byte)
XOR Key (2 Bytes)
Anzahl der Prüfsummen in Paket (2 Bytes)
Cyclic Prüfsumme CRC32 (variable)
das Paket zu senden,
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))
So zu empfangen und dieses Paket zu analysieren
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)
Von dem, was ich bisher verstehen, das ist die allgemeine Struktur
IP_HEADER (UDP_HEADER (Payload)))
Ich möchte richtig die Header analysieren sein sollte, und dann Nutzlast extrahieren.
Ich würde wirklich schätzen, wenn jemand mich in die richtige Richtung auf die Daten
Sie erhalten nicht die IP/UDP-Header, nur die Nutzlast des Datagramms ... und dies geschieht absichtlich. Sie haben diesen Socket als IP4/UDP geöffnet, aber "Socket" eine generische Interace, die mit mehreren Transportprotokollen arbeitet. Zum Beispiel sollte es transparent mit IP6 oder sogar (oh mein Teufel!) IPX arbeiten. – tdelaney