Я работаю над устройством захвата и отметки времени на основе FPGA. Чтобы проверить это, я хочу попробовать пропинговать его. На моем компьютере установлены два двухпортовых сетевых адаптера 10G, и у меня есть 3 подключенных порта: один - «отслеживаемый» порт, где пакеты собираются в обоих направлениях, один - «сквозной» порт, который подключен к «контролируемому» порту, и третий - порт «дампа», куда отправляются захваченные и помеченные временем пакеты.

Вывод ip addr с удалением ненужной информации:

3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 00:60:dd:xx:xx:f8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.99.1/24 scope global enp4s0
       valid_lft forever preferred_lft forever
    inet6 fe80::260:ddff:fexx:xxf8/64 scope link 
       valid_lft forever preferred_lft forever
5: enp6s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 90:e2:ba:xx:xx:e0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::92e2:baff:fexx:xxe0/64 scope link 
       valid_lft forever preferred_lft forever
6: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 00:60:dd:xx:xx:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.99.2/24 scope global enp5s0
       valid_lft forever preferred_lft forever
    inet6 fe80::260:ddff:fexx:xxf9/64 scope link 
       valid_lft forever preferred_lft forever
7: enp6s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 90:e2:ba:xx:xx:e1 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::92e2:baff:fexx:xxe1/64 scope link 
       valid_lft forever preferred_lft forever

enp4s0 и enp5s0 - это контролируемые порты, а enp6s0f1 - порт захвата. Я назначил адреса 192.168.99.1/24 и 192.168.99.2/24 для интерфейсов enp4s0 и enp5s0. У меня работает 3 экземпляра Wireshark, по одному на каждом интерфейсе.

Если я открываю необработанный сокет в Python и отправляю некоторые данные, я вижу это, как и ожидалось, во всех трех экземплярах wireshark. Однако, когда я запускаю ping (ping -I enp4s0 192.168.99.2), он «работает» (без потери пакетов), но ни в одном из примеров wireshark ничего не появляется. Я попытался добавить адреса в таблицу ARP с правильными интерфейсами, но все еще без кубиков. Мое предположение состоит в том, что, поскольку ядро может видеть адрес назначения на другом интерфейсе, пакеты никогда фактически не отправляются на сетевой адаптер для подключения к сети. Есть ли какой-нибудь простой способ заставить пакеты на самом деле выходить на провод без необходимости прыгать через 500 обручей и обходить iptables, NAT и т.д.?

0