Вопрос

Мне нужно подсчитать количество байтов, отправленных и полученных из сети различными приложениями. Сначала я подумал об использовании LSP, но есть много приложений, которые вообще не используют LSP (например, SMB). Вот почему я написал небольшой сниффер. Это приложение работает на уровне IP и собирает данные, используя recvfrom.

Итак, у меня есть адрес удаленного хоста, локальных и удаленных портов. Это довольно круто, но мне также нужно иметь PID локального владельца сокета. Итак, есть ли простой способ получить такой PID? Обходной путь - использование GetTcpTable, GetUdpTable или AllocateAndGetUdpExTableFromStack и AllocateAndGetTcpExTableFromStack (в этих функциях есть много различий между 2k, XP, XP SP2 и Vista) и для поиска таблиц результатов, но это кажется неэффективным и неэффективным ...

Итак, есть ли какой-нибудь вид "GetPIDOfSocket"? функционировать? Разрешение должно быть только WinAPI (без .net), поскольку могут использоваться различные языки, например C ++, Delphi.

Это было полезно?

Решение

Извините, что должен сказать вам, но использование GetTcpTable или AllocateAndGetTcpExTableFromStack не является обходным путем, это фактически то, как работают другие приложения типа netstat. AFAIK: в Win32 " GetPIDOfSocket " нет функции, единственный вариант - опрос с использованием табличных функций порта. Но, по крайней мере, вы можете сами его кодировать и не создавать процесс netstat.

См. исходный код SysInternals C для netstatp здесь . Там не так много, и это стоит посмотреть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top