Netzwerkverkehr in Windows erfassen
Worum geht es hier?
Es passiert mir so oft… etwas ist seltsam oder funktioniert nicht wie erwartet, und da kommt die Frage: “Was ist da los? Warum verhält sich der Client oder Server so?” Oft sind das Probleme, die mit dem Netzwerk zusammenhängen.
Ein Sicherheitsforscher hat mir einmal gesagt: “Wenn du verstehen willst, wie ein System funktioniert, musst du den Netzwerkverkehr verstehen. Fast jedes Problem kann auf Netzwerkebene diagnostiziert werden.” Aus meiner Erfahrung: Es stimmt. 🥳
Leider habe ich auch die Erfahrung gemacht, dass viele Leute nicht wissen, wie man Netzwerkverkehr unter Windows erfasst, und die einzige Lösung ist “lass uns Wireshark installieren”.
Nun, auch wenn Wireshark ein großartiges Tool ist, ist es nicht die einzige Lösung und wahrscheinlich nicht die beste Lösung für eine schnelle und einmalige Erfassung. Es gibt definitiv bessere und wahrscheinlich schnellere Lösungen, insbesondere wenn es um deine gut gepolsterten, hochsicheren Server geht.

Überlegungen zur Situation
Noch einmal, Wireshark ist ein leistungsstarkes Tool und mehr oder weniger der De-facto-Standard für Netzwerkprotokollanalysen. Du wirst es auf jeden Fall verwenden, um das Erfasste zu analysieren. Aber der Nachteil von Wireshark ist:
- Es kann nicht ohne die Installation einer zusätzlichen Komponente neben dem Produkt selbst erfasst werden: einem Netzwerktreiber (WinPcap oder Npcap).
- Es ist ein lebendiges und komplexes Tool mit vielen Binärdateien und potenziellen Sicherheitsanfälligkeiten.
- Jede Installation auf einem Server ist ein potenzieller Angriffsvektor und trägt dazu bei, deine Server zu “schneeflocken”.
Es ist wahrscheinlich nicht das Tool, das du auf einem Produktionsserver haben möchtest, insbesondere wenn du nur etwas Verkehr für eine schnelle Analyse erfassen möchtest.
Auf jeden Fall solltest du es auf deinem Arbeitsplatzrechner installieren, um das Erfasste zu analysieren. Du musst nicht einmal Administratorrechte haben, um mit Wireshark zu analysieren! Wireshark läuft problemlos als portable Installation ohne eine systemweite Installation.
Was sind also die Alternativen?
Es gibt mehrere Alternativen, um die Aufgabe unter Windows zu erledigen. Und das Beste daran ist, dass du nichts auf der Maschine installieren musst. Es gibt eingebaute Tools in Windows, die die Aufgabe erledigen können… und sie sind ziemlich leistungsstark. In Kombination mit etwas PowerShell und der PSRemoting-Funktionalität lässt sich das leicht skalieren.
1. netsh trace - Der alte, aber bewährte
Der netsh trace Befehl ist ein eingebautes Tool in Windows, das es dir ermöglicht, Netzwerkverkehr ohne zusätzliche Software zu erfassen. Es verwendet das Windows Event Tracing for Windows (ETW) Framework, um Netzwerkereignisse zu erfassen und zu protokollieren.
Im Wesentlichen sind es netsh trace start und netsh trace stop, um die Erfassung zu starten und zu stoppen, aber es gibt netsh trace show, um den aktuellen Status anzuzeigen, und netsh trace convert, um die erfassten Daten in ein lesbareres Format zu konvertieren.
Hier ist eine kurze Übersicht über die verfügbaren Befehle in netsh trace:
Die folgenden Befehle sind verfügbar:
Befehle in diesem Kontext:
? - Zeigt eine Liste der Befehle an.
convert - Konvertiert eine Trace-Datei in einen HTML-Bericht.
correlate - Normalisiert oder filtert eine Trace-Datei in eine neue Ausgabedatei.
diagnose - Startet eine Diagnose-Sitzung.
dump - Zeigt ein Konfigurationsskript an.
export - Exportiert ein Szenario in ein WPR-Profil.
help - Zeigt eine Liste der Befehle an.
merge - Fügt Trace-Dateien zusammen und fügt Symbolmetadaten hinzu.
postreset -
show - Listet Schnittstellen, Anbieter und den Trace-Zustand auf.
start - Startet das Tracing.
stop - Stoppt das Tracing.
Um Hilfe zu einem Befehl anzuzeigen, gib den Befehl gefolgt von einem Leerzeichen und dann
ein ? ein.
Jetzt konzentrieren wir uns auf die Befehle start und stop, die du verwenden wirst, um Netzwerkverkehr zu erfassen. Die Benennung ist ziemlich selbsterklärend, denke ich. Um eine Netzwerkaufnahme zu starten, musst du ein paar weitere Parameter angeben. Grundsätzlich musst du nur angeben, dass du Verkehr erfassen möchtest. Das ist einfach der Parameter capture=yes.
Auch wenn das alles ist, was du als absolutes Minimum benötigst, gibt es einen weiteren Parameter, der für die Effizienz empfohlen wird. Wenn du nur daran interessiert bist, den Netzwerkverkehr zu erfassen, kannst du das Berichtserstellungsverhalten von netsh mit report=disabled deaktivieren. Dies beschleunigt den Erfassungsprozess und reduziert die Größe der erfassten Datei, da sie keine zusätzlichen Berichtsdaten enthält.
Die restlichen Parameter können verwendet werden, um den Erfassungsprozess nach deinen Bedürfnissen anzupassen. Natürlich kannst du angeben, wo die Trace-Datei gespeichert werden soll und was erfasst werden soll, aber das ist nicht zwingend erforderlich.
Da die Erfassung von Netzwerkverkehr eine systemweite Operation ist und alle Prozesse (und alle Benutzer) im System betrifft, musst du die netsh trace-Befehle mit administrativen Rechten ausführen.
Hier ist der grundlegende Befehl, um Netzwerkverkehr mit netsh trace zu erfassen:
# Netzwerkverkehr auf der "Ethernet"-Schnittstelle erfassen und in einer Datei speichern
netsh trace start capture=yes report=disabled
Sobald du hast, was du brauchst, kannst du die Erfassung mit folgendem Befehl stoppen:
# Stoppe die Erfassung des Netzwerkverkehrs
netsh trace stop

