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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top