#1 31-07-2012 06:42:15

Помогите разобраться с virtual lan

Есть необходимость эмулировать для разных приложений на одном компьютере разные ip и mac, будто эти приложения находятся в локальной сети на разных компьютерах, и выходят в инет через данный. Немного почитал про стек протокола tcp/ip вся разница в пакетах в том что к сетевому пакету добавляется дополнительная dword метка, следующего содержания:

-TPID (Tag Protocol Identifier) – идентификатор протокола маркировки. Определяет протокол, использующийся для маркировки кадра. Идентификатор протокола 802.1Q – 0x8100. Размер этого поля равен 16 битам.
-Priority – задает приоритет передаваемого трафика. Используется стандартом IEEE 802.1p. Размер – 3 бита.
-CFI (Canonical Format Indicator) – индикатор канонического формата. Проще говоря, задает формат MAC-адреса: 1 – канонический, 0 – не канонический. Размер поля – всего 1 бит.
-VID (VLAN Identifier) – задает индикатор виртуальной сети. Указывает, к какой виртуальной сети принадлежит кадр. Размер – 12 бит.

Чтобы принимать(ну и конечно же отправлять) данные пакеты необходимо написать драйвер - парсер всех пакетов, в высокоуровневом программировании такие маркированые пакеты можно фиксировать переведя сокет в неблокирующий режим, меня интересует, и это является главным вопросом, какой именно драйвер писать, нужна кросплатформенность xp/vista/7/8(на недалекое будующее), хотел было остановится на фильтре-хуке как самом простом в реализации задуманного но в DDK по поводу него написано

drivers are supported only on Microsoft Windows XP with Service Pack 2 (SP2) and Windows 2003 Server with Service Pack 1 (SP1).
Note  Starting with Windows Vista, do not implement filter-hook or firewall-hook drivers. Use Windows Filtering Platform Callout Drivers instead.

то есть однозначно не сказано что он не будет работать, но настоятельно рекомендуют использовать плюшки самой ОСи, а хотелось бы по уму все сделать... остается 2 варианта ndis protocol driver и ndis miniport driver, что выбрать и куда двигатся дальше? к тому же если мне не изменят память оба этих драйвера требуют перезапуск сетевого адаптера, что приведет к дисконекту соединения с интернетом, а этого хотелось бы избежать, как вариант прописать в автозагрузку при запуске системных служб или винды, но хотелось бы иметь возможность горячей установки через ZwLoadDriver

Вне форума

#2 31-07-2012 07:47:33

Re: Помогите разобраться с virtual lan

Вы уверены, что копаете в нужную сторону? Чтоб ваш комп мог работать в сети, выдавая на интерфейс тегированные вланы, необходимо, чтоб коммутатор, к которому подключен комп, был осведемолен о наличии этих вланов на порту и о их тегированности. И вообще в данном случае адреса в разных вланах должны принадлежать к разным IP-подсетям (то есть, не перекрываться при наложении их масок), и соответственно никак не могут быть принадлежащими к одной и той же локальной сети.

Судя по описанию вашей задачи, нужно что-то другое, не вланы.

Вне форума

#3 31-07-2012 08:44:00

Re: Помогите разобраться с virtual lan

Судя по описанию вашей задачи, нужно что-то другое, не вланы

Наверное так и есть, я слабо знаком с сетью, вот более подробное описание задачи:
Есть приложение П, приложение пользуется интернетом, причем 1 приложение П на 1 комп, при запуске второго экземпляра матерится что 1 соеденение на 1 комп и соответственно второе окно П бездействует пока не отключу первое; запускаю экземпляр П на ноуте в домашней локалке и на стационаре - все работает и на стационаре и на ноуте одновременно, вот мне и нужно сделать эмуль для второго экземпляра П на стационаре будто он находится на другом компе в локалке.
ЗЫ: сервер с которым общается П сам определяет есть ли с этого компа другие соед. или нет, причем определяет штатными средствами - это железно, и проверено, никаких трюков например с отправкой конфига железа данного компа нет :)
Проверено очень просто: отснифал все пакеты на ноуте и стационаре - совпадение 100%

Отредактировано Aieks (31-07-2012 08:47:40)

Вне форума

#4 31-07-2012 09:57:59

Re: Помогите разобраться с virtual lan

А вы уверены, что проверка единственности экземпляра приложения осуществляется через сетевые атрибуты, а не другими средствами? Скажем, hPrevInstance винмейна, или, например, регистрация класса окна, или создание именованного объекта (пайпа или еще чего) - способов ведь много.

Вне форума

#5 31-07-2012 09:59:03

Re: Помогите разобраться с virtual lan

Вот интересно, как себя ведет приложение П, будучи запущенным в основной операционной системе и одновременно в виртуалке на этой же системе?

Отредактировано Dmitry_Milk (31-07-2012 09:59:16)

Вне форума

#6 31-07-2012 11:36:24

Re: Помогите разобраться с virtual lan

В виртуалке тоже работает нормально, защиты на запуск/работу П нет, вы можете запустить хоть 50 копий, но работать будет только та, в которой вы первой нажмете кнопку Коннект, при этом вы можете вручную отключить соеденение например в П1, и в_уже_запущенной_до_этого_копии_П2 сможете подключится без всяких проблем, то есть перезапуск приложения не требуется

ЗЫ: Виртуалку не предлагать, приложение кушает от 1 до 2,8Гб оперативы, с памятью будут проблемы...
ЗЗЫ: А вообще это видео-редактор, у него есть функция распределенного рендеринга в своем облаке, но к облаку можно подключится по условию 1 комп - 1 соединение

Вне форума

#7 31-07-2012 12:17:49

Re: Помогите разобраться с virtual lan

Открывается порт какой-нибудь 23456, и слушается. Вторая копия пытается открыться на этом же порту. Обнаруживает наличие коннекта в 1-й и отваливается. То есть ее не облако футболит - она сама себя футболит, обнаружив существующее подключение.

Это надо извратится, и подсунуть каждой копии по своей сетевой, чтоб вторую не видели. Там в опциях нет нигде выбора сетевого адаптера?

Вне форума

#8 31-07-2012 12:42:05

Re: Помогите разобраться с virtual lan

нет, таких настроек нет... ну а "изврат"... зря я штоли на програмера учусь, сие извращение неплохо поднимет мой скил "программирование", да и понимание работы винды в целом... вообщем попробую, оно того стоит )

Вне форума

#9 31-07-2012 13:17:04

Re: Помогите разобраться с virtual lan

В виртуалке тоже работает нормально

Нет, я имел в виду что одна копия запущена напрямую, а вторую вы пытаетесь запустить уже в виртуалке. Сможет законнектиться или нет?

Отредактировано Dmitry_Milk (31-07-2012 13:28:56)

Вне форума

#10 31-07-2012 13:21:34

Re: Помогите разобраться с virtual lan

Открывается порт какой-нибудь 23456, и слушается. Вторая копия пытается открыться на этом же порту. Обнаруживает наличие коннекта в 1-й и отваливается....Это надо извратится, и подсунуть каждой копии по своей сетевой

Если проверяется именно таким образом (через открытие конкретного порта), то достаточно на сетевой карте прописать параллельно несколько адресов (через "дополнительно" в свойствах TCP/IP), а в каждом конкретном вызове bind указывать не INADDR_ANY, а один конкретный из этих адресов.

Вне форума

Board footer

Работает на FluxBB.
Перевод FluxBB RU.