未找到 /dev/tcp

IQA*_*eas 25 bash tcp

当我尝试运行以下命令时:

echo -e "GET / HTTP/1.1\n\n" | /dev/tcp/74.125.225.19/80
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

bash: /dev/tcp/74.125.225.19/80: No such file or directory
Run Code Online (Sandbox Code Playgroud)

以下命令完美运行,因此问题涉及我的使用方式/dev/tcp

echo -e "GET / HTTP/1.1\n\n" | nc 74.125.225.19 80
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 13.04 中,所以该功能应该在我的系统上。我究竟做错了什么?/dev/tcp正确使用的规则是什么?

cuo*_*glm 42

您必须在重定向中使用它:

Bash 在重定向中使用时会特别处理几个文件名,如下表所述:

...

/dev/tcp/host/port

如果 host 是有效的主机名或 Internet 地址,并且 port 是整数端口号或服务名称,则 Bash 会尝试打开相应的 TCP 套接字。

所以:

printf "GET / HTTP/1.1\n\n" > /dev/tcp/74.125.225.19/80
Run Code Online (Sandbox Code Playgroud)

是正确的使用方法。

当您/dev/tcp/74.125.225.19/80在管道中使用时,bash尝试运行名为的命令/dev/tcp/74.125.225.19/80并报告错误,因为该文件不存在。


在 2.04 版中添加了处理/dev/tcp/host/port/dev/udp/host/port重定向的能力bash

您需要bash使用--enable-net-redirections选项进行编译。