Я пытаюсь написать программу для моделирования некоторых виртуальных сетевых интерфейсов. Моя программа работает на компьютере с Linux, обозначенном A, подключенном к маршрутизатору, обозначенном R, и A имеет один физический сетевой интерфейс eth0
с адресом IPv4, скажем, 192.168.1.2
. Моя программа может получать несколько разных IPv4-адресов от маршрутизатора через DHCP, скажем, 192.168.1.3
, 192.168.1.4
, ... (я сделал эту часть, придумав виртуальный MAC-адрес). Что мне нужно сделать дальше, это когда другой физический компьютер, обозначенный B, который также подключен к маршрутизатору R < / strong> пытается установить связь с одним из IPv4-адресов, полученных моей программой (а не с тем, который назначен физическому интерфейсу eth0
из A), скажем, 192.168.1.3
B должно показаться, что 192.168.1.3
является "настоящим" сетевым интерфейсом. Например, если B ping 192.168.1.3
, он должен иметь возможность получить ответ от 192.168.1.3
(даже если пакет действительно проходит через A физический сетевой интерфейс eht0
). Кроме того, моя программа должна иметь возможность извлекать IP-пакет на виртуальном интерфейсе, где принимается весь пакет.
Другими словами, то, что моя программа хочет выполнить, похоже на «мостовую сеть» в виртуальных машинах, таких как VirutalBox или VMWare Player.
Подскажите, пожалуйста, с чего мне начать? Стоит ли использовать TAP? Есть ли какие-нибудь библиотеки, которые я мог бы использовать? Или я должен просто создать сокет канального уровня для моей цели? (Я прочитал «Datalink Access» в книге Ричарда Стивенса о сетевом программировании Unix, но эта информация не совсем подробная.) Спасибо, Том