Назад | Перейти на главную страницу

Как программно разобрать пакеты OpenFlow с помощью файла захвата tcpdump

Я работаю с пакетами OpenFlow и анализирую сеть через tcpdump.

В настоящее время я использую графический интерфейс WireShark для анализа сгенерированного файла захвата, и он действительно удовлетворяет мои потребности.

Однако мне было интересно, есть ли у WireShark API, чтобы то же самое можно было сделать с помощью сценария, а не графического интерфейса (по сути, я стремлюсь извлечь определенные параметры OpenFlow и автоматизировать процесс проверки моей системы)

Альтернативой WireShark в командной строке является tshark (по функциям аналогичный tcpdump).

Этот блог было достаточно, чтобы я начал.

Пример команды захвата tshark выглядит следующим образом (скажем, вы хотите отслеживать интерфейс eth0):

sudo tshark -i eth0

Мы также можем добавить фильтры захвата вместе с командой:

sudo tshark -i eth0 "port 6633"

Эта команда захватит весь трафик, поступающий на порт 6633 или с него (порт по умолчанию для контроллеров OpenFlow).

Просто захватить трафик недостаточно. Чтобы проанализировать захват с помощью программы, нам нужно сначала преобразовать захват в легко понятный формат. Введите XML.

sudo tshark -i eth0 -T pdml > dump.xml  

Это выводит файл захвата в виде XML-файла со всеми пакетами вместе с их различными атрибутами в виде тегов.

Впоследствии это можно проанализировать с помощью любого стандартного синтаксического анализатора xml.

Я подправил пару дополнительных вещей: отказался от «порта 6633». И добавлен параметр -n (адреса не разрешаются). Дополнительные пакеты, захваченные в результате, всегда могут быть отфильтрованы синтаксическим анализатором xml. Поскольку мое приложение придавало небольшое значение временным меткам различных пакетов, я не хотел вызывать дополнительных задержек из-за фильтрации / разрешения. Обратите внимание, что я могу ужасно ошибаться в своих рассуждениях здесь (это было просто догадкой). Каждый пакет имеет метку времени, добавляемую сетевым адаптером, когда устройство получает ее. Поэтому более чем вероятно, что использование таких уловок вообще не повлияет на метку времени.

Поэтому моя последняя команда была:

sudo tshark -n -i eth0 -T pdml > dump.xml

ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ. Если вы привыкли использовать WireShark для отладки пакетов OpenFlow, вы, вероятно, используете фильтр отображения: «of». Однако это не действительный фильтр захвата, который требуется tshark (фильтры захвата аналогичны тем, которые используются в tcpdump)

PS: Напишите мне, если вам нужен синтаксический анализатор xml (я использовал python)

Попробуйте просмотреть вывод:

sudo tshark -O openflow_v4 -i eth0 port <openflow port>

Вы можете просмотреть доступные протоколы с помощью этой команды:

~] tshark -G protocols | grep openflow
OpenFlow        openflow        openflow
OpenFlow 1.0    openflow_v1     openflow_v1
OpenFlow 1.3    openflow_v4     openflow_v4
OpenFlow 1.4    openflow_v5     openflow_v5