11

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

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

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

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

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

4 ответа4

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"

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

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
2

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

tshark -i docker0 -O http -R http.request tcp port 443
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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .