Понимание вывода tshark - PullRequest
       107

Понимание вывода tshark

0 голосов
/ 22 сентября 2018

Я пытаюсь понять вывод сетевых данных, захваченных tshark с помощью следующей команды

sudo tshark -i any ‘tcp port 80’ -V -c 800  -R ‘http contains <filter__rgument>' > <desired_file_location>

Соответственно, я получаю несколько пакетов на выходе, каждый из которых начинается со строки примерно так:

Frame 5: 1843 bytes on wire (14744 bits), 1843 bytes captured (14744 bits) on interface 0

У меня есть несколько основных вопросов относительно пакета:

  1. Является ли кадр и пакет одним и тем же (используются взаимозаменяемо)?
  2. Представляет ли пакет логически1 запрос (в моем случае HTTP-запрос)?Если нет, может ли запрос охватывать несколько пакетов или пакет может содержать несколько запросов?Более основным вопросом будет то, что представляет пакет?
  3. Я вижу много информации, получаемой в запросе.Есть ли способ с помощью tshark просто захватить заголовки http и тело запроса http?По сути, мой мотив всего этого упражнения состоит в том, чтобы собрать все эти запросы, чтобы воспроизвести их позже.

Любые указатели, чтобы ответить на эти сомнения, будут действительно полезны.

1 Ответ

0 голосов
/ 23 сентября 2018

Вы задали несколько вопросов.Вот некоторые ответы.

Фреймы и пакеты - это одно и то же?

Нет.Технически, когда вы просматриваете данные сети, и эти данные включают заголовок кадра уровня 2, вы смотрите на кадр.Пакет IP внутри этого кадра является просто данными с точки зрения уровня 2.Когда вы смотрите на IP-дейтаграмму (или снимаете заголовок кадра), вы теперь смотрите на пакет.

В конечном счете, я говорю людям, что вы должны знать разницу и пытаться правильно использовать термины, нона практике это не очень важное различие.

Представляет ли пакет один запрос?

Это действительно зависит.С HTTP 1.0 и 1.1 вы можете смотреть на это так, хотя нет никаких причин, что, если у клиента есть значительный объем данных POST для отправки, запрос не может охватывать несколько пакетов.Лучше думать об одном «соединении» или «сеансе» как об одном запросе / ответе.(Это не обязательно строго верно для HTTP 1.1, но, как правило, это правда)

С HTTP 2.0 это по своей конструкции не так.Одно соединение или сеанс используется для обработки нескольких потоков данных (запросов / ответов).

Как получить заголовки запроса?

Это слишком долгодля меня, чтобы ответить здесь.Самое простое, что можно сделать, скорее всего, это просто запустить WireShark, зайти в панель фильтров и набрать «http».Как только вы нажмете точку, вы увидите список всех различных подэлементов, которые вы можете посмотреть.Вы можете использовать их в tshark, используя опцию '-Y', и вы можете дополнительно указать столбцы, которые вы хотели бы отображать (чтобы вы могли эффективно добавлять и удалять столбцы).

Альтернативный способ увидеть этоинформация заключается в использовании кнопки выражения фильтра для вызова селектора протоколов.Если вы прокрутите вниз до HTTP, вы можете выбрать его, а затем просмотреть все доступные поля.

Просматривая их, поймите, что некоторые поля находятся на верхнем уровне, а не в * 1027.* или response.Например, content-length отображается как поле под http, а не http.request.content_length.Это связано с тем, что content-length является общим полем для всех запросов и ответов.

...