UDP 协议上的 ncat(RH 7)

UDP 协议上的 ncat(RH 7)

我正在恢复讨论”检查远程主机/端口是否打开 - 无法使用 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

相关内容