Windows 2003 Shell Scripting

Shell Scripting im Netzwerk

Funktion

Zuerst benötigen wir eine Liste aller aktiven TCP-Verbindungen. Das erledigt der Aufruf von netstat -p TCP -a -o. Diese Ausgabe wird gefiltert, sodass nur die Zeilen mit der Kennung ESTABLISHED übrig bleiben. Das Ergebnis wird in eine temporäre Datei x.x geschrieben.

Diese Liste muss nun umgeschichtet werden, sodass Sie die PID des Prozesses als erste Spalte enthält und danach die Adresse des entfernten Rechners. Dazu wird zuerst eine eventuell noch bestehende Datei y.y gelöscht. Danach wird mithilfe einer for-Schleife die Datei umgeformt und in eine zweite Datei y.y geschrieben. Eine Alternative wäre die Ausführung der for-Schleife in einer Subshell und die Umleitung der gesamten Ausgabe per einfachem ">" in die Datei. Dies erspart die Zeile mit dem Löschen der Datei y.y. Dazu müsste die for-Schleife wie folgt modifiziert werden:

(for /F "tokens=3,5" %%f in (%temp%\x.x) do echo %%g%%f) > %temp%\y.y

Diese Datei muss noch sortiert werden, damit alle gleichen PIDs untereinander stehen. So kann die Ausgabe für alle Verbindungen zu einem Prozess erfolgen, bis die PID wechselt. Dazu verwenden wir sort.

Nach dem Sortieren kann die Ausgabe erzeugt werden. Damit wir wissen, welche PID gerade abgearbeitet wird, wird eine Umgebungsvariable (pid) mit der jeweiligen Prozess-ID belegt. Zu Beginn schreiben wir den Startwert -1 in die Variable.

In der nun folgenden for-Schleife wird die sortierte Datei x.x Zeile für Zeile eingelesen. Zuerst wird getestet, ob die in der Zeile verzeichnete PID bereits abgearbeitet wird. Schlägt dieser IF-Vergleich fehl, dann haben wir einen neuen Prozess, und es erfolgt die Ausgabe der Prozessdaten. Dazu werden per tasklist und einem Filter nach Prozess-ID der Name des Prozesses, die PID und die darin laufenden Dienste ausgegeben.

Ab der Marke :havePID laufen beide Zweige der vorigen IF-Abfrage wieder zusammen. Hier wird die Adresse der verbundenen Maschine (als Kombination aus Namen und Portnummer) ausgegeben. Sollten Sie eine numerische Ausgabe der Daten bevorzugen, ergänzen Sie beim Aufruf von netstat die Option -n für numeric output.

Nach der Ausgabe erfolgt noch das obligatorische Aufräumen, bei dem die beiden temporären Dateien gelöscht und mit endlocal die Änderungen an der Umgebung wieder rückgängig gemacht werden.