Как анализировать пакеты OpenFlow с помощью файла захвата tcpdump программно
Я работаю с пакетами OpenFlow и анализирую сеть через tcpdump.
В настоящее время я использую графический интерфейс WireShark для анализа сгенерированного файла захвата, и он удовлетворяет мои потребности.
Однако мне было интересно, есть ли у WireShark API, чтобы то же самое можно было сделать с помощью сценария, а не с помощью графического интерфейса пользователя (я по сути стремлюсь извлечь определенные параметры OpenFlow и автоматизировать процесс проверки моей системы)
2 ответа
Альтернативой командной строке 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