Der erfasste Verkehr wird in einer .etl-Datei gespeichert, die später analysiert werden kann. Wenn du einen benutzerdefinierten Dateinamen und Speicherort für die erfassten Daten haben möchtest, kannst du dies mit dem Parameter tracefile angeben.
# Netzwerkverkehr erfassen und in einer bestimmten Datei speichern
netsh trace start capture=yes report=disabled tracefile=C:\Administration\Logs\MyTraceFile.etl
Jetzt, da wir den Verkehr erfasst haben, müssen wir ihn analysieren...
Das Öffnen der etl-Datei in Wireshark erfordert - leider - einen zusätzlichen Schritt. Aber bleib dran, es ist nicht so schwer und erfordert immer noch keine Installation:
Verwende einfach etl2pcapng, ein sehr kleines Tool von Microsoft, und du bist bereit. Es konvertiert die etl-Datei in eine pcapng-Datei, die leicht in Wireshark zur Analyse geöffnet werden kann.
# Konvertiere die .etl-Datei in das .pcapng-Format
etl2pcapng nettrace.etl nettrace.pcapng
Sicherlich darf der Dateiname im Befehl ein vollständig qualifizierter Pfad sein, einschließlich Laufwerksbuchstaben und Verzeichnissen. Dies ist nur ein schnelles Beispiel.

Die erstellte etl-Datei kann nach der Konvertierung gelöscht werden, wenn du sie nicht mehr benötigst. Die pcapng-Datei ist die, die du zur Analyse in Wireshark verwenden wirst.
Abgesehen davon, dass du mit dieser Methode nichts auf dem System installieren musst, hast du auch den Vorteil, eine detailliertere Erfassung zu haben, da netsh trace mehr als nur den Netzwerkverkehr erfasst. Es erfasst auch zusätzliche Informationen über das System und die Prozesse, die bei der Fehlersuche und Analyse sehr nützlich sein können:

