
當我嘗試執行以下命令:
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
。