scapy - 为什么在 Scapy 中不计算“cksum”
问题描述
我在一个 scapy 脚本中编写了这段代码。目标是生成 ICMP v6 请求并获取校验和。
def generate_frame():
eth = Ether()
eth.dst = "00:50:56:9E:7B:BB"
eth.src = "00:50:56:9E:78:AA"
eth.type = 0x8100
ip = IPv6()
ip.src = "2002:c000:0203:0000:0000:0000:0000:00AA"
ip.dst = "2002:c000:0203:0000:0000:0000:0000:00BB"
icmp =ICMPv6EchoRequest(seq=0x1, id=0x792)
icmp.data = "test"
icmp = ICMPv6EchoRequest(icmp.do_build())
ip = IPv6(ip.do_build())
return eth/Dot1Q(vlan=0x185)/ip/icmp
frame = generate_frame()
hexdump(frame)
#frame.pdfdump(layer_shift = 1)
frame.getlayer(ICMPv6EchoRequest).show2()
print "CRC :"+ str(frame['ICMPv6EchoRequest'].cksum)
我得到结果:
0000 00 50 56 9E 7B BB 00 50 56 9E 78 AA 81 00 01 85 .PV.{..PV.x.....
0010 86 DD 60 00 00 00 00 00 3B 40 20 02 C0 00 02 03 ..`.....;@ .....
0020 00 00 00 00 00 00 00 00 00 AA 20 02 C0 00 02 03 .......... .....
0030 00 00 00 00 00 00 00 00 00 BB 80 00 00 00 07 92 ................
0040 00 01 74 65 73 74 ..test
###[ ICMPv6 Echo Request ]###
type = Echo Request
code = 0
cksum = 0x0
id = 0x792
seq = 0x1
data = 'test'
CRC :0
但cksum属性仍未评估。我不明白我的错误。
非常感谢您的帮助
解决方案
不要使用该do_build
功能。这是一个不应使用的私有函数(它是 3 步构建过程的第二部分)。
此外,不必构建每一层。您可以将它们堆叠并在最后构建整个数据包。
要构建整个数据包,请调用bytes()
它。构建数据包会生成校验和。一个不错的选择是调用Ether(bytes(packet))
来构建数据包
采用
def generate_frame():
eth = Ether()
eth.dst = "00:50:56:9E:7B:BB"
eth.src = "00:50:56:9E:78:AA"
eth.type = 0x8100
ip = IPv6()
ip.src = "2002:c000:0203:0000:0000:0000:0000:00AA"
ip.dst = "2002:c000:0203:0000:0000:0000:0000:00BB"
icmp =ICMPv6EchoRequest(seq=0x1, id=0x792)
icmp.data = "test"
packet = eth/Dot1Q(vlan=0x185)/ip/icmp
# Build and recalculate the whole packet
packet = Ether(bytes(packet))
return packet
它应该可以解决您的问题
推荐阅读
- c# - 何时使用延续令牌在 CosmosDB 中进行分页?
- python - 为什么我的数独解法生成器总是给出相同的解法?
- prolog - 如何在Prolog中返回包含某个元素的列表?
- javascript - 从选定节点中删除所有字体标签-Javascript?
- javascript - 当我尝试在 firebase 中部署我的功能时,它显示“错误:功能未正确部署”。如何解决这个问题?
- graph - 为什么需要在dfs函数中通过引用传递anc向量?
- yii2 - Yii2 以正确的方式使用 AppAseets?
- javascript - 向 selected.js 添加选项
- azure-iot-edge - K8S 上的 IoTEdge,无法初始化模块运行时
- android - 在 android 中使用带有 tawk.to 的 webview 的问题