无法嗅探 Ethernet-type 0x0102 自定义数据包

Can't sniff Ethernet-type 0x0102 custom packet

第一个问题是 Scapy 无法嗅探 Ether-type 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)
                ]

发送_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)

嗅_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())

第二个问题是 Scapy 在 Ether-type 设置为 0x800 时可以嗅探,但不能在 0x0102 上工作。

此外,结果将自定义 calc() header 转换为 Raw。下面的结果是在 Ether-type 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 数据包并在 Ether-type 0x0102 上运行?谢谢

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

您的值 0x0102 将用作有效负载长度字段,而不是 EtherType。您需要选择合适的 EtherType 值。 IANA 维护 IEEE 802 Numbers page that has the registered EtherType values, and the IEEE maintains a pageall 分配的 EtherType。

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

88b5
IEEE Std 802 - Local Experimental Ethertype 1. This Ethertype value is available for public use for prototype and vendor-specific protocol development, as defined in Amendment 802a to IEEE Std 802.

-或-

88b6
IEEE Std 802 - Local Experimental Ethertype 2. This Ethertype value is available for public use and for prototype and vendor-specific protocol development, as defined in Amendment 802a to IEEE Std 802.