我如何配置数据包Scapy的协议层?

问题描述 投票:0回答:1

我正在从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

请注意,我正在读取的文件使用所有不同类型的协议,因此,如果可能,解决方案应该是通用的。

python scapy
1个回答
0
投票

pkt.payload是IP层。您执行两次相同的操作。

您应该这样做:

pkt[IP].payload.chksum = None
© www.soinside.com 2019 - 2024. All rights reserved.