Доброго времени суток. Пишу межсетевой экран на основе passthru, требуется отслеживать соответствие флагов принимаемых/отправляемых пакетов состоянию TCP сессии. Необходимо для инициализации получить список открытых TCP - соединений. В usermode это делается с помошью GetTcpTable, а с помошью чего можно это сделать(и можно ли сделать вообще) в NDIS драйвере?
На уровне NDIS соединения, насколько мне известно, не отслеживаются. Т.е. тебе придёться вручную собирать tcp-сессии. Чтобы избежать этого, просто воспользуйся соответствующим запросом (см. здесь).
x64, спасибо. А не лучше ли будет сделать такую проверку в отдельном tdi-драйвере? Есть ли где-нибудь простенький пример tdi-фильтра?
Не понял, о какой проверке речь? Есть имеешь в виду поддержку списка tcp-соединений в TDI-фильтре, то да, это хорошее решение, вполне работает и довольно успешно в моём фаерволе, например. Проблема в том, что этот метод не подходит, если твой драйвер должен начать работать сразу же после установки, не дожидаясь перезагрузки системы. Например, здесь.
Возможно, но недокументировано и ненадёжно (девайсы \Device\Ip и \Device\RawIp). Да и зачем это? На TDI-уровне коннекты различаются совершенно другим способом, легко и непринуждённо, я бы сказал. Конкретно, см. запрос TDI_CONNECT и колбек ClientEventConnect.
Мне нужно отслеживать не только сами коннекты, но и правильность флагов при обмене данными в течении сессии.