2007年10月12日 星期五

Web Technology HW1-using netcat

Preamble:
netcat for Windows版本一直沒辦法安裝起來,所以大部分的實驗都是用Cygwin這個在Windows模擬Linux的Emulator實作。
基本用法:

nc [-option] host-name -p port-number

好用參數:
-h 幫助訊息 (help)
-i seconds 可以用來設置發送一行標準輸入訊息的間隔,以減少發送速度
-l 監聽模式 (listening some ports),聽說可以用來欺騙別的主機,為一種hacker手法,還沒試出來
-n 直接指定IP位址。 預設情況下,netcat會向DNS或NIS server 查詢IP位址對應的主機名稱或網路名稱,然而,在排除網路問題時,我們往往沒有DNS server可用,這時候可用-n選項讓netcat以點式四數格式來表示IP位址,而不進行任何查詢動作。
-o logfile 可以將連接往來傳輸的訊息,並將收到的訊息以16進制的形式記錄到logfile中。其中,每行的第一個字符為<或>,分別表示接收的訊息或發送的訊息。
-s ip-address 鎖定本地網路資源位址
-v 將得到的訊息詳細輸出(-vv會更加詳細)
-u UDP模式(因為研究主題與RTP和UDP相關,故此選項以後應該會常用到)
-------------
以下是我對netcat的man page中較有興趣的參數及用法做的實驗:

實作一:
nc ftp.ncnu.edu.tw 21
530 Please login with USER and PASS.
實作二:
nc http://www.ncnu.edu.tw 80
(一開始一直會time out就結束連線了)
實作三:
用兩台電腦A、B測試,A設為server端,則可用netcat使A的某個port處於監聽狀態:
nc -l -p 2000
(-l -p表示A的port 2000處於監聽狀態,實驗用的port最好不要設在well-known port的區間內)
而電腦B可使用netcat去傳遞資訊:
(這次實驗用的A 主機位於實驗室NAT下的IP Address:10.10.21.97)
nc 10.10.21.97 -p 1000
如此一來,在B鍵入任何字元,都可即時出現在A端。(理論上應該是即時,但是實驗時覺得delay有點嚴重)
此法也可用來在A、B兩端傳遞檔案,只要以root進入B主機,鍵入:
bzip2 -c /dev/sda | netcat 10.10.21.97 2000
(這個實驗我在Debian/Linux下實作的,因為需要一個完整的Linux OS和其root權限)

實作四:

以個人網站http://ms11.voip.edu.tw/~martensite/index.html

為測試網頁。

測試messages:

(1)一開始測netcat ms11.voip.edu.tw/~martensite 80

會得到forward host lookup failed: Unknown host : Connection timed out response

(2)netcat ms11.voip.edu.tw 80

get /~martensite/index.html 即可成功,並隨即關掉TCP連線。

(3)接下來我想測試若檢索圖片會有怎樣的效果:

netcat ms11.voip.edu.tw 80

get /~martensite/image/hsiao.JPG

目前http成功的就是這幾個步驟,其它的還待測試,推測應該是指令不熟和對網路架構不熟的緣故。



Epilog:
因為很多功能還沒有真正測試出來,所以還未能感受到所謂網路瑞士刀的功力。但是已可體會它應該是一個很有用的工具,在這次作業繳交後仍會繼續測試,且應用在研究上。
Reference:
Linux.com的介紹文章
http://www.linux.com/articles/114093

某論壇netcat介紹文章
http://bb.stormer.com.tw/viewthread.php?tid=522
傳遞檔案的部分參考:
cyberciti.biz的一篇簡介
http://www.cyberciti.biz/tips/howto-copy-compressed-drive-image-over-network.html
man page of GNU Netcat's

沒有留言: