Вопрос или проблема
Сейчас я использую tcpdump -i <interface_name> -p <port> -s0 -w /tmp/file.cap
, а затем фильтрую захват в Wireshark.
Как можно захватить пакеты с помощью tcpdump только на протоколах SCCP или GSM_MAP и исключить сообщения sctp heartbeat?
Любое другое решение тоже подойдет 🙂
ОС: RedHat
Я не думаю, что можно фильтровать с помощью tcpdump
на уровне протокола (HTTP, GSM_MAP и т. д.), или, точнее, это не очень просто. Вопрос и ответ на Stack Overflow, озаглавленный: “Can I use tcpdump to get HTTP requests, response header and response body?“, показывает, как это сделать для HTTP-трафика, и это не очень красиво! Я думаю, что функция, которую вы ищете, позволила бы фильтровать данные по общему названию протокола.
В качестве альтернативы вы можете попробовать версию Wireshark для командной строки, известную как tshark
.
tshark
может быть немного пугающим для начала, но это довольно простой инструмент, если потратить немного времени на чтение tshark
man page и поиск в интернете существующих рецептов. Вы можете использовать команду, чтобы узнать о всех протоколах, которые tshark
знает:
$ tshark -G protocols|grep -E "SCCP|GSM_MAP|SCTP"
GSM Mobile Application GSM_MAP gsm_map
Signalling Connection Control Part SCCP sccp
Signalling Connection Control Part Management SCCPMG sccpmg
Stream Control Transmission Protocol SCTP sctp
SS7 SCCP-User Adaptation Layer SUA sua
Судя по указанному выводу, tshark
знает обо всех протоколах, упомянутых в ваших вопросах, так что это хороший первый шаг. Если вам нужно фильтровать по конкретным полям в заданном протоколе, вы также можете искать на сайте Wireshark с использованием их индекса ссылок на протоколы, и это будет хорошим вторым шагом.
$ tshark -G fields | head -10
P Short Frame short
P Malformed Packet malformed
P Unreassembled Fragmented Packet unreassembled
P IEEE 1722 Protocol ieee1722
F Control/Data Indicator ieee1722.cdfield FT_BOOLEAN ieee1722 8 0x80
F AVBTP Subtype ieee1722.subtype FT_UINT8 ieee1722 BASE_HEX 0x7f
F AVBTP Stream ID Valid ieee1722.svfield FT_BOOLEAN ieee1722 8 0x80
F AVBTP Version ieee1722.verfield FT_UINT8 ieee1722 BASE_HEX 0x70
F AVBTP Media Reset ieee1722.mrfield FT_UINT8 ieee1722 BASE_DEC 0x8
F AVBTP Gateway Info Valid ieee1722.gvfield FT_BOOLEAN ieee1722 8 0x2
...
Пример
Здесь я собираю только трафик протокола HTTP, когда загружаю страницу с “unix.stackexchange.com”, то есть “198.252.206.16”. Мой беспроводной интерфейс (-i wlp3s0
), и я просто вывожу первые 10 строк.
$ tshark -O http -i wlp3s0 host 198.252.206.16 | head -10
Capturing on 'wlp3s0'
2 Frame 1: 855 bytes on wire (6840 bits), 855 bytes captured (6840 bits) on interface 0
Ethernet II, Src: IntelCor_85:a7:20 (00:26:c7:85:a7:20), Dst: Watchgua_85:be:9a (00:90:7f:85:be:9a)
Internet Protocol Version 4, Src: 192.168.1.161 (192.168.1.161), Dst: 198.252.206.16 (198.252.206.16)
Transmission Control Protocol, Src Port: 37713 (37713), Dst Port: http (80), Seq: 1, Ack: 1, Len: 789
Hypertext Transfer Protocol
GET /review/late-answers HTTP/1.1\r\n
[Expert Info (Chat/Sequence): GET /review/late-answers HTTP/1.1\r\n]
[Message: GET /review/late-answers HTTP/1.1\r\n]
[Severity level: Chat]
[Group: Sequence]
...
Главное, что вам нужно иметь в виду, это то, что вы используете “фильтры захвата” для записи этой информации. Они отличаются от “фильтров отображения”.
Разрешения
Убедитесь, что вы ознакомились с вопросом и ответом на U&L, озаглавленным: Can’t get Wireshark to run as user on CentOS, если у вас неправильно настроены разрешения для запуска tshark
и wireshark
не от имени пользователя root.
Ссылки
вы можете фильтровать по “sctp”, но это захватит heartbeats.
Чтобы отфильтровать heartbeats, возможно, потребуется фильтровать по “m3ua”, но это невозможно во время захвата.
.
Ответ или решение
Вопрос, который вам поставлен, касается захвата сетевых пакетов, которые относятся к протоколам SCCP или GSM_MAP, с помощью утилиты tcpdump
, и фильтрации шума через сообщения heartbeat от SCTP на операционной системе Red Hat. Давайте рассмотрим данную задачу более подробно, уделяя внимание теоретической, практической и прикладной частям.
Теория
tcpdump
— это мощный инструмент для захвата и анализа сетевых пакетов, который используется многими сетевыми администраторами для диагностики и мониторинга трафика. Однако tcpdump
имеет некоторые ограничения, особенно когда речь идет о более высокоуровневых протоколах, таких как SCCP и GSM_MAP. В основном, tcpdump
работает на уровне захвата данных пакетов и предлагает фильтрацию на базе низкоуровневых полей протокола TCP/IP, таких как IP-адреса, порты и флаги. В отличие от этого, полное понимание и фильтрация более абстрактных протоколов, таких как те, которые работают поверх IP или SCTP, требуют более сложных инструментов или подходов.
SCCP (Signalling Connection Control Part) и GSM_MAP (GSM Mobile Application Part) являются компонентами стеков протоколов SS7 (Signalling System No. 7), которые применяются для обеспечения передачи сигнализаций в сетях телекоммуникационных операторов. Эффективность фильтрации данных этих протоколов на уровне захвата требует понимания их структур и формата.
Пример
Для того чтобы осуществлять захват пакетов, относящихся к конкретным протоколам, и избегать шума от heartbeat SCTP-сообщений, можно обратиться к tshark
— командной версии Wireshark. tshark
позволяет проводить захват и фильтрацию на более высоком уровне, так как он поддерживает более широкий спектр фильтров.
-
Установка и настройка: На Red Hat
tshark
обычно можно установить из стандартных репозиториев, используя менеджер пакетов YUM или DNF:sudo yum install tshark
-
Фильтрация протоколов: Для фильтрации пакетов, относящихся к SCCP и GSM_MAP, можно воспользоваться опцией
-Y
(или-O
для отсева пакетов по типу протокола):tshark -i <interface_name> -Y "sccp || gsm_map" -w /tmp/capture.pcap
-
Исключение SCTP heartbeat сообщений: SCTP heartbeat — это специальное сообщение, используемое для мониторинга состояния связи. Хотя
tshark
может собирать их, для исключения этих сообщений можно настроить дополнительные фильтры, такие как:tshark -i <interface_name> -f "not sctp && (sccp || gsm_map)" -Y "!sctp.chunk_type == 3" -w /tmp/capture.pcap
Здесь
sctp.chunk_type == 3
относится к heartbeat-сообщениям, и мы запрещаем их отображение.
Применение
Использование tshark
предоставляет гибкость для сосредоточения исключительно на интересующих протоколах и отбрасывания постороннего шума. Это позволяет не только экономить ресурсы при записи и анализе, но и упрощает диагностику и отладку событий, относящихся исключительно к исследуемым протоколам. Обладая мощным функционалом, tshark
позволяет также анализировать пакеты на уровне полей протоколов и, при необходимости, автоматически запускать скрипты для обработки и анализа захваченных данных.
При практическом внедрении, обеспечение непрерывного мониторинга и логирования может улучшить качество обслуживания, повысить устойчивость сети к сбоям и обеспечить ценную информацию для дальнейшего улучшения инфраструктуры.
Заключение
Несмотря на отсутствие возможности прямой фильтрации высокоуровневых протоколов средствами tcpdump
, использование tshark
значительно расширяет ваши возможности в области анализа телекоммуникационного трафика. Разумеется, эффективное использование этих инструментов требует знания внутреннего устройства протоколов и понимания структуры сетевой передачи. Однако полученная информация позволяет сделать ценные выводы о функционировании сетевых служб и обеспечить их стабильность и продуктивность.