当标准输入关闭时,netcat不会终止


11

我正在尝试通过发送信息netcat。发送消息后,netcat必须终止。

我尝试了以下方法:

cat tsmmessage.bin | nc -u localhost 4300
nc -u localhost 4300 < message.bin

-q选项指出:

-q秒

在stdin上执行EOF之后,等待指定的秒数,然后退出。如果秒为负数,请永远等待。

nc -q0 -u localhost 4300 < message.bin

也行不通。

我想念什么?

Answers:


6

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

cat tsmmessage.bin | nc -u localhost 4300 -w0

1
这是正确的答案,必须是公认的答案,而不是-q
ccpizza

1
零超时在我的机器上不起作用(debian拉伸)。它说invalid wait-time 0
Anubis '18

3

没有-q标志,您的实例netcat将永远等待。UDP没有“流结束”消息,因此没有办法netcat知道stdin和网络连接均已完成。

例如,使用TCP / IP可以按预期工作:

nc -l localhost 4300                     # Window 1
nc localhost 4300 </etc/group            # Window 2

但是正如您所确定的,使用UDP / IP永远不会结束:

nc -u -l localhost 4300                  # Window 1
nc -u localhost 4300 </etc/group         # Window 2

这是-q标志的出现位置。但是很遗憾,它不接受的值0。它还将不接受非整数值。这是我可以不依靠timeout其他外部实用程序而提供的最佳选择:

nc -u -l localhost 4300                  # Window 1
nc -q 1 -u localhost 4300 </etc/group    # Window 2

即使在这里,也无法netcat优雅地暂停收听时间。(-w超时选项将被忽略,并且-q是无关紧要的。)在实际情况下,可能会使用到这种方法,因此netcat90秒后将被杀死:

timeout 90 nc -u -l localhost 4300       # Window 1
nc -q 1 -u localhost 4300 </etc/group    # Window 2

-q 0为我工作。
AlikElzin-kilaka

@ AlikElzin-kilaka虽然不适合我。您肯定在测试中使用UDP吗?您有什么版本的netcat?您可能正在使用较新的版本。
roaima

0

udp

# listen on receiver
nc -u -l localhost -p 4300

# sender
cat tsmmessage.bin | nc -u -N -q 0 localhost 4300

tcp

# listen on receiver
nc -l localhost -p 4300

# sender
cat tsmmessage.bin | nc -N localhost 4300

为什么要下票?-N选项解决了这个问题
camelccc,

-1

谷歌搜索时几乎偶然发现了同样的问题。事实证明,问题是netcat在吸取所有数据后立即被bash杀死,而没有任何机会接收响应。

我对此的解决方案是在整理数据之后增加一些延迟,如下所示:

(echo INFO; sleep 1) | nc redis.service.consul 6379

使用文件,它看起来像:

(cat tsmmessage.bin; sleep 5) | nc -u localhost 4300

netcat完成后仍然无法关闭sleep。我希望第一个命令行在1秒后返回到提示,但事实并非如此。
Frank Kusters

如何添加-q 1?即(echo INFO; sleep 1) | nc -q 1 redis.service.consul 6379
SkyWriter

随着-q一切正常,甚至在我原来的问题的例子。从那时起,我已经转移到了较新版本的Ubuntu,也许这引起了差异。
Frank Kusters

那真是怪了。无论如何,很高兴我们俩找到了解决这个问题的方法:)
SkyWriter
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.