Получение списка открытых TCP соединений из драйвера

Тема в разделе "WASM.NT.KERNEL", создана пользователем sinsin, 13 мар 2010.

  1. sinsin

    sinsin New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2010
    Сообщения:
    4
    Доброго времени суток.
    Пишу межсетевой экран на основе passthru, требуется отслеживать соответствие флагов принимаемых/отправляемых пакетов состоянию TCP сессии.
    Необходимо для инициализации получить список открытых TCP - соединений. В usermode это делается с помошью GetTcpTable, а с помошью чего можно это сделать(и можно ли сделать вообще) в NDIS драйвере?
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    На уровне NDIS соединения, насколько мне известно, не отслеживаются. Т.е. тебе придёться вручную собирать tcp-сессии. Чтобы избежать этого, просто воспользуйся соответствующим запросом (см. здесь).
     
  3. sinsin

    sinsin New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2010
    Сообщения:
    4
    x64, спасибо. А не лучше ли будет сделать такую проверку в отдельном tdi-драйвере? Есть ли где-нибудь простенький пример tdi-фильтра?
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Не понял, о какой проверке речь? Есть имеешь в виду поддержку списка tcp-соединений в TDI-фильтре, то да, это хорошее решение, вполне работает и довольно успешно в моём фаерволе, например. Проблема в том, что этот метод не подходит, если твой драйвер должен начать работать сразу же после установки, не дожидаясь перезагрузки системы.

    Например, здесь.
     
  5. sinsin

    sinsin New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2010
    Сообщения:
    4
    Я имел ввиду проверку флагов tcp пакетс состоянию сессии. В tdi такое возможно организовать?
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Возможно, но недокументировано и ненадёжно (девайсы \Device\Ip и \Device\RawIp). Да и зачем это? На TDI-уровне коннекты различаются совершенно другим способом, легко и непринуждённо, я бы сказал. Конкретно, см. запрос TDI_CONNECT и колбек ClientEventConnect.
     
  7. sinsin

    sinsin New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2010
    Сообщения:
    4
    Мне нужно отслеживать не только сами коннекты, но и правильность флагов при обмене данными в течении сессии.