我做什么:
这很好,但是,在成功接收到数据报之后,客户端总是发送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上监听响应吗?
答案 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处理所有传入流量。