cmd Portscan - Geräte im Netzwerk auf deren Services testen.
Netzwerkgeräte verwenden für die Kommunikation bestimmte Netzwerkports. Als Beispiel wird für den Aufruf einer Webseite eines Webservers der Port 80 oder 443 verwendet. Um mit einem Webserver eine Verbindung aufbauen zu können, horcht dieser auf den entsprechenden Port, im Falle eines Webservers auf 443. Theoretisch könnte für den Verbindungsaufbau ein beliebiger Port seitens des Webserver-Betreibers verwendet werden, dennoch sind die Port-Nummern standardisiert und bestimmte Nummern sollten für bestimmte Protokolle verwendet werden, wie zum Beispiel Port 80 für einen unverschlüsselten Webserver-Zugriff: http und 443 für einen verschlüsselten Webserverzugriff: https.
Ziel dieses Beitrags Aufwand Voraussetzung
ob diese auf bestimmte Netzwerkports antworten
Das Tool für Netzwerkscans: Nmap
Mithilfe des Command-Line-Tools Nmap können unter anderem sehr einfach Portscans durchgeführt werden. Nmap kann von der Herstellerseite kostenlos heruntergeladen werden: nmap.org/download.html und ist neben Linux auch für Windows verfügbar. Für Windows kann das .zip-Archiv heruntergeladen, extrahiert und ohne Installation gestartet werden, dazu in die Eingabeauforderung:
Um alle Ports der IP-Adresse 192.168.1.5 zu scannen, kann, nach dem Wechsel in das Verzeichnis mit den entpackten nmap-Dateien (cd Ordnername), folgender Befehl verwendet werden:
nmap 192.168.1.5 -p-
Ausgabe:
cd C:\temp\nmap-7.91-win32
C:\temp\nmap-7.91-win32>nmap 192.168.1.5 -p-
Starting Nmap 7.91 ( https://nmap.org ) at 2020-11-26 17:18 Mitteleuropäische Zeit
Nmap scan report for scratch.test (192.168.1.5)
Host is up (0.0090s latency).
Not shown: 65515 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
83/tcp open mit-ml-dev
90/tcp open dnsix
111/tcp open rpcbind
443/tcp open https
3000/tcp open ppp
3001/tcp open nessus
3306/tcp open mysql
5983/tcp open unknown
6379/tcp open redis
6380/tcp open unknown
8081/tcp open blackice-icecap
8082/tcp open blackice-alerts
8086/tcp open d-s-n
8123/tcp open polipo
9081/tcp open cisco-aqos
9082/tcp open unknown
40799/tcp open unknown
54327/tcp open unknown
MAC Address: 00:00:xx:xx:xx:xx (ASRock Incorporation)
Nmap done: 1 IP address (1 host up) scanned in 79.68 seconds
Bei dem gescannten Gerät handelt es sich um meine NAS, auf der ich alle möglichen Services installiert habe. Neben bekannten Ports werden auch unbekannte Ports angezeigt. Die unbekannten Ports sind unterschiedlichste Services, bei denen ich willkürliche Portnummern verwendet habe. Die verwendete Port-Nummer ist also keine Garantie dafür, dass wirklich das Protokoll verwendet wurde, welches laut Standard verwendet werden sollte. Mit dem Befehl kann zum Beispiel auch ein Server im Internet auf dessen Services getestet werden.
Windows integriert: PowerShell
Alternativ, wenn auch wesentlich langsamer, kann auch Windows PowerShell für den Portscan verwendet werden:
Net.Sockets.TcpClient anstelle von Test-NetConnection.
Test-NetConnection ist nett um einen Port zu überprüfen, etwas schneller ist der Test über Net.Sockets.TcpClient. Hier ein Beispiel, um die ersten 1024 Ports der IP-Adresse 192.168.1.5 zu scannen:
1..1024 | % {write-host ((new-object Net.Sockets.TcpClient).Connect("192.168.1.5",$_)) "Port $_ ist offen"} 2>$null
Legende:
1..1024 | Start und End-Port für die Prüfung |
---|---|
192.168.1.5 | ist hier ein Beispiel für die IP-Adresse des Rechners, der gescannt werden soll. |
Ausgabe:
PS C:\Users>1..1024 | % {write-host ((new-object Net.Sockets.TcpClient).Connect("192.168.1.5",$_)) "Port $_ ist offen"} 2>$null
Port 22 ist offen
Port 80 ist offen
Port 83 ist offen
Port 90 ist offen
Port 111 ist offen
Wer die Befehlszeile getestet hat, wird feststellen, dass die Überprüfung extrem langsam ist, dabei werden in dem Beispiel von den möglichen 65535 Ports gerade mal 1024 gescannt. Das liegt daran, dass ein Port nach dem anderen getestet wird.
PowerShell >= 7
Ab der PowerShell Version 7 ist es möglich den Parameter „-Parallel“ in Foreach zu verwenden, entsprechend können mehrere Ports gleichzeitig: parallel überprüft werden, was die Geschwindigkeit enorm steigert. PowerShell kann in puncto Performance aber dennoch mit nmap nicht mithalten. Zudem ist PowerShell 7 leider derzeit noch nicht als Standard in den aktuellen Windows-Versionen vorhanden und muss gesondert installiert werden.
Wer PowerShell 7 installiert hat, kann für den Portscan folgenden Befehl verwenden:
1..65335 | % -ThrottleLimit 500 -Parallel {write-host ((new-object Net.Sockets.TcpClient).Connect("192.168.1.5",$_)) "Port $_ is open!"} 2>$null
In älteren PowerShell-Versionen ist das zwar auch möglich, aber nicht in einer Zeile:
PowerShell > 4
PowerShell-Versionen kleiner 7 können die Funktion über einen RunspacePool abbilden, als Beispiel für einen PowerShell-PortScanner bin ich auf GitHub fündig geworden:
github.com/BornToBeRoot/PowerShell_IPv4PortScanner/blob/master/Scripts/IPv4PortScan.ps1
weitere Artikel zu Windows-PowerShell, siehe: Windows PowerShell
Fazit
Wer einen Überblick über das lokale Netzwerk bekommen möchte, kann mit einfachen Befehlen alle Geräte des lokalen Netzwerks auflisten, siehe: Alle Geräte – IP-Adressen im Netzwerk anzeigen. Mit den hier angeführten Befehlen können einzelne Geräte auf offen Ports (Services) getestet werden: Nmap.
{{percentage}} % positiv