如何使用 nc 无限期地监听 TCP 端口?

如何使用 nc 无限期地监听 TCP 端口?

我想无限期地读取到达特定 TCP 端口的数据并将数据转储到文件中。我尝试了许多不同的方法,nc但都不起作用。大多数情况下,我没有在控制台上收到任何错误。以下是我尝试过的方法:

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

感谢你的帮助..

答案1

我想无限读取到达特定 TCP 端口的数据

这确实没有意义……如果您毕竟是数据到达 UDP 端口,那么没问题 - 但 TCP 是一种基于连接的协议。一旦客户端连接,您accept()就会得到两个套接字 - 一个监听,一个连接到客户端...nc将关闭原始监听套接字,并与客户端一对一处理。


如果您希望能够监听多个客户端的连接,请尝试使用socat

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

这将设置一个监听套接字并在连接上派生一个新进程 - 保持监听套接字处于监听状态。所有收到的数据都将写入 stdout(文件描述符1),并重定向到该文件../myfile进行追加。

笔记:数据将从任意数量的客户端接收,不保证顺序,也不采用框架...即:如果您同时拥有多个客户端,那么数据就会变得混乱。


如果你想socat自己处理文件,那么你可以使用CREATEOPEN(参见手册页):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

如果您对“每次一个客户“方法,然后放入nc一个循环:

while :; do nc -l 12345; done >> ../myfile

测试一下nc

nc localhost 12345

答案2

左侧屏幕

nc -l 1234 启动服务器。

右侧的屏幕 nc 127.0.0.1 1234连接。

看起来你的命令是错误的。

值得一提的是,您使用的是 gnu 还是 bsd,我使用的是 bsd。man nc 显示“NC(1) BSD 通用命令手册”。要在 gnu 上启动服务器,可能需要 -l 和 -p。要将客户端连接到任何端口上的服务器,绝不会使用 -p。

在此处输入图片描述

您也可以使用 -v

在此处输入图片描述

你面临的直接问题是你根本无法让它运行。

您的问题询问了它是否无限期,但我想指出的是,如果您在客户端执行 ctrl-c,那么除了断开连接之外,它还会停止服务器。您可以将该服务器置于循环监听中。这有效。这样,服务器就会继续监听,如果您在客户端执行 ctrl-c 后尝试再次连接,服务器仍会在那里。

在此处输入图片描述

相关内容