Portscanner nur mit Linuxboardmitteln
Version vom 27. November 2025, 08:05 Uhr von Thomas.will (Diskussion | Beiträge) (→Multithread Methode)
Einfache sequentielle Methode
#!/bin/bash
HOST="$1"
for PORT in $(seq 1 1024); do
if (echo >/dev/tcp/$HOST/$PORT) 2>/dev/null
then
echo "OPEN: $PORT"
fi
done
Multithread Methode
#!/bin/bash
HOST="$1"
START="$2"
STOP="$3"
THREADS=50 # Anzahl paralleler Jobs
scan_port() {
PORT="$1"
if (echo >/dev/tcp/$HOST/$PORT) >/dev/null 2>&1
then
echo "Host: $HOST - Port: $PORT open"
fi
}
export -f scan_port
export HOST
seq $START $STOP | xargs -P $THREADS -I{} bash -c 'scan_port "$@"' _ {}
Erklärung des Parallel-Blocks
- Die beiden export-Befehle sorgen dafür, dass sowohl die Funktion scan_port als auch die Variable HOST an alle von xargs gestarteten Kindprozesse vererbt werden.
- Ohne dieses Exportieren könnten die parallel gestarteten Bash-Prozesse weder die Funktion finden noch den Zielhost kennen.
- export -f scan_port
- export HOST
- Die folgende Pipeline erzeugt die Portliste und verteilt sie parallel auf mehrere Prozesse.
- seq erzeugt die Zahlenfolge von START bis STOP.
- xargs -P THREADS startet bis zu THREADS parallele Bash-Prozesse.
- -I{} definiert {} als Platzhalter für die aktuelle Portnummer.
- Jeder gestartete Prozess führt bash -c 'scan_port "$@"' aus.
- Das Unterstrich-Zeichen (_) fungiert als Dummy-Argument, das bash -c als $0 verwendet.
- Die Portnummer {} wird danach als $1 übergeben, sodass scan_port korrekt aufgerufen wird.
- seq $START $STOP | xargs -P $THREADS -I{} bash -c 'scan_port "$@"' _ {}