scapy send()发包失败,OSError:[Errno 90] Messge too long

先说结论:
scapy2.4.2-2.4.5版本是正常的,scapy2.5.0版本不行。

通过scapy发包的时候,出现上述问题。
问题排查:
经过分析代码,如果数据帧太多,需要对数据帧进行分片:

分片的大小一般为1500, 可以根据这个数值进行分片。
不过每个接口的分片大小不一定,可以进行设置。
比如,ifconfig eth3 mtu 10000.

分片的前提是,数据帧有payload(数据部分)且长度大于分片值才进行分片。

 if pcap.haslayer("TCP") and pcap.haslayer("Raw") and len(pcap) > self.split_length:
 
from scapy.all import *
pcap_path = r"3.pcap"
packages = rdpcap(pcap_path)
print(packages[0].haslayer("Raw"))
0
print(packages[0].haslayer("TCP"))
True
print(packages[0])
Ether / IP / TCP 172.16.1.102:54728 > 172.16.1.103:microsoft_ds A / NBTSession / SMB2_Header / SMB2_Write_Request

问题原因;2.5.0在处理packages[0].haslayer(“Raw”)这块代码的时候存在问题。因为源pcap是有payload,但是返回为2.4.2版本处理这块代码的时候正常的。
注意:2.5.0对部分回放的包不支持,有些是支持,只是对haslayer(“Raw”)这块代码判断进行的变更。没有深入研究。

附录:变更历史
进入scapy github,
在这里插入图片描述
点击releases,就可以跳转下面的连接。
https://github.com/secdev/scapy/releases