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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top