2017-09-21 1 views
1

Ich habe eine neue Ebene mit scapy erstellt und es ist mir gelungen, die neue Ebene an einen anderen Computer zu senden und die neue Ebene anzuzeigen. Mein Problem ist, wenn ich die Schichten sende, werden alle Daten von allen Feldern in den ersten Feldern angezeigt und von den anderen Feldern gelöscht.Warum scapy die Ebenen nicht in Felder aufteilt

import sys 
i, o, e = sys.stdin, sys.stdout, sys.stderr 
from scapy.all import * 
sys.stdin, sys.stdout, sys.stderr = i, o, e 
from scapy.packet import * 
from scapy.fields import * 
from scapy.layers.inet import UDP, IP 
from scapy.layers.dns import DNS 
from scapy.layers.l2 import Ether 

class ID(Packet): 
    name = "ID secret Traffic" 
    fields_desc = [StrField("ID",""),StrField("LastName",""),StrField("FirstName",""),StrField("FatherName",""), 
        StrField("MomName",""),StrField("BdayLo",""),StrField("BdayHi",""),StrField("BirthLocation",""), 
        StrField("Gender",""),StrField("LocationOfIssuingID",""),StrField("Image","")] 

bind_layers(UDP,ID,sport=217,dport=217) 
bind_layers(ID,Raw,sport=217,dport=217) 
bind_layers(UDP,Raw,sport=217,dport=217) 
p = IP(dst='192.168.1.28')/UDP()/ID(ID='111111111',LastName="Kazo Cohen",FirstName="Omer",FatherName="Yaqqov",MomName="Irit",BdayLo="6121999",BdayHi="Kislev",BirthLocation="RamatGan",Gender="M",LocationOfIssuingID=" Tel Aviv",Image="fvvsgsgsfzfszvsfvfs")/Raw("KEEPALIVE") 
p.show2() 
send(p) 

OUTPUT

###[ IP ]### 
    version = 4L 
    ihl  = 5L 
    tos  = 0x0 
    len  = 120 
    id  = 1 
    flags  = 
    frag  = 0L 
    ttl  = 64 
    proto  = udp 
    chksum = 0xf6e9 
    src  = 192.168.1.30 
    dst  = 192.168.1.28 
    \options \ 
###[ UDP ]### 
    sport  = 217 
    dport  = 217 
    len  = 100 
    chksum = 0xf332 
###[ ID secret Traffic ]### 
     ID  = '111111111Kazo CohenOmerYaqqovIrit6121999KislevRamatGanM Tel AvivfvvsgsgsfzfszvsfvfsKEEPALIVE' 
     LastName = '' 
     FirstName = '' 
     FatherName= '' 
     MomName = '' 
     BdayLo = '' 
     BdayHi = '' 
     BirthLocation= '' 
     Gender = '' 
     LocationOfIssuingID= '' 
     Image  = '' 

Antwort

1

Ihr Protokoll ist seltsam: Wie ist das Programm (scapy oder ein anderes Programm in der Lage zu Ihrem Protokoll „sprechen“) sollte erraten, dass das ID Feld nur „111111111“ enthält und dass der Rest für die nächsten Felder verwendet werden soll?

Normalerweise haben Sie entweder ein bekanntes "Feldende" -Zeichen (ein Null-Byte kann ein Beispiel sein) oder eine feste Länge (das ID-Feld ist 9 Zeichen lang) oder a Feld wird verwendet, um die Länge der Zeichenfolge zu erhalten.

scapy kann mit jeder dieser Optionen funktionieren, StrNullField oder StrStopField für den ersten Fall verwendet wird, StrFixedLenField für den zweiten und StrLenField zusammen mit FieldLenField für das dritte.