Симулятор сетевого интерфейса

Я ищу симулятор сетевого интерфейса, который предлагает оба конца сети на одной машине (особенно для UDP).

То, как com0com работает для последовательных портов, но имитирует сетевую карту вместо последовательного порта.

Возможно ли такое поведение при творческом использовании существующего сетевого стека? (Переадресация портов или что-то в этом роде?) Или какая-то креативная конфигурация OpenVPN, L2TP/IPSec, SoftEther, PPTP и т. д.?

У меня есть программное обеспечение, которое я не могу изменить, которое привязывается к определенным портам UDP и отправляет исходящие сообщения на те же порты. Я хотел бы перехватывать и маршрутизировать эти сообщения, но я не могу сам привязываться к тем же портам, поскольку это программное обеспечение уже привязывается к ним.

Ответы (2)

Во-первых, он у вас уже есть практически на каждой платформе с сетевым интерфейсом. Это называется петлевым интерфейсом, и на самом деле это один из самых быстрых способов сделать что-то подобное. По умолчанию это предоставляет один адрес для всей системы, но на многих платформах, но если вы используете IPv4, вы можете добавить несколько адресов из блока 127.0.0.0/8, и в целом это будет работать правильно (к сожалению, вы не можете этого сделать). не делайте этого с IPv6, так как там зарезервирован только один адрес для использования обратной связи).

Однако есть несколько альтернативных вариантов, в зависимости от того, на какой системе вы работаете:

  • Интерфейсы программного моста. Во многих системах UNIX вы можете создавать мосты Ethernet в программном обеспечении, чтобы обеспечить прозрачное соединение между несколькими физическими интерфейсами. В большинстве таких систем вам фактически не нужно привязывать к ним какие-либо физические интерфейсы, и вы можете просто использовать мосты как частные внутренние сетевые интерфейсы.
  • Linux предоставляет специальный драйвер, который можно использовать буквально для того, чтобы делать именно то, что вы просите. Предоставляемые им виртуальные устройства известны как «устройства виртуальной пары Ethernet». Используя этот драйвер, вы получаете два сетевых интерфейса, которые имитируют канал Ethernet (с почти нулевой задержкой).
  • Многие операционные системы с современным сетевым стеком предоставляют специальный тип сетевого интерфейса, позволяющий приложению обеспечивать базовую эмуляцию сети. В большинстве систем они известны как интерфейсы tunи tap(разница в том, какой уровень они эмулируют), и они используются для самых разных целей, от интерфейсов VPN до эмуляции сети для виртуальных машин.
  • Немного необычно, но вы уже упомянули программное обеспечение для эмуляции последовательного порта, поэтому я упомяну его здесь: вы можете запускать PPP или SLIP по эмулируемому последовательному каналу. На самом деле это может быть одним из лучших вариантов, поскольку он должен предотвратить любые оптимизации ОС, которые могут помешать маршрутизации, которую вы хотите выполнить.
  • Как упомянул Лучио Круска, для этого можно использовать виртуальную машину, хотя я бы сказал, что это, вероятно, излишне для большинства систем (кроме Windows, потому что выполнение сложных сетевых операций вызывает головную боль).
  • VDE , также известный как виртуальный распределенный Ethernet, может подойти для того, что вам нужно. В основном он предназначен для предоставления эмулируемой сети Ethernet для виртуальных машин, которые физически расположены далеко друг от друга, но может работать и локально.
  • Open vSwitch , еще одна технология, ориентированная на виртуализацию, также может быть вам полезна.
Спасибо за порцию отличных идей! Нативное решение сетевого стека, такое как 127.0.0.0/8, было бы здорово: знаете, как это сделать? Я немного знаком с tun and tap из OpenVPN: можем ли мы сделать это каким-то родным способом? (Моя самая непосредственная забота - Windows, я обновлю свой тег Q.)
Вот кое-что об использовании драйвера OpenVPN tun , который, кажется, не работает для того, что они пытаются, но не ясно, будет ли он работать для UDP.
Я думаю , что вы можете делать то же самое, что и tunдрайверы и tapв Windows, используя встроенные драйверы (это то, что делает большинство предложений виртуальных машин в Windows), но это требует гораздо больше усилий.

Вы не сказали, какую ОС вы используете, в любом случае всегда можно установить виртуальную машину ( например, VirtualBox в Windows, qemu/KVM в Linux) и установить в нее свое программное обеспечение.

Оттуда у вас есть целая виртуальная сеть, куда вы можете добавить все виды виртуальных маршрутизаторов, которые вам нужны.

Спасибо! Я рассматривал виртуальную машину, но она довольно тяжеловесна только для драйвера Ethernet, и если она запускается при запуске машины, а затем запускает наше программное обеспечение, это кажется чем-то большим.
Если вы сравните это с хлопотами по настройке виртуальных интерфейсов под Windows, вам, вероятно, будет лучше с виртуализацией. Кстати, запуск виртуальной машины при загрузке довольно прост с VirtualBox или любой другой системой виртуализации, то же самое верно для вашего программного обеспечения в виртуальной машине...