pcap_inject на отключенном интерфейсе

Я пытаюсь реализовать воспроизведение пакетов, хранящихся в файлах.pcap, используя libpcap. Процесс очень прост: я бы открыл файл pcap с помощью 'pcap_open_offline', а затем передал пакеты на устройство, открытое с pcap_open_liveи отправить их с pcap_inject через интерфейс.

Теперь к NIC не подключен кабель Ethernet. я знаю это pcap_open_live не скажу, поддерживает ли открытое устройство отправку, поэтому я получаю ошибки от pcap_inject (errno 100). Этого следовало ожидать? Если я просто использую tcpreplay из строки cmd, он завершится и не выдаст ошибку, с подключенным кабелем Ethernet или без него.

Кто-нибудь знает, как tcpreplay/tcpedit обрабатывает "мертвые" интерфейсы? Переписывает ли tcpreplay заголовки пакетов, а я пытаюсь отправить их необработанными? Любая помощь приветствуется!

Я нахожусь на Ubuntu 14.04, и интерфейс является безадресным и в режиме promisc:

auto eth1
iface eth1 inet manual
    up ifconfig eth1 promisc up
    down ifconfig eth1 promisc down

1 ответ

Решение

Теперь к NIC не подключен кабель Ethernet.

Тогда какой полезный результат вы ожидаете получить, отправляя пакеты на этот сетевой адаптер?

я знаю это pcap_open_live не скажет, поддерживает ли открытое устройство отправку

Работает ли устройство или нет, может со временем измениться, поэтому любой ответ вы получите от pcap_open_live() может быть неправильным к тому времени, когда вы на самом деле пытаетесь отправить пакет.

поэтому я получаю ошибки от pcap_inject (errno 100)

Поиск 100 в Linux errno.h показывает:

#define ENETDOWN    100 /* Network is down */

Я думаю, что сети Linux не нравится, когда люди пытаются отправлять пакеты через интерфейс, который не работает send() системный вызов, что делает libpcap.

Этого следовало ожидать?

Да.

Если я просто использую tcpreplay из строки cmd, она заканчивается и не выдает ошибок

tcpreplay имеет целый ряд различных механизмов, которые он использует для отправки пакетов. Увидеть sendpacket() в sendpacket.c исходный файл в исходном коде tcpreplay. Некоторые из них могут, например, молча отбрасывать пакеты, отправленные на неисправный интерфейс, а не сообщать об ошибке, и он может использовать один из этих механизмов.

Другие вопросы по тегам