Domanda

Devo contare la quantità di byte inviati e ricevuti dalla rete da varie applicazioni. Per prima cosa ho pensato di usare LSP, ma ci sono molte applicazioni che non usano affatto LSP (ad esempio SMB). Questo è il motivo per cui ho scritto un piccolo sniffer. Questa applicazione funziona a livello IP e raccoglie i dati utilizzando recvfrom.

Quindi ho l'indirizzo dell'host remoto, delle porte locali e remote. Questo è piuttosto interessante, ma devo anche avere il PID del proprietario del socket locale. Quindi, c'è un modo semplice per ottenere tale PID? La soluzione alternativa sta usando GetTcpTable, GetUdpTable o AllocateAndGetUdpExTableFromStack e AllocateAndGetTcpExTableFromStack (ci sono molte differenze tra queste funzioni tra 2k, XP, XP SP2 e Vista) e per cercare le tabelle dei risultati, ma sembra inelegante e inefficiente ...

Quindi esiste un qualsiasi tipo di " GetPIDOfSocket " funzione? La risoluzione deve essere solo WinAPI (no .net), poiché è possibile utilizzare varie lingue, ad esempio C ++, Delphi.

È stato utile?

Soluzione

Siamo spiacenti di dirtelo, ma l'utilizzo di GetTcpTable o AllocateAndGetTcpExTableFromStack non è una soluzione alternativa, è in realtà il funzionamento di altre applicazioni di tipo netstat. AFAIK non esiste alcuna funzione " GetPIDOfSocket " Win32, l'unica opzione è eseguire il polling usando le funzioni della tabella delle porte. Ma almeno puoi codificarlo tu stesso e non devi generare il processo netstat.

Vedi il codice sorgente di SysInternals C per netstatp qui . Non ce n'è molto e vale la pena dare un'occhiata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top