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

User Tag List

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 11 по 20 из 59

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

  1. #11
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Код:
    эмулятор<-------+------->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-стека Винды (имитирую ответные-парные "отправки и прием пакета" в/из эмулятор).
    Правда в последнем варианте канальный уровень "подсети1" и "второй адаптер подсети1" (тот который в эмуляторе) полностью придется обеспечивать эмулятором. Т.е. если в ранней моей схеме в реальный (пускай и TAP) адаптер Винды просто через NDIS передавался пакет (массив) подготовленный Z80-IP-стеком эмулятора, и инкапсуляция этих данных в Ethernet-кадр выполнялась этим адаптером, а передача далее (на второй TAP) производилась бриджем, то в последнем случае и "рисовать исходящий из эмулятора Ethernet-фрейм" и парсить "входящий Ethernet-фрейм" на предмет выделения "на мой MAC пришло или не на мой (да еще в зависимости от promiscuous mode), или это вообще широковещательный пакет" надо будет уже в коде эмулятора.

    Все это оттого, что пока никто не сделал под виндой для Ethernet аналог пакета com0com (2 виртуальных адаптера, соединенных кросовером). Если бы это было, можно было бы существенно облегчить себе жизнь. Я думал в этом качестве можно будет использовать схему "TAP-бридж-TAP" (как я это делал бы на реальном оборудовании), но к сожалению бридж в Винде сделан как-то по ублюдочному.
    Последний раз редактировалось Error404; 15.02.2011 в 12:40.
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

  2. #12
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    b2m, что скажешь? Реализуемо?
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

  3. #13
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как мне кажется, внутри эмулятора не надо ничего "рисовать и парсить". После объединения в бридж сетевой карты и TAP-драйвера, пакеты будут без проблем пересылаться между двумя подсетями (точнее, это будет уже одна сеть). Так что с бриджем я планирую разобраться потом. Для начала нужно сделать виртуальную сетевую карту в эмуляторе и какую-нибудь тестовую прогу, например обработчик ARP, это самое простое.

  4. #14
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Как мне кажется, внутри эмулятора не надо ничего "рисовать и парсить". После объединения в бридж сетевой карты и TAP-драйвера, пакеты будут без проблем пересылаться между двумя подсетями (точнее, это будет уже одна сеть). Так что с бриджем я планирую разобраться потом. Для начала нужно сделать виртуальную сетевую карту в эмуляторе и какую-нибудь тестовую прогу, например обработчик ARP, это самое простое.
    Ну, дело хозяйское.
    Ты делать решил?
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

  5. #15
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Ты делать решил?
    Попробую. Уже изучаю даташит на RTL8019AS. Начну, наверное, с регистров, совместимых с NE2000. Фактически, этот контроллер подключается напрямую на ISA-шину, так что это будет эмуляция практически любой ISA-шной сетевой карты, совместимой с NE2000.

    Если с наскока не получится, отложу до лучших времён.

    Просьба к модераторам отделить последние сообщения, связанные с эмуляцией сети, в отдельную тему, и поместить её в форум про эмуляторы.

  6. #16
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Error404, вроде получилось. Правильность и полноту эмуляции, естественно, не гарантирую. В качестве тестовой платформы был выбран Радио-86РК, потому что есть текстовый экран и монитор, а также свободны все порты. rtl8019as я повесил на порты 80h-9Fh. Прежде чем запускать, нужно исправить в файле конфигурации имя виртуальной сетевой карты TAP-драйвера. После чего можно запустить программу net_test.rk. IP-адрес и маска подсети зашит в коде (172.20.0.2 255.255.0.0), но можно его исправить: в конце файла net_test.rk байты AC 14 00 02 FF FF 00 00 меняются на любой понравившийся адрес (точнее, на один из адресов в подсети TAP-драйвера). В тестовой программе обрабатываются пакеты ARP и ICMP, так что можно "пинговать" РК-шку

    emu_net.rar

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

  8. #17
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Error404, вроде получилось. Правильность и полноту эмуляции, естественно, не гарантирую. В качестве тестовой платформы был выбран Радио-86РК, потому что есть текстовый экран и монитор, а также свободны все порты. rtl8019as я повесил на порты 80h-9Fh. Прежде чем запускать, нужно исправить в файле конфигурации имя виртуальной сетевой карты TAP-драйвера. После чего можно запустить программу net_test.rk. IP-адрес и маска подсети зашит в коде (172.20.0.2 255.255.0.0), но можно его исправить: в конце файла net_test.rk байты AC 14 00 02 FF FF 00 00 меняются на любой понравившийся адрес (точнее, на один из адресов в подсети TAP-драйвера). В тестовой программе обрабатываются пакеты ARP и ICMP, так что можно "пинговать" РК-шку

    emu_net.rar
    Круто.
    А как в РК-шку загружать файлы *.rk? Чего-то через OPEN пишет "непонятный формат".
    А исходник net_test.rk покажешь? А еще какие покажешь? Сам писал или что-то готовое нашел?

    Таки как используешь TAP? Единичный адаптер? C бриджем? Пишешь\читаешь по WriteFile\ReadFile самого TAP-устройства или все же через NDIS? Если через WriteFile\ReadFile, то эмулишь "голый канал" или как?
    Давай рассказывай. Говорю же, понадобится мануал...
    А еще надо прикрутить сетку к модели Спека. В ветке концепций подскажут на какие порты - там была такая ветка, может видел... А то там программисты страдают, что им не на чем программировать стеки.
    Дескать "вот было бы - уж мы уж сразу бы тогда, а т.к. нет - то и мы нет"
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

  9. #18
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,917
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    695
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Просьба к модераторам отделить последние сообщения, связанные с эмуляцией сети, в отдельную тему, и поместить её в форум про эмуляторы.
    Перенес, название темы сами придумайте. Пока обозвал так.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  10. #19
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    А как в РК-шку загружать файлы *.rk? Чего-то через OPEN пишет "непонятный формат".
    Мой косяк, не сказал, что в архиве выше это не урезанный эмулятор, а обновление полной версии. Перезалил архив, теперь там есть все нужные файлы (и нет лишних). Также, подправил EMU.ext, чтобы при открытии файлов с расширением .rk автоматически выбиралась конфигурация с сетью, а не обычная РК.

    Цитата Сообщение от Error404 Посмотреть сообщение
    А исходник net_test.rk покажешь? А еще какие покажешь?
    Программка в принципе не большая, кому надо - дизассемблирует. Хотя можно и выложить.

    Цитата Сообщение от Error404 Посмотреть сообщение
    Сам писал или что-то готовое нашел?
    Сам писал. Зато - ничего лишнего.

    Цитата Сообщение от Error404 Посмотреть сообщение
    Таки как используешь TAP? Единичный адаптер? C бриджем? Пишешь\читаешь по WriteFile\ReadFile самого TAP-устройства или все же через NDIS? Если через WriteFile\ReadFile, то эмулишь "голый канал" или как?
    Я посмотрел исходники QEMU, и сделал аналогично.

    Цитата Сообщение от Error404 Посмотреть сообщение
    А еще надо прикрутить сетку к модели Спека. В ветке концепций подскажут на какие порты - там была такая ветка, может видел... А то там программисты страдают, что им не на чем программировать стеки.
    Дескать "вот было бы - уж мы уж сразу бы тогда, а т.к. нет - то и мы нет"
    А вдруг я неправильно эмулирую Надо сначала как-то проверить эмуляцию. Вот подключил бы кто сетевуху к какому-нибудь компу, чтобы проверить тестовую программу...

    ---------- Post added at 20:17 ---------- Previous post was at 18:42 ----------

    Цитата Сообщение от Error404 Посмотреть сообщение
    Таки как используешь TAP? Единичный адаптер? C бриджем? Пишешь\читаешь по WriteFile\ReadFile самого TAP-устройства или все же через NDIS? Если через WriteFile\ReadFile, то эмулишь "голый канал" или как?
    А если подробнее, то так:
    1. ищем в реестре guid сетевого адаптера TAP
    2. открываем устройство \\.\Global\{guid}.tap, обязательно использовать FILE_FLAG_OVERLAPPED
    3. установить статус (TAP_IOCTL_SET_MEDIA_STATUS, номер кода для DeviceIoControl можно взять из исходников QEMU)
    4. использовать ReadFile/WriteFile асинхронно (т.е. с параметром lpOverlapped).

    Никаких бриджей, NDIS конечно используется, но мы этого не видим, общаемся только с драйвером напрямую, эмулируется "голый канал", как ты выразился.
    Последний раз редактировалось b2m; 20.02.2011 в 18:21.

  11. #20
    Banned Аватар для Black_Cat
    Регистрация
    15.06.2006
    Адрес
    S.Pb
    Сообщений
    5,791
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Эмулируй любой чип, реализующий MAC+PHY. В его типовом включении (только чтобы без всяких ДМА, т.к. на реале такое не полетит).
    кстати, если осилить эмуляцию 8237, то можно и DMA прикрутить

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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