scapy sr1 ICMP响应

时间:2018-07-09 18:05:33

标签: networking udp port scapy

我做什么:

  1. 使用scapy从服务器发送/接收UDP数据报 (192.168.1.2)
  2. 服务器用UDP数据报答复接收到的UDP数据报的源端口

这很好,但是,在成功接收到数据报之后,客户端总是发送ICMP“目标不可达(端口不可达)”。 Scapy命令在客户端上运行:

pkt = IP(dst='192.168.1.2')/UDP(sport=49000, dport=50991)/Raw(udp_command_bytes)
rec = sr1(pkt)

我有一个使用套接字的基于POXIS的应用程序,它执行相同的操作,并且没有发送ICMP响应。上面的scapy命令有什么问题?它不应该在端口49000上监听响应吗?

1 个答案:

答案 0 :(得分:1)

Scapy并不是要在UDP端口上“监听”,而是要在其上“嗅探/间谍”(参见https://scapy.readthedocs.io/en/latest/introduction.html#scapy-decodes-it-does-not-interpret

这意味着运行中的TCP / IP堆栈不知道scapy也正在接收数据包,因此,如果看不到使用者,则取决于您的堆栈配置(参见https://serverfault.com/questions/522709/disable-icmp-unreachable-replies),它可以决定发送UDP数据包未到达使用方的指示(您的额外ICMP消息包含UDP端口不可达指示)。

作为解决方法,您可以简单地打开一个shell并执行以下操作:

netcat -lkfu 49000

这将确保您的系统具有该端口的使用者,并且您仍然可以使用scapy处理所有传入流量。