使用Netcat将文本文件内容发送到服务器?


13

有一个守护进程正在监听端口5144,我无法对其进行修改。

我想使用netcat将文本文件的内容发送到服务器,但这会导致netcat终端挂起,直到我按Ctrl+ 为止C

cat file.txt | nc -u 127.0.0.1 5144

我能够使其正常工作的唯一方法是nc -u 127.0.0.1 5144手动运行并复制/粘贴文件的内容。

有任何想法吗?


另请注意:

  1. cat file.txt | ...导致bash: ...: command not found,我可以继续使用终端
  2. 使用nc -u 127.0.0.1 5144 < file.txt导致与|使用相同的行为。以上

你说cat file.txt | …什么?怎么nc -u 127.0.0.1 5144 < file.txt
Scott

您需要使用-u吗?另外,您是否尝试过另一侧nc -l -p?并且您尝试了nc -p吗?(有一个nc使用-l -p,而我认为一个使用-p而不使用-l)。您只显示了一侧,即客户端/启动侧。您在服务器端做什么?尝试进行测试,使nc在端口1234上侦听,看看是否... nc ...做到了。我以前从未见过它,所以这也许是一个弱项,但是也许这是该特定守护进程特有的,它不接受任何麻烦的事情。
barlop 2012年

我无法修改守护程序。@Scott:bash: ...: command not found并使用“ <file.txt”与| |相同。操作员(netcat刚刚挂起)
Amil 2012年

你能更精确些吗?它说“ bash: ...: command not found”吗?还是说“ bash: cat: command not found”或“ bash: nc: command not found”?然后退出到shell提示,还是挂起?(我鼓励您编辑问题以添加这些详细信息,因此刚刚醒来的澳大利亚人不必阅读所有这些注释即可了解您的症状。)
Scott

@Scott:谢谢,我将对您问题的答案整合到原始问题中。有任何想法吗?
Amil 2012年

Answers:


7

如果使用的是netcat的GNU版本,则可以使用-c标志关闭EOF上的连接。

-c,--close从stdin关闭EOF上的连接

如果使用的是原始版本的工具,则可以使用-q标志。

-q秒在标准输入法上发生EOF之后退出并延迟了几秒

原始版本的示例是:

cat file.txt | nc -u -q 0 127.0.0.1 5144

我已经在您的原始命令中添加了“ -q 0”。发送文件后,这将关闭连接。


区别:原始版本是需要指定-l -p <port>用于收听的版本。GNU版本只需要-l <port>
tueftl

1

假设发送EOF连接后将保持空闲状态,则可以使用-w timeoutoption,该选项的作用timeout是等于0(与愚蠢的-qoption ... 不同)

cat file.text | nc -u localhost 4300 -w0

0

如果从FreeBSD转移到Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N EOF之后将关闭网络套接字

视窗: nc -l -p 5144 > output.txt

-l将在连接关闭时停止监听(与不同-L

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.