我正在恢复讨论”检查远程主机/端口是否打开 - 无法使用 GNU Netcat 或 NMap - RHEL 7“。
我无法获得正确的结果,因为在我的 rh 版本(5.6 和 7.1)上没有路径 /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.
您有办法解决这个问题吗?
谢谢
答案1
没有路径 /dev/tcp 也没有 /dev/udp
没错。它们不以目录形式存在于您的文件系统中,但当您同时包含主机名/IP 地址和端口号并在重定向中使用它们时狂欢会产生一些神奇的效果。正如手册中所述:
Bash 在重定向中使用时会特殊处理几个文件名,如下表所述:
/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
> 尝试使用或重定向<
$ echo "" > /dev/tcp/serverfault.com/80
$ echo " " > /dev/tcp/serverfault.com/81
-bash: connect: Connection refused