Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как зарезервировать порт в NDIS  (Прочитано 6349 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KIM
Гость
« : 06-06-2010 13:42 » 

Коллеги! У меня такая проблема. Пишу internet gateway под XP на основе Passthru, требуется осуществлять НАТ TCP и UDP с одного минипорта на другой. Тут никаких проблем нет, где пакты взять, как их собрать, и куда переслать это все понятно. Проблема в следующем: при осуществлении НАТ мы должны, естественно, подменить исходящий IP и исходящие порты, чтобы потом по табилце этих самых подмененных портов суметь входящий с этого коннекта пакет переслать на нужный ip внутренней сети. В теории все просто и понятно ), но есть нюанс: нельзя просто взять и назначить любой исходящий порт по своему внутреннему закону (например назначать попорядку и пр.), потому что в системе может быть открыт сокет или еще что нибудь как раз по такой паре входящих и исходящих портов и ip, соответственно нада спрашивать у системе о свободных портах и ей сообщать что такие то такие то порты заняты (зарезервированы), так как это делают винсокеты. Есть ли возможность делать это на уровне ядра. Если нет, то как это делать хотябы в юзермоде?
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 06-06-2010 14:43 » 

Может это стоит делать на TDI ? Из того, что я пытался делать на NDIS, удобно было делать только сниффер.
Записан
KIM
Гость
« Ответ #2 : 06-06-2010 15:21 » 

Хм... может и так, но с TDI я не работал, а там есть возможность пакеты дропать и отправлять? И с портами вышесказанный вопрос можно решить?
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 06-06-2010 15:48 » 

Дропать или не дропать там конечно можно. Файеры на нем делаются же. Но я, честно говоря, сам мало знаю о TDI.
Записан
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 07-06-2010 06:20 » 

Начнём с того, что TDI-фильтр значительно проще в реализации. Далее, задачу о резервировании портов можно решить двумя способами:

  • Занять требуемые порты самому.
  • Блокировать открытие "занятых" портов на лету.

Первый способ предпочтительнее, т.к. в этом случае мы явно даём понять системе что порт занят и другим клиентам следует использовать следующий свободный. Во втором же случае поведение системы (компонента AFD, в частности) может быть непредсказуемо. Вероятно, это может зависеть от возвращённого кода ошибки (статуса), но я не уверен, нужно реверсить afd.sys, чего делать сейчас просто лень. Что касается технической стороны вопроса, то в моём блоге есть информация об этом.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines