Як перевірити вихідні запити HTTP однієї програми?


70

Моя програма надсилає HTTP-запити на якийсь сервер, і я хочу побачити фактичні дані, які він надсилає. Я хотів би ознайомитись із деякими особливостями:

  • Метод запиту (GET / POST / PUT тощо)
  • Тип вмісту
  • Тіло

Який найкращий і простий спосіб досягти цього?


"метод запиту, тип вмісту, тіло тощо" Ви говорите про специфічну перевірку HTTP? Це HTTPS (захищений) випадково?
gertvdijk

Так, ви маєте рацію , але це не посилаючи браузер
Мегас

До жаль, це тільки HTTP запити
Мегас

3
Гаразд, тоді це добре. Це лише один чи невеликий набір серверів, з якими він розмовляє? І жоден інший додаток не спілкується з цими серверами? Якщо обидва так, то відповідь про Wireshark - це те, на що я б пішов. Дізнайтеся, як це працює. Це не так складно.
gertvdijk

Відповіді:


71

Що ж, для всіх шанувальників tcpdump =)

РУНУЙТЕ ВСІ ЦІ КОМАНДИ ЯК КОРИНО !!!

Отримати корінь у терміналі з

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. Мій ноутбук підключається до Інтернету через wifi роутер. Чи може це змінити використання 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
Vanni Totaro

1
Набагато зручніше, ніж tcpdump, якщо вам просто цікаво бачити запити і не потрібно мати справу з усіма подробицями TCP (syn, ack ...)
герм

13

Я б запропонував спробувати WiresharkВстановіть Wireshark

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

Інформацію про Wireshark та способи його використання можна знайти на домашній сторінці Wireshark .


1
Це не працює для одного процесу. Ви отримаєте весь трафік на інтерфейсі, і вам доведеться фільтрувати його за IP / протоколом тощо. Wireshark - фільтр за процесом / pid
gertvdijk

Так, але це легко здійснити за допомогою інтерфейсу дротів.
Пантера

2
Я спробував Wireshark раніше , і це дуже складна для мене, я шукаю інший варіант
Мегас

4
Інший варіант - tcpdump. tcpdump - це інструмент командного рядка, легко виконає роботу, але має більш круту криву навчання. danielmiessler.com/study/tcpdump
Пантера

1
@gertvdijk - як хочете;) Не соромтеся додавати до основ
Пантера

5

Також можлива команда, яка дає охайний вихід навіть для SSL:

sudo tcpdump dst port 80
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.