当我尝试运行以下命令时:
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
选项进行编译。