Скрипт Net2axis
Оглавление
Скачать статью в формате PDF 

Вам доступна статья в формате PDF

 

Аннотация

При разработке устройств на FPGA часто возникает необходимость симуляции сетевого трафика. Избавиться от столь рутинной процедуры вам поможет скрипт Net2axis.

Описание работы

Данный скрипт позволяет генерировать AXI-Stream пакеты из файлов *.pcap (packet capture). Файлы pcap можно получить захватив сетевой трафик например с помощью Wireshark/tcpdump либо воспользовавшись конструктором пакетов PackEth.
Для запуска Net2axis необходим Python 2.7.X и Scapy 2.X. Работа скрипта сводится к двум этапам:
  1. Файл *.pcap при помощи net2axis.py конвертируется в *.dat;
  2.  Полученный файл подключается к AXI-Stream генератору net2axis_master.v

Демонстрация работы

Чтобы продемонстрировать работу скрипта захватим несколько пакетов ping(протокол ICMP). Запускаем Wireshark и выбираем активный сетевой интерфейс в меню Capture ->  Options, затем жмем Start
Во время процедуры захвата пакетов я отправил несколько ping-запросов к моему роутеру, после чего остановил Wireshark выполнив команду Capture -> Stop.
Чтобы из всех захваченных пакетов отобразить только интересующие нас ICMP я задал фильтр следующего содержания:

icmp && ip.dst==192.168.0.1

Экспортируем отфильтрованные пакеты в файл ping.pcap, для этого в меню File выбираем Export Specified Packets
 
Теперь можно запустить скрипт Net2axis. Сейчас в моем распоряжении ноутбук с Windows 10 и установка scapy предвещает танцы с бубном, поэтому я воспользовался эмулятором Ubuntu 18.04 из Microsoft  Store. Сразу после установки эмулятора открываем проводник, переходим в директорию, в которую ранее сохранили файл ping.pcap и с зажатым shift вызываем контекстное меню.

В появившемся окне терминала, выполняем серию команд для установки scapy:

sudo apt-get update
sudo apt-get install python-scapy


Клонируем репозиторий Net2axis:

git clone https://github.com/lucasbrasilino/net2axis

Конвертируем ping.pcap в ping.dat:

mv ping.pcap ./net2axis/tool
cd ./net2axis/tool
python net2axis.py -w 64 -i 100 -d 100 ping.pcap


Рассмотрим параметры скрипта:
  • -w ширина axi-stream;
  • -i задержка в тактах с момента снятия сигнала сброса до передачи первого пакета;
  • -d задержка в тактах между последующими пакетами;
В директории /tool появился файл ping.dat, который можно использовать при симуляции. Обзорный тестбенч находится в директории sim, сам генератор пакетов расположен в директории hdl. После запуска симуляции я получил такую временную диаграмму:
 
 

Расширяем функционал

Пока писал этот текст возникла идея реализовать скрипт с обратным функционалом(axi-stream -> *.pcap). Первым делом добавим в симуляцию блок, который будет сохранять каждый принятый пакет в виде новой hex-строки. У меня получился такой код:


Теперь дело за малым - реализовать python-скрипт, который будет конвертировать полученный текстовый файл в формат *.pcap:


Сохраняем скрипт в файл axis2net.py, размещаем его в одной директории с файлом outp.txt и запускаем командой:

python axis2net.py

После запуска должен появиться файл outp.pcap, который отлично открывается при помощи wireshark. Я использовал всё ту же scapy, на удивление эта библиотека оказалась простой и функциональной. На хабре есть хорошая статья про данную библиотеку - рекомендую ознакомиться.
На этой ноте завершаю свой обзор, благодарю за внимание! 
P.S. Хочу обратиться к сообществу FPGA-Systems. На просторах сети много достойных проектов, о которых знают не все. Если вы нашли что-то полезное - напишите небольшой обзор, думаю многие будут благодарны.


Скачать статью в формате PDF 

Вам доступна статья в формате PDF


 

Источник: https://github.com/lucasbrasilino/net2axis
Категория: Интерфейсы | Добавил: 0xBADC0FFE (15.12.2019)
Просмотров: 418 | Теги: axi-stream, Ethernet, net2axis | Рейтинг: 0.0/0
Всего комментариев: 0
avatar