2012-01-18 9 views
8

Учитывая файл pcap, я могу извлечь много информации из реконструированного HTTP-запроса и ответов, используя neat filters provided by Wireshark. Я также смог split the pcap file into each TCP stream.Как использовать tshark для печати пар запроса-ответа из файла pcap?

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

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

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

+0

Что было snarflen первоначального захвата. Если вы не собрали полный пакет, у вас, вероятно, есть данные. –

+0

Схватки были прекрасны. MTU на интерфейсе, который я использовал, был 1514, и я сделал захват 1600. Я открыл pcap в Wireshark и может получать отдельные пары запроса-ответа в виде потоков; Я просто искал способ сценария против него. –

+0

Прохладный - просто вычеркнуть наиболее очевидный –

ответ

7

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

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

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

Я использовал tcptrace. Это довольно многообещающе. Благодаря! По какой-то странной причине просто использование 'tcptrace -e my.dump' не отделяло запросы правильно. Я подозреваю, что это всего лишь случай, когда я делаю что-то не так, потому что Wireshark делает то же самое расщепление, и я буду вдаваться в него немного больше. Если бы у вас был один лайнер в верхней части головы, чтобы извлекать пары запроса-ответа из стандартного файла pcap (к сожалению, с небольшим количеством обрезанных пакетов), я все уши :). –

+0

добавил пример - это работает для меня, но я уверен, что у вас возникнут проблемы, если у вас усеченные пакеты – rupello

0

Я использую эту строку, чтобы показать последний запрос 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 
2

Если вы захватили файл 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 и многострочный скрипт имо просто посмотреть)