Automatisches Stoppen eines Netmon Traces, wenn ein Event geloggt wird

Hallo, hier mal wieder Rol.
Diesmal mit einem Beitrag zur Datenerfassung, bei dem ein Netzwerk Trace automatisch gestoppt wird, wenn auf einem Windows System ein Event erscheint.
Zum Beispiel loggt ein Member Server sporadisch den Netlogon Fehler 5783, weil die Kommunikation der DCs untereinander für einen Trust nicht sauber funktioniert. Der Fehler ist nicht gezielt reproduzierbar, was normalerweise eine Aufzeichnung vom Fehlerzeitraum enorm erschwert.

Um das zu erleichtern, kann man mit den Tools NMCAP.EXE und EVENTTRIGGERS.EXE arbeiten und die Erfassung automatisieren. EVENTTRIGGERS überwacht dabei die Events auf dem Member Server. Sobald das Netlogon Event 5783 erscheint, wird ein Ping mit spezieller Payload zum remoten Windows System gesendet, wo NMCAP läuft. NMCAP erhält das ICMP Frame und verwendet es als Auslöser das Trace zu stoppen.

Hierzu das Vorgehen:

1) Installation von Microsoft Netmon 3.2, darin ist dann das Tool NMCAP.EXE enthalten, in unserem Beispiel wird es auf dem System installiert wo der Netzwerkverkehr stattfindet, der uns interessiert. Man findet NMCAP.EXE dann unter “C:\Program Files\Microsoft Network Monitor 3”.
Dazu gleich der Download Link: https://go.microsoft.com/fwlink/?LinkID=103158
Und wer bei der Auswertung dann gleich noch mehr sehen will, als die Default Netmon Parser anbieten, verwendet dazu die Network Monitor Open Source Parsers von https://www.codeplex.com/NMParsers.

2) Zur Netzwerkmonitor Aufzeichnung NMCAP mit folgenden Parametern starten:

NMCAP.EXE /Network * /DisableLocalOnly /RecordFilters /RecordConfig /Capture ipv4.address==10.20.30.40 /File c:\Traces\%COMPUTERNAME%_trace.cap:100M /StopWhen /Frame (icmp and ipv4.totallength==328)

Erklärung zu den verwendeten Parametern:

/Capture ipv4.address==10.20.30.40 – zeichnet den Netzwerkverkehr von und zu dem System mit IP 10.20.30.40 auf; wenn nur “/Capture” angegeben wird, wird jeder Traffic ungefiltert aufgezeichnet

/File c:\Traces\%COMPUTERNAME%_trace.cap:100M 
– definiert ein zirkulares Trace Log File von 100MB im Verzeichnis C:\Traces; der Dateiname beginnt hier mit dem Computer Namen zur besseren Zuordnung; die Größe bestimmt wie weit die Historie in der Netzwerk Aufzeichnung reicht; möchte man mehrere Trace Dateien mit je 100MB erzeugen, kann man "Chaining" mit der Dateiendung CHN verwenden: /File c:\Traces\%COMPUTERNAME%_trace.chn:100M 

/StopWhen /Frame (icmp and ipv4.totallength==328)  
– stoppt das Trace wenn NMCAP über das Ping ein ICMP Paket mit 300byte Payload erhält (ICMP hat 28byte Overhead), also per “PING TracingSystem -l 300”

3) Definieren des Event Trigger am auslösenden System (das Tool Eventtriggers.exe ist ab Windows Server 2003 im Lieferumfang enthalten):

In unserem Beispiel soll die Aufzeichnung durch NMCAP über ein “ping TracingSystem -l 300” beendet werden, wenn Netlogon Error 5783 im System Eventlog auftaucht:

Eventtriggers.exe /Create /TR “Netlogon Error 5783” /L SYSTEM /T ERROR /EID 5783 /TK “ping <TracingSystem> -l 300”

Erklärung zu den verwendeten Parametern:

/TR “Netlogon Error 5783”
– der Anzeigename für das Trigger Event (falls mehrere definiert werden), dieses wird so dann auch angezeigt mit Eventtriggers /Query /V

/L SYSTEM
– der  Eventlog Name in dem das Event erscheint, EVENTTRIGGERS verarbeitet APPLICATION, SECURITY und SYSTEM

/T ERROR
– der Event Typ; möglich sind ERROR, INFORMATION und WARNING

/EID 5783
– die Event ID; für unser Beispiel ist die Event ID 5783 ausreichend, die Kategorie Netlogon muß nicht explizit angegeben werden

/TK “ping <TracingSystem> -l 300”
– der Befehl der dann ausgelöst werden soll; für unser Beispiel das ICMP Paket mit 300byte Payload welches zum Beenden der NMCAP Aufzeichnung an <TracingSystem> gesendet wird (Rechnernamen entsprechend ersetzen)

Wie man an dem Beispiel sieht, kann man das nun für verschiedene Szenarien anpassen und erweitern. So ist es durchaus denkbar, den Ping Trigger zum Stoppen des Traces abzusenden, wenn z.B. in einem Script mit FINDSTR in bestimmten Intervallen ein String in einer Logdatei gesucht und gefunden wird. Dazu passend muß das Trace Log File groß genug sein, damit eine Frame-Historie mit bis zu einem Intervall Länge darin Platz hat.

Ab Vista und Windows Server 2008 ist das Triggern erweiteret und noch einfacher. Hier geht es direkt aus dem Eventviewer heraus. In der linken Pane wählt man das Log aus und in der mittleren das entsprechende Event, dann in der rechten "Actions" Pane dann "Attach a Task To This Event... " klicken. Im Task Wizard dann zweimal "Next" und unter Action "Start a program" auswählen. Im Anschluß dann den Programm Pfad zum Script oder Befehl angeben.

Wer das ganze noch vertiefen möchte und eventuell auch für andere Event Logs, dem empfehle ich den weiterführenden Blog unseres US Netzwerk Teams mit dem Eintrag https://blogs.technet.com/netmon/archive/2007/02/22/eventmon-stopping-a-capture-based-on-an-eventlog-event.aspx oder auch das Tool NM3EventCap verwenden https://blogs.technet.com/b/networking/archive/2009/09/03/nm3eventcap-how-to-stop-a-network-capture-when-windows-logs-an-event.aspx

Damit gutes Gelingen und auf bald,
Euer Rol