当我尝试运行以下命令时:
echo -e "GET / HTTP/1.1\n\n" | /dev/tcp/74.125.225.19/80
我收到以下错误消息:
bash: /dev/tcp/74.125.225.19/80: No such file or directory
以下命令完美运行,因此问题涉及我如何使用/dev/tcp
:
echo -e "GET / HTTP/1.1\n\n" | nc 74.125.225.19 80
我使用的是 Ubuntu 13.04,所以功能应该在我的系统上。我究竟做错了什么?正确使用有哪些规则/dev/tcp
?
答案1
你必须使用它重定向:
Bash 在重定向中使用多个文件名时会专门处理这些文件名,如下表所述:
...
/dev/tcp/主机/端口
如果 host 是有效的主机名或 Internet 地址,并且 port 是整数端口号或服务名称,Bash 会尝试打开相应的 TCP 套接字。
所以:
printf "GET / HTTP/1.1\n\n" > /dev/tcp/74.125.225.19/80
才是正确的使用方法。
当您/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
。