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

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

  • Метод запроса (GET / POST / PUT и т. ]

    Какой самый лучший и простой способ сделать это?

70
задан 27 December 2013 в 03:51

4 ответа

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

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

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

sudo -i

Для захвата пакетов RAW ...

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 586
E..~.v@.@..q......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: 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 eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

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

0
ответ дан 27 December 2013 в 03:51

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

sudo apt-get install tcpflow

Затем выполните эту команду для проверки всех HTTP-запросов на стандартном порту:

sudo tcpflow -p -c port 80
0
ответ дан 27 December 2013 в 03:51

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

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

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

0
ответ дан 27 December 2013 в 03:51

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

sudo tcpdump dst port 80
0
ответ дан 27 December 2013 в 03:51

Другие вопросы по тегам:

Похожие вопросы: