使用tshark(wireshark)捕获ftp主机名和uri

|| 我想观看ftp流量,并找到正在使用tshark访问的ftp url。对于http流量,我可以使用
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 我能做什么?     
已邀请:
        问题在于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服务器检索文件时收到的输出(在此示例中使用客户端软件curl)可能如下所示:
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
希望对您有所帮助。     

要回复问题请先登录注册