#windows #tcp #driver #ndis
#Windows #tcp #драйвер #ndis
Вопрос:
Я пишу драйвер фильтра NDIS для Windows. Теперь я столкнулся с проблемой.
Я собираюсь перенаправить TCP-пакеты на TCP-сервер на текущем компьютере, на котором установлен драйвер фильтра NDIS. Например, IP-адрес текущего компьютера есть 192.168.1.1
, и на нем есть TCP-сервер, который является прослушивающим портом 8000
.
Пользователь вводит URL: http://192.168.1.10/xxxx в браузере IE и моем драйвере фильтра NDIS можно абсолютно точно увидеть TCP SYN
пакет. Я изменяю IP-адрес назначения пакета на 192.168.1.1
и порт назначения на 8000
, потому что я ожидаю, что пакет может быть перенаправлен на локальный TCP-сервер.
Затем я использую NdisFIndicateReceiveNetBufferLists()
to для ввода NBL в принимающий путь вместо отправки его базовому драйверу минипорта.
Однако, похоже, что локальный TCP-сервер никогда не сможет получить перенаправленный SYN
пакет. Я не знаю, что происходит не так. Кто-нибудь поможет мне или даст мне несколько советов?
Большое вам спасибо!
Ответ №1:
В общем, вы не можете взять NBL с одного пути (пути передачи) и просто перенести его на другой путь (путь приема). Вам нужно будет клонировать NBL и указать клон. Кроме того, вам придется отредактировать заголовки IP и TCP, чтобы исправить контрольные суммы.
Но прежде чем вы пойдете по этому пути, имейте в виду, что выноска WFP является более подходящим типом драйвера для этого проекта. Выноски WFP предназначены для работы на уровне 3 и уровне 4 сетевого стека, в то время как NDIS работает на уровне 2.