Могу ли я использовать tcpdump для получения HTTP-запросов, заголовка ответа и тела ответа? - PullRequest
56 голосов
/ 24 января 2011

Я использую tcpdump, чтобы получить HTTP-данные, выполнив следующую команду:

sudo tcpdump -A -s 1492 dst port 80

Результат команды выше:

  1. Заголовки, я думаю, запрос и ответзаголовки.
  2. Нечитаемые данные.
  3. URL GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg.

Мне нужен более четкий результат, например, читаемый запрос> заголовок ответа> тело ответа и т. Д. Как я могу отфильтровать результаты?

Ответы [ 3 ]

167 голосов
/ 17 мая 2013

Существуют фильтры tcpdump для HTTP GET и HTTP POST (или для обоих, плюс тело сообщения):

  • Запустите man tcpdump | less -Ip examples, чтобы увидеть некоторые примеры

  • Вот фильтр tcpdump для HTTP GET:

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • Вот фильтр tcpdump для HTTP POST:

    sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
    
  • Мониторинг HTTP-трафика, включая заголовки запросов и ответов и тело сообщения ( source ):

    tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
    

Для получения дополнительной информации о сдвиге битов в заголовке TCP см .: Генератор фильтра захвата строк с согласованием (ссылка на объяснение Саке Блока).

34 голосов
/ 24 января 2011

Я бы порекомендовал использовать Wireshark , который имеет опцию «Follow TCP Stream», которая позволяет очень легко видеть полные запросы и ответы для конкретного TCP-соединения. Если вы предпочитаете использовать командную строку, вы можете попробовать tcpflow , инструмент, предназначенный для захвата и восстановления содержимого потоков TCP.

В других вариантах можно использовать прокси-сервер для отладки HTTP, например Charles или Fiddler , как предлагает EricLaw. Они имеют то преимущество, что имеют особую поддержку HTTP, что упрощает работу с различными видами кодировок, а также другие функции, такие как сохранение запросов для их воспроизведения или редактирование запросов.

Вы также можете использовать такие инструменты, как Firebug (Firefox), Веб-инспектор (Safari, Chrome и другие браузеры на основе WebKit) или Opera Dragonfly , все из которых предоставляют некоторую возможность просмотра заголовков и тел запросов и ответов (хотя большинство из них не позволяют вам видеть точный поток байтов, а вместо этого, как браузеры анализировали запросы).

И, наконец, вы всегда можете создавать запросы вручную, используя что-то вроде telnet, netcat или socat для подключения к порту 80 и ввода запроса вручную, или с помощью инструмента например, htty , чтобы легко составить запрос и проверить ответ.

6 голосов
/ 20 мая 2012

Вот еще один выбор: Chaosreader

Так что мне нужно отладить приложение, которое отправляет XML в стороннее приложение.Я нашел замечательный маленький Perl-скрипт, который выполняет всю тяжелую работу - вы просто забираете его в выходной файл tcpdump, и он выполняет всю манипуляцию и выводит все, что вам нужно ...

Этот скрипт называется chaosreader0.94,См. http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/

Это работало как удовольствие, я сделал следующее:

tcpdump host www.blah.com -s 9000 -w outputfile; perl chaosreader0.94 outputfile
...