Netcat 停止侦听 UDP 流量

hea*_*vyd 8 linux udp netcat

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

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

从我的机器到服务器的隧道工作正常,但是在服务器端,侦听来自 UDP 服务器的响应的 netcat 实例将在收到第一个响应后关闭侦听器。所以我可以发送一个请求并得到 1 个响应,但任何后续请求都可以正常发送到服务器,但没有收到响应。使用 netstat 我可以看到在收到响应之前 netcat 正在侦听,但是在收到响应后端口被关闭。

我机器上的 netcat 实例似乎可以很好地处理一切。两台机器都运行 netcat v1.10-38。任何想法发生了什么?

pbr*_*pbr 2

所以有多种叫netcat的东西;ubuntu 甚至有 /etc/alternatives 符号链接黑客功能。

我认为你的部分问题是 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 后也应该“永远等待”(希望再次收听?)

  • 所以这是现在已被接受的答案,但我们不知道哪些技巧被证明是有用的:( (5认同)