Как мне вернуть только заголовок Http от tshark?

12

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

Я пытался с помощью:

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

Который дал мне заголовок, но также и контент (который я не хочу, так как он разбирает большое количество мусора). Я действительно забочусь только о заголовке, есть ли простой способ получить это (кроме самого анализа данных).

Изменить: я должен уточнить, я также беспокоюсь о хосте / порту, чтобы я мог отслеживать запросы на несколько пакетов.

tzenes
источник

Ответы:

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"

Примечание: это не отфильтровывает только заголовки, а только пакеты, которые содержат заголовки, так что вы, скорее всего, все равно получите некоторые данные, но объем данных должен быть меньше, чем в противном случае.

heavyd
источник
Мы до сих пор говорим о куче данных, как будто у меня есть запрос на en.wikipedia.org. Я получаю обратно 750 тыс., Когда мне действительно нужно меньше 1 тыс. В заголовках.
Ценес
tshark - это инструмент захвата пакетов , вы можете захотеть взглянуть на что-то вроде Fiddler или другого инструмента анализа только по HTTP.
тяжело
Я не знаком с fiddler, но моя цель - отслеживать пропускную способность соединения, поэтому я хочу знать requesttime / firstbyte / lastbyte при сохранении заголовков HTTP. tshark уже решил большую часть моей проблемы, мне просто нужно получить заголовки.
Ценес
3
Она производит "tshark: Invalid захват фильтра" (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
quickshiftin
источник
1
ужасно, потому что я не могу прочитать это, но работал как шарм.
Сетерон
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