Чи можу я використовувати tcpdump для отримання запитів HTTP, заголовка відповіді та тіла відповіді?


83

Я використовую tcpdumpдля отримання даних HTTP, виконуючи наведену нижче команду:

sudo tcpdump -A -s 1492 dst port 80

Результат наведеної команди:

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

Мені потрібен більш чіткий результат, наприклад, читабельний запит> заголовок відповіді> тіло відповіді тощо. Як я можу відфільтрувати свої результати?


3
Відповіді HTTP можуть стискатися або шматкуватися, і отримання їх необробленого тексту може насправді робити не те, що вам потрібно ("нечитабельні дані"). Ймовірно, вам потрібно пояснити більш повно, що ви хочете зробити і що дозволяє ваше середовище (наприклад, чи не можете ви просто використовувати HTTP-проксі, як Чарльз або Скрипаль)?
EricLaw

як ви працювали tcpdumpв ОС Android? Ви якось вбудовуєте команду у свій додаток або запускаєте її на ПК, підключеному до телефону Android?
faizal

1
@faizal - вам слід встановити двійковий файл tcpdump на пристрій, після чого ви можете запустити його з самого пристрою, скористайтеся цим посиланням для Як встановити tcpdump на пристрій Android: gadgetcat.wordpress.com/2011/09/11/tcpdump -на-андроїд
kimo

Відповіді:


206

Існують фільтри tcpdump для HTTP GET & HTTP POST (або для обох із тілом повідомлення):

  • Біжи, man tcpdump | less -Ip examplesщоб переглянути деякі приклади

  • Ось ТСРйітр фільтр для HTTP GET ( GET= 0x47, 0x45, 0x54, 0x20):

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
    
  • Ось ТСРйітр фільтр для HTTP POST ( POST= 0x50, 0x4f, 0x53, 0x54):

    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)'
    

Для отримання додаткової інформації щодо бітового обертання в заголовку TCP див .: Генератор фільтрів захоплення, що відповідає рядкам (посилання на пояснення Саке Блока).


13
Я не знав про less -Ip- що за
заставка

11
Я хотів би побачити пояснення цих
викликів

1
Чи можна мати фільтр для HTTP GET і POST разом?
Джим Хо

4
Це чаклунство. Хтось, будь ласка, поясніть, як це працює.
sdkks


34

Я б рекомендував використовувати Wireshark , який має опцію "Підписатися на потік TCP", що дозволяє дуже легко побачити всі запити та відповіді на певне з'єднання TCP. Якщо ви бажаєте скористатися командним рядком, ви можете спробувати tcpflow , інструмент, призначений для збору та реконструкції вмісту потоків TCP.

Іншими варіантами буде використання проксі-сервера для налагодження HTTP, наприклад, Чарльз або Скрипаль, як пропонує EricLaw. Вони мають ту перевагу, що мають спеціальну підтримку HTTP, щоб полегшити роботу з різними видами кодування та іншими функціями, такими як збереження запитів на їх відтворення або редагування запитів.

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

І нарешті, ви завжди можете побудувати запити вручну, використовуючи щось на зразок telnet, netcat або socat для підключення до порту 80 та введення запиту вручну, або інструменту, такого як htty, який допоможе легко побудувати запит та перевірити відповідь.


2
Велике спасибі за вашу відповідь Мозок. Я використовую tcpdump в ОС Android :) тому я обмежений використанням tcpdump, напевно я можу отримати заголовки, а також запит на посилання, мені також потрібно отримати тіло, будь-яку допомогу, будь-який сценарій перетворення Perl чи щось подібне?
kimo

11
@kimo У такому випадку я рекомендую скористатися tcpdump -w outfile ...скиданням необроблених пакетів у файл, а потім скопіювати його на свій комп’ютер і використовувати Wireshark для його аналізу. Wireshark може відкрити дамп пакетів, декодувати потік TCP та розпакувати вміст HTTP (я припускаю, що причиною його нечитабельності є те, що він стиснутий).
Брайан Кемпбелл,

Дякую, Брайане, я спробую реалізувати це рішення, у будь-якому випадку краще перенести файл на ПК, тому що я повинен фільтрувати дані, щоб отримати бажані запити, і це непросто зробити в системі Android.
kimo

Брайан, я думаю, що ми намагаємось сказати тут. Як ми можемо зробити це за допомогою Busy Box? Я маю такі ж обмеження і на пристроях Android.
Джеймс

1
@JamesAndino Так, на пристрої Android я б рекомендував використовувати tcpdump -w outfile, а потім скопіювати це на машину, яка має Wireshark, і використовувати Wireshark для перегляду дампа.
Брайан Кемпбелл,

6

Ось ще один вибір: Chaosreader

Тому мені потрібно налагодити програму, яка розміщує xml у сторонній програмі. Я знайшов чудовий маленький скрипт Perl, який виконує всю важку роботу - ви просто закидаєте його вихідним файлом tcpdump, і він виконує всі маніпуляції та видає все, що вам потрібно ...

Сценарій називається 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.