【问题标题】:Why scapy does not split the layers to fields为什么 scapy 不将图层拆分为字段
【发布时间】:2017-09-21 22:33:03
【问题描述】:

我使用 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)

输出

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

【问题讨论】:

    标签: python scapy network-protocols


    【解决方案1】:

    您的协议很奇怪:程序(Scapy 或其他能够“对话”您的协议的程序)如何猜测ID 字段仅包含“111111111”,其余的将用于下一个字段?

    通常,您要么有一个已知的“字段结束”字符(可以是一个空字节),要么有一个固定长度(已知 ID 字段有 9 个字符长),或者一个字段用于获取字符串的长度。

    Scapy 可以使用这些选项中的任何一个,第一种情况使用StrNullField 或StrStopField,第二种情况使用StrFixedLenField,第三种情况使用StrLenField 和FieldLenField。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多