2017-09-21 8 views
1

scapy를 사용하여 새 레이어를 만들었습니다. 새 레이어를 다른 컴퓨터로 보내고 새 레이어를 표시하는 데 성공했습니다. 내 프로 블록은 모든 필드의 모든 데이터가 첫 번째 필드에 나타나고 다른 필드에서 삭제 된 레이어를 보낼 때입니다.scapy가 레이어를 필드로 분할하지 않는 이유

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  = '' 

답변

1

프로토콜이 이상해 : 추측되어 프로그램 (Scapy, 또는 프로토콜을 "대화"할 다른 프로그램)을 ID 필드는 "111111111"포함 방법 , 나머지는 다음 필드에 사용된다는 것인가?

일반적으로 알려진 "end-of-field"문자 (null 바이트가 예제 일 수 있음) 또는 고정 길이 (ID 필드가 9 자 길이 인 것으로 알려져 있음) 또는 필드는 문자열의 길이를 가져 오는 데 사용됩니다.

Scapy는 초, 제 경우의 StrFixedLenFieldStrNullField 또는 StrStopField를 사용하여, 이러한 옵션에서 작동하고 세 번째 FieldLenField 함께 StrLenField있다.