【问题标题】:Send packet with scapy使用 scapy 发送数据包
【发布时间】: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


【解决方案1】:

解决了。对于像我这样使用此工具的“菜鸟”的人: 路由器没有将数据包转发到子网,因为它的格式不正确。 我嗅探了一个充当 MiTM 的常规 ICMP 数据包,它起作用了。 HOST 1 正确接收到数据包。

Carcigenicate也猜对了,一定要设置正确的接口。

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多