tsharkкакWiresharkподдержка подкоманд,Поддержка большинства функций Wireshark в сценарии CLI.,Для пакетной обработки、фильтр фильтр、Экспорт、Статистический анализ、Индивидуальный вывод и другие возможности.
конечно,tshark имеет возможность одновременно захватывать и анализировать пакеты.,Просто поймите, что tshark — это CLI-версия Wireshark.,Но в основном индустрия будет использовать tcpdump для захвата пакетов в Linux.,И он может охватывать все сценарии перехвата пакетов.,Если вы хотите знать, как использовать tcpdump,Вы можете ознакомиться с аннотацией автораЭта статья。
Поэтому в этой статье больше не будет описываться использование tshark для перехвата пакетов, а основное внимание будет уделено тому, как tshark можно использовать с инструментами обработки текста, такими как grep, sed, awk и т. д., для анализа отфильтрованных сообщений, пакетной обработки сообщений и т. д. и получить любое содержимое сообщения, которое мы хотим. Это вещи, которые графический Wireshark не может сделать, и это неотъемлемые преимущества CLI.
tshark — это подкоманда Wireshark, которая используется по умолчанию для использования Gentoo. Ниже приведены команды установки для каждого дистрибутива.
Дистрибутив | Команда установки |
---|---|
CentOS | yum install wireshark -y |
Debian/Ubuntu | apt install wireshark -y |
Archlinux | pacman -Syu wireshark |
Gentoo | USE="tshark" emerge --ask wireshark |
Если это клиент Windows, просто установите Wireshark. Tshark будет установлен по пути, где по умолчанию находится Wireshark.
использовать-r|--read-fileФайл захвата пакета чтения параметров:
tshark -r <filename>
Просто распечатает сообщение из файла пакета.,То, что вы видите, — это полное трехстороннее рукопожатие TCP и четырехэтапный волновой процесс. В этой статье основное внимание уделяется обработке и анализу захваченных пакетов.,поэтому-rПараметры будут использоваться в последующих примерах.。
Чтобы предотвратить IP-адрес、Порты и т. д. обратно преобразуются в имена хостов.、имя порта,-nПараметры используются чаще,Вы можете более интуитивно видеть интерактивную информацию из пяти кортежей.,Вместо формы псевдонима:
tshark -n -r <filename>
Отличается от -n,-NПараметры могут точно контролировать, какие уровни анализируются.,Форматдля:-N <Обратный анализflag>
,значение флага и значение следующие:
значение флага | значение |
---|---|
d | Включить разрешение для DNS-пакетов |
m | Включить разрешение MAC-адреса |
n | Включить разрешение сетевых адресов |
N | Используйте внешний преобразователь (например, DNS) для разрешения сетевых адресов. Для достижения эффекта необходимо одновременно включить его. |
t | Включить разрешение портов транспортного уровня |
v | Включить разрешение имен для идентификаторов VLAN. |
tshark -N t -r <filename>
Это не сложно увидеть,80Добавлен перед портомhttpпротоколлоготип,и37546дляслучайный максимумпорт,Нет особого значения,Таким образом, ни один протокол, соответствующий характеристикам, не был проанализирован.
Если вы хотите одновременно включить несколько разрешений, например одновременное включение разрешения сетевых адресов и портов транспортного уровня, вы можете:
tshark -N n -N t -r <filename>
Форматдля:-d <layer type>==<selector>,<decode-as protocol>
То есть функция «Декодировать как» в Wireshark декодирует и выводит определенный уровень протокола в соответствии с протоколом, указанным вручную.
Проще говоря, он отбирает пакеты, соответствующие условиям, анализирует и выводит эти пакеты в соответствии с указанным протоколом.
По умолчанию tshark автоматически декодирует пакеты данных на основе характеристик протокола и стандартов порта. Например, порт 443 автоматически преобразуется в SSL без указания параметра -d. Однако в некоторых случаях конкретный протокол может иметь несколько вариантов или после расширения. , или порт настроен, и существует несколько протоколов, которые соответствуют характеристикам, полученным в результате анализа функций протокола, и автоматическое декодирование tshark может выбрать только один из них, тогда будет полезно вручную указать синтаксический анализ протокола.
осуществлятьtshark -d --help
Условия фильтрации, поддерживающие декодирование ипротокол:
tshark -d --help|&grep tcp # Фильтровать фильтры, связанные с TCP
Поскольку возможности автоматического анализа протоколов в tshark в принципе могут быть реализованы, в настоящее время не существует сценария, в котором вам нужно вручную указать протокол для декодирования, но вы все равно можете провести некоторые функциональные демонстрации.
Например, декодируйте и выведите порт TCP 80 в протокол ssh:
tshark -r <filename> -d 'tcp.port==80,ssh'
Это позволит применить протокол ssh для анализа и декодирования сообщений, соответствующих условиям, а затем вывести их на консоль.
Но до декодирования это на самом деле обычный HTTP-поток:
Или декодируем DNS-сообщения в протоколы rtp и quic соответственно:
tshark -r dns.pcap -d 'udp.port==53,rtp'
tshark -r dns.pcap -d 'udp.port==53,quic'
tshark будет декодировать пакеты, соответствующие характеристикам указанному нами протоколу,Конечно, его нельзя анализировать по протоколу.,напримерudp.port==80,httpВоляudpпорт80Пакет декодируется вHTTPпротокол Это не существует,http — это реализация, основанная на TCP,Не в стеке протоколов,Невозможно декодировать.
Приведенное выше декодирование используется только в качестве примера использования и не имеет никакого значения.
Исходное сообщение — DNS, и tshark автоматически помог нам расшифровать и адаптировать его к правильному протоколу:
Укажите вывод Форматможет быть:ek|fields|json|jsonraw|pdml|ps|psml|tabs|text
Например, вывод в формате json может быть:
tshark -n -r <filename> -T json
вывод формата ek:
tshark -n -r <filename> -T ek
Формат ek: массив Elasticsearch, который представляет собой формат пакетной записи в Elasticsearch.
вfieldsФормат Нужно сотрудничать-eПриходитьиспользовать,нельзя использовать отдельно,См. ниже для конкретного использования.-eиллюстрировать。
-eИспользуется для указания определенной части сообщенияпротокол Поле,Давать-TПараметры Выход процессадляфинальный Формат。
Например, требуются только поля количества кадров сообщений, IP-адреса, порта, протокола TCP или IP, а конечным результатом являются поля, которые могут быть:
tshark -n -r <filename> -e 'frame.number' -e 'ip.addr' -e 'tcp.port' -e tcp -T fields
tshark -n -r <filename> -e 'frame.number' -e 'ip.addr' -e 'tcp.port' -e ip -T fields
Среди них ip.addr и tcp.port можно разделить на IP-адрес источника (ip.src), IP-адрес назначения (ip.dst), порт источника TCP (tcp.srcport) и порт назначения TCP (tcp.dstport As). пока вы. По сути, все поля, которые можно использовать в качестве условий фильтра в Wireshark, можно представить в формате ek:
tshark -n -r <filename> -e 'frame.number' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T ek
в то же время,Вы также можете присоединиться-E header=yпараметр,указать поле вывода,Первая строка также соответствует значению поля выходного заголовка.,пройти позжеcolumnкоманда для выравнивания Формат:
tshark -n -r <filename> -E header=y -e 'frame.number' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T fields|column -t
когда прошло-Tпараметр Приходитьвыход特定Форматчас,Могу сотрудничать-Eпараметр Приходить设置一些Параметры。
-EМогу ответитьизпараметриметь:
Опции параметров | по умолчанию | значение |
---|---|---|
bom=y|n | n | Перед выводом добавьте метку порядка байтов UTF-8 (шестнадцатеричный ef, bb, bf); |
header=y|n | n | Распечатайте заголовок имени поля, используя -e в качестве первой строки вывода; |
separator=/t|/s|\<character> | /t | Установить разделитель полей; |
occurrence=f|l|a | a | Распечатайте первое, последнее или все вхождения каждого поля; |
aggregator=,|/s|\<character> | , | Устанавливает символ-разделитель, используемый в каждом поле. |
quote=d|s|n | n | Устанавливает символ кавычки, используемый для окружения полей. |
Вот несколько примеров.
bom (метка порядка байтов) — это метка порядка байтов, вставляемая в начало файла Unicode, закодированного в UTF-8, UTF16 или UTF-32, для идентификации типа кодировки файла Unicode. Для UTF-8 спецификация не требуется, и этот параметр обычно не используется, если не существует такого сценария требуемого формата.
проходить-E bom=y Чтобы включить спецификацию, tshark вставит тег спецификации в поле управления.
Например, в этой команде мы указываем печать определенных полей и вставку формата bom через параметр bom=y:
tshark -n -r <filename> -E bom=y -E header=y -e 'frame.number' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T fields
Нетрудно найти путем сравнения,После включения бона,bomFormat будет вставлен в начало вывода.,проходитьgrep-r $'\xef\xbb\xbf'Эта строка также может быть сопоставлена。
распечататьиспользовать-eкак Выведите первую строкуиз Полеимяголова,Уже продемонстрировано ранее,-eобозначениеиз Поле,Имена этих полей также будут напечатаны в первой строке.
Например, чтобы указать печать абсолютного порядкового номера TCP и информации о пяти кортежах, это может быть:
tshark -n -r <filename> -E header=y -e 'tcp.seq_raw' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T fields
Укажите разделитель полей, по умолчаниюдля/t,/s можно указать,то есть одно пространство,или или другие настроенные персонажи.
Установите разделитель на два /ts:
tshark -n -r <filename> -E separator=/t/t -e 'tcp.seq_raw' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T fields
Установите разделитель #:
tshark -n -r <filename> -E separator=\# -e 'tcp.seq_raw' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T fields
распечатайте каждый Полеценитьпервый(f)、последний(l),все(а),Когда поле имеет несколько цен,по По умолчанию будут печататься все цены, вы можете использовать этот параметр, чтобы указать, какое число печатать.
Например, следующий пакет инкапсулирован посредством IPIP, поэтому IP имеет внутренний и внешний уровень:
На этом этапе мы используем tshark для обработки поля IP.,по умолчанию поведение возникновения является,То есть весь контент в поле вывода,Оба IP-адреса будут выведены:
tshark -n -r <filename> -E header=y -Y 'icmp.seq==21' -e 'icmp.seq' -e 'ip.src' -e 'ip.dst' -T fields |column -t
На данный момент нам нужен только внутренний IP-адрес.,Можетпроходитьобозначениеoccurrence=lвыполнить:
tshark -n -r <filename> -E header=y -E occurrence=l -Y 'icmp.seq==21' -e 'icmp.seq' -e 'ip.src' -e 'ip.dst' -e ip -T fields |column -t
Нужен только внешний IP,проходитьобозначениеoccurrence=fвыполнить:
tshark -n -r <filename> -E header=y -E occurrence=f -Y 'icmp.seq==21' -e 'icmp.seq' -e 'ip.src' -e 'ip.dst' -e ip -T fields |column -t
Указывает разделитель, используемый в поле,Если поле имеет несколько ценителей,,по умолчанию будут разделены запятыми,Этот параметр можно использовать для указания разделителя.
Например, несколько полей IP на уровне IP можно разделить точкой с запятой:
tshark -n -r <filename> -E header=y -E aggregator=\; -Y 'icmp.seq>=21' -e 'icmp.seq' -e 'ip.src' -e 'ip.dst' -T fields |column -t
Устанавливает символ кавычки, используемый для окружения полей.,dвыражатьdouble,sвыражатьsingle,nвыражатьno,по умолчаниюдляn,то есть не используйте кавычки. Когда поля вывода необходимо заключить в кавычки,Этого можно добиться, установив этот параметр.
Заключите каждое выходное поле в двойные кавычки,проходитьquote=dПриходитьвыполнить:
tshark -n -r <filename> -E header=y -E quote=d -e 'tcp.seq_raw' -e 'ip.src' -e 'ip.dst' -e 'tcp.srcport' -e 'tcp.dstport' -e ip -T fields|column -t
quote=sноиспользоватьодинарная кавычка:
tshark -n -r <filename> -E header=y -E quote=s -E occurrence=f -Y 'icmp.seq>=21' -e 'icmp.seq' -e 'ip.src' -e 'ip.dst' -e ip -T fields |column -t
Укажите этот параметр,tsharkбудет основано на зависимостях контекстного сообщения(tsharkпозвони этодляtwo-pass,То есть проводится два анализа),для отображения соответствующей информации о связи сообщений,например:'response in frame #'、'reply in frame'、'TCP Port numbers reused'ждать Поле。
Например, следующий пример при открытии в Wireshark отобразит зависимости контекста, такие как повторное использование порта (повторное использование номеров TCP-портов), предложенное во втором кадре:
Если вы используете tshark напрямую для его просмотра, такого сообщения нет:
плюс-2параметр,Пусть он проведет полный контекстный анализ и вычислит эти поля.,Он будет отображаться нормально:
tshark -2 -n -r <filename>
Другой пример — сценарий icmp. Без вторичного анализа — первый icmp. request,не будет отображаться в концеreply in 2(Прямо сейчасreplyсообщениедлявторой кадр)быстрое сообщение:
Или в сценарии фрагментации, если вы пингуете большой пакет ICMP и превышаете mtu, он будет фрагментирован и передан. После открытия Wireshark отображается следующее:
Полученный большой пакет запроса будет разделен на два кадра для передачи, и ответу на большой пакет не требуется. Количество байтов не превышает mtu, поэтому фрагментация не требуется.
Открытие его в tshark:
Подсказка разбита на сегменты, но в ней не четко указано, какой сегмент какому запросу соответствует. После вторичного анализа можно четко указать:
tshark -n -r <filename> -2
Если это протокол TCP, два конца согласовывают минимальный размер MSS (исключая заголовок TCP + заголовок IP) в первые два раза трехстороннего рукопожатия (фазы SYN и SYN, ACK). Последующие интерактивные пакеты этого протокола. TCP-поток превышает MSS. Он передается фрагментами.
Выше перечислены только три наиболее распространенных сценария. Остальные сценарии не будут приводиться в качестве примеров один за другим. Вторичный анализ часто может обеспечить более гуманное напоминание о корреляции зависимостей между предыдущим и последующим сообщениями.
Поддерживаемые форматы и описания следующие:
Формат | иллюстрировать |
---|---|
a | Абсолютное время, фактическое время захвата пакета, не отображает дату; |
ad | Абсолютное время с периодом день отображается в виде: ГГГГ-ММ-ДД; |
adoy | Абсолютное количество дней в части Год,Формат отображения: ГГГГ-ДЕНЬ; |
d | дельта-время, временной интервал относительно предыдущего кадра; |
dd | delta_displayed time — временной интервал относительно предыдущего отображаемого кадра; |
e | Время эпохи/Unix-время, количество секунд, отсчитанных с 1 января 1970 г. 00:00:00 (UTC); |
r | Относительное время относительно первого пакета; |
u | Время UTC, дата не отображается; |
ud | Время UTC с датой в формате ГГГГ-ММ-ДД; |
udoy | Время по всемирному координированному времени с датой, количество дней — это абсолютное количество дней в этом году, отображаемое как: ГГГГ-ДЕНЬ. |
Когда не указано умолчаниюдляr(relative),То есть относительное время относительно первого пакета.
Если взять в качестве примера следующий пакет, сообщение отображается в абсолютном времени текущего часового пояса без отображения даты:
tshark -n -r <filename> -t a
При необходимости вaотображается на основедень Ожидать,ноиспользоватьad:
tshark -n -r <filename> -t ad
Когда вам нужно отобразить количество дней как абсолютное количество дней в этом году (Day Of Year,Какие дни этого Года),использоватьadoy:
tshark -n -r <filename> -t adoy
Хотя этот сценарий встречается редко, разумно, если он существует, и он удобен для сложения и вычитания дат.
Эквивалентно временному интервалу предыдущего сообщения,ноиспользоватьd:
tshark -n -r <filename> -t d
этотпараметриdРазница в том,,Его эквивалентное время — это относительное время предыдущего сообщения, выведенного на экран.
напримериспользоватьddпоказывать所иметьсообщениеизчасмежду:
tshark -n -r <filename> -t dd
Посмотрите на это так,показыватьизчасмеждуиdпочти то же самое,Но если я фильтрую только HTTP-запросы,Сноваиспользоватьdd:
tshark -n -r <filename> -Y 'http' -t dd
Разница очевидна,когдаиспользоватьHTTP只фильтр到两个сообщениечас(frame 4иframe 6):
так Это не сложно увидеть,ddиззначениеда:delta displayed,Относительное время отображения сообщения.
Время эпохи/Unix-время, количество секунд с 1 января 1970 г. 00:00:00 (UTC):
tshark -n -r <filename> -t e
Показать относительно первого пакета(frame 1)изотносительночасмежду,но Можетиспользоватьr:
tshark -n -r <filename> -t r
кпоследний Сумка(frame 10)дляпример,показыватьчасмеждумежду隔для:0.002799,На самом деле это относительно времени первого пакета.,проходитьcapinfos也Может看出首尾Сумкаиз差距刚好ждать于这个часмеждумежду隔:
Отображается по времени UTC,и не отображает период дня,но Можетиспользоватьu:
tshark -n -r <filename> -t u
Отображение времени UTC с датой на основе UTC:
tshark -n -r <filename> -t ud
Отображать время UTC с датой, где количество дней отображается как День. Of YearФормат,Прямо сейчаскнига Годстепеньиз Дни:
tshark -n -r <filename> -t udoy
Эта опция обычно используется для фильтрации и анализа пакетов, соответствующих выражению фильтра. Она эквивалентна функции панели фильтров в верхней части Wireshark.
В некоторых примерах выше,Фактически его использовали-Yварианты фильтрации сообщений,Если написанное вами выражение фильтра соответствует синтаксису Wireshark.,может быть выполнено нормально,wiresharkГрамматика может относиться кОфициальная документация。
Если вы хотите отфильтровать http-хост по определенному значению, это может быть:
tshark -n -r <filename> -Y 'http.host == "web-server1"'
Фильтрация повторной передачи TCP, быстрой повторной передачи и пакетов DUP ACK, которые могут быть:
tshark -n -r <filename> -Y 'tcp.stream eq 2 && ( tcp.analysis.retransmission or tcp.analysis.fast_retransmission or tcp.analysis.duplicate_ack )' -t d
проходить-t dПриходитьпоказыватьотносительно上一帧изчасмежду,tcp.stream eq 2уточнить статью 3TCPпоток。
Фильтруйте сообщения ARP и удаляйте определенные кадры, которые могут быть:
tshark -n -r <filename> -Y 'arp && frame.number in {9,10,197,208,216}' -t d
При первом рукопожатии отправляется только SYN, а бит ACK равен 0, поэтому правило фильтрации можно записать так:
tshark -n -r http-keep-alive.pcap -Y 'tcp.flags.syn==1&&tcp.flags.ack==0'
Вышеупомянутое — всего лишь несколько примеров. Когда дело доходит до использования фильтрации в различных сценариях, -Y может полностью ее поддерживать.
использоватьtshark -z help
Может查看支持из Статистический анализ Параметры。
На данный момент существует 169 вариантов статистического анализа, но не многие из них широко используются.
Вот несколько примеров наиболее распространенных из них:,Если сценарий, с которым вы столкнулись, требующий статистического анализа, не входит в число примеров сценариев,Такпроходить-z helpдля просмотра матчейизсцена Параметры Прямо сейчас Может。
Нужна статистика сеансов'conv,'какпрефикс,Это означает разговор.
Возьмите этот поток TCP в качестве примера для подсчета сеансов:
tshark -n -r <filename> -z 'conv,ip'
Вы можете использовать параметр -q, чтобы он выводил только статистические результаты, а не отображал сообщения:
tshark -n -q -r <filename> -z 'conv,ip'
Если это адрес ipv6,Изменить на-z 'conv,ipv6'Прямо сейчас Может。
Конечно, вы также можете написать правила фильтрации после статистических результатов, например, считать результаты только первого потока:
tshark -n -q -r <filename> -z conv,ip,tcp.stream==0
Единственное отличие от первого примера — уровень статистики.,conv,ip статистикаIPслой,Такconv,tcpностатистикаtcpголова,Поскольку это уровень TCP,Должен быть порт:
tshark -n -q -r <filename> -z conv,tcp
Конечно, он также поддерживает параметры фильтрации:
tshark -n -q -r <filename> -z conv,tcp,tcp.port==443
Или мне просто нужна статистика для второго потока:
tshark -n -q -r <filename> -z conv,tcp,'tcp.stream eq 2'
Из двух приведенных выше примеров также можно догадаться, что команду статистики следует записать следующим образом:
tshark -n -q -r <filename> -z conv,udp
Если правило фильтрации содержит несколько записей или пробелов, его можно заключить в одинарные кавычки:
tshark -n -q -r <filename> -z conv,udp,'udp.port in {8000,8803}'
Анализ информации об иерархической структуре DNS может быть:
tshark -n -q -r <filename> -z dns,tree
Вся статистическая информация, предназначенная для протокола DNS в пакете, будет учитываться, включая время ответа, скорость ответа, различные категории запросов, размер полезной нагрузки, дополнительные записи и различную статистическую информацию, принадлежащую полям заголовка DNS.
Конечно, он также поддерживает параметры фильтрации, такие как подсчет только DNS-запросов baidu.com, которые могут быть:
tshark -n -q -r <filename> -z dns,tree,dns.'qry.name == baidu.com'
Конечная точка будет фокусироваться только на передаче данных между источником и получателем в одном пакете.
Например, для статистики на уровне IP входящий и исходящий трафик и объем пакетов каждого IP могут быть:
tshark -n -q -r <filename> -z endpoints,ip
conv будет обращать внимание на всю сессию.
Конечно, он также может указать правила фильтрации, например подсчет только данных, связанных с передачей TLS:
tshark -n -q -r <filename> -z endpoints,ip,'tls'
Размеры TCP-заголовка одного пакета будут проанализированы и обобщены статистические данные:
tshark -n -q -r <filename> -z endpoints,tcp
Поскольку это транспортный уровень TCP, очевидно, что там будут порты.
Таким же образом он также поддерживает указание правил фильтрации. Фильтрация TLS или данных с портами связи 58865 и 5228 может быть:
tshark -n -q -r <filename> -z endpoints,tcp,'tls||tcp.port in {58865,5228}'
Очень хорошо, вы уже можете сделать выводы из одного экземпляра и статистически проанализировать данные конечной точки UDP:
tshark -n -q -r <filename> -z endpoints,udp
Укажите правила фильтрации, чтобы фильтровать только данные, относящиеся к DNS:
tshark -n -q -r <filename> -z endpoints,udp,dns
Функция экспертной информации, соответствующая Wireshark, отображается в Wireshark следующим образом:
Реализация на tshark:
tshark -n -q -r <filename> -z expert
Он также поддерживает указание параметров фильтрации, например анализ только третьего потока, который может быть:
tshark -n -q -r <filename> -z expert,'tcp.stream==2'
Уведомление:если неда Полныйизпоток(например ОтсутствующийTCPтри рукопожатия),Тогда вывода может не быть.
Фильтровать статистику по уровням предупреждений, которые могут быть:
tshark -n -q -r <filename> -z expert,'Warns'
переписыватьсяwiresharkизFlow GraphФункция,То есть функция отображения блок-схемы,Вы можете нарисовать диаграмму общения для всего процесса общения.,На Wireshark изображение выглядит следующим образом:
Тогда реализация в tshark может быть:
tshark -q -n -r <filename> -z flow,tcp,network
Как видите, tshark использует символы ASCII для вывода таблиц, что не является настоящим графическим интерфейсом.
Время, Wiresharkпо умолчаниюдаadформа,если ты хочешь,конечно Можетпроходить-t adуказать。
потокграфикаизпараметр Форматдля:flow,name,mode[,filter]
flowдазафиксированный Поле,nameценитьобъемдля:
modeценитьобъемдля:
,flterнодляспецифическийизфильтр规но,Просто соблюдайте синтаксис Wireshark.
Давайте рассмотрим еще один пример графического отображения процесса ICMP-взаимодействия:
tshark -q -n -r <filename> -z flow,icmp,network
Вы можете видеть, что есть два ICMP. requestпереписыватьсядваreply,Но информационное поле, связанное с сообщением,Только хвост ответного сообщения показывает, на какой запрос направлен ответ.,request in 2выражатьвторой кадр,request in 6выражать Шестой кадр。
В сочетании со сценарием вторичного анализа (двухпроходным), упомянутым ранее.,Возможно пожелание уточнить-2параметр Посмотрите эффект:
tshark -q -2 -n -r <filename> -z flow,icmp,network
Видно, что ответ, соответствующий запросу, будет полностью заполнен в каком кадре.
конечно,Наконец, вы можете указать правила фильтрации,напримерфильтрicmp.seq==3:
tshark -q -2 -n -r <filename> -z flow,icmp,network,icmp.seq==3
не хочупроходить-Yуказатьфильтр规но,не вступит в силу:
этот Параметры Форматдля:follow,prot,mode,filter[,range]
followдазафиксированный Поле,protвыражатьпередача инфекциипротокол(Protocols),Возможный диапазон следующий:
ценить | значение |
---|---|
tcp | TCP-протокол |
udp | UDP-протокол |
dccp | Протокол DCCP |
tls | TLS или протокол SSL |
http | HTTP-потоковая передача |
http2 | http2-поток |
quic | быстрый поток |
modeПриходить Укажите вывод Формат,ценитьследующее:
ценить | значение |
---|---|
ascii | Вывод формата ASCII, непечатаемые символы представлены точками. |
ebcdic | Формат вывода EBCDIC,Непечатаемые символы обозначаются точками. |
hex | Шестнадцатеричные данные и данные ASCII со смещением |
raw | Шестнадцатеричные данные |
yaml | YAMLФормат |
filterиспользоватьуказать要показыватьизпоток,Существует три типа Формата:
Формат | значение |
---|---|
ip-addr0:port0,ip-addr1:port1 | Укажите IP-адрес и пару портов TCP, UDP или DCCP (порт TCP используется для TLS, HTTP и HTTP2; QUIC не поддерживает сопоставление адреса и порта); |
stream-index | Укажите индекс потока для TCP, UDP, DCCP, TLS и HTTP (TLS и HTTP используют индекс потока TCP); |
stream-index,substream-index | Укажите потоки и подпотоки для HTTP/2 и QUIC, поскольку они используют мультиплексирование/долгоживущие соединения (поток TCP и индекс потока HTTP/2 для HTTP/2, номер соединения QUIC и идентификатор потока). |
,rangeиспользовать于обозначение应该показыватьпотокизкакие части。
tshark -q -n -r <filename> -z "follow,tcp,hex,0"
можно ясно увидеть,Node0проситьNode1из80порт,Node0ОтправилHTTP GETпросить ДаватьNode1,Получил это позжеNode1из200 OK Код состояния ответа HTTP, верхняя и нижняя части разделены несколькими пробелами для облегчения различения.
tshark -q -n -r <filename> -z "follow,tcp,ascii,IP1:PORT1,IP2:PORT2"
Этот поток является потоком TLS, и данные зашифрованы, поэтому никакого значимого контента не видно. На скриншоте легко увидеть, что правило фильтра будет в дальнейшем преобразовано и заполнено в полный синтаксис фильтрации Wireshark в соответствии с написанными нами правилами, а именно:
((ip.src eq 192.168.1.3 and tcp.srcport eq 58863) and (ip.dst eq 101.91.37.19 and tcp.dstport eq 443)) or ((ip.src eq 101.91.37.19 and tcp.srcport eq 443) and (ip.dst eq 192.168.1.3 and tcp.dstport eq 58863))
tshark -q -n -r <filename> -z "follow,http,hex,0,1"
Первый HTTP — это GET, затем второй HTTP — ответ:
tshark -q -n -r <filename> -z "follow,http,hex,0,2"
Если это длинное соединение и в одном TCP-соединении имеется несколько HTTP-запросов, просто измените последнее число:
В это время содержимое четвертого HTTP-запроса все еще фильтруется в первом потоке TCP (tcp.stream==0).
Для статистического анализа кодов состояния HTTP и методов запроса вы можете использовать следующие команды:
tshark -q -n -r <filename> -z http,stat
Вы можете видеть, что во всем сообщении 133 200 ОК, 1 404 кода состояния, 133 метода запроса GET и 1 POST.
Естественно, он также поддерживает применение правил фильтрации, таких как фильтрация только кода состояния HTTP и метода запроса, соответствующего первому потоку TCP, который может быть:
tshark -q -n -r <filename> -z http,stat,'tcp.stream==0'
Статистика распределения HTTP-пакетов. Выходные данные — это код состояния ответа и метод запроса:
tshark -q -n -r <filename> -z http,tree
конечно Он также поддерживает добавление правил фильтрации в конце.。еслидаHTTP2протокол,ноиспользоватьhttp2,tree。
http_req,tree Будет учитываться только путь к ресурсу URI, участвующий в запросе, а на ответ не будет обращено внимание:
tshark -q -n -r <filename> -z http_req,tree
Укажите правила для фильтрации только данных первого TCP-соединения:
tshark -q -n -r <filename> -z http_req,tree,'tcp.stream==0'
иhttp_req,treeРазница в том,,Он автоматически завершит запрошенный сервер,Представлено как URL-путь:
tshark -q -n -r <filename> -z http_seq,tree
Также поддерживаются определенные правила фильтрации:
tshark -q -n -r <filename> -z http_seq,tree,'tcp.stream==0'
Для HTTP-запросов отображаемые значения — это IP-адрес сервера назначения и имя хоста сервера. Для ответа HTTP отображаемое значение представляет собой IP-адрес и статус сервера назначения:
tshark -q -n -r <filename> -z http_srv,tree
Он также поддерживает указание правил фильтрации в конце для статистической фильтрации первого потока:
tshark -q -n -r <filename> -z http_srv,tree,'tcp.stream==0'
Вычислите общее количество эхо-запросов ICMP, ответов, потерь и процентов потерь, а также минимальное, максимальное, среднее, медианное значение и выборочную статистику SRT со стандартным отклонением, возвращаемую пингом.
tshark -q -n -r <filename> -z icmp,srt
Фильтровать статистику по определенному IP-адресу:
tshark -q -n -r <filename> -z icmp,srt,'ip.addr==xxx'
Если это адрес V6,ноиспользоватьicmpv6,srt。
Создайте статистику иерархии протоколов с указанием количества пакетов и байтов:
tshark -q -n -r <filename> -z io,phs
Считайте только первый поток TCP:
tshark -q -n -r <filename> -z io,phs,'tcp.stream==0'
Форматдля:io,stat,interval[,filter]
вio,statдазафиксированныйиз,интервал представляет собой интервал времени,Можно указать секунды, доли секунды и микросекунды.,Если указано как 0,Статистика будет рассчитана для всех пакетов.
Подсчитайте объем пакета и размер всех пакетов данных:
tshark -q -n -r <filename> -z io,stat,0
Если вы хотите указать интервал в 10 секунд для статистики и считать только первый поток TCP, вы можете сделать следующее:
tshark -q -n -r <filename> -z io,stat,10,'tcp.stream==0'
все ещедаio,stat,но полный Форматдля:io,stat,interval,"COUNT|SUM|MIN|MAX|AVG|LOAD(field)filter"
io,statдазафиксированный Параметры,intervalвыражатьмежду隔часмежду,Среди них COUNT|SUM|MIN|MAX|AVG|LOAD должны основываться на правилах фильтрации для составления статистики.,например:
io,stat,0,'MAX(icmp.data_time_relative)icmp.data_time_relative'
Подсчитывается поле времени ответа icmp, и принимается максимальное значение MAX, 0 означает подсчет всех, независимо от интервалов.
Если вы хотите указать правило фильтрации, добавьте его в конце. Например, чтобы подсчитать максимальное значение ответа ICMP для определенного IP-адреса, полная команда будет такой:
tshark -q -n -r <filename> -z io,stat,0,'MAX(icmp.data_time_relative)icmp.data_time_relative,'ip.addr==xxx''
Вы можете видеть, что максимальное значение составляет 0,69 с. Обратите внимание, что единица измерения — секунды.
Или, среди статистики первого TCP-соединения, самый длинный интервал между его предыдущими пакетами равен:
tshark -q -n -r <filename> -z io,stat,0,'MAX(tcp.time_delta)tcp.time_delta,tcp.stream==0'
Статистика по среднему и максимальному времени ответа HTTP в первом потоке TCP:
tshark -q -n -r <filename> -z io,stat,0,'AVG(http.time)http.time,tcp.stream==0'
tshark -q -n -r <filename> -z io,stat,0,'MAX(http.time)http.time,tcp.stream==0'
Если правило фильтрации не указано (на рисунке выше tcp.stream==0), будут учитываться все пакеты, содержащие поле http.time.
Или посчитайте только максимальное время ответа HTTP, которое возвращает код состояния 200 OK:
tshark -q -n -r <filename> -z io,stat,0,'MAX(http.time)http.time and http.response.code == 200'
Здесь будут отображаться IP-адреса источника и назначения, а также процент, скорость отправки пакетов, время начала и т. д.:
tshark -q -n -r <filename> -z ip_hosts,tree
В конце укажите правила фильтрации, например, считать только пакеты с порядковым номером icmp меньше или равным 6 и считать только пакеты первого TCP-потока соответственно:
tshark -q -n -r <filename> -z ip_hosts,tree,'icmp.seq <= 6'
tshark -q -n -r <filename> -z ip_hosts,tree,'tcp.stream==0'
Если это адрес IPv6, используйте ipv6_hosts,tree。
Различать адрес источника и адрес назначения,ноиспользоватьip_srcdst,tree:
tshark -q -n -r <filename> -z ip_srcdst,tree
Укажите правила фильтрации, чтобы фильтровать данные только через TCP-порт 8080:
tshark -q -n -r <filename> -z ip_srcdst,tree,'tcp.port in {8080}'
Если это адрес IPv6, используйте ip6_srcdst,tree。
-Vпараметр会完整展开сообщениеизкаждый Поле、Информация заголовка.
Например, в следующем примере запрос на первое рукопожатие расширен:
tshark -n -r <filename> -V -Y 'tcp.flags.syn==1&&tcp.flags.ack==0&&frame.number<=5'
Все отдельные сообщения могут быть расширены и отфильтрованы пакетами по исходным данным. Затем мы можем сотрудничать с командой фильтрации текста в Linux, чтобы получать нужную нам информацию о полях в пакетном режиме.
Например, мы можем использовать обычные правила, чтобы получить нужный URL-адрес прямой трансляции:
tshark -n -r <filename> -Y 'http.request.method eq GET' -V | grep -Po '(?<=Full request URI:\s).*m3u8(?=])' |& sort -u
После того, как сообщение развернуто, все поля можно обрабатывать как обычный текст, что очень удобно. Это то, чего не может сделать графический Wireshark.
Как следует из названия, после обработки исходных пакетов через tshark отфильтрованные пакеты необходимо сохранить в новый файл перехвата пакетов, тогда этот параметр пригодится.
Например, чтобы отфильтровать первые 300 пакетов и HTTP-пакеты с IP-адресом A или B или портом назначения 38388, это может быть:
tshark -n -r <filename> -Y 'frame.number<=300&&(ip.addr in {101.207.176.11,192.168.137.111}||tcp.dstport==38388)&&http'
Используйте параметр -w для сохранения в новый файл захвата пакетов http_in_300.pcap:
tshark -n -r <filename> -Y 'frame.number<=300&&(ip.addr in {101.207.176.11,192.168.137.111}||tcp.dstport==38388)&&http' -w http_in_300.pcap
Размер нового файла перехвата пакетов, наконец, сохранен, составляет всего 4,4 КБ, а размер исходного файла — 516 МБ.
tsharkкакwiresharkиз命令行版книга,Многие функции на самом деле тесно связаны друг с другом.,ноtsharkПредоставляет возможности командной строки,Очень полезно для автоматического анализа сценариев.,Автоматическая пакетная обработка файлов захвата пакетов может быть легко реализована.,и отобразить результаты анализа.
Фильтрация и анализ сетевых пакетов,Он предоставляет сетевым администраторам, экспертам по безопасности и разработчикам возможность получить более глубокое понимание сетевого протокола. Будь то мониторинг сетевого трафика, устранение неполадок, аудит безопасности или анализ протокола.,tsharkможет сыграть огромную роль。从基книгаиззахватыватьифильтр到高级изLuaсделанный на заказ,Он предоставляет широкий спектр функций и приложений.,Подходит для различных сценариев.
В этой статье подробно описаны использование и примеры использования каждого параметра.,Из-за ограниченности места невозможно описать все возможные варианты.,сетевой протоколкнига身具备多样性исложность。проходитьвладелецtsharkего использование,Разберем характеристики протокола,проходитьвернопротоколизпониматьиверноtsharkкнига身из Интегрируйте все,Я считаю, что все основные специалисты по устранению сетевых неполадок могут извлечь из этого пользу.
Поставляется с PDF-версией: