Answers:
nc
您可以在nc(1)-Linux手册页或nc(1)BSD General Commands手册中找到不同版本的,该连接应在传输后立即关闭。在两个链接的站点上都有一个示例:
首先使用nc侦听特定端口,并将输出捕获到文件中:
$ nc -l 1234 > filename.out
使用第二台计算机,连接到侦听nc进程,向其提供要传输的文件:
$ nc host.example.com 1234 < filename.in
传输文件后,连接将自动关闭。
netcat
传输后您没有关闭连接,因此与上述连接有所不同。它的行为类似于Debian Jessie上的Netcat 1.10。此行为记录在/usr/share/doc/netcat-traditional/README.gz
(在我的机器上),黑体字是我的:
在最简单的用法中,“ nc host port”创建到给定目标主机上给定端口的TCP连接。然后将您的标准输入发送到主机,并将通过连接返回的所有内容发送到您的标准输出。这将无限期继续,直到连接的网络端关闭。 请注意,此行为不同于大多数其他应用程序,后者会关闭所有内容并在标准输入上的文件结束后退出。
这是此行为背后的原因:
您可能会问:“为什么不仅仅使用telnet连接到任意端口?” 有效的问题,这是一些原因。 Telnet存在“标准输入EOF”问题,因此必须在驱动脚本中引入计算出的延迟,以使网络输出完成。这是netcat保持运行直到网络侧关闭的主要原因。
维基百科有不同的实现方式。我不能说出区别。也许别人可以吗?
1个
您可以nc
在读取文件后告诉退出。此选项很有用:
-q seconds after EOF on stdin, wait the specified number of seconds
and then quit. If seconds is negative, wait forever.
如果在发送端使用此命令:
nc -q 0 MachineIP Port < test.txt
nc
在读取EOF之后(即文件结束后)将退出0秒。然后它将退出,接收端也会退出nc
。
如果您想知道如果数据包不通过会发生什么情况,这是Juraj的评论。
当所有数据包都未通过时,系统将检测到该错误并在不通知应用程序的情况下重新传输它们(如果无法,则应用程序将收到超时错误)。可靠的传递是由OS内核提供的TCP协议
nc
使用的目的。您可以使用UDP请求不执行此操作的UDP协议,nc -u
但实际情况并非如此。
2
上述中有一个原始示例,该示例README.gz
基于-w
超时,并且不需要-q
在实现中提供该选项。
Netcat可以用作简单的数据传输代理,哪一端是侦听器,哪一端是客户端都没有关系-一侧的输入作为输出到达另一侧。在没有指定超时的情况下在接收方启动侦听器,然后给发送方小的超时是有帮助的。这样,侦听器将一直保持侦听状态,直到您与之联系为止,并且在数据停止流动之后,客户端将超时,关闭并随身携带侦听器。除非中间网络充满问题,否则这应该是完全可靠的,并且您始终可以增加超时时间。“ rsh”的典型示例通常用于:一方面,
nc -l -p 1234 | uncompress -c | tar xvfp -
然后在另一边
tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
将目录的内容从一台计算机传输到另一台计算机,而不必担心.rhosts文件,用户帐户或两端的inetd配置。