Netcat 停止监听 UDP 流量

Netcat 停止监听 UDP 流量

我在一些 Linux 机器上使用 netcat(参见其他问题),但看到了一些意外的行为。

与已接受答案中的指南不同,我没有使用 UDP 隧道进行 DNS 查询。我有一个可以登录但不能安装软件的远程服务器,我试图将 UDP 流量从我的计算机隧道传输到服务器,然后设置一个单独的隧道将 UDP 响应从服务器发送回我的机器。

从我的机器到服务器的隧道运行正常,但在服务器端,正在监听来自 UDP 服务器的响应的 netcat 实例将在收到第一个响应后关闭侦听器。因此,我可以发送一个请求并得到 1 个响应,但任何后续请求都可以顺利到达服务器,但不会收到响应。使用 netstat 我可以看到,在收到响应之前,netcat 正在监听,但在收到响应后端口被关闭。

我的机器上的 netcat 实例似乎处理得很好。两台机器都运行 netcat v1.10-38。有什么想法吗?

答案1

因此有多个东西叫做 netcat;ubuntu 甚至有 /etc/alternatives symbolic-link-hackery。

我认为您的问题的一部分在于 UDP 不进行会话;我已将文件 /usr/share/doc/netcat-traditional/README.gz 的部分内容复制到下面,它很好地解释了这一点。

当指定 -u 时,将打开 UDP 连接而不是 TCP 连接。由于 UDP 是一种无连接协议,因此这些实际上并不是“连接”,尽管 netcat 内部使用了大多数内核支持的“已连接 UDP 套接字”机制。尽管 netcat 声称传出的 UDP 连接会立即“打开”,但直到从标准输入读取某些内容后才会发送任何数据。只有此后才有可能确定另一端是否真的有 UDP 服务器,而您通常无法确定。大多数 UDP 协议使用超时和重试来执行其工作,并且在许多情况下根本不会回答,因此您应该指定超时并希望获得最佳结果。如果标准输入来自看起来像各种服务器请求的数据源,您将从 UDP 连接中获得更多收益。

好吧,也许这不是一个很好的解释,但这是我能找到的。

如果还没有,您可能想要尝试任何您能找到的与等待有关的 netcat 选项......您是否尝试过:

  • 使用 -l 和 -u 确保你处于“聆听”模式

  • -vv 看看到底发生了什么

  • -q -1 ...即使在收到 EOF 之后也应该“永远等待”(希望再次监听?)

答案2

你可以使用socat它。它有非常好的选项fork

fork建立连接后,在子进程中处理其通道,并保持父进程尝试产生更多连接,通过监听或循环连接(示例)。

客户端(是的,这是从客户端运行的):

$ ssh -L 7753:localhost:7753 YourServer.com "/usr/bin/socat tcp4-listen:7753,reuseaddr,fork UDP:8.8.8.8:53"

客户:

$ sudo socat udp4-listen:53,reuseaddr,fork tcp:localhost:7753
$ dig @127.0.0.1 google.com

相关内容