2016-07-23 25 views
1

我正在写一个python脚本,我需要从某些数据包层选择特定的字段。 packet.show()生产:scapy没有显示数据包中的所有字段

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

不任何人都知道如何访问这些领域? (使它们出现?)

回答

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选项
0

我意识到操作码在ARP中。

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

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