我正在重新讨论“ 检查远程主机/端口是否打开 – 不能使用GNU Netcat或NMap – RHEL 7 ”。
我无法获得正确的结果,因为我的rh版本(5.6和7.1)没有path/ dev / tcp和/ dev / udp。
这里解释说https://access.redhat.com/solutions/1214763可以使用
echo | nc -w1 $host $port >/dev/null 2>&1 ;echo $?
它只与TCP协议运行,但不与UDP:
echo | nc -w1 -u $host $port >/dev/null 2>&1 ;echo $?
事实上,检查一个不存在的服务,它以0结尾。在RH 5.6上使用相同的ip和端口,并使用旧选项-z
nc -zu $host $port and it ends with 1, correctly.
你有想法解决吗?
谢谢
没有path/ dev / tcp和/ dev / udp
那是对的。 那些不在目录中的文件系统,但是当你同时包含一个主机名/ IP地址和端口号,并在redirectbash中使用它们会有一定的魔力。 正如手册中所表述的那样:
Bash处理几个文件名,特别是当它们用于redirect时,如下表所述:
/dev/fd/fd
如果fd是一个有效整数,则文件描述符fd是重复的。/dev/stdin
文件描述符0被复制。/dev/stdout
文件描述符1被复制。/dev/stderr
文件描述符2被复制。/dev/tcp/host/port
如果host是有效的主机名或Internet地址,并且port是整数端口号或服务名称,则bash将尝试打开到相应套接字的TCP连接。/dev/udp/host/port
如果host是有效的主机名或Internet地址,并且port是整数端口号或服务名称,则bash会尝试打开到相应套接字的UDP连接。
而不是例如:
$ ls -l /dev/tcp/serverfault.com/80 ls: cannot access /dev/tcp/serverfault.com/80: No such file or directory
尝试使用>或<redirect
$ echo "" > /dev/tcp/serverfault.com/80 $ echo " " > /dev/tcp/serverfault.com/81 -bash: connect: Connection refused