Як повернути лише заголовок HTTP з tshark?


12

Я використовую tshark, щоб нюхати свої пакети, і я переймаюся лише заголовком http (бажано у формі, яку він надсилає, але я візьму те, що можу отримати).

Я спробував використовувати:

tshark tcp port 80 or tcp port 443 -V -R "http"

Що дало мені заголовок, але і вміст (який я не хочу, щоб його велика кількість сміття розбиралася). Мені дуже цікаво лише заголовок, чи є якийсь простий спосіб отримати саме це (окрім як сам аналіз даних).

Редагувати: Я повинен кваліфікувати, я також дбаю про хост / порт, щоб я міг відслідковувати запити в кількох пакетах.

Відповіді:


18

Ви можете використовувати специфічні фільтри відображення заголовків HTTP, щоб показати або лише заголовки запитів, лише заголовки відповідей, або обидва.

Для лише заголовків запиту:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

Для лише заголовків відповідей:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

І для заголовків запиту, і для відповідей:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

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


Ми все ще говоримо про тону даних, як ніби у мене є запит на en.wikipedia.org Я повертаю 750k, коли мені дуже хочеться менше 1k в заголовках.
tzenes

tshark - це інструмент захоплення пакетів , ви можете заглянути в щось на зразок Fiddler або інший інструмент аналізу лише HTTP.
важкий

Я не знайомий з Fiddler, але моя мета - відстежувати пропускну здатність з'єднання, тому я хочу знати час запиту / firstbyte / lastbyte, зберігаючи заголовки HTTP. tshark вже вирішує більшу частину моєї проблеми, мені просто потрібно отримати заголовки.
tzenes

3
Він створює "tshark: Недійсний фільтр захоплення" (Tshark 2.0.2). Як вирішення, я використав:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs

5

Насправді ви можете! Усі попередні відповіді були дуже близькими. Все, що вам потрібно, це -Oпрапор, який фільтрує всю інформацію, крім HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443

1
Це правильна відповідь.
Флорін Андрій

3

Мені вдалося поєднати відповідь від @heavyd та пропустити її через фільтр sed, який я отримав із статті SO - (відповідь FJ), щоб приготувати цю дитину, яка фільтрує лише заголовки :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered

1
жахливий sed причину я не можу прочитати це, але працював як шарм.
Сетерон

2

Моя власна версія фільтра для зручного читання:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

Таким чином, я бачу лише релевантну інформацію про IP та TCP, не маючи всі дані низького рівня, а також повну інформацію HTTP.


sudo tshark -V -s0 порт 80 -Y "(http.request || http.response)" | awk "/ протокол передачі гіпертексту /, / ^ $ /"
Lmwangi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.