Есть ли способ отследить открытие сокета в системе? Интересует что-то вроде hook на открытие сокета. Это нужно мне для того, чтобы вычленить из общего сетевого трафика трафик определённого приложения.
на sysinternals.com за исходниками netstat или за на http://sf.net/projects/tdifw за исходниками tdifw
На sysinternals есть только исходники http://www.sysinternals.com/Files/NetstatpSource.zip, а вних используются AllocateAndGetTcpExTableFromStack и AllocateAndGetUdpExTableFromStack, а они просто дают список открытых портов, а не факт открытия порта приложением.
idiMAN Сканирование порта на петлевой интерфейс? Код (Text): Заменить Конец_домена_портов на 65536; Символ БуферОткрытыхПортов[Конец_домена_портов]; Для И = 0 до Конец_домена_портов Начало ОткрытьПорт("И"); Если Порт "И" БуферОткрытыхПортов[И] = Истинна; Конец Вывод(Конец_домена_портов); Если че я седня от билдера такой! )
EvilsInterrupt Нет, не то. Я взял пакетный фильтр WinPkFilter c www.ntkernel.com и должен анализировать траффик конкретного приложения. Я получаю весь трафик идущий от приложений на сетевой интерфейс и от сетевого интерфейса к приложениям. Мне нужно из общего потока вычленить только пакеты отправленные нужным приложением (известен его PID) и пакеты, идущие этому приложению. Если со вторым более менее всё понятно, к.т. приложением уже открыт сокет, а следовательно я могу с помощью функций AllocateAndGetTcpExTableFromStack и AllocateAndGetUdpExTableFromStack провести соответствие "порт пришедшего пакета" -> PID процесса, то при отправке приложением UDP-пакета с помощью sendto, я такого соответствия провести не могу, т.к. вышеупомянутые функции не возвращают данные об открытом этим приложением UDP порте. Выходом вижу по аналогии с TDIMon от sysinternals.com, перехватывать запросы к TDI и по ним уже смотреть с какого порта уходят пакеты, отправленные данным приложением. 1) Вопрос только как это реализовать? 2) И ещё ковыряя TDIMon увидел, что драйвер находится у него ресурсах exe-файла. Как он грузит его из памяти не сохраняя на винт?