Dieser Prozess funktioniert ziemlich gut auf jedem Windows-System bis zurück zu Windows 7 und Windows Server 2008 R2. Angesichts dessen ist das eine ziemlich gute eingebaute Lösung, um das zu bekommen, was du willst.
Nochmals, all dies funktioniert, ohne etwas auf dem System zu installieren, was ein großer Vorteil ist, insbesondere auf Produktionsservern. Du kannst einfach die Befehle ausführen, den Verkehr erfassen und ihn auf deinem Arbeitsplatzrechner mit Wireshark analysieren, ohne eine Installation auf dem Server selbst.
Es gibt viele weitere Parameter und Optionen für netsh trace, die es dir ermöglichen, den Erfassungsprozess nach deinen Bedürfnissen anzupassen. Zum Beispiel kannst du
- Protokollfilter
- Ethernet-Typfilter
- IP-Adressfilter
- spezifische Schnittstellen zur Erfassung
- und vieles mehr angeben
Du kannst alle verfügbaren Optionen anzeigen, indem du netsh trace show CaptureFilterHelp ausführst. Dies gibt dir eine detaillierte Liste aller verfügbaren Filter und Optionen, die du zur Anpassung deiner Erfassung verwenden kannst.
Meine persönlichen Favoriten sind:
# Um nur IPv4-Verkehr zu erfassen:
Ethernet.Type=IPv4
# Um nur TCP/UDP oder beide zu erfassen:
Protocol=TCP
Protocol=UDP
Protocol=(TCP,UDP)
# Erfassung auf spezifische IP-Adressen beschränken:
IPv4.SourceAddress=<IPv4-Adresse>
IPv4.DestinationAddress=<IPv4-Adresse>
IPv4.Address=(<IPv4-Adresse>,<IPv4-Adresse>)
Mit diesen Optionen solltest du gut gerüstet sein, um den relevantesten Verkehr für deine Analyse und Fehlersuche effektiv zu erfassen. Du kannst die Filter kombinieren, um nur den Verkehr zu erfassen, der für deinen spezifischen Anwendungsfall relevant ist, was dir helfen kann, dich auf die wichtigen Daten zu konzentrieren und das Rauschen in deiner Erfassung zu reduzieren.
Du findest einige Beispiele im Abschnitt praktische Beispiele unten.
2. pktmon - Der neue Junge im Block
Pktmon ist ein neueres eingebautes Tool in Windows 10 / Windows Server 2019 und später, das bequemere Paketüberwachungsfunktionen bietet.
Es ist ebenfalls ein Befehlszeilentool, das es dir ermöglicht, Verkehr zu erfassen, aber es konzentriert sich mehr auf die Paketüberwachung als netsh trace und bietet eine etwas benutzerfreundlichere Oberfläche zur Verwaltung von Paketfiltern und zur Erfassung von Verkehr. Die Syntax ist ein wenig anders, aber im Großen und Ganzen gleich. Wenn du mit netsh trace vertraut bist, solltest du dich damit wohlfühlen. Hier ist eine kurze Übersicht über die verfügbaren Befehle in pktmon:
pktmon <Befehl> [OPTIONEN | Hilfe]
Erweiterte Paketaufnahme und Ereignissammlung.
Befehle
filter Paketfilter verwalten.
list Paketverarbeitungskomponenten auflisten.
start Starten
```Paketaufzeichnung, Zähler und Ereignissammlung.
stop Stoppe die Datensammlung.
status Abfrage des aktuellen Status.
unload Lade den PktMon-Treiber.
counters Zeige aktuelle Paket-Zähler an.
reset Setze die Paket-Zähler auf null zurück.
etl2txt Konvertiere Protokolldatei in Textformat.
etl2pcap Konvertiere Protokolldatei in pcapng-Format.
hex2pkt Dekodiere Paket im hexadezimalen Format.
help Zeige Hilfetext für einen bestimmten Befehl an.
Beispiel: pktmon start help
Da es auch das Windows Event Tracing for Windows (ETW) Framework nutzt, um die Netzwerkereignisse aufzuzeichnen, erzeugt es auch etl-Dateien. Hier ist ein kurzes Beispiel, wie du es verwenden kannst:
# Beginne mit der Aufzeichnung von Paketen und speichere die Ausgabe in einer Datei
pktmon start --capture pktmon.etl
# Stoppe die Aufzeichnung
pktmon stop
Wie du sehen kannst, ist die Syntax zwar etwas anders als bei netsh trace, kommt aber ziemlich nah dran. Du kannst den Berichtparameter überspringen, der in seinem älteren Pendant benötigt wird. Das macht den Aufruf etwas kürzer.

Hier ist ein echter Vorteil von pktmon: Im Gegensatz zum klassischen netsh trace kann die aufgezeichnete Daten direkt in eine .pcapng-Datei umgewandelt werden, dank der integrierten Fähigkeit von pktmon. Das bedeutet, dass du in einem aktuellen Betriebssystem nicht einmal das zusätzliche Tool etl2pcapng für die Umwandlung verwenden musst.
Du kannst die aufgezeichneten Daten direkt in eine .pcapng-Datei zur Analyse mit Wireshark umwandeln:
# Konvertiere die .etl-Datei in das .pcapng-Format
pktmon etl2pcap pktmon.etl
Die erstellte etl-Datei kann nach der Umwandlung gelöscht werden, wenn du sie nicht mehr benötigst. Die pcapng-Datei ist die, die du für die Analyse in Wireshark verwenden wirst. Da die pcapng-Datei nur die Verkehrsdaten enthält und nicht so viele zusätzliche Informationen über das System und die Prozesse, ist sie leichter als die etl-Datei. Aber im Falle einer längeren Aufzeichnung oder bei hohem Verkehr kann sie trotzdem ziemlich groß sein.

Wie bereits für netsh trace skizziert, bietet pktmon ebenfalls viele Filteroptionen. Du kannst erneut Protokollfilter, IP-Adressen und vieles mehr angeben, um deine Aufzeichnung einzuschränken. Du kannst dir alle verfügbaren Optionen anzeigen lassen, indem du pktmon filter add help ausführst. Dies gibt dir eine detaillierte Liste aller verfügbaren Filter und Optionen, die du verwenden kannst, um deine Aufzeichnung anzupassen. Der Hauptunterschied besteht darin, dass du die Filter vor dem Start der Aufzeichnung hinzufügen musst, was ein echter Unterschied zu netsh trace ist, wo du die Filter direkt im Startbefehl angeben kannst. Aber das könnte nicht so schlimm sein, wenn du dies über Skripte machst. Meiner Meinung nach erleichtert das die Lesbarkeit des Befehls, da du nicht viele Parameter im Startbefehl hast, sondern es ist mehr getrennt und strukturiert.
Hier sind einige Beispiele für Filter, die du mit pktmon verwenden kannst:
# Um nur IPv4-Verkehr aufzuzeichnen:
pktmon filter add -p IPv4
# Um nur TCP/UDP oder beides aufzuzeichnen:
pktmon filter add -p TCP
pktmon filter add -p UDP
# Einschränkung der Aufzeichnung auf bestimmte IP-Adressen:
pktmon filter add -a IPv4.SourceAddress <IPv4-Adresse>
pktmon filter add -a IPv4.DestinationAddress <IPv4-Adresse>
pktmon filter add -a IPv4.Address <IPv4-Adresse>
Die Tatsache, dass du die Filterhinzufügungsbefehle mehrmals ausführen kannst, um mehrere Filter hinzuzufügen, kann ziemlich nützlich sein, da es dir ermöglicht, deine Filterkonfiguration Schritt für Schritt aufzubauen und sie organisierter zu halten. Du kannst auch die aktuell konfigurierten Filter mit pktmon filter list auflisten, um zu sehen, welche Filter derzeit aktiv sind, bevor du die Aufzeichnung startest.
3. Get-NetEventSession - Der native PowerShell-Weg
Falls du ein PowerShell-Nerd bist, hier ist eine weitere Möglichkeit, Netzwerkverkehr mit dem Cmdlet Get-NetEventSession aufzuzeichnen, das Teil des Moduls NetEventPacketCapture ist. Dieses Cmdlet ermöglicht es dir, Netzwerkereignissitzungen zu erstellen und zu verwalten, die zur Aufzeichnung von Netzwerkverkehr verwendet werden können. Auch wenn dies etwas mehr Text erfordert, bringt PowerShell einige ziemlich interessante Funktionen mit sich:
- Eingebaute Tab-Vervollständigung für Parameter
- PowerShell-Remoting über die integrierten -CimSession-Parameter in den Cmdlets
# Erstelle eine neue Netzwerkereignissitzung
$session = New-NetEventSession -Name "MySession" -LocalFilePath "C:\path\to\capture.etl"
# Füge einen Anbieter hinzu, um Netzwerkverkehr aufzuzeichnen (z.B. Microsoft-Windows-Kernel-Network)
Add-NetEventProvider -SessionName $session.Name -Name "Microsoft-Windows-Kernel-Network"
# Überprüfe die erstellte Sitzung
$session
# Starte die Sitzung, um mit der Aufzeichnung des Verkehrs zu beginnen
$session | Start-NetEventSession
# Stoppe die Sitzung, um die Aufzeichnung zu beenden
$session | Stop-NetEventSession
Auf die gleiche Weise wie bei den Befehlszeilentools wird der aufgezeichnete Verkehr in einer .etl-Datei gespeichert, die nach der Umwandlung in das pcapng-Format mit etl2pcapng oder pktmon analysiert werden kann. Ich werde dies nicht erneut skizzieren, da es der gleiche Prozess ist, wie oben beschrieben.

Ich muss ehrlich zugeben, dass dies nicht mein bevorzugter Weg ist, um Netzwerkverkehr aufzuzeichnen, da es etwas komplex ist, mit den verschiedenen Befehlen und den zugrunde liegenden Konzepten von Netzwerkereignissitzungen und Anbietern umzugehen. Aber wenn du vollständig in einer PowerShell-Welt bleiben möchtest, ist es dennoch ein integrierter und leistungsstarker Weg, um Verkehr aufzuzeichnen.
Im Abschnitt praktische Beispiele weiter unten findest du ein Beispiel, in dem ich die Remoting-Funktionen von PowerShell verwendet habe, um Netzwerkverkehr auf einem Remote-System in Kombination mit den oben genannten Befehlszeilentools aufzuzeichnen. Dies ist eine ziemlich leistungsstarke Kombination, und meiner persönlichen Meinung nach spricht nichts dagegen, Befehlszeilentools in Kombination mit PowerShell zu verwenden. Wie so oft… benutze, was am besten zu dir und deinem Anwendungsfall passt. Es gibt keine Lösung, die für alle passt.
Obwohl, natürlich, ❤️ PowerShell ❤️ ziemlich nah an einer Lösung für alle ist. 😁
4. Der GUI-Weg: Leistungsmonitor
Wenn du eine klassische und MMC-basierte grafische Benutzeroberfläche innerhalb von Windows bevorzugst, kannst du auch den integrierten Leistungsmonitor (PerfMon) verwenden. PerfMon ermöglicht es dir, Datensammlungssets zu erstellen, die verschiedene Leistungsmetriken, einschließlich Netzwerkverkehr, aufzeichnen können.

Effektiv basieren alle oben genannten Tools auf der gleichen zugrunde liegenden Technologie, dem Windows Event Tracing for Windows (ETW) Framework, und sie bieten einfach unterschiedliche Schnittstellen und unterschiedliche Möglichkeiten zur Aufzeichnung von Ereignissen. Der Leistungsmonitor ist nur die GUI-basierte Schnittstelle für ETW.
Um Netzwerkverkehr mit dem Leistungsmonitor aufzuzeichnen, kannst du die folgenden Schritte befolgen:
- Öffne den Leistungsmonitor, indem du
perfmonim Startmenü eingibst und Enter drückst. - Erweitere im linken Bereich “Datensammlungssets” und klicke mit der rechten Maustaste auf “Benutzerdefiniert”. Wähle “Neu” > “Datensammlungsset”.
- Gib deinem Datensammlungsset einen Namen (z.B. “NetworkTrafficCapture”) und wähle “Manuell erstellen (Erweitert)”. Klicke auf “Weiter”.
- Wähle im Schritt “Datensammler erstellen” “Leistungszähler” aus und klicke auf “Weiter”.
- Klicke auf “Hinzufügen”, um Leistungszähler hinzuzufügen. Erweitere im Dialogfeld “Zähler hinzufügen” “Netzwerkschnittstelle” und wähle die Zähler aus, die du aufzeichnen möchtest (z.B. “Bytes Total/sec”, “Packets/sec”). Klicke auf “Hinzufügen” und dann auf “OK”.
- Klicke auf “Weiter” und gib den Speicherort an, an dem du die aufgezeichneten Daten speichern möchtest. Klicke auf “Weiter” und dann auf “Fertigstellen”, um das Datensammlungsset zu erstellen.
- Um mit der Aufzeichnung des Netzwerkverkehrs zu beginnen, klicke mit der rechten Maustaste auf dein neu erstelltes Datensammlungsset (z.B. “NetworkTrafficCapture”) und wähle “Starten”. Die Leistungszähler beginnen mit der Datensammlung.
- Um die Aufzeichnung zu stoppen, klicke erneut mit der rechten Maustaste auf das Datensammlungsset und wähle “Stoppen”. Die aufgezeichneten Daten werden am angegebenen Speicherort gespeichert.

Dies ist eine besonders nützliche Methode, wenn du Leistungsmetriken im Zusammenhang mit Netzwerkverkehr über verschiedene Zeitpläne und über einen längeren Zeitraum aufzeichnen möchtest. Es ist nicht die beste Methode für eine schnelle Aufzeichnung und Analyse, kann aber sehr nützlich sein, um die Netzwerkleistung über die Zeit zu überwachen und zu analysieren.
Zusätzlich zur Planung können solche definierten Datensammlungssets leicht auf anderen Systemen exportiert und importiert werden, was sehr nützlich sein kann, um den Aufzeichnungsprozess über mehrere Server oder Arbeitsstationen zu standardisieren. Dies ist besonders nützlich, wenn du verschiedene Metriken zusammen mit der Netzwerkverkehrsaufzeichnung kombinierst, wie CPU-Auslastung, Speicherauslastung, Festplatten-I/O usw., um einen umfassenderen Überblick über die Leistung und das Verhalten des Systems in Bezug auf den Netzwerkverkehr zu erhalten.
Ich werde nicht weiter ins Detail gehen, da die Hauptabsicht dieses Blogbeitrags darin besteht, zu zeigen, wie man schnell und in der Konsole aufzeichnet.
Praktisches Beispiel
Nur HTTP- oder HTTPS-Verkehr aufzeichnen
Dies könnte ein häufiger Anwendungsfall sein.
Leider gibt es, soweit ich weiß, keine integrierte Möglichkeit in netsh trace start, um spezifische Ports aufzuzeichnen. 😣 Die Filter erlauben es nicht, so spezifisch zu sein. Aber mit pktmon kannst du das ganz einfach tun. Es ist erwähnenswert, dass dies nur unter Windows Server 2019 und Windows 10+ Versionen nach 1809 möglich ist.
Du kannst den folgenden Befehl verwenden, um nur HTTP- und HTTPS-Verkehr aufzuzeichnen:
pktmon filter add "http + https" -d IPv4 -t TCP -p 80 443
pktmon start --capture --file-name https_traffic.etl
pktmon stop
pktmon filter remove
Erfasse nur DNS-Verkehr
Wenn du nur daran interessiert bist, DNS-Verkehr zu erfassen, kannst du den folgenden Befehl verwenden, um nur DNS-Verkehr zu erfassen:
pktmon filter add "UDP DNS" -d IPv4 -t UDP -p 53
pktmon filter add "TCP DNS" -d IPv4 -t TCP -p 53
pktmon start --capture --file-name dns_traffic.etl
pktmon stop
pktmon filter remove
Erfasse nur SMTP-Verkehr
Wenn du nur SMTP-Verkehr erfassen möchtest, kannst du den folgenden Befehl verwenden, um nur SMTP-Verkehr zu erfassen:
pktmon filter add "SMTP" -d IPv4 -t TCP -p 25
pktmon start --capture --file-name smtp_traffic.etl
pktmon stop
pktmon filter remove
Dies ist nur ein weiteres schnelles Beispiel dafür, wie du die Filterfunktionen von `pktmon` nutzen kannst, um nur spezifische Arten von Verkehr zu erfassen.
Erfasse über netsh trace mit spezifischer IP
Wenn du gezwungen bist, netsh trace zu verwenden, aufgrund älterer Betriebssysteme oder weil du es bevorzugst, empfehle ich, einen IP-Filter für die IP deines Systems anzugeben. So schneidest du Broadcast- und anderen Verkehr ab, der wahrscheinlich nicht mit deinem System zusammenhängt.
Zuerst bereite deinen IP-Filter und den Dateipfad für die Erfassung vor:
$localIpList = (Get-NetIPAddress -AddressState Preferred -PrefixOrigin Dhcp, Manual -AddressFamily IPv4).ipaddress
$ipFilter = "($($localIpList -join ","))"
$filePath = "traffic.etl"
Starte dann die Erfassung mit dem IP-Filter:
netsh trace start capture=yes report=disabled overwrite=yes fileMode=circular Protocol="(UDP,TCP)" tracefile="$($filePath)" IPv4.Address=$ipFilter
Überprüfe den Status der Erfassung:
netsh trace show status
Mach dein Ding, und wenn du fertig bist, stoppe die Erfassung:
netsh trace stop
Mit diesem Ansatz kannst du ganz einfach nur den Verkehr erfassen, der für dein System relevant ist, was dir hilft, dich auf die wichtigen Daten zu konzentrieren und das Rauschen in deiner Erfassung zu reduzieren. Dies ist besonders nützlich in Umgebungen mit viel Netzwerkverkehr, wo das Erfassen von allem zu einer sehr großen und unhandlichen Erfassungsdatei führen würde.
Erfasse Verkehr über PowerShell-Remoting
Ich möchte einen weiteren praktischen Anwendungsfall skizzieren, den ich in der realen Welt mehrfach verwendet habe. Wenn es um größere Umgebungen mit mehreren Servern geht, ist es nicht wirklich effizient, sich bei jedem Server anzumelden und die Erfassungsbefehle einzeln auszuführen.
Hier kommt PowerShell-Remoting ins Spiel. 🎉
Du kannst die PowerShell-Remoting-Funktionen mit den oben genannten Befehlszeilentools kombinieren, um ganz einfach Verkehr auf einer beliebigen Anzahl von Systemen zu erfassen. Ich halte das für eine ziemlich mächtige Kombination!
Hier ist ein schnelles Beispiel, wie du das machen kannst:
(Für das Offensichtliche kannst du die Skriptblöcke anpassen, um zusätzliche Filter oder Parameter für deinen spezifischen Anwendungsfall hinzuzufügen)
# Definiere die Liste der Remote-Server, auf denen du Verkehr erfassen möchtest
$remoteServers = @("Server1", "Server2", "Server3")
# Definiere den Basis-Pfad und den Dateinamen auf den Remote-Servern
$remoteBasePath = "C:\Administration\Logs"
$remoteCaptureFileName = "traffic_http"
# Erstelle eine Sitzung zu den Remote-Servern
$sessions = New-PSSession -ComputerName $remoteServers
# Definiere den Skriptblock, um die Netzwerkverkehrserfassung mit pktmon zu starten
$scriptStart = {
$filePath = "$($using:remoteBasePath)\$($using:remoteCaptureFileName)_$($env:COMPUTERNAME)_$(Get-Date -Format 'yyyy-MM-dd-HH-mm-ss').etl"
PktMon.exe filter add "HTTP" -d IPv4 -t TCP -p 80
PktMon.exe start --capture --file-name "$($filePath)"
}
# Führe den Skriptblock auf jedem Remote-Server mit PowerShell-Remoting aus
Invoke-Command -Session $sessions -ScriptBlock $scriptStart
Jetzt mach dein Ding, um das zu bekommen, was du willst…
Du kannst den Status der Erfassung auf jedem Remote-Server mit dem folgenden Befehl überprüfen:
Invoke-Command -Session $sessions -ScriptBlock { PktMon.exe status }
Wenn du bereit bist, kannst du die Erfassung stoppen und die erfassten Daten auf jedem Remote-Server mit dem folgenden Befehl in das .pcapng-Format konvertieren:
$scriptStop = {
# Stoppe die Erfassung
PktMon.exe stop | Out-Null
# Entferne die Filter (um für die nächste Erfassung sauber zu sein)
PktMon.exe filter remove | Out-Null
# Konvertiere die .etl-Datei in das .pcapng-Format
PktMon.exe etl2pcap $filePath
# Lösche die ursprüngliche .etl-Datei nach der Konvertierung
Remove-Item -Path $filePath -Force
}
Invoke-Command -Session $sessions -ScriptBlock $scriptStop
Jetzt hast du den Verkehr auf jedem Remote-Server erfasst, aber auf die gleiche Weise hast du eine Erfassungsdatei auf jedem Server. Glücklicherweise hilft dir PowerShell auch in dieser Situation. Du kannst die gleichen Remoting-Funktionen nutzen, um die erfassten Dateien auf deinen lokalen Arbeitsplatz zur Analyse mit Wireshark zu kopieren. Du kannst das Cmdlet Copy-Item mit dem Parameter -ToSession verwenden, um die Dateien von den Remote-Servern auf deinen lokalen Computer zu kopieren.
# Definiere den lokalen Pfad, wo du die erfassten Dateien speichern möchtest
$localPath = Join-Path -Path $home -ChildPath "LocalData"
# Kopiere die erfassten Dateien von jedem Remote-Server auf den lokalen Computer
foreach ($session in $sessions) {
$remoteFilePath = "$($remoteBasePath)\$($remoteCaptureFileName)_*.pcapng"
Copy-Item -Path $remoteFilePath -Destination $localPath -FromSession $session
}
# Lösche die pcapng-Dateien von den Remote-Servern nach dem Kopieren
Invoke-Command -Session $sessions -ScriptBlock {
Remove-Item -Path ($filePath -replace ".etl", ".pcapng") -Force
}
Wenn du fertig bist, entferne die Sitzungen zu den Servern:
# Entferne die Sitzungen zu den Remote-Servern
Remove-PSSession -Session $sessions
Wie dieses Beispiel zeigt, kannst du ganz einfach Netzwerkverkehr auf mehreren Systemen erfassen, indem du **`PowerShell` und `pktmon` kombinierst**. Dieser Ansatz ermöglicht es dir, Netzwerkverkehr in deiner Umgebung effizient zu verwalten und zu analysieren, ohne manuelle Eingriffe oder die Installation von etwas auf den Remote-Servern. Dieses Beispiel geht davon aus, dass du Systeme mit - mehr oder weniger - aktuellen Versionen von Windows hast. Falls `pktmon` auf deinen Systemen nicht verfügbar ist, ersetze einfach die `pktmon`-Befehle durch die entsprechenden `netsh trace`-Befehle.
Siehe die netsh-Beispiele von oben, um Ideen zu bekommen, wie du es verwenden kannst. Die gesamte Struktur der Skriptblöcke bleibt gleich.
Fazit
Die Erfassung von Netzwerkverkehr in Windows kann EINFACH mit verschiedenen integrierten Tools durchgeführt werden, die jeweils ihre eigenen Vorteile und Anwendungsfälle haben. Egal, ob du Befehlszeilentools wie netsh trace und pktmon oder eine grafische Benutzeroberfläche wie den Leistungsmonitor bevorzugst, es gibt Optionen, die unterschiedlichen Bedürfnissen und Vorlieben gerecht werden.
Für schnelle Erfassungen und Analysen ist pktmon eine großartige Wahl aufgrund seiner Benutzerfreundlichkeit und direkten Konvertierungsfähigkeiten. (Wenn du auf Windows Server 2019 oder Windows 10+ Versionen nach 1809 bist) Auf älteren Systemen kann netsh trace ein leistungsstarkes Tool sein, das - die Arbeit erledigt -.
Und für diejenigen, die eine GUI bevorzugen, bietet der Leistungsmonitor eine umfassende Möglichkeit, Netzwerkleistungsmetriken zu erfassen und zu analysieren. Letztendlich hängt das beste Tool zur Erfassung von Netzwerkverkehr in Windows von deinen spezifischen Anforderungen und dem Detailgrad ab, den du für deine Analyse benötigst.
