Как проверить исходящие HTTP-запросы одного приложения?

Мое приложение отправляет HTTP-запросы на какой-то сервер, и я хочу видеть фактические данные, которые оно отправляет. Некоторые подробности, которые я хотел бы увидеть:

  • Метод запроса (GET/POST/PUT и т.д.)
  • Тип содержимого
  • Тело

Каков наилучший и простой способ добиться этого?

Ну, для всех этих поклонников tcpdump =)

ЗАПУСТИТЕ ВСЕ ЭТИ КОМАНДЫ ОТ ИМЕНИ ROOT!!!

Получить корень в терминале с

sudo -i

Для захвата необработанных пакетов ...

sudo tcpdump -i any -w /tmp/http.log &

Это позволит захватить все необработанные пакеты на всех портах, на всех интерфейсах и записать их в файл, /tmp/http.log.

Запустите свое приложение. Очевидно, это помогает, если вы не запускаете никаких других приложений, использующих HTTP (веб-браузеры).

Убивать tcpdump

killall tcpdump

Чтобы прочитать журнал, используйте -A отметьте и передайте выходные данные вless:

tcpdump -A -r /tmp/http.log | less

То -A флаг выводит "полезную нагрузку" или текст ASCII в пакетах. Это отправит выходные данные на less, вы можете просматривать страницы вверх и вниз. Чтобы выйти less, тип Q.

Когда я захожу в Google, я вижу (в необработанных пакетах):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1Host: clients1.google.comConnection: keep-aliveUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34Referer: http://www.google.com/Accept: */*Accept-Encoding: gzip, deflate, x-gzip, x-deflateAccept-Charset: utf-8,*;q=0.5Accept-Language: en-US, en-US; q=0.8, en; q=0.6Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdump имеет длинный набор опций для уточнения сбора данных от указания сетевых интерфейсов до портов и IP-адресов источника и назначения. Он НЕ может расшифроваться (поэтому он не будет работать с HTTPS).

Как только вы узнаете, что вас интересует, вы можете использовать несколько вариантов с tcpdump записывать только интересующие данные. Общая стратегия заключается в том, чтобы сначала записать все пакеты, просмотреть исходные данные, а затем захватить только интересующие пакеты.

Некоторые полезные флаги (опции):

-i Specify an interface-i eth0tcp port xxtcp port 80dst 1.2.3.4specify a destination ip address

Существует кривая обучения, как для использования tcpdump и научиться анализировать данные, которые вы собираете. Для дальнейшего чтения я настоятельно рекомендую Дэниела Мисслера tcpdump Букварь с примерами.

Первая установка tcpflow из официальных репозиториев Ubuntu:

sudo apt-get install tcpflow

Затем запустите эту команду, чтобы проверить все HTTP-запросы на стандартном порту:

sudo tcpflow -p -c port 80

Я бы посоветовал вам попробовать Wireshark Install Wireshark

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

Информацию о Wireshark и о том, как его использовать, можно найти по адресу домашняя страница Wireshark.

Также возможно с помощью команды, которая дает аккуратный вывод, даже для SSL:

sudo tcpdump dst port 80

Ладно, тогда все в порядке. Это всего лишь * один * или небольшой набор серверов, с которыми он разговаривает? И никакие другие приложения не взаимодействуют с этими серверами? Если и то, и другое да, то ответ о Wireshark - это то, на что я бы пошел. Узнайте, как это работает. Это не так уж и сложно.

“метод запроса, тип содержимого, тело и т.д.” Вы говорите о проверке, специфичной для HTTP? Это случайно не HTTPS (защищенный)?

Да, вы правы, но это не отправка через браузер

Извините, это просто HTTP-запросы