PID von Socket-Nummer unter Windows?
Frage
Ich brauche Menge von Bytes zu zählen, aus dem Netzwerk von verschiedenen Anwendungen gesendet und empfangen werden. Zuerst dachte ich, über LSP, aber es gibt viele Anwendungen, die LSP überhaupt nicht zu (zum Beispiel SMB) verwenden. Aus diesem Grund habe ich einen kleinen Schnüffler geschrieben. Diese Anwendung funktioniert auf IP-Ebene und sammelt Daten Recvfrom verwenden.
So habe ich Adresse des Remote-Host, lokalen und Remote-Ports. Das ist ziemlich cool, aber ich muss auch PID der lokalen Socket Eigentümer haben. Also, gibt es eine einfache Möglichkeit, solche PID zu erhalten? Die Problemumgehung wird mit GetTcpTable, GetUdpTable Oder AllocateAndGetUdpExTableFromStack und AllocateAndGetTcpExTableFromStack (dort in diesen Funktionen zwischen 2k, XP, XP SP2 und Vista viele Unterschiede ist) und Ergebnistabellen nachzuschlagen, aber es scheint unelegant und ineffizient ...
So ist es irgendeine Art von „GetPIDOfSocket“ -Funktion? Die Auflösung sholud sein WinAPI (kein .net) nur, wie verschiedene Sprachen verwendet werden können, zB C ++, Delphi.
Lösung
Leider haben Sie sagen, aber GetTcpTable
oder AllocateAndGetTcpExTableFromStack
verwendet, ist kein Problem zu umgehen, ist es eigentlich, wie andere netstat-Typ-Anwendungen arbeiten. AFAIK gibt es keine Win32 "GetPIDOfSocket"
Funktion, die einzige Möglichkeit ist, die Port-Tabelle Funktionen abzufragen verwenden. Aber zumindest Sie können es selbst codieren und haben nicht den netstat Prozess zum Laichen.
Siehe SysInternals C-Quellcode für netstatp
hier . Es gibt nicht viel, und es ist auch ein Blick wert.