In diesem Artikel stelle ich euch einen PowerShell basierten Netzwerkscanner vor. Das Skript scannt ein bestimmtes Netzwerk nach erreichbaren IP-Adressen und löst zur Identifizierung dessen Hostnamen auf. Anschließend wird eine Liste von allen erreichbaren Geräten (Computer, Server, Smartphones usw.) ausgegeben.
Ein Netzwerkscanner kann praktisch sein, um grundlegende Informationen über die Größe eines Netzwerks und über alle momentan angemeldeten Geräte zu erhalten. Das Werkzeug kann für Diagnosen oder für Angriffe eingesetzt werden. Es muss erwähnt werden, dass das Skript nicht in öffentliche Wi-Fi-Netzwerke oder in fremden LANs angewendet werden sollte, da dies als Angriff gewertet und zur permanenten Sperre der eigenen IP-Adresse führen kann. Mehr Informationen über mögliche Einsatzgebiete findet ihr am Ende vom Beitrag.
Inhaltsverzeichnis: Einen Netzwerkscanner mit einem Skript für die PowerShell programmieren
PowerShell basierter Netzwerkscanner ohne GUI (Basic)
Beginnen wir im ersten Abschnitt mit einem leichtgewichtigen IP-Scanner für das Netzwerk, der die IP-Adressen und Hostnamen aller aktuell erreichbaren Geräte auflistet. Dafür kann das folgende Skript verwendet werden. Kopiere den Inhalt und speichere ihn in eine Zwischenablage (z. B. Texteditor).
Ergänze die IP-Adresse mit der von dem Netzwerk, in dem dein Hostsystem sich gegenwärtig befindet:
# IP-Präfix: 192.168.178
$ipPrefix = "192.168.178"
# Liste für die Geräte
$deviceList = @()
# Klasse-C Netzwerk mit einer Schleife scannen
for ($i = 1; $i -le 254; $i++) {
$ip = "$ipPrefix.$i"
# IP-Adressen anpingen
$result = Test-Connection -ComputerName $ip -Count 1 -ErrorAction SilentlyContinue
# Bei Ping-Antwort (Pong) Gerät zur Liste hinzufügen
if ($result.StatusCode -eq 0) {
$device = New-Object PSObject -Property @{
IP = $ip
Hostname = [System.Net.Dns]::GetHostEntry($ip).HostName
}
$deviceList += $device
}
}
# Alle gescannten Geräte auflisten
$deviceList
PowerShell-Ausgabe (Ergebnis):
Wie auf dem Screenshot ersichtlich, erhalten wir eine sehr zuverlässige Ausgabe der IP-Adresse und vom Hostnamen von allen erreichbaren Geräten im LAN. Das Skript arbeitet so, indem es bei der ersten IP-Adresse eines Netzwerks beginnt (1) und bis zur 254 hochzählt (Inkrement i++). Das ist auch der Grund, weshalb der Scanvorgang einige Minuten dauert, bis alle Adressen erfolgreich gescannt worden sind.
Wir gehen im Beispiel unseres Netzwerkscanners davon aus, dass wir uns in einem Klasse-D Netzwerk befinden, welches maximal 8-Bits groß ist. Möchten wir ein Klasse-C-IP-Adressnetzwerk über die PowerShell scannen, wird dieser Vorgang vermutlich einige Stunden Zeit in Anspruch nehmen, bis wir ein zufriedenstellendes Ergebnis erhalten.
Alle IP-Adressen im Netzwerk über eine grafischen Benutzeroberfläche scannen (PowerShell-GUI)
Meistens ist es für den Anwender komfortabler, ein Werkzeug, wie einen Netzwerkscanner über eine grafische Benutzeroberfläche bedienen zu können. Das lässt sich mit der PowerShell ohne große Schwierigkeiten realisieren. Dafür modifizieren wir das Skript aus dem ersten Beispiel und programmieren ein Fenster (GUI) mit dem PresentationFramework.
Nun erhalten wir einen IP-Adress-Scanner mit einer „Netzwerk scannen“ Schaltfläche:
Jetzt lassen sich die IP-Adressen der Geräte im Netzwerk über einen Button scannen. Speichern wir das Skript auf dem Computer, erhalten wir ein ausführbares Programm. Letzteres bietet sich vermehrt dann an, wenn wir aus beruflichen Gründen z. B. zur Härtung und zur Identifikation von Netzwerkgeräten häufiger solch einen PowerShell basierten IP-Adress-Scanner benötigen.
Kopiere das Skript und ergänze die Zeile „ipPrefix“ mit deinem IP-Adress-Netzwerk:
# Das Framework für die GUI-Erstellung einlesen
Add-Type -AssemblyName PresentationFramework
[xml]$xaml = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Netzwerk Scanner" Width="400" Height="300">
<Grid>
<Button Name="ScanButton" Content="Netzwerk scannen" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Width="150" Height="30" />
<ListView Name="DeviceList" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,50,10,10" Width="360">
<ListView.View>
<GridView>
<GridViewColumn Header="IP" Width="150" DisplayMemberBinding="{Binding IP}" />
<GridViewColumn Header="Hostname" Width="200" DisplayMemberBinding="{Binding Hostname}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
"@
# WPF-Fenster aus der XAML erstellen
$window = [Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader $xaml))
# Definition der Button-Funktion mit einer for-Schleife
$scanButton = $window.FindName("ScanButton")
$scanButton.Add_Click({
$ipPrefix = "192.168.178"
$deviceList = @()
for ($i = 1; $i -le 254; $i++) {
$ip = "$ipPrefix.$i"
$result = Test-Connection -ComputerName $ip -Count 1 -ErrorAction SilentlyContinue
if ($result.StatusCode -eq 0) {
$device = New-Object PSObject -Property @{
IP = $ip
Hostname = [System.Net.Dns]::GetHostEntry($ip).HostName
}
$deviceList += $device
}
}
$listView = $window.FindName("DeviceList")
$listView.ItemsSource = $deviceList
})
# Programm mit GUI ausgeben
$window.ShowDialog()
Tipps: Netzwerkscanner sind vielseitig einsetzbar!
Es gibt verschiedene Gründe, wann Netzwerkscanner sinnvoll eingesetzt werden können. Ich möchte euch anhand einiger Beispiele noch mögliche Einsatzzwecke eines IP-Adress-Scanners auflisten:
- Inventarisierung: Es gibt Netzwerke, die sind ziemlich groß und mit den Jahren unübersichtlich geworden. Ein PowerShell basierter Netzwerkscanner kann bei dieser Aufgabe helfen, Informationen über bestimmte Geräte, Netzwerkdrucker und Server zusammenzufassen. Das ist besonders dann hilfreich, wenn wir mehrere Smarthome-Geräte (IoT) im LAN verwenden.
- Sicherheit: Durch das Scannen von Netzwerken können Schwachstellen und sogenannte Sicherheitslücken ausfindig gemacht werden. Das funktioniert in Kombination mit einem Portscanner ausgezeichnet. Auf dieser Art und Weise können Netzwerke gehärtet werden.
- Fehlerbehebungen und Diagnosen: Möchten wir Probleme im Netzwerk und die Erreichbarkeit von bestimmten Hosts überprüfen, können wir auf einen Netzwerkscanner zurückgreifen. Die sind besonders dann hilfreich, wenn wir ein Netzwerk durch Subnetting in unterschiedliche Teilbereiche aufgeteilt haben.
In der Praxis gibt es sicherlich noch weitere Einsatzgebiete für IP-Adressen basierte Netzwerkscanner. In diesem Beitrag wollte ich euch lediglich die Möglichkeiten über die Windows-PowerShell aufzeigen. Es muss nicht immer Software von Drittanbietern sein.
Leider haben solche Scanner nicht immer den besten Ruf unter den Administratoren, weil sie z. B. in Schulen oder öffentlichen Einrichtungen von Menschen verwendet werden können, um Schwachstellen in einem Netzwerk ausfindig zu machen und Angriffe gezielt vorzubereiten. In der Realität ist es bedauerlicherweise häufig so, dass 99 % aller Netzwerke erhebliche Schwächen aufweisen.