Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 59

Тема: Эмуляция сети

  1. #1
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,178
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Эмуляция сети

    Цитата Сообщение от Error404 Посмотреть сообщение
    Ethernet заэмулировали
    Ну, снаружи эмулятора я могу WinPcap подключить, а какое железо внутри эмулировать? Надеюсь, не на уровне электрических сигналов Tx/Rx витой пары?
    Хотя, WinPcap позволяет только слушать, надо будет ещё какой-то пакетный фильтр найти, с возможностью отправки...

    ---------- Post added at 18:37 ---------- Previous post was at 18:08 ----------

    Есть ещё TAP win32 driver из OpenVPN, но с ним тоже разбираться надо. К тому-же, этот драйвер ещё сначала инсталлировать надо.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Ну, снаружи эмулятора я могу WinPcap подключить, а какое железо внутри эмулировать? Надеюсь, не на уровне электрических сигналов Tx/Rx витой пары?
    Хотя, WinPcap позволяет только слушать, надо будет ещё какой-то пакетный фильтр найти, с возможностью отправки...

    ---------- Post added at 18:37 ---------- Previous post was at 18:08 ----------

    Есть ещё TAP win32 driver из OpenVPN, но с ним тоже разбираться надо. К тому-же, этот драйвер ещё сначала инсталлировать надо.
    Эмулируй любой чип, реализующий MAC+PHY. В его типовом включении (только чтобы без всяких ДМА, т.к. на реале такое не полетит). Здесь самое сложное не чип эмулировать или какие-то конкретные порты (а посему не сложно и другие аналогичные чипы эмулировать когда один любой отладишь), а движок самого эмулятора, реализующий физику LAYER2 и ниже. Ведь надо "выпустить" твой виртуальный адаптер эмулятора во внешнюю сеть, чтобы оно нормально коммуницировало с прочим сетевым оборудованием. Чтобы Z80-код IP-стека, выполняемый в эмуляторе, нормально обменивался с прочими хостами в реальной сети.
    И да, WinPcap не годится. Полгода назад когда я это обдумывал, ничего более подходящего чем TAP от OpenVPN мне не придумывалось (чтобы уже не всё писать самому, что совершенно неподъемно, а использовать что-то готовое).
    Последний раз редактировалось Error404; 12.02.2011 в 17:34.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  4. #3
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,178
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Здесь самое сложное не чип эмулировать или какие-то конкретные порты (а посему не сложно и другие аналогичные чипы эмулировать когда один любой отладишь), а движок самого эмулятора, реализующий физику LAYER2 и ниже. Ведь надо "выпустить" твой виртуальный адаптер эмулятора во внешнюю сеть, чтобы оно нормально коммуницировало с прочим сетевым оборудованием.
    Я с TAP от OpenVPN не разбирался, но по-моему он как раз и реализует "физику LAYER2 и ниже", раз уж это виртуальный сетевой адаптер. Как я полагаю, он позволяет отправлять и принимать "сырые" пакеты. А это именно то, что и будет считано/передано через порты "виртуального" чипа внутри эмулятора.

  5. #4
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Я с TAP от OpenVPN не разбирался, но по-моему он как раз и реализует "физику LAYER2 и ниже", раз уж это виртуальный сетевой адаптер. Как я полагаю, он позволяет отправлять и принимать "сырые" пакеты. А это именно то, что и будет считано/передано через порты "виртуального" чипа внутри эмулятора.
    Да. Только всю эту "физику" надо правильно настроить (тот самый виртуальный коммутатор TAP-адаптеров, который надо не только сам настроить, но еще и настроить для него роутер во внешнюю - реальную - сеть). Также надо API, через которое ты с этим адаптером будешь общаться из эмулятора - под NT и ее клонами работать с устройствами такого класса можно только из драйвера, никак не из приложений. То есть нужен драйвер. Я там тому назад предлагал для этого пользоваться драйвером NDIS (конкретно - уже готовый ndisprot, пример использования есть).

    Таким образом, как минимум нужна методичка объясняющая назначение всех этих подсистем, и как все это инсталлировать и настраивать, т.к. пользователи, просящие "раскрасить дебугер" сами до этого никогда не допрут. В понятном виде. Я на что уж сам писатель... был..., но твои конфиги до сих пор не осилил.

    И вот уже всю эту кучу надо увязать в концепции эмулятора и попутно съэмулировать "точку входа" в это безобразие в виде какого-нить Ethernet-чипа в типовом включении (что-нить простое типа RTL8019as или DP8390D).

    Т.е. вырисовывается задачка не скажу что грандиозная, но внушает...
    Сложная, но нужная... Как то так....
    Последний раз редактировалось Error404; 13.02.2011 в 00:27.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  6. #5
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,178
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я понял, ndisprot позволяет отправлять и принимать данные непосредственно через имеющуюся сетевую карту (правда, не совсем понятно, как будет обрабатываться входящий траффик по IP - будет он передан только обработчику протокола IP или же обеим обработчикам, и можно ли установить два обработчика протокола IP). Правда, в таком случае у нас не получится соедениться с программами, работающими на том-же компьютере, что и эмулятор. Можно, конечно, установить loopback-адаптер, но будет ли это работать, сказать сложно.

    TAP-драйвер, наоборот, выступает в роли сетевой карты, и будучи привязанным к протоколам TCP/IP, позволяет принимать и отправлять данные через сетевой стек на том-же компьютере. А чтобы отправлять через сетевую карту, нужно настроить роутинг во внешнюю сеть, точно также, как между двумя реальными сетевыми картами.

    Вобщем, всё зависит от того, что мы хотим: чтобы эмулятор работал с программами и сервисами на том-же компьютере, или чтобы эмулируемый компьютер взаимодействовал с другими компьютерами в сети.

    Я, правда, не совсем понимаю, как это сделано в VMware - там гостевая ОС может работать и с хостом, и с другими компьютерами в сети.

  7. #6
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Насколько я понял, ndisprot позволяет отправлять и принимать данные непосредственно через имеющуюся сетевую карту (правда, не совсем понятно, как будет обрабатываться входящий траффик по IP - будет он передан только обработчику протокола IP или же обеим обработчикам, и можно ли установить два обработчика протокола IP). Правда, в таком случае у нас не получится соедениться с программами, работающими на том-же компьютере, что и эмулятор. Можно, конечно, установить loopback-адаптер, но будет ли это работать, сказать сложно.

    TAP-драйвер, наоборот, выступает в роли сетевой карты, и будучи привязанным к протоколам TCP/IP, позволяет принимать и отправлять данные через сетевой стек на том-же компьютере. А чтобы отправлять через сетевую карту, нужно настроить роутинг во внешнюю сеть, точно также, как между двумя реальными сетевыми картами.

    Вобщем, всё зависит от того, что мы хотим: чтобы эмулятор работал с программами и сервисами на том-же компьютере, или чтобы эмулируемый компьютер взаимодействовал с другими компьютерами в сети.

    Я, правда, не совсем понимаю, как это сделано в VMware - там гостевая ОС может работать и с хостом, и с другими компьютерами в сети.
    Я себе представлял так:

    [Эмулятор->NDIS]->[[TAP1<-бридж->TAP2]->router->realEth]->внешняя сетка

    Здесь адаптеры TAP1, TAP1 и виртуальный свитч (бридж) образуют IP-подсеть 1. Наш PC работает роутером из подсети 1 в подсеть 2 куда входит реальный адаптер realEth. Соответственно:
    - на адаптере TAP1 кодом Z80 эмулятора через NDIS устанавливается МАС и настраивается IP из сетки1.
    - На адаптере realEth средствами Винды настраивается IP из сетки2
    - на адаптере TAP2 средствами Винды настраивается IP из сетки1 (типовой случай с РС-роутером, который смотрит двумя адаптерами - TAP2 и realEth - в две сетки)

    Как я понимаю, TAP-адаптеры никак не привязаны к IP (LAYER3), они эмулируют на уровне MAC (LAYER2). Хочешь, можно вообще на них IP не поднимать, а поднять что-то другое. Соответственно, в адаптер TAP1 мы можем из эмулятора через NDIS дуть голыми пакетами, которые полностью программно формируются стеком IP, реализованным на Z80 (т.е. они не голые на самом деле, а содержат все нужные структуры для IP). И нормально получать ответы в виде голых же пакетов LAYER2 (это нам обеспечит виртуальный свитч - ему достаточно знать МАС-и TAP1 и TAP2 чтобы понимать что от кого и кому слать).

    Сейчас ковыряю, наделал ТАР-ов, пока не понятно что к чему. При создании бриджа ТАР-ы (до того отдельные девайсы со своими MAC) перестают енумероваться по-отдельности, вместо них енумеруется только бридж с единственным MAC-ом. Надо подумать отчего так...
    Последний раз редактировалось Error404; 14.02.2011 в 01:31.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  8. #7
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,178
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Я себе представлял так:
    Как-то сложно ты всё представляешь
    На мой взгляд есть 2 варианта:
    1. эмулятор -> ndisprot.sys -> NDIS -> минидрайвер реальной карты -> внешняя сеть
    2. программы на локальном PC <- winsock <- tcpip.sys <- NDIS <- tap0801.sys <- эмулятор

    В первом случае, для взаимодействия с программами на локальном PC нужен loopback-адаптер.
    То есть получится так: эмулятор -> ndisprot.sys -> NDIS -> loopback-адаптер -> NDIS -> tcpip.sys -> winsock -> программы на локальном PC

    Во втором случае, для выхода во внешнюю сеть нужен сервис, который будет осуществлять роутинг (на уровне IP) между реальной сетевой картой и tap0801.sys
    То есть так: эмулятор -> tap0801.sys -> NDIS -> tcpip.sys -> router service -> tcpip.sys -> NDIS -> минидрайвер реальной карты -> внешняя сеть
    Последний раз редактировалось b2m; 14.02.2011 в 11:50.

  9. #8
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Как-то сложно ты всё представляешь
    На мой взгляд есть 2 варианта:
    1. эмулятор -> ndisprot.sys -> NDIS -> минидрайвер реальной карты -> внешняя сеть
    2. программы на локальном PC <- winsock <- tcpip.sys <- NDIS <- tap0801.sys <- эмулятор

    В первом случае, для взаимодействия с программами на локальном PC нужен loopback-адаптер.
    То есть получится так: эмулятор -> ndisprot.sys -> NDIS -> loopback-адаптер -> NDIS -> tcpip.sys -> winsock -> программы на локальном PC

    Во втором случае, для выхода во внешнюю сеть нужен сервис, который будет осуществлять роутинг (на уровне IP) между реальной сетевой картой и tap0801.sys
    То есть так: эмулятор -> tap0801.sys -> NDIS -> tcpip.sys -> router service -> tcpip.sys -> NDIS -> минидрайвер реальной карты -> внешняя сеть
    В первом случае на этом физическом адаптере возможна или работа эмулятора, или работа всех прочих IP-программ Винды. Потому что NDIS - это то что "раньше" всего стека IP, доступ к LAYER2 минуя весь стек IP. В параллель два стека (эмуляторский и виндовый) на одном физическом (или виртуальном) приборе канального уровня (MAC) работать не могут.

    Второй случай невозможен, потому что через NDIS (не через TAP, TAP это уже ниже NDIS, это сам адаптер, как я понимаю, к которому доступ должен быть через драйвер - NDIS в нашем случае) ты опять же выведешь пакет в канальный уровень. Оттуда этот пакет может быть передан только на другой адаптер. Этот другой адаптер, получив пакет LAYER2, уже "дернет вверх" всю цепочку уровней протокола IP (LAYER3 и выше - TCP/UDP). И вот на этом, другом адаптере уже может жить router, потому что router - это понятие уровня LAYER3.

    loopback-интерфейс вообще никогда не пропускает пакеты на уровень LAYER2 (куда мы ходим при помощи NDIS). Пакеты разворачиваются "сами на себя" на уровне LAYER3.
    Последний раз редактировалось Error404; 14.02.2011 в 15:27.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #9
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,178
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    В параллель два стека (эмуляторский и виндовый) на одном физическом (или виртуальном) приборе канального уровня (MAC) работать не могут.
    Есть подозрение, что если к сетевой карте привязаны два протокола, то входящие пакеты NDIS будет дублировать для обоих обработчиков протокола. А обработчики должны "отвечать" только на "свои" пакеты.

    Цитата Сообщение от Error404 Посмотреть сообщение
    Второй случай невозможен
    Я не понял, так ты разобрался, как работать с TAP-драйвером? Или всё-таки нет?

    Цитата Сообщение от Error404 Посмотреть сообщение
    loopback-интерфейс вообще никогда не пропускает пакеты на уровень LAYER2 (куда мы ходим при помощи NDIS). Пакеты разворачиваются "сами на себя" на уровне LAYER3.
    По моему ты путаешь loopback-интерфейс и localhost с адресом 127.0.0.1. Обращения к localhost действительно обрабатываются на уровне tcpip.sys, а loopback-интерфейс выглядит для системы как сетевая карта, которая возвращает все посланные пакеты обратно.

  11. #10
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Я не понял, так ты разобрался, как работать с TAP-драйвером? Или всё-таки нет?
    Пока нет.
    Но других путей не вижу.
    Все виртуалки на РС (которые по сути - эмуляторы) работают с сеткой через TAP или его проприетарный аналог.

    ---------- Post added at 23:29 ---------- Previous post was at 22:11 ----------

    Цитата Сообщение от Ramiros Посмотреть сообщение
    Сеть я делать врятли буду, нифига в этом непонимаю.
    Дык никто не понимает. Надо разбираться.

    ---------- Post added 15.02.2011 at 00:46 ---------- Previous post was 14.02.2011 at 23:29 ----------

    Некоторые приемы работы с TAP прогуглил. Ничего особенного - открыл, читаешь/пишешь.
    http://www.rsdn.ru/forum/network/3842938.flat.aspx
    http://www.rsdn.ru/forum/winapi/2724711.aspx

    А вообще, все сразу посылают в исходники OpenVPN - дескать "иди и смотри".

    А сама концепция пока не ясна. Неясно главным образом почему при объединении в бридж, и реальные адаптеры и TAP-ы перестают энумероваться (например из NDIS по ndisprotQueryBinding, да везде - даже по ipconfig, т.е. по GetAdaptersInfo) .

    Ну, тоесть в man-ax на OpenVPN конечно написано, что в Винде после объединения в бридж адаптеры теряют идентичность, и "сущность адаптера" остается только у бриджа, но нафига это так сделано и как это уложить в башке - пока не понятно. Что самое интересное, в Линухе виртуальные адаптеры после объединения в бридж никуда не деваются, как это происходит в Винде.

    Поэтому, хотя с бриджем было бы и проще (если бы оно работало как я представляю себе), но схема по прочтении людей по ссылкам похоже вырисовывается такая (несколько отличается от того что я сочинял двумя постами ранее):

    Код:
    эмулятор<-------+------->TAP1<-------+-------->router<-----+--->RealEthAdapter
    (IP-subnet1)    |                    |         is our      |      (IP-subnet2)
                    |                    |           PC        |
          WinAPI (CreateFile,     Windows IP stack        Windows IP stack
         WriteFile, ReadFile,                                 
           DeviceIoControl)
    Как видим, никакого NDIS.
    А РС, на котором будет работать эмулятор, сам будет роутить из сети где находится TAP1 в сеть реального адаптера, надо только галку поставить где надо. Или не ставить, если выход во внешнюю сеть не нужен - тогда взаимодействующий IP-софт (telnet, к примеру) просто запускаем на своем же РС - там же где и эмулятор, натравив его на TAP1.
    При этом TAP1 не обслуживается двумя стеками. "IP-стек кода на Z80" транслируется на выходе эмулятора в вызовы WinAPI, которые просто являются симметричной ответной частью для IP-стека Винды (имитирую ответные-парные "отправки и прием пакета" в/из эмулятор).
    Последний раз редактировалось Error404; 15.02.2011 в 01:20.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 1 из 6 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Гейтование в FTN-сети
    от CityAceE в разделе Форум
    Ответов: 12
    Последнее: 31.12.2006, 08:19
  2. Soccer managers по сети!
    от Addison в разделе Игры
    Ответов: 4
    Последнее: 26.03.2006, 16:09

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •