使用nc(netcat)在linux上永久打开端口[重复]

vcudknz3  于 2023-05-28  发布在  Linux
关注(0)|答案(1)|浏览(261)

此问题已在此处有答案

How to listen for multiple tcp connection using nc(7个回答)
3天前关闭。
这个主题在任何地方都被多次提及,但没有一个解决方案对我有效。
我有多个Linux主机,它们实际上是基于alpine镜像的docker容器。我想在主机(容器)启动并准备就绪后,在后台进程中永久打开host-a上的端口。该信号通知其他机器host-a准备好执行某些操作。
并行地,host-bhost-c在bash循环中检查远程端口并等待该信号,然后继续。
我使用nc命令在后台永久打开端口,并使用nc检查远程端口是否打开。但不幸的是,我的解决方案不起作用,如果它起作用,那么它是不稳定的,并且在第一次检查后存在。

host-a:后台永久打开端口

nc -lk -v -p "$UP_SIGNAL_PORT" &
next-command-in-my-script...

host-bhost-c检查端口状态:

while ! nc -w 5 -z "$domain" "$UP_SIGNAL_PORT" 2>/dev/null; do
  sleep 0.5
done
continue...

打开端口的命令似乎在第一次“ping”之后存在。
我也尝试了以下命令,但它的行为很奇怪:

[host-a]# nc -lk -p 12345 &
[host-a]# ps axu
1114 root      0:00 nc -lk -p 12345

[host-b]# nc -zv hello.com 12345
hello.com (172.19.0.2:12345) open

try to check the port again
[host-b]# nc -zv hello.com 12345
NO result

[host-a]# ps axu
1114 root      0:00 nc -lk -p 12345
the process is still running BUT the port seems to be closed

在第一次远程“ping”之后
这是怎么了?

我的nc版本:

# nc
BusyBox v1.35.0 (2022-11-19 10:13:10 UTC) multi-call binary.

---更新---

按照你的建议,我尝试了这个,但不幸的是没有工作:

[host-a]# yes hello | nc -lk -v -p 12345 >/dev/null &
[1] 1125
[root@host-a.hello.com]# listening on [::]:12345 ...

[root@host-a.hello.com]# connect to [::ffff:172.19.0.2]:12345 from host-b.hello.com.docker_default:40841 ([::ffff:172.19.0.3]:40841)
nc: too many output retries

[1]+  Exit 1                  yes hello | nc -lk -v -p 12345 > /dev/null

host-b:

[root@host-b.hello.com]# nc -zv host-a.hello.com 12345
host-a.hello.com (172.19.0.2:12345) open
[root@host-b.hello.com]# nc -zv host-a.hello.com 12345
no answer after the 1st ping

不幸的是,在第一次ping之后也存在这种情况。

bzzcjhmw

bzzcjhmw1#

将其 Package 在一个函数中,并在后台启动它:

fun(){
    nc -lk -v -p "$UP_SIGNAL_PORT"
    fun
}

fun &

或者使用xinetd

相关问题