第一个问题是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上工作?谢谢
答案 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中所定义。