問題是,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
我希望幫助。
是的,我已經實施了這樣的解決方案。無論如何感謝您的答案。 – Alptugay 2011-07-13 14:09:49