имитация сетевого интерфейса
От: k732  
Дата: 07.11.07 18:11
Оценка:
Можно ли как отправить/получить IP-пакеты системе?

Приложение имеет доступ к IP-трафику и нужно имитировать сетевой адаптер (как будто на него приходят данные и что он отправляет данные).

Можно ли это как-нибудь сделать ?
Re: имитация сетевого интерфейса
От: Unmanaged Россия ICQ 476611995
Дата: 08.11.07 13:44
Оценка:
K>Можно ли как отправить/получить IP-пакеты системе?
K>Приложение имеет доступ к IP-трафику и нужно имитировать сетевой адаптер (как будто на него приходят данные и что он отправляет данные).
K>Можно ли это как-нибудь сделать ?

Вопрос не совсем в тот форум.
Тебе в Низкоуровневое программирование.
Там есть люди, которые знают ответ на твой вопрос.
STATUS_INVALID_DEVICE_REQUEST
Re[2]: имитация сетевого интерфейса
От: k732  
Дата: 08.11.07 17:11
Оценка:
U>Вопрос не совсем в тот форум.
U>Тебе в Низкоуровневое программирование.
U>Там есть люди, которые знают ответ на твой вопрос.

А можно как-нибудь тему туда переместить ?
Re[3]: имитация сетевого интерфейса
От: Unmanaged Россия ICQ 476611995
Дата: 08.11.07 17:24
Оценка:
U>>Тебе в Низкоуровневое программирование.
K>А можно как-нибудь тему туда переместить ?

