Как использовать tshark для печати пар запрос-ответ из файла pcap?

Имея файл 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, но он также распечатывает кучу информации, которая мне не нужна, и я хочу избежать необходимости использовать «тупой» фильтр.


person Steven    schedule 18.01.2012    source источник
comment
В чем был снарфлен оригинального захвата. Если вы не собрали полный пакет, у вас, вероятно, есть данные.   -  person Adrian Cornish    schedule 18.01.2012
comment
Захваты были в порядке. MTU на интерфейсе, который я использовал, был 1514, и я сделал захват 1600. Я открыл pcap в Wireshark и могу получать отдельные пары запрос-ответ в виде потоков; Я просто искал способ написать сценарий против него.   -  person Steven    schedule 18.01.2012
comment
Круто - просто исключаю самое очевидное   -  person Adrian Cornish    schedule 18.01.2012
comment
Как насчет параметра TShark -O (протоколы -O: показывать только данные пакетов этих протоколов, разделенные запятыми) $ tshark -r clmt_04.pcap -R http.request или http.response -V -O http › http.txt   -  person    schedule 19.01.2012
comment
Думаю, это было бы более полезно для SO или SF.   -  person Hello71    schedule 19.01.2012
comment
@Steven XU: Вы хотите использовать TShark для экспорта объектов http? AFAIK, это невозможно в данный момент.   -  person    schedule 19.01.2012


Ответы (4)


Если вы хотите переключиться на другой инструмент, 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, чтобы отключить разрешение имени хоста (без этого намного быстрее)
person rupello    schedule 24.01.2012
comment
Я использовал tcptrace. Это довольно многообещающе. Спасибо! По какой-то странной причине простое использование tcptrace -e my.dump некорректно разделяло запросы. Я подозреваю, что это просто случай, когда я делаю что-то не так, поскольку Wireshark отлично выполняет то же самое разбиение, поэтому я немного покопаюсь в этом. Если у вас в голове была одна строка для извлечения пар запрос-ответ из стандартного файла pcap (к сожалению, с горсткой обрезанных пакетов), я весь внимание :). - person Steven; 24.01.2012
comment
добавил пример - это работает для меня, но я уверен, что вы столкнетесь с проблемами, если у вас есть обрезанные пакеты - person rupello; 26.01.2012
comment
Это идеально подходит для меня, за исключением того, что мне также нужна точная метка времени, когда запрос был отправлен. Я пытаюсь воспроизвести сценарий, в котором мне нужно отправить материал в то же время, что и раньше. - person SimonSimCity; 24.09.2018

Если вы захватили файл 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;

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

person edi9999    schedule 04.03.2016

Это, вероятно, не было вариантом, когда задавался вопрос, но более новые версии tshark могут «следить» за разговорами.

tshark -nr dump.pcap -qz follow,tcp,ascii,123

Я знаю, что это супер старый вопрос. Я просто добавляю это для всех, кто оказывается здесь в поисках текущего решения.

person accept_gzip    schedule 08.01.2020

Я использую эту строку для отображения тела запроса и ответа за последние 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
person diyism    schedule 26.01.2015