无法嗅探以太网类型0x0102自定义数据包

时间:2018-10-06 18:05:41

标签: python networking scapy tcp-ip

第一个问题是Scapy无法在以太类型0x0102的自定义数据包下嗅探。

calc.py↓

from scapy.all import *

class calc(Packet):
    name = 'calc'
    fields_desc = [ BitEnumField('op',0,8,{1:'ADD',2:'SUM',3:'MUL'}),
                BitField('num1',0,32),
                BitField('num2',0,32)
                ]

send_calc.py↓

from scapy.all import *
from calc import *

p = Ether(type=0x0102)/IP(dst='192.168.1.0')/ICMP()/calc(op=1,num1=2,num2=3)
sendp(p)

sniff_calc.py↓

from scapy.all import *
from calc import *

sniff(filter='ether proto 0x0102 and host 192.168.1.0',prn=lambda x:x.show())

第二个问题是,当以太类型设置为0x800时,Scapy可以嗅探,但不能在0x0102上工作。

此外,结果将自定义calc()标头转换为Raw。以下结果是对以太类型0x0800的嗅探。

....
###[ ICMP ]### 
    type      = echo-request
    code      = 0
    chksum    = 0xf1ff
    id        = 0x0
    seq       = 0x0
###[ Raw ]### 
       load      = '\x01\x00\x00\x00\x02\x00\x00\x00\x03'

我应该采取什么步骤,以便接收到的Calc数据包将被自动解析并可以在以太类型0x0102上工作?谢谢

1 个答案:

答案 0 :(得分:1)

如果值> = {0x0600,则仅将以太网头中的该字段用作EtherType字段。如果该字段的值<= {0x5DC,则该字段将被解释为有效载荷长度字段。

您的值0x0102将用作有效载荷长度字段,而不用作EtherType。您需要选择适当的EtherType值。 IANA维护IEEE 802 Numbers页,该页具有已注册的EtherType值,而the IEEE maintains a page属于 all 分配的EtherType。

如果要进行实验,则需要使用为此分配的EtherType:

  

88b5
  IEEE Std 802-本地   实验性Ethertype 1.此Ethertype值可供公众使用   用于原型和特定于供应商的协议开发,例如   在IEEE Std 802的修订802a中定义。

-或-

  

88b6
  IEEE Std 802-本地实验以太网类型2。此以太网类型值   可供公众使用,以及特定于原型和供应商的   协议开发,如IEEE Std 802的修订802a中所定义。