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


Я использую 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 52

3 ответа:

существуют фильтры 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-трафика, включая заголовки запросов и ответов и тело сообщения (источник):

    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)'
    

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

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

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

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

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

вот еще один выбор: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