Ich versuche, Echtzeitdaten über TCP-Verbindungen auf einer Maschine mit ETW und dem Microsoft-Windows-TCPIP-Provider und der Microsoft TraceEvent-Bibliothek zu erfassen.
Einer der Werte, die Sie daraus erhalten können, ist der TCB, der eine Zahl ist.
Ich weiß, was ein TCB ist (Transmission Control Block), aber ich habe keine Ahnung, was die Zahl bedeutet, das Beste, was ich aus dem Manifest herausfinden konnte, ist, dass es ein Zeiger ist.
Was ich wirklich gerne tun würde, ist das Lesen der tatsächlichen TCB und das Herausholen der Adresse, die sie auch verbindet. Ich weiß, dass ich eine Adresse von den Verbindungs- und Ablaufereignissen erhalten kann, aber aus verschiedenen Gründen habe ich nicht immer diese und die Sendeereignisse enthalten nur die TCB.
Bearbeiten:
Ich habe eine Reihe von APIs gefunden, mit denen Sie die TCB-Tabellen lesen können Ссылка
Allerdings würde ich gerne die TCB-Nummer verwenden, die von ETW zurückkommt, um dann eine API aufzurufen und die TCB-Information
zu erhaltenZusätzliche Bearbeitung:
Ich möchte die Prozess- und Thread-IDs im ETW-Ereignis verwenden, um zu ermitteln, mit welcher Adresse der Prozess und der Thread kommunizieren.
Zusätzliche Bearbeitung:
Alles funktioniert, wenn ich das Verbindungsereignis erhalten kann, das die Adressaten und die Ports hat, kann ich es mit den nachfolgenden Senden und Trennen verbinden, die die TCB-Nummer verwenden. Ich brauche eine Lösung für bestimmte Fälle, in denen ich das Verbindungsereignis nicht habe, nur ein Senden.
Sie haben gesagt, dass Sie die Verbindungen mit den spezifischen Threads / Prozessen im Kommentar verknüpfen möchten. Zu diesem Zweck können Sie TCB als Referenz verwenden, um alle Ereignisse für eine TCP-Verbindung abzurufen. Nach den 3-Wege-Handshakes können Sie das Quell- / Ziel-IP / Port-Tupel im ConnConnect-Ereignis vom Http-Stapel finden. Dann können Sie den Prozess finden, der den Port abhört.
Sie können auch versuchen, mit den Webserverereignissen (wie IIS) zu korrelieren, um weitere Informationen zu finden.
lohnt sich wie perfview die ETW Manifest bekommt in .net-Objekte konvertiert . Dies sollte Ihnen zumindest eine Vorstellung von allen verfügbaren Objekten geben. Sie werden sehen, dass es viele Zahlen in Bezug auf TCB gibt, so dass dies Ihnen wahrscheinlich helfen wird herauszufinden, welchen Sie wollen.
Die andere Sache, die es wert ist, zu versuchen, ist das Erfassen eines Netzwerk-Trace mit Microsoft Message Analyzer. Die Analysatoren hier sind großartig und Sie können verschiedene TCB-Werte als Werte für verschiedene Objekte sehen.
Ich habe noch nie in Message Analyzer eine Spur gefunden (noch zu lernen), aber das war für mich eine sehr praktische Erfassungsmethode. Die resultierende Datei, die Sie in Microsoft Message Analyzer öffnen können:
%Vor%Hinweis: Versuchen Sie, Ihre Captures so kurz wie möglich zu halten, da Message Analyzer für jede GUI-Aktion eine Menge zu verarbeiten scheint, was ihn ziemlich langsam macht.