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.
Für das Testen eines bestimmten Ports in PowerShell kann der Befehl "Test-NetConnection" verwendet werden, siehe auch PING Port - Windows cmd: PsPing - PowerShell Test-Netconnection. Um zu testen welche Ports bei einem bestimmten Gerät offen sind, welche Netzwerkservices das Gerät als anbietet, kann das Command-Line-Tool Nmap verwendet werden:  

Das Tool für Netzwerkscans: Nmap

Mit Hilfe 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:12:34:45:16 (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 Portnummer 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 Befehltszeile 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 mehere 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.

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!



Fragen / Kommentare


Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter. Details anzeigen.