Написание фильтра для входящих соединений
-
19-09-2019 - |
Вопрос
Я использую C ++/Boost :: Asio под Win7.
Я пытаюсь «обнюхивать» трафику по данному порту TCP/IP. Следовательно, я хотел бы выслушать этот порт, получать сообщения, проанализировать их, но также неизвестно позволить им течь дальше, как будто я никогда не перехватил их. Я хочу, чтобы они погрузились в программу, которая обычно слушает и подключается к этому порту. Представьте себе прозрачный прокси, но не для http.
Я бы предпочел найти решение на основе кода, но за исключением этого, может быть, вы бы предложили инструмент?
Решение
То, что вы пытаетесь сделать, это в основном программа брандмауэра.
В Windows есть несколько подходов, чтобы сделать это, вы можете зацепить Winsock. Лучше (или не хакерский) - использовать фильтр TDI (вы смотрите это) или сделать NDIS Filter.
Microsoft также представила New API, WPF а также LSP. Анкет Я думаю, что вам лучше использовать его, потому что фильтр TDI и обертка NDIS включают программирование драйверов, которое усложняется и может занять много времени.
Другие советы
Если это для продукта, который вы разрабатываете, вы можете взглянуть на библиотеку Winpcap http://www.winpcap.org/ который вы можете встроить в свою собственную программу.
Если вам просто нужно проанализировать для себя, используйте один из инструментов, который использует WinPcap, я имел большой успех в Wireshark; Но проверьте сайт Winpcap для других инструментов
Вы не можете использовать boost::asio
(или любая другая библиотека на основе розетки) для этого, поскольку она потребляет весь трафик.