Skip to content

A bridge that connects VPP (Vector Packet Processing) interfaces with Wireshark, enabling real-time packet capture and analysis. Supports remote monitoring via UDP and Unix sockets with a Wireshark extcap interface.

Notifications You must be signed in to change notification settings

wapxmas/vpp_wireshark_bridge

Repository files navigation

VPP to Wireshark Bridge

License GitHub release Maintenance

Мост между VPP (Vector Packet Processing, fd.io) и Wireshark, позволяющий просматривать трафик с интерфейсов VPP в Wireshark через интерфейс extcap, даже если VPP и Wireshark находятся на разных машинах.

English | Русский

🔄 VPP to Wireshark Bridge

📋 Содержание

🚀 Краткий обзор

VPP to Wireshark Bridge — это инструмент, позволяющий анализировать трафик интерфейсов VPP в Wireshark в реальном времени. Он состоит из трех компонентов:

  1. Плагин VPP - перехватывает трафик интерфейсов и отправляет его в мост
  2. VPP агент - предоставляет REST API для управления и информацию об интерфейсах
  3. Python мост - передает трафик от плагина VPP в Wireshark через extcap

🏗️ Архитектура

flowchart LR
    subgraph VPP_Machine["Машина с VPP"]
        VPP_Plugin["VPP Плагин"]
        VPP_Agent["VPP Agent"]
        
        VPP_Plugin <-- "Unix Socket" --> VPP_Agent
        VPP_Agent <-- "vppctl" --> VPP_Plugin
    end
    
    subgraph Wireshark_Machine["Машина с Wireshark"]
        Extcap_Bridge["Extcap Мост"]
        Wireshark["Wireshark"]
        
        Extcap_Bridge --> Wireshark
    end
    
    VPP_Agent <---> |"REST API"| Extcap_Bridge
    VPP_Agent --> |"UDP Трафик"| Extcap_Bridge
Loading
Пример захвата трафика в Wireshark

🔌 Типы соединений

Плагин VPP поддерживает два типа подключений для передачи перехваченных пакетов:

Тип соединения Описание Пример Рекомендуется для
TCP соединение Стандартное TCP соединение по IP и порту 192.168.1.100:9000 Обычное окружение
Unix сокеты Локальные Unix-сокеты для быстрой передачи /var/run/wireshark.sock VPP внутри отдельного namespace

📋 Требования

  • VPP (fd.io) 21.01 или выше
  • Wireshark 3.4 или выше
  • Python 3.6 или выше
  • Для Windows: pywin32 для поддержки именованных каналов

🚀 Быстрый старт

# 1. Клонировать репозиторий
git clone https://github.com/wapxmas/vpp_wireshark_bridge.git
cd vpp_wireshark_bridge

# 2. Установить зависимости
pip install -r vpp_agent/requirements.txt
pip install -r extcap_bridge/requirements.txt

# 3. Запустить VPP агент (на машине с VPP)
./vpp_agent/vpp_agent.py --host 0.0.0.0 --port 8080

# 4. Установить extcap мост для Wireshark (на машине с Wireshark)
# Подробные инструкции в разделе "Установка Python моста"

# 5. Открыть Wireshark и выбрать интерфейс VPP для захвата

📦 Установка

Установка плагина VPP

  1. Скопируйте директорию vpp_plugin/wireshark_bridge в директорию src/plugins вашего исходного кода VPP.
  2. Добавьте wireshark_bridge в список плагинов в файле src/plugins/CMakeLists.txt:
    add_subdirectory(wireshark_bridge)
  3. Пересоберите VPP:
    make build
    make install

Установка VPP агента

  1. Скопируйте директорию vpp_agent на машину с VPP.
  2. Установите необходимые зависимости:
    pip install -r vpp_agent/requirements.txt
  3. Сделайте файл агента исполняемым:
    chmod +x vpp_agent/vpp_agent.py
  4. Запустите агент:
    ./vpp_agent/vpp_agent.py --host 0.0.0.0 --port 8080 --debug

Параметры запуска VPP агента

Параметр Описание Значение по умолчанию
--host IP IP-адрес для прослушивания 0.0.0.0
--port PORT Порт для прослушивания 8080
--debug Включить детальное логирование False
--vppcmd COMMAND Команда для взаимодействия с VPP vppctl
--unix-socket PATH Путь к Unix-сокету для прокси-соединения None
--bridge-address ADDR Адрес моста для прокси-соединения None

Установка Python моста

Инструкция для Linux
# Создание отдельного каталога для Python скрипта и виртуального окружения
mkdir -p ~/vpp_wireshark_bridge
cp extcap_bridge/vpp_extcap_bridge.py ~/vpp_wireshark_bridge/
cd ~/vpp_wireshark_bridge/
python3 -m venv .env
source .env/bin/activate
pip install -r /путь/к/extcap_bridge/requirements.txt
deactivate

# Копирование wrapper-скрипта в директорию extcap
# Для x86_64 архитектуры:
sudo cp extcap_bridge/vpp_bridge_wrapper.sh /usr/lib/wireshark/extcap/
sudo chmod +x /usr/lib/wireshark/extcap/vpp_bridge_wrapper.sh

# Для ARM64 архитектуры:
sudo cp extcap_bridge/vpp_bridge_wrapper.sh /usr/lib/aarch64-linux-gnu/wireshark/extcap/
sudo chmod +x /usr/lib/aarch64-linux-gnu/wireshark/extcap/vpp_bridge_wrapper.sh
Инструкция для macOS
# Создание отдельного каталога для Python скрипта и виртуального окружения
mkdir -p ~/vpp_wireshark_bridge
cp extcap_bridge/vpp_extcap_bridge.py ~/vpp_wireshark_bridge/
cd ~/vpp_wireshark_bridge/
python3 -m venv .env
source .env/bin/activate
pip install -r /путь/к/extcap_bridge/requirements.txt
deactivate

# Копирование wrapper-скрипта в директорию extcap
sudo cp extcap_bridge/vpp_bridge_wrapper.sh /Applications/Wireshark.app/Contents/MacOS/extcap/
sudo chmod +x /Applications/Wireshark.app/Contents/MacOS/extcap/vpp_bridge_wrapper.sh
Инструкция для Windows
REM Создание отдельного каталога для Python скрипта и виртуального окружения
mkdir "%USERPROFILE%\vpp_wireshark_bridge"
copy extcap_bridge\vpp_extcap_bridge.py "%USERPROFILE%\vpp_wireshark_bridge\"
cd "%USERPROFILE%\vpp_wireshark_bridge"
python -m venv .env
.env\Scripts\activate
pip install -r путь\к\extcap_bridge\requirements.txt
deactivate

REM Копирование wrapper-скрипта в директорию extcap
copy extcap_bridge\vpp_bridge_wrapper.bat "%APPDATA%\Wireshark\extcap\"

🔧 Использование

Прямое управление через vppctl

Примеры команд vppctl
# Включение передачи трафика для интерфейса через TCP сокет (IP:порт)
vppctl wireshark bridge enable GigabitEthernet0/0/0 192.168.1.100:9000

# Включение передачи трафика для интерфейса через Unix сокет
vppctl wireshark bridge enable GigabitEthernet0/0/0 /var/run/wireshark.sock

# Включение передачи только входящего трафика через TCP сокет
vppctl wireshark bridge enable GigabitEthernet0/0/0 192.168.1.100:9000 rx

# Отключение передачи трафика для интерфейса
vppctl wireshark bridge disable GigabitEthernet0/0/0

# Просмотр статистики передачи трафика
vppctl wireshark bridge stats

Запуск VPP агента

# На машине с VPP
./vpp_agent/vpp_agent.py --host 0.0.0.0 --port 8080 --debug

Использование в Wireshark

  1. Запустите Wireshark.
  2. В списке интерфейсов вы увидите интерфейсы VPP.
  3. Выберите нужный интерфейс.
  4. Нажмите "Start" для начала захвата пакетов.

Управление через REST API

Примеры запросов REST API
# Получение списка интерфейсов
curl http://vpp-host:8080/interfaces

# Включение передачи трафика через TCP сокет (оба направления)
curl -X POST -H "Content-Type: application/json" -d '{"interface":"GigabitEthernet0/0/0","bridge_address":"wireshark-host:9000","direction":"both"}' http://vpp-host:8080/enable

# Отключение передачи трафика
curl -X POST -H "Content-Type: application/json" -d '{"interface":"GigabitEthernet0/0/0"}' http://vpp-host:8080/disable

# Получение статистики
curl http://vpp-host:8080/stats

🐞 Отладка

Отладка VPP агента
./vpp_agent/vpp_agent.py --debug

Логи сохраняются в стандартный вывод.

Отладка Python моста
python3 extcap_bridge/vpp_extcap_bridge.py --debug --vpp-host=vpp-host --vpp-port=8080 --direction=both --capture --interface=vpp_1 --fifo=/tmp/wireshark_pipe

Логи сохраняются в файл vpp_extcap_bridge.log в директории временных файлов.

Инструменты отладки

UDP Listener (utils/udp_listener.py) - утилита для приема и отображения UDP-пакетов:

python3 utils/udp_listener.py --port 9000 --show-hex

❓ Часто задаваемые вопросы (FAQ)

Q: Как проверить, что VPP агент работает корректно?

A: Выполните запрос к API для получения списка интерфейсов:

curl http://vpp-host:8080/interfaces

Вы должны увидеть список доступных интерфейсов VPP.

Q: Какое минимальное влияние на производительность VPP оказывает плагин?

A: Плагин оптимизирован для минимального влияния на основную функциональность VPP. В наших тестах производительность снижается не более чем на 1-2% при включенном плагине.

Q: Поддерживается ли захват трафика на виртуальных интерфейсах?

A: Да, плагин поддерживает захват трафика на всех типах интерфейсов VPP, включая виртуальные.

🔧 Устранение неполадок

Проблема: Интерфейсы VPP не отображаются в Wireshark

Решение:

  1. Убедитесь, что VPP агент запущен и доступен по сети.
  2. Проверьте путь к скрипту в wrapper-файле.
  3. Проверьте настройки брандмауэра.
  4. Перезапустите Wireshark.
Проблема: Пакеты не передаются от VPP к Wireshark

Решение:

  1. Убедитесь, что передача трафика включена для выбранного интерфейса.
  2. Проверьте, что на интерфейсе есть активный трафик.
  3. Проверьте доступность UDP-соединения между машинами.
  4. Проверьте логи VPP агента и моста.
Проблема: UDP-пакеты блокируются на Windows

Решение: Добавьте правило брандмауэра, разрешающее входящий UDP-трафик:

netsh advfirewall firewall add rule name="Allow UDP Port 9000" dir=in action=allow protocol=UDP localport=9000

💻 Вклад в проект

Вклады приветствуются! Пожалуйста, следуйте этим шагам:

  1. Форкните репозиторий
  2. Создайте ветку для вашей фичи (git checkout -b feature/amazing-feature)
  3. Зафиксируйте изменения (git commit -m 'Add amazing feature')
  4. Отправьте изменения в вашу ветку (git push origin feature/amazing-feature)
  5. Откройте Pull Request

Более подробную информацию см. в файле CONTRIBUTING.md.

👥 Авторы

Смотрите также список участников, которые внесли свой вклад в этот проект.

📄 Лицензия

Этот проект лицензирован под Apache License 2.0 - см. файл LICENSE для подробностей.


🌟 Поставьте звезду на GitHub и следите за обновлениями! 🌟

About

A bridge that connects VPP (Vector Packet Processing) interfaces with Wireshark, enabling real-time packet capture and analysis. Supports remote monitoring via UDP and Unix sockets with a Wireshark extcap interface.

Topics

Resources

Code of conduct

Stars

Watchers

Forks