Эмуляция виртуального хоста для UDP-связи

Прежде всего, это вопрос не о виртуальном хосте в Apache.

У меня есть сеть со следующим адресом: 1.1.1.0

У меня в сети несколько хостов: 1.1.1.1, 1.1.1.2, 1.1.1.3 и 1.1.1.4

Первый хост отправляет широковещательный пакет UDP-ответа и ожидает, что другой хост ответит ему.

Может ли моя машина разработчика (1.1.1.4) эмулировать следующий виртуальный хост: 1.1.1.5, 1.1.1.6 и т. Д.?

Я использую QUdpSocket из Qt 5.2.1 на MacOS 10.9, но я Я открыт для любых других технологий, которые помогут мне в этом.


person Martin Delille    schedule 23.07.2014    source источник


Ответы (2)


Это зависит от вашей ОС.

В Linux вы можете создать несколько виртуальных сетевых устройств и привязать каждое из этих устройств к разному сетевому адресу. Виртуальные сетевые устройства имеют имя реального устройства с числовым суффиксом :xxx. Например, если ваше основное сетевое устройство eth0, вы можете запустить команду

ifconfig eth0:1 1.1.1.5

создать виртуальное устройство eth0:1 и привязать его к адресу 1.1.1.5. Это только временно (исчезнет при перезагрузке); если вы хотите, чтобы он вернулся при перезагрузке, вы можете отредактировать файл `/ etc / network / interfaces, чтобы он выглядел примерно так:

auto eth0
iface eth0 inet static
    address 1.1.1.4
    netmask 255.255.255.0
    gateway 1.1.1.1

auto eth0:1
    address 1.1.1.5
    netmask 255.255.255.0

Отсутствие gateway в части eth0:1 означает, что он не будет использовать этот интерфейс для маршрутизации, поэтому он существует только для приема пакетов и явной привязки к IP-адресу.

person Chris Dodd    schedule 23.07.2014
comment
Я попробую и расскажу, как это работает! Я думаю о скрипте с рубином! - person Martin Delille; 23.07.2014
comment
Это не работает в MacOS, но я нашел эквивалент здесь: stackoverflow.com/a/624660/118125 - person Martin Delille; 23.07.2014

Установите VirtualBox (здесь) и сделайте крошечный образ диска, достаточно большим для небольшого дистрибутива Linux. Запустите несколько копий, каждая по разному IP-адресу, и запустите крошечный скрипт netcat в каждом, который прослушивает и отправляет ответы.

#!/bin/bash
while :
do
   command=$(nc -ul 1234)
   process $command and reply
done

Или прочтите это и воспользуйтесь идеей Криса, которая требует меньше ресурсов!

person Mark Setchell    schedule 23.07.2014