Как использовать tshark для печати пар запрос-ответ из файла pcap? - PullRequest
9 голосов
/ 18 января 2012

Имея файл pcap, я могу извлечь много информации из восстановленного HTTP-запроса и ответов, используя аккуратные фильтры , предоставляемые Wireshark . Я также смог разделить файл pcap на каждый поток TCP .

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что из всех классных фильтров, которые я могу использовать с tshark, я не могу найти тот, который позволил бы мне распечатать полные тела запросов / ответов. Я звоню примерно так:

 tshark -r dump.pcap -R "tcp.stream==123 and http.request" -T fields -e http.request.uri

Есть ли какое-нибудь имя фильтра, которое я могу передать -e, чтобы получить тело запроса / ответа? Самое близкое, что я нашел, - это использование флага -V, но он также выводит кучу информации, которая мне не нужна, и которую я хочу избежать, чтобы избежать необходимости "тупого" фильтра.

Ответы [ 3 ]

8 голосов
/ 24 января 2012

Если вы хотите переключиться на другой инструмент, tcptrace может сделать это с опцией -e. Он также имеет расширение для анализа HTTP (опция xHTTP), которое генерирует пары HTTP-запрос / ответ для каждого потока TCP.

Вот пример использования:

tcptrace --csv -xHTTP -f'port=80' -lten capturefile.pcap
  • - csv для форматирования вывода в виде переменной с запятой
  • -xHTTP для HTTP-запроса / ответа, записанного в 'http.times', это также включает -e для выгрузки полезных нагрузок потока TCP, поэтому вам действительно не нужен -e
  • -f'port = 80 ' для фильтрации не веб-трафика
  • -l для длинной формы вывода
  • -t , чтобы дать мне индикацию прогресса
  • -n для отключения разрешения имени хоста (намного быстрее без этого)
3 голосов
/ 04 марта 2016

Если вы захватили файл pcap, вы можете сделать следующее, чтобы показать все запросы + ответы.

filename="capture_file.pcap"
for stream in `tshark -r "$filename" -2 -R "tcp and (http.request or http.response)" -T fields -e tcp.stream | sort -n | uniq`; do
    echo "==========BEGIN REQUEST=========="
    tshark -q -r "$filename" -z follow,tcp,ascii,$stream;
    echo "==========END REQUEST=========="
done;

Я только что сделал ответ на diyism немного более понятным (вам не нужен sudo, ина мой взгляд, многострочный скрипт прост)

0 голосов
/ 26 января 2015

Я использую эту строку, чтобы показать последние 10 секунд тела запроса и тела ответа (https://gist.github.com/diyism/eaa7297cbf2caff7b851):

sudo tshark -a duration:10 -w /tmp/input.pcap;for stream in `sudo tshark -r /tmp/input.pcap -R "tcp and (http.request or http.response) and !(ip.addr==192.168.0.241)" -T fields -e tcp.stream | sort -n | uniq`; do sudo tshark -q -r /tmp/input.pcap -z follow,tcp,ascii,$stream; done;sudo rm /tmp/input.pcap
...