Netcat停止监听UDP流量


8

我在某些Linux机器上使用了netcat(请参阅另一个问题),但是看到了一些意外的行为。

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

从我的机器到服务器的隧道运行良好,但是在服务器端,正在侦听UDP服务器响应的netcat实例将在收到第一个响应后关闭侦听器。因此,我可以发送一个请求并获得1个响应,但是任何后续请求都可以将其发送到服务器,但是没有收到响应。使用netstat可以看到,在收到响应之前,netcat正在侦听,但是在收到响应之后,端口将关闭。

我机器上的netcat实例似乎可以处理所有事情。两台机器都运行netcat v1.10-38。有什么想法吗?

Answers:


2

因此,有很多东西叫做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协议都使用超时和重试来完成其任务,并且在许多情况下根本不会打扰,因此您应该指定一个超时并希望达到最佳效果。

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

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

  • 使用-l和-u来确保您处于“监听”模式

  • -vv准确查看正在发生的事情

  • -q -1 ...即使收到EOF,它也应该“永远等待”(希望再次收听吗?)


5
因此,这是现在已经被接受的答案,但是我们不知道哪个技巧被证明是有用的:(
–törzsmókus2012年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.