2012-10-15 4 views

risposta

0

Le risposte a domande simili propongono sempre l'utilizzo di Iphlpapi ma non è del tutto chiaro come si otterrebbero i RpcS (nome del servizio) in questo copia di copia netstat -ban: TCP 0.0.0.0:135 0.0.0.0:0 aSCOLTO RpcSs [svchost.exe]

O il Programma qui:

TCP [::]: 49154 [::]: 0 ascolto Schedule [svchost.exe]

ho guardato per la soluzione a questo e non la pinna d qualsiasi cosa (-easy). Netstat chiama alcune funzioni non documentate in Iphlpapi ma non è chiaro se ottiene il nome del servizio da Iphlpapi o in qualche modo usa il pid da Iphlpapi e usa qualcos'altro per ottenere il nome del servizio. Non sono davvero tentato di passare il tempo con un debugger per rispondere a questo perché ..:

Tuttavia idealmente non si vorrebbe comunque utilizzare un approccio in stile polling da C#. Sarebbe più appropriato usare ETW. Penso che la mancanza di esempi di utilizzo da parte di C# sia dovuto al fatto che è necessario un certo overhead per iniziare e che gli esempi potrebbero essere specifici per altri tipi di scenari di monitoraggio/monitoraggio.

Riepilogo: Se si ha poco tempo per implementarlo, salvare l'output netstat sembra essere la "soluzione". Idealmente avrei voluto trovare un semplice esempio di C# per monitorare qualsiasi connessione di rete e capire quale servizio o processo sono stati gestiti/avviati insieme a possibili modifiche al firewall. Credo che sia possibile fare entrambe le cose con ETW, ma per le mie attuali esigenze è difficile giustificare la quantità sconosciuta di tempo necessaria per farlo funzionare. Ho almeno capito che "logman query provider" elenca i provider, quindi è necessario fare qualcosa per abilitare il provider (e il supporto del driver per la traccia in alcuni casi come l'acquisizione di pacchetti). C'è un progetto C# per l'utilizzo di ETW in giro. Ma non è affatto chiaro quanta fatica sarebbe per riprodurre l'output netstat con ETW.

1

Dopo aver guardato in giro ho scoperto che "OwningModuleInfo" non documentato nella struttura MIB_TCPROW_OWNER_MODULE.

Poi alla ricerca di che ho trovato questo commento:

Weird issue regarding GetOwnerModuleFromTcpEntry when targeting x64

"Sono giunto alla conclusione che il primo elemento della matrice è l'indice del servizio nell'elenco dei servizi in esecuzione, .. . "

Quindi la risposta alla domanda sarebbe quella di usarlo per ottenere informazioni sul nome che netstat -b mostra (nome servizio e indirizzo + porta), filtraggio per il servizio desiderato. Ho trovato questo lib https://github.com/Loriowar/IpHlpApidotnet che ha il mazzo di codice correlato già impostato tranne per questa funzione.

Altri link utili:

Marshalling Struct with Array of Struct Member

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366911(v=vs.85).aspx