Можно.
Варианта 3:

  • Попросить модераторов здесь, личным сообщением или по почте , — быстро.
  • Воспользоваться автомодерацией
    Автор: k732
    Дата: 07.11.07
    , — долго.
  • Взломать сервер БД, на котором храниться твоё сообщение, и кое-что подправить, — быстро если умеючи, но сидеть долго, а если не сидеть, то руки переломают точно.
  • STATUS_INVALID_DEVICE_REQUEST
    Re[4]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 17:28
    Оценка:
    U>
  • Попросить модераторов здесь, личным сообщением или по почте , — быстро.
    да не удобно как-то...
    U>
  • Воспользоваться автомодерацией
    Автор: k732
    Дата: 07.11.07
    , — долго.
    потянет
    U>
  • Взломать сервер БД, на котором храниться твоё сообщение, и кое-что подправить, — быстро если умеючи, но сидеть долго, а если не сидеть, то руки переломают точно.

    могешь ?
  • Re[5]: имитация сетевого интерфейса
    От: Unmanaged Россия ICQ 476611995
    Дата: 08.11.07 17:37
    Оценка:
    K>да не удобно как-то...

    "Неудобно — это когда соседские дети на тебя похожи!" (c).

    U>>Воспользоваться автомодерацией
    Автор: k732
    Дата: 07.11.07
    , — долго.

    K>потянет

    Я так и думал.

    U>>Взломать сервер БД, на котором храниться твоё сообщение, и кое-что подправить, — быстро если умеючи, но сидеть долго, а если не сидеть, то руки переломают точно.

    K>могешь ?

    Скажу да — посадют ведь.
    Скажу нет — ламер.

    Скажем так, — "в мире нет ничего невозможного" (c).
    STATUS_INVALID_DEVICE_REQUEST
    Re: имитация сетевого интерфейса
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 08.11.07 18:34
    Оценка:
    Здравствуйте, k732, Вы писали:

    K>Приложение имеет доступ к IP-трафику и нужно имитировать сетевой адаптер (как будто на него приходят данные и что он отправляет данные).


    Потребуется сетевой драйвер, который изображает из себя виртуальный сетевой адаптер. В юниксе такой драйвер является стандартным и называется TUN/TAP (говорю в основном ради стандартной терминологии). А в винде его почему-то нет.

    Возьмите Tap-Win32 из OpenVPN: http://openvpn.net/. Он довольно средненько написан, и по-моему не работает на 64-битных машинках, но чтобы поиграться/сделать прототип, его хватит. А потом перепишете, если дело пойдет.
    Re[6]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 18:37
    Оценка:
    Здравствуйте, Unmanaged, Вы писали:

    K>>да не удобно как-то...


    U>"Неудобно — это когда соседские дети на тебя похожи!" (c).


    а еще неудобно — когда ты сверху и она сверху

    U>>>Взломать сервер БД, на котором храниться твоё сообщение, и кое-что подправить, — быстро если умеючи, но сидеть долго, а если не сидеть, то руки переломают точно.

    K>>могешь ?

    U>Скажу да — посадют ведь.

    U>Скажу нет — ламер.

    Re[2]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 18:38
    Оценка:
    Pzz>Возьмите Tap-Win32 из OpenVPN: http://openvpn.net/. Он довольно средненько написан, и по-моему не работает на 64-битных машинках, но чтобы поиграться/сделать прототип, его хватит. А потом перепишете, если дело пойдет.

    а как на счет виртуалтного минипорт драйвера из DDK ?
    Re[3]: имитация сетевого интерфейса
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 08.11.07 18:51
    Оценка:
    Здравствуйте, k732, Вы писали:

    Pzz>>Возьмите Tap-Win32 из OpenVPN: http://openvpn.net/. Он довольно средненько написан, и по-моему не работает на 64-битных машинках, но чтобы поиграться/сделать прототип, его хватит. А потом перепишете, если дело пойдет.


    K> а как на счет виртуалтного минипорт драйвера из DDK ?


    А он, по-моему, ничего делать не умеет, кроме как сидеть в систрее и прикидываться сетевым интерфейсом. Т.е., траффик через него не пропустишь.

    Если бы все было так просто, вряд ли бы ребята из OpenVPN стали бы возиться со своим драйвером. Тем более, что он у них не очень получился
    Re[4]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 18:54
    Оценка:
    Pzz>А он, по-моему, ничего делать не умеет, кроме как сидеть в систрее и прикидываться сетевым интерфейсом. Т.е., траффик через него не пропустишь.
    Но ведь на ping он могет отвечать...

    Я просто не знаком с ndis, поэтому наверное многого не понимаю

    Pzz>Если бы все было так просто, вряд ли бы ребята из OpenVPN стали бы возиться со своим драйвером. Тем более, что он у них не очень получился

    Так если он не очень получился — стоит ли его смотреть ?

    Неужели так сложно системе отдать пакет и забрать ответ на него
    Re: имитация сетевого интерфейса
    От: Danchik Украина  
    Дата: 08.11.07 19:01
    Оценка:
    Здравствуйте, k732, Вы писали:

    K>Можно ли как отправить/получить IP-пакеты системе?


    K>Приложение имеет доступ к IP-трафику и нужно имитировать сетевой адаптер (как будто на него приходят данные и что он отправляет данные).


    K>Можно ли это как-нибудь сделать ?


    Тоесть вам нужно прокидывать сетевые пакеты, так чтобы какя то програмка их ловила?
    Я думаю WinPCap вам поможет как нельзя лучше. Выбираете на какой адаптер валить пакеты и валите, API простое до безобразия.
    Re[5]: имитация сетевого интерфейса
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 08.11.07 19:05
    Оценка:
    Здравствуйте, k732, Вы писали:

    Pzz>>А он, по-моему, ничего делать не умеет, кроме как сидеть в систрее и прикидываться сетевым интерфейсом. Т.е., траффик через него не пропустишь.

    K>Но ведь на ping он могет отвечать...

    ping на собственный адрес не проходит через сетевой адаптер.

    Pzz>>Если бы все было так просто, вряд ли бы ребята из OpenVPN стали бы возиться со своим драйвером. Тем более, что он у них не очень получился

    K>Так если он не очень получился — стоит ли его смотреть ?

    Он good enough для прототипа. Но в нем есть некоторое количество ошибок, заметное невооруженным вглядом. Не знаю, поправили ли они их. Если нет, то иногда он будет глючить. Достаточно редко для прототипирования, но в релиз бы я не стал это отдавать. Кроме того, в нормальной релизнутой программе драйвера хорошо бы иметь подписанными, чтобы система не задавала лишних вопросов при инсталляции драйвера. Для того, чтобы получить подпись от микрософта, надо програть ихние довольно скурпулезные тесты. Я не уверен, что Tap-Win32 их пройдет.

    K>Неужели так сложно системе отдать пакет и забрать ответ на него


    Драйвера для винды писать довольно трудно, из-за довольно нетривиальной (и местами неясно документированной) модели жизни, в которой они живут.

    Потом, трудно — понятие относительное. Я такой драйвер напишу недели за 2-3, вопрос захочу ли?
    Re[2]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 19:05
    Оценка:
    D>Тоесть вам нужно прокидывать сетевые пакеты, так чтобы какя то програмка их ловила?
    Именно. Тоесть приложение на TCP уровне

    D>Я думаю WinPCap вам поможет как нельзя лучше. Выбираете на какой адаптер валить пакеты и валите, API простое до безобразия.

    вся проблемма в том, что нет адаптера Его нужно сэмитировать.

    З.Ы. Но даже если есть — как понять что ответы пришли (где посмотреть описание работы с WinPcap ?)
    Re[6]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 19:09
    Оценка:
    Pzz>Потом, трудно — понятие относительное. Я такой драйвер напишу недели за 2-3, вопрос захочу ли?
    везет тебе... я в написании драйвера имел опым максимум к достуту к экспортам.

    Если мне сейчас заниматься NDIS — то на это уйдет несколько месяцев. Да и еще документации почти нет...

    Печально, но что-то нужно делать
    Re[2]: имитация сетевого интерфейса
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 08.11.07 19:09
    Оценка:
    Здравствуйте, Danchik, Вы писали:

    D>Тоесть вам нужно прокидывать сетевые пакеты, так чтобы какя то програмка их ловила?

    D>Я думаю WinPCap вам поможет как нельзя лучше. Выбираете на какой адаптер валить пакеты и валите, API простое до безобразия.

    Насколько я понимаю, WinPCap валит пакеты "наружу". Чтобы их можно было поймать на той же машине, драйвер должен их уметь заворачивать назад, что не каждый драйвер умеет (впрочем, есть стандартный мелкософтовский драйвер по фамилии MS Loopback, который именно это и делает).

    Кроме того, если принимать пакеты WinPCap'ом, то их будет принимать и система. И реагировать на них она может достаточно неадекватно. Например, послать TCP RST.
    Re[3]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 19:13
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Здравствуйте, Danchik, Вы писали:


    D>>Тоесть вам нужно прокидывать сетевые пакеты, так чтобы какя то програмка их ловила?

    D>>Я думаю WinPCap вам поможет как нельзя лучше. Выбираете на какой адаптер валить пакеты и валите, API простое до безобразия.

    Pzz>Насколько я понимаю, WinPCap валит пакеты "наружу".

    не совсем понял

    Pzz>Кроме того, если принимать пакеты WinPCap'ом, то их будет принимать и система. И реагировать на них она может достаточно неадекватно. Например, послать TCP RST.


    да пусть реагирует как хочет. Если она на себя берет TCP соединение — это ее право. Мне нужно лишь ретранслировать пакеты в систему и получать ответы. Тоесть я работаю на MAC уровне и за TCP не отвечаю
    Re[7]: имитация сетевого интерфейса
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 08.11.07 19:14
    Оценка:
    Здравствуйте, k732, Вы писали:

    Pzz>>Потом, трудно — понятие относительное. Я такой драйвер напишу недели за 2-3, вопрос захочу ли?

    K>везет тебе... я в написании драйвера имел опым максимум к достуту к экспортам.

    Везло бы мне, если бы я всю жизнь мечтал писать виндовые драйвера. А я это занятие терпеть ненавижу

    K>Если мне сейчас заниматься NDIS — то на это уйдет несколько месяцев. Да и еще документации почти нет...


    Вся нужная тугаментация есть в DDK. Ее же можно читать в онлайне на мелкософтовском сайте. DDK можно заказать в Россию на CD за $25, и время от времени можно скачать с ихнего сайта забесплатно.

    K>Печально, но что-то нужно делать


    Ну вот и возьми Tap-Win32. На первые полгода-год этого хватит.
    Re[8]: имитация сетевого интерфейса
    От: k732  
    Дата: 08.11.07 19:16
    Оценка:
    Pzz>Ну вот и возьми Tap-Win32. На первые полгода-год этого хватит.

    вопрос стоит 2-3 недели. Все готово кроме этого. Если получиться общаться с ситемой, то остальное дело техники — приложения на более высоком уровне. (DHCP, DNS, WEB...)
    Re[4]: имитация сетевого интерфейса
    От: Pzz Россия https://github.com/alexpevzner
    Дата: 08.11.07 19:18
    Оценка:
    Здравствуйте, k732, Вы писали:

    Pzz>>Насколько я понимаю, WinPCap валит пакеты "наружу".

    K>не совсем понял

    WinPCap позволяет 1) послать пакет через такой-то сетевой интерфейс 2) принять пакеты, пришедшие на такой-то сетевой интерфейс (все или с фильтром, фильтр достаточно быстрый). Это не то же самое, что добавить в систему сетевой интерфейс.

    WinPCap тоже приносит с собой NDIS'овский драйвер, только не минипорт, а протокол. Если сравнивать с Tap-Win32, трудно сказать, кто из них хуже
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.