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

如何通过Scapy实现发送100字节但抓包显示ICMP长度为1字节?

ICMP数据包长度篡改实现方案

你的需求是发送100字节数据,但让抓包工具显示ICMP数据部分长度为1字节,本质是篡改ICMP头部的长度字段,绕过Scapy的自动计算逻辑即可实现,但需要注意这种数据包不符合ICMP协议规范。

原代码问题分析

你手动设置ICMP(length=1)但抓包仍显示真实长度,是因为Scapy在通过/拼接负载时,会自动根据负载长度重新计算ICMP的length字段,覆盖你手动设置的值。

实现方法

手动拼接ICMP数据包

绕过Scapy的自动字段计算,直接构造ICMP头部字节并拼接负载,代码示例:

from scapy.all import IP, ICMP, Raw, send

# 准备100字节数据
data = b'A' * 100
# 构造ICMP头部,强制设置length=1
icmp_header = ICMP(length=1)
# 将ICMP头部转为字节,手动拼接负载
icmp_packet = bytes(icmp_header) + data
# 构造IP包,将拼接后的ICMP数据作为原始负载发送
packet = IP(dst='1.1.1.1') / Raw(load=icmp_packet)
send(packet)

注意事项

  • 这种数据包属于畸形包,违反ICMP协议规范:接收方会根据length字段只读取1字节数据,剩余99字节会被视为无效内容,大概率会被丢弃或无法正常解析。
  • 部分抓包工具可能会标记该数据包为异常,或显示实际捕获到的总长度,但ICMP头部的length字段会显示为你设置的1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:55:18