首页 > 解决方案 > 使用 scapy 在 IP 示例中制作 IP

问题描述

我正在尝试使用 scapy 在 IP 数据包中发送 IP,但我似乎遗漏或误解了某些内容。这是我的尝试:

from scapy.all import *

payload = "HelloWorld" 
inner = IP(dst="192.168.1.2")
inner.add_payload(payload)
outer = IP(dst="192.168.1.2")
send(outer/inner)

我在目的地查看了带有wireshark的数据包,它显示数据包格式错误:

专家信息(错误/协议):IPv6 Hop-by-Hop 扩展标头必须紧跟在 IPv6 标头之后

然后目的地发送回一个类型为 3(目的地不可达)和代码 2(协议不可达)的 ICMP 数据包。

我尝试在外部和内部数据包上设置几种协议(协议 4 IPv4 封装感觉不错),但到目前为止,它们都发回了“协议无法访问”的 ICMP 数据包。

如果它有所不同,我的意图是让内部数据包发送到与外部数据包不同的目的地。我只是想我应该做一个最简单的例子来开始。一旦我弄清楚为什么我会收到协议无法访问的消息,我将更改内部数据包的目标 IP。

建议?

标签: pythonnetworkingscapy

解决方案


如果要在 IP 数据包中发送 IP(外部 IP 标头、内部 IP 标头、IP 有效负载),例如:

from scapy.all import *

payload = "TEST"
send(IP(dst="192.168.1.2")/IP(dst="192.168.1.2")/UDP(dport=4444)/payload)

推荐阅读