PID del número de socket en Windows?
Pregunta
Necesito contar la cantidad de bytes enviados y recibidos de la red por varias aplicaciones. Primero pensé en usar LSP, pero hay muchas aplicaciones que no usan LSP (SMB por ejemplo). Es por eso que he escrito un pequeño sniffer. Esta aplicación funciona a nivel de IP y recopila datos utilizando recvfrom.
Tengo una dirección de host remoto, puertos locales y remotos. Esto es bastante bueno, pero también necesito tener un PID del propietario del socket local. Entonces, ¿hay alguna manera simple de obtener tal PID? La solución es usar GetTcpTable, GetUdpTable Or AllocateAndGetUdpExTableFromStack y AllocateAndGetTcpExTableFromStack (hay muchas diferencias en esas funciones entre 2k, XP, XP SP2 y Vista) y para buscar tablas de resultados, pero parece que son inelegant y más eficientes.
Entonces, ¿hay algún tipo de " GetPIDOfSocket " ¿función? La resolución debe ser WinAPI (no .net) solamente, ya que se pueden usar varios idiomas, por ejemplo, C ++, Delphi.
Solución
Lamento tener que decírtelo, pero usar GetTcpTable
o AllocateAndGetTcpExTableFromStack
no es una solución, en realidad es cómo funcionan otras aplicaciones de tipo netstat. AFAIK no hay ninguna función Win32 " GetPIDOfSocket "
, su única opción es realizar una encuesta utilizando las funciones de la tabla de puertos. Pero al menos puede codificarlo usted mismo y no tiene que generar el proceso netstat.
Consulte el código fuente de SysInternals C para netstatp
aquí . No hay mucho y merece la pena echarle un vistazo.