Как отправить пакет в ядро?

У меня есть два интерфейса в моей системе Linux - eth0 и eth1. Я открыл необработанный сокет на eth0 и слушаю его для входящих пакетов. Когда пакет приходит от eth0, я пересылаю его на eth1 после изменения заголовка ethernet (в частности, MAC-адреса назначения на MAC-адрес eth1). Теперь пакет должен быть принят интерфейсом и отправлен ядру для дальнейшей обработки и, в конечном итоге, ожидающему его приложению. Но по какой-то причине пакет достигает eth1 (как я вижу из wireshark), но приложение не получает его (приложение отправляет запрос, и я не вижу ответ на запрос проверки связи).

Как мне отправить пакет в eth1 так, чтобы он был принят и отправлен в ядро?

1 ответ

Возможно, здесь есть недоразумение:

Если вы отправляете пакет через необработанный сокет на интерфейсе, в вашем случае eth1, он не будет рассматриваться как локальный для ядра, независимо от его mac-адреса, но оставит интерфейс для сети (со своим собственным mac-адресом). адрес в качестве пункта назначения). Это то, что вы наблюдаете с wireshark.

Если вы хотите, чтобы пакет обрабатывался вашим ядром, отправьте его в lo-interface (Loopback-interface), который специально предназначен для этой цели.

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