我所做的:
这很好,但是,在成功接收数据报之后,客户端总是发送ICMP“无法到达的目的地(端口不可到达)”。在客户端上运行Scapy命令:
pkt = IP(dst='192.168.1.2')/UDP(sport=49000, dport=50991)/Raw(udp_command_bytes)
rec = sr1(pkt)我有一个基于POXIS的应用程序,它使用套接字做同样的事情,并且没有发送ICMP响应。上面的替罪羊命令有什么问题?它不应该监听端口49000的响应吗?
发布于 2019-02-14 16:09:39
Scapy的意思不是在UDP端口上“监听”,而是“嗅探/监听”(参见。https://scapy.readthedocs.io/en/latest/introduction.html#scapy-decodes-it-does-not-interpret)
这意味着正在运行的TCP/IP堆栈不知道scapy也在接收数据包,因此,如果它没有看到使用者,则取决于堆栈配置(cf )。( https://serverfault.com/questions/522709/disable-icmp-unreachable-replies),它可以决定发送一个指示,表示UDP数据包没有到达使用者(包含无法到达的UDP端口的额外ICMP消息)。
作为一种解决方法,您可以简单地打开一个shell并执行:
netcat -lkfu 49000这将确保您的系统有一个用于此端口的使用者,并且您仍然可以使用替罪羊来处理所有传入通信量。
https://stackoverflow.com/questions/51251575
复制相似问题