我正在从pcap文件中读取数据包,并将其发送到我的网络上。问题是我不断收到无效的校验和错误。我已经将数据包设置为在IP层中具有校验和为None(因为Scapy会自动生成任何丢失的数据),但是我似乎无法在协议层(TCP,UDP等)中使用它。因此,校验和错误仍然会发生。
示例
###[ IP ]###
version = 4
ihl = 5
tos = 0x20
len = 436
id = 50116
flags =
frag = 0
ttl = 107
proto = udp
chksum = None --- Correct as Scapy will Autogen
src = 169.254.162.71
dst = 169.254.208.208
\options \
###[ UDP ]###
sport = 23616
dport = 23575
len = 416
chksum = 0x5f4a ---Incorrect Checksum
我在网上查看并找到了:
pkt.payload.chksum = None
但是那没有用。
pkt[Ether].src = "00:E0:4C:00:02:42"
pkt[Ether].dst = "00:E0:4C:01:08:99"
pkt[IP].src = "169.254.162.71" # i.e new_src_ip="255.255.255.255"
pkt[IP].dst = "169.254.208.208"
pkt[IP].chksum = None
pkt.payload.chksum = None
pkt.show()
示例输出
###[ Ethernet ]###
dst = 00:E0:4C:01:08:99
src = 00:E0:4C:00:02:42
type = IPv4
###[ IP ]###
version = 4
ihl = 5
tos = 0x20
len = 436
id = 50116
flags =
frag = 0
ttl = 107
proto = udp
chksum = None
src = 169.254.162.71
dst = 169.254.208.208
\options \
###[ UDP ]###
sport = 23616
dport = 23575
len = 416
chksum = 0x5f4a ---Not set to None
请注意,我正在读取的文件使用所有不同类型的协议,因此,如果可能,解决方案应该是通用的。
pkt.payload
是IP层。您执行两次相同的操作。
您应该这样做:
pkt[IP].payload.chksum = None