2011-06-15 41 views
2

我想觀察ftp流量並查找哪些ftp url正在用tshark訪問。對於HTTP流量,我可以使用使用tshark(wireshark)捕獲ftp主機名和uri

tshark -i eth0 -f 'port 80' -l -t ad -n -R 'http.request' -T fields -e http.host -e http.request.uri 

的Wireshark顯示過濾器包含字段http.request.uri和http.host 見:http://www.wireshark.org/docs/dfref/h/http.html 但這些選項不適用於FTP流量。 http://www.wireshark.org/docs/dfref/f/ftp.html

我該怎麼辦?

回答

4

問題是,FTP不是像HTTP那樣的無狀態事務協議 - 使用HTTP,客戶端執行單個請求,詳細說明傳遞文件所需的所有參數,服務器使用包含所有元數據的單個消息進行響應和文件內容。

比較而言,FTP是一種聊天式協議:爲了完成某些事情,您打開與服務器的連接並開始與服務器聊天 - 登錄,更改某個目錄,列出文件,獲取此文件等。

您可以使用Wireshark的這樣聽進這個對話:

tshark -i lo -f 'port 21' -l -t ad -n -R ftp.request.command -T fields -e ftp.request.command -e ftp.request.arg 

當用戶嘗試檢索從FTP服務器上的文件(在使用客戶端軟件捲曲本示例)輸出收到可能看起來像這個:

USER username 
PASS password 
PWD 
CWD  Documents 
EPSV 
TYPE I 
SIZE somefile.ext 
RETR somefile.ext 
QUIT 

一點點的處理可能會給你一個像日誌文件檢索的URL。例如,我想出了用perl這事

tshark -i lo -f 'port 21' -l -t ad -n -R ftp.request.command \ 
    -T fields -e ftp.request.command -e ftp.request.arg | \ 
    perl -nle ' 
    m|CWD\s*(\S+)| and do { 
     $dir=$1; 
     if ($dir =~ m,^/,) { $cwd=$dir } else { $cwd .= "/$dir"; } 
    }; 
    m|RETR\s*(\S+)| and print "$cwd/$1";' 

出於同樣的FTP會話以上,該腳本將產生輸出的一行:

/Documents/somefile.ext 

我希望幫助。

+0

是的,我已經實施了這樣的解決方案。無論如何感謝您的答案。 – Alptugay 2011-07-13 14:09:49