2010-05-04 59 views
6

爲什麼這項工作:使用的/ dev/TCP,而不是wget的

 
exec 3<>/dev/tcp/www.google.com/80 
echo -e "GET/HTTP/1.1\n\n">&3 
cat <&3 

而這種失敗:

 
echo -e "GET/HTTP/1.1\n\n" > /dev/tcp/www.google.com/80 
cat </dev/tcp/www.google.com/80 

有沒有辦法做到在一個線W/O使用wget ,捲曲,還是其他一些圖書館?

+0

請注意,使用'/ dev/tcp'方法而不是wget或curl意味着您不會獲得wget或curl的所有功能 - 例如自動處理302重定向,代理服務器支持等。 – 2010-05-04 23:36:07

回答

8

第二段代碼失敗,因爲它打開兩個單獨的TCP套接字。 echo連接到www.google.com並寫入HTTP請求;然後第二行打開另一個連接並嘗試從該套接字讀取。因爲Google正在等待HTTP請求被髮送,所以第二個套接字會被阻塞。

+0

有關如何讓它在一條線上工作? – User1 2010-05-05 14:07:28

+1

我嘗試了20分鐘,無法做到。嘿。如果將這三條語句合併爲一行,則可以將這三條語句合併爲&&:'exec ... && echo ... && cat ...' – 2010-05-05 17:38:09

1

不是我的專業領域,但我認爲第二個樣本將打開第二個連接,而第一個樣本保持對同一連接的打開句柄。因此,任何涉及只打開一個連接的解決方案都應該可行