主持人A:
tar cf - stuff | dd | nc -N -l 12987
Run Code Online (Sandbox Code Playgroud)
主持人乙:
nc a.example.com 12987 | dd | tar tf -
Run Code Online (Sandbox Code Playgroud)
在主机 A 上完成dd后打印其摘要tar。因此很明显, tar 关闭了管道/文件 -> EOF。
165040+0 条记录中的 165040+0 条记录输出 84500480 字节在 25.464802 秒内传输(3318325 字节/秒)
在两个主机上nc愉快地坐在那里没有退出。
nc(1):
-N shutdown(2) the network socket after EOF on the input. Some
servers require this to finish their work.
Run Code Online (Sandbox Code Playgroud)
因此,对主机Anc应该看到EOF,闭合该死插座和主机Bnc应该看到TCP连接终止并且应该已经关闭stdout(stdin的dd/ tar …
我正在使用以下/etc/init/jsonlog.conf新贵工作:
description "jsonlog"
start on runlevel [23]
stop on runlevel [06]
respawn
script
cd /tmp
echo "about to listen"
/bin/nc -l 3333
echo "finished listening"
end script
post-stop script
sleep 1
end script
Run Code Online (Sandbox Code Playgroud)
问题是nc每次客户端连接时都会立即退出。
所需的行为是接收到的所有数据(即 utf8 json)应以/var/log/upstart/jsonlog.log. 该服务器运行的是 Ubuntu 12.04LTS。
nc从 bash shell 运行时该命令可以正常工作。
我假设这与stdin. 我尝试过使用一个-q -1选项,但没有帮助。
PS 我很满意这样一个事实,即它一次只会听一个客户。
我正在尝试验证我们的几个服务器在将我们的一些服务迁移到它们之前可以通过某些端口进行通信,并且它们没有被我们组织的防火墙 ACL 阻止。
说得通
[mrduki@mybox1~]$ nc -ul 40000
---
[mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000
Connection to mybox1.com 40000 port [udp/*] succeeded!
Run Code Online (Sandbox Code Playgroud)
没有意义
[mrduki@mybox1~]$ nc -ul 40000
[mrduki@mybox1~]$ ^C
---
[mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000
Connection to mybox1.com 40000 port [udp/*] succeeded!
Run Code Online (Sandbox Code Playgroud)
事实上,如果我从 进行端口扫描40000-40100,每个端口都会成功。
如果我在没有的情况下进行相同的测试-u(以便它测试 TCP 而不是 UDP),我会得到40000 (tcp) timed out: Operation now in progress错误,正如我所期望的(因为我没有这样的 TCP 服务侦听40000)。
执行sudo netstat -alnp | grep LISTENonmybox1虽然显示没有此类服务侦听这些端口。那么我错过了什么?