scapy sr1 ICMP响应

问题描述 投票:0回答:1

我所做的:

  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上听取响应吗?

networking udp port scapy
1个回答
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数据包未到达消费者(包含UDP端口不可达指示的额外ICMP消息)。

作为一种解决方法,您只需打开一个shell即可:

netcat -lkfu 49000

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

© www.soinside.com 2019 - 2024. All rights reserved.