Мост между VPP (Vector Packet Processing, fd.io) и Wireshark, позволяющий просматривать трафик с интерфейсов VPP в Wireshark через интерфейс extcap, даже если VPP и Wireshark находятся на разных машинах.
English | Русский
- Краткий обзор
- Особенности
- Архитектура
- Типы соединений
- Требования
- Быстрый старт
- Установка
- Использование
- Отладка
- Часто задаваемые вопросы (FAQ)
- Устранение неполадок
- Вклад в проект
- Авторы
- Лицензия
VPP to Wireshark Bridge — это инструмент, позволяющий анализировать трафик интерфейсов VPP в Wireshark в реальном времени. Он состоит из трех компонентов:
- Плагин VPP - перехватывает трафик интерфейсов и отправляет его в мост
- VPP агент - предоставляет REST API для управления и информацию об интерфейсах
- 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
Плагин 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_plugin/wireshark_bridge
в директориюsrc/plugins
вашего исходного кода VPP. - Добавьте
wireshark_bridge
в список плагинов в файлеsrc/plugins/CMakeLists.txt
:add_subdirectory(wireshark_bridge)
- Пересоберите VPP:
make build make install
- Скопируйте директорию
vpp_agent
на машину с VPP. - Установите необходимые зависимости:
pip install -r vpp_agent/requirements.txt
- Сделайте файл агента исполняемым:
chmod +x vpp_agent/vpp_agent.py
- Запустите агент:
./vpp_agent/vpp_agent.py --host 0.0.0.0 --port 8080 --debug
Параметр | Описание | Значение по умолчанию |
---|---|---|
--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 |
Инструкция для 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
# Включение передачи трафика для интерфейса через 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_agent/vpp_agent.py --host 0.0.0.0 --port 8080 --debug
- Запустите Wireshark.
- В списке интерфейсов вы увидите интерфейсы VPP.
- Выберите нужный интерфейс.
- Нажмите "Start" для начала захвата пакетов.
Примеры запросов 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
Q: Как проверить, что VPP агент работает корректно?
A: Выполните запрос к API для получения списка интерфейсов:
curl http://vpp-host:8080/interfaces
Вы должны увидеть список доступных интерфейсов VPP.
Q: Какое минимальное влияние на производительность VPP оказывает плагин?
A: Плагин оптимизирован для минимального влияния на основную функциональность VPP. В наших тестах производительность снижается не более чем на 1-2% при включенном плагине.
Q: Поддерживается ли захват трафика на виртуальных интерфейсах?
A: Да, плагин поддерживает захват трафика на всех типах интерфейсов VPP, включая виртуальные.
Проблема: Интерфейсы VPP не отображаются в Wireshark
Решение:
- Убедитесь, что VPP агент запущен и доступен по сети.
- Проверьте путь к скрипту в wrapper-файле.
- Проверьте настройки брандмауэра.
- Перезапустите Wireshark.
Проблема: Пакеты не передаются от VPP к Wireshark
Решение:
- Убедитесь, что передача трафика включена для выбранного интерфейса.
- Проверьте, что на интерфейсе есть активный трафик.
- Проверьте доступность UDP-соединения между машинами.
- Проверьте логи VPP агента и моста.
Проблема: UDP-пакеты блокируются на Windows
Решение: Добавьте правило брандмауэра, разрешающее входящий UDP-трафик:
netsh advfirewall firewall add rule name="Allow UDP Port 9000" dir=in action=allow protocol=UDP localport=9000
Вклады приветствуются! Пожалуйста, следуйте этим шагам:
- Форкните репозиторий
- Создайте ветку для вашей фичи (
git checkout -b feature/amazing-feature
) - Зафиксируйте изменения (
git commit -m 'Add amazing feature'
) - Отправьте изменения в вашу ветку (
git push origin feature/amazing-feature
) - Откройте Pull Request
Более подробную информацию см. в файле CONTRIBUTING.md.
- Сергей Яшин - Начальная работа - GitHub профиль
Смотрите также список участников, которые внесли свой вклад в этот проект.
Этот проект лицензирован под Apache License 2.0 - см. файл LICENSE для подробностей.