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

70

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

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

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

Мегас
источник
«метод запроса, тип контента, тело и т. д.» Вы говорите о проверке HTTP? Это HTTPS (защищенный) случайно?
gertvdijk
Да, вы правы, но это не отправка через браузер
Megas
Извините, это просто HTTP-запросы
megas
3
Хорошо, тогда все в порядке. Это просто один или маленький набор серверов, с которыми он общается? И никакие другие приложения не общаются с этими серверами? Если оба да, то ответ о Wireshark - то, к чему я бы пошел. Узнайте, как это работает. Это не так сложно.
gertvdijk

Ответы:

71

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

ВЫПОЛНЯЙТЕ ВСЕ ЭТИ КОМАНДЫ КАК КОРНИ !!!

Получить 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с примерами .

пантера
источник
1
это не захватывает ничего на моем Ubuntu 14.04. Мой ноутбук подключается к Интернету через маршрутизатор Wi-Fi. Будет ли это иметь значение для использования tcpdump? Когда я его убиваю, он просто говорит, 0 packets captured 0 packets received by filter 0 packets dropped by kernel но я открыл несколько сайтов в браузере Chrome, когда tcpdump отслеживал.
Фаизал
1
ахх связанная статья помогла. tcpdump -i any -w /tmp/http.log &работал.
Фаизал
22

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

sudo apt-get install tcpflow

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

sudo tcpflow -p -c port 80
Ванни Тотаро
источник
1
а где посмотреть результаты? Спасибо!
Гедиминас
2
@Gediminas вы можете увидеть вывод в терминале. Обратите внимание, что HTTPS трафик не отображается. Попробуйте посетить HTTP, например httpvshttps.com
Ванни Тотаро
1
Гораздо удобнее, чем tcpdump, если вы просто заинтересованы в просмотре запросов и вам не нужно разбираться со всеми деталями TCP (syn, ack ...)
herm
13

Я бы посоветовал вам попробовать WiresharkУстановить Wireshark

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

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

CruzBishop
источник
1
Это не работает ни для одного процесса. Вы получите весь трафик на интерфейсе, и вам придется фильтровать его по IP / протоколу и т. Д. Wireshark - фильтр по процессу / pid
gertvdijk
да, но это легко сделать с помощью интерфейса wireshark.
Пантера
2
Я пробовал Wireshark раньше, и он слишком сложен для меня, я ищу другой вариант
Megas
4
Другой вариант - tcpdump. tcpdump - это инструмент командной строки, он легко справится с этой задачей, но имеет более крутой курс обучения. danielmiessler.com/study/tcpdump
Пантера
1
@gertvdijk - по вашему желанию;) Не стесняйтесь добавлять к основам
Пантера
5

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

sudo tcpdump dst port 80
Гедиминас
источник