Scapy没有显示数据包中的所有字段

时间:2016-07-23 10:28:27

标签: wireshark scapy

我正在编写一个python脚本,我需要从某些数据包层中选择特定字段。 packet.show()生成:

###[ Padding ]###
load      = '\x00\x00\x00\x00\x00\x00'
None
###[ Ethernet ]###
  dst       = 00:0e:8c:f5:12:af
  src       = 28:63:36:4b:c1:f0
  type      = 0x800
###[ IP ]###
     version   = 4L
     ihl       = 5L
     tos       = 0x0
     len       = 167
     id        = 52667
     flags     = 
     frag      = 0L
     ttl       = 30
     proto     = tcp
     chksum    = 0x487c
     src       = 192.168.2.100
     dst       = 192.168.2.101
     \options   \
###[ TCP ]###
        sport     = 49898
        dport     = iso_tsap
        seq       = 4514968
        ack       = 11714804
        dataofs   = 5L
        reserved  = 0L
        flags     = PA
        window    = 8192
        chksum    = 0x8bdf
        urgptr    = 0
        options   = []
###[ TPKT ]###
           vrsn      = 3
           reserved  = 0
           length    = 127
###[ ISO8073 Data ]###
              li        = 2
              code      = 0xfL
              roa       = 0x0L
              tpdu_no   = 128
###[ S7CommPacketRequest ]###
                 unknown   = 0x32
                 type      = 1
                 reserved  = 0
                 seq_no    = 401
                 param_length= 110
                 data_length= 0
                 \param     \
                  |###[ Raw ]###
                  |  load      = '\x04\t\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00\x02\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00Q\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00P\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00S\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00U\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00R\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00T\x12\n\x10\x01\x00\x01\x00\x01\x84\x00\x00\x01\x12\n\x10\x08\x00\x01\x00\x01\x84\x00\x00\x10'

问题是我需要以太网层中未被Scapy掌握的特定数据(例如以太网层的Wireshark中显示的操作码)

Wireshark capture of packet at Ethernet layer

有谁知道如何访问这些字段? (让它们出现?)

2 个答案:

答案 0 :(得分:0)

您所指的opcode不在以太网层中,而是ARP特定选项。

例如,scapy可以在收到ARP数据包时对其进行编码和解码:

send( Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client),
  inter=RandNum(10,40), loop=1 )

请注意,ARP层位于以太层上方并且具有您正在寻找的op选项

答案 1 :(得分:0)

我意识到操作码是在ARP中。

这里重要的一点是,只有当您要“搜索”的图层未封装在所有数据包(例如ARP)中时,才应使用haslayer函数。一个例子是:

for packet in allPackets:
    if packet.haslayer("ARP"):
       opCode=int(indPacket["ARP"].op)