【发布时间】:2021-03-19 23:14:24
【问题描述】:
我正在尝试从主机 B 向主机 A 发送一个简单的 ICMP 数据包
这是我的配置:
HOST A
10.0.1.10 with gateway set to 10.0.1.24
Router
NIC 1 10.0.1.24
NIC 2 192.168.100.1
HOST B
192.168.100.3
A: 10.0.1.10 <---> 10.0.1.24 |NIC-1 Router NIC-2| 192.168.100.1 <---> 192.168.100.3: B
但是当我尝试发送数据包时
send(IP(dst="10.0.1.10")/ICMP()/"Hello World")
路由器的tcpdump 上没有显示任何内容。
与
sendp(IP(dst="10.0.1.10")/ICMP()/"Hello World")
反而会出现这种情况
09:41:16.398305 00:00:40:01:4b:20 (oui Unknown) > 45:00:00:27:00:01 (oui Unknown), ethertype Unknown (0xc0a8), length 60:
0x0000: 6403 0a00 010a 0800 a631 0000 0000 4865 d........1....He
0x0010: 6c6c 6f20 576f 726c 6400 0000 0000 0000 llo.World.......
0x0020: 0000 0000 0000 0000 0000 0000 0000 ...........
它看起来像一个格式错误的数据包,没有任何东西转发到HOST A
机器可以正常ping,我做错了什么?
编辑:sr1 输出
13:25:58.235650 08:00:27:44:d7:c8 (oui Unknown) Null > Broadcast Unknown DSAP 0x08 Unnumbered, 27, Flags [Command], length 54
0x0000: 0800 2701 507f 0800 2744 d7c8 0800 4500 ..'.P...'D....E.
0x0010: 0028 0001 0000 4001 4b1f c0a8 6403 0a00 .(....@.K...d...
0x0020: 010a 0800 26a8 0000 0000 4845 4c4c 4f20 ....&.....HELLO.
0x0030: 574f 524c 440a
【问题讨论】:
-
可能是 Scapy 猜错了发送接口。使用
send,并指定iface参数。iface="eth0"如果您在 unix 系统上,eth0是正确的接口。如果您使用的是 Windows,请打印出ifaces以查看哪些 ID 与哪些接口相关联,然后执行iface=dev_from_index(INTERFACE_INDEX);其中INTERFACE_INDEX是在ifaces中找到的ID。这一切都假设from scapy.all import *。 -
做到了,我已经从 scapy 路由表中改变了。现在我可以在路由器上看到 ICMP 数据包,但它仍然没有在 HOST A 上转发任何内容。顺便说一句,我在 Unix 系统上。
-
我会仔细检查路由器是否没有发回错误,例如
Destination Unreachable。如果您将send更改为sr1,您会得到任何回报吗?在主机 B 上运行 Wireshark 可能也会对正在发生的事情有所了解。 -
与
sr1我收到相同的消息(我已经编辑了原始帖子)但我无法从路由器获得响应。我在主机 B 上有 Wireshark,它告诉我数据包格式错误(LLC protocol),正如我们所怀疑的那样,并将目的地放在广播中。我忘记了一件事:Scapy 告诉我:WARNING: Mac address to reach destination not found. Using broadcast.尽管如此,即使我在数据包上手动编辑了 HOST A 的 MAC,也没有成功。 -
如果你手动指定
Ether层,你需要sendp而不是send,否则它会产生一个格式错误的数据包(我认为它试图在顶部放置第二个以太网层你的什么的。我还没有弄清楚那个奇怪的地方)。
标签: python-3.x scapy packet packet-loss packet-injection