You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成大于64KB的TCP数据包并保存为PCAP文件用于网络设备测试?

解决Scapy创建超大TCP数据包并写入PCAP的报错问题

你遇到的这个错误根源很明确:IP协议的总长度字段是16位无符号整数,最大值只能到65535(约64KB)。Scapy默认会自动计算IP包的总长度和校验和,当你的120000字节负载加上IP、TCP头部长度后,总长度远超65535,触发了struct打包时的范围检查,所以抛出了'H' format requires 0 <= number <= 65535的错误。

要创建这种不符合规范但用于测试的超大包,你需要手动绕过Scapy的自动校验和与长度计算,具体实现如下:

修改后的可运行代码

from scapy.all import *

# 构造超大数据包,手动设置IP层参数以绕过自动检查
bigp = (
    IP(src="127.0.0.1", dst="192.168.2.71", len=65535, chksum=0)  # 手动指定IP长度,关闭自动校验和计算
    / TCP(sport=123, dport=456, chksum=0)  # 关闭TCP自动校验和计算
    / Raw(RandString(size=120000))
)

# 直接将数据包写入PCAP文件
wrpcap("/tmp/c.pcap", [bigp])

关键细节说明

  • 手动设置IP(len=65535):这一步是为了绕过Scapy的长度合法性检查,虽然实际负载远大于这个值,但PCAP格式本身会完整记录所有负载字节(即使IP层的长度字段和实际内容不匹配)。如果需要更大的数据包,甚至可以把len设为更大的数值(比如100000),同样能生效。
  • 设置chksum=0:告诉Scapy不要自动计算IP和TCP的校验和,避免因为长度异常导致校验和计算失败。
  • 测试场景兼容性:这类不符合协议规范的数据包,PCAP文件可以正常存储,后续的重放工具只要不强制校验IP协议合法性,就能正常加载并发送。

内容的提问来源于stack exchange,提问作者LetMeSOThat4U

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:27:31