在bash
中,我们可以使用file descriptors来(尝试)打开socket descriptors,如下所示:
exec 3<>/dev/prot/host/port
其中:
prot
可以是tcp
或udp
; host
可以是有效的主机名或Internet地址; port
可以是整数端口号或服务名称。这只是一个示例,可以使用任何重定向
(例如printf "%s" "${payload}" >"/dev/udp/${host}/${port}"
)。
从bash v4+
开始至少如此。
有人已经要求在没有内置bash的情况下完成相同的事情;
我已经找到并尝试了其他解决方案,包括(但不限于):
nc
/ netcat
/ nmap
/ tcping
(或类似名称),以便“扫描”(本地或远程)端口(其中一些不会能够接收有效载荷); netstat
/ ss
(或类似名称),以便了解LISTEN状态(本地)端口(并且不能发送或接收任何有效载荷); 在其他情况中,nc
被认为是完成此任务的最可移植的解决方案,尽管(至少在我看来)coreutils中不应使用它;而ss
之类的解决方案不能视为有效,因为它们无法“扫描”另一台主机,也无法发送或接收负载;
无论如何,我偶然发现了一个未安装nc
的环境。
我不能假定安装了其他解释器(例如python
,perl
等);
我不能假定已安装编译器。
最后,正如您已经猜到的,这个问题:
是否有某种posix方式,可以使用除外壳以外的任何方式来实现完全连接?
换句话说,有一种使用连接的可移植方式吗?