Подтвердить что ты не робот

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

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

sudo tcpdump -A -s 1492 dst port 80

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

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

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

4b9b3361

Ответ 1

Существуют фильтры 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 см. String-Matching Capture Filter Generator (ссылка на объяснение Sake Blok).

Ответ 2

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

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

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

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

Ответ 3

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

Поэтому мне нужно отладить приложение, которое отправляет xml в стороннее приложение. Я нашел блестящий маленький perl script, который выполняет всю тяжелую работу - вы просто вытаскиваете его выходной файл tcpdump, и он выполняет все манипуляции и выводит все, что вам нужно...

script называется 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