超強大的 Bash - Networking 支援
當全世界都在瘋各種擴充性多元的 Script 語言時,所有人便開始遺忘 Unix 上古老的 Shell script,的確,和當今主流的 Python 、Perl 等語言相比,Bash 像個醜小鴨,但是不可否認,其功能和 footprint 的相對價值遠超過其他 script 語言甚多,因此在大多數 Linux 發行版之中,仍然會預設安裝 Bash 。
也因為 Bash 被太多人忽視了,很少人知道, Bash 其實也可以操作 Networking,舉例來說,可以一行指令便連上時間伺服器,透過 Daytime Protocol (RFC-867) 取得目前的標準時間:
Bash 內建了這樣的功能,讓使用者可以透過讀寫 /dev/proto/host/port 的方式去操作網路連線,當然這路徑並不真實存在於系統中,所以透過其他的 script 或程式是無法存取。瞭解有這樣的功能後,我們也可以去試著去抓取網頁內容:
後記
使用 Shell script 是一種身為 Linux/BSD 等 Unix's like 系統工程師的基本技能,比起其他語言,其更為重要,況且現在的 Bash 已經有相當多的支援,足以讓我們做各種應用。
也因為 Bash 被太多人忽視了,很少人知道, Bash 其實也可以操作 Networking,舉例來說,可以一行指令便連上時間伺服器,透過 Daytime Protocol (RFC-867) 取得目前的標準時間:
$ cat </dev/tcp/time.nist.gov/13 55442 10-09-03 11:19:58 50 0 0 839.8 UTC(NIST) *
Bash 內建了這樣的功能,讓使用者可以透過讀寫 /dev/proto/host/port 的方式去操作網路連線,當然這路徑並不真實存在於系統中,所以透過其他的 script 或程式是無法存取。瞭解有這樣的功能後,我們也可以去試著去抓取網頁內容:
$ exec 3<> /dev/tcp/www.google.com/80 $ echo -e "GET / HTTP/1.1\r\nhost: http://www.google.com\r\nConnection: close\r\n\r\n" >&3 $ cat <& 3 HTTP/1.1 404 Not Found Content-Type: text/html; charset=UTF-8 X-Content-Type-Options: nosniff Date: Fri, 03 Sep 2010 11:40:10 GMT Server: sffe Content-Length: 1354 X-XSS-Protection: 1; mode=block Connection: close <html><head> ... 內容省略 </body></html>
後記
使用 Shell script 是一種身為 Linux/BSD 等 Unix's like 系統工程師的基本技能,比起其他語言,其更為重要,況且現在的 Bash 已經有相當多的支援,足以讓我們做各種應用。
很不錯的密技, 我也是 bash 的愛用者, 讚一個!
回覆刪除太炫了!
回覆刪除