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. Некоторые из них могут, например, молча отбрасывать пакеты, отправленные на неисправный интерфейс, а не сообщать об ошибке, и он может использовать один из этих механизмов.