Захватите имя хоста ftp и uri, используя tshark (wireshark) - PullRequest
3 голосов
/ 15 июня 2011

Я хочу посмотреть трафик ftp и определить, к каким URL-адресам ftp обращаются с помощью tshark. Для 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

Что я могу сделать?

1 Ответ

5 голосов
/ 08 июля 2011

Проблема в том, что 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

Надеюсь, это поможет.

...