Portscanner nur mit Linuxboardmitteln: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 20: | Zeile 20: | ||
scan_port() { | scan_port() { | ||
PORT="$1" | PORT="$1" | ||
| − | (echo >/dev/tcp/$HOST/$PORT) >/dev/null 2>&1 | + | if (echo >/dev/tcp/$HOST/$PORT) >/dev/null 2>&1 |
| − | + | then | |
echo "Host: $HOST - Port: $PORT open" | echo "Host: $HOST - Port: $PORT open" | ||
fi | fi | ||
} | } | ||
| − | |||
export -f scan_port | export -f scan_port | ||
export HOST | export HOST | ||
| + | seq $START $STOP | xargs -P $THREADS -I{} bash -c 'scan_port "$@"' _ {} | ||
| + | </syntaxhighlight> | ||
| + | = Erklärung des Parallel-Blocks = | ||
| − | seq | + | *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 "$@"' _ {} | |
Aktuelle Version vom 27. November 2025, 08:05 Uhr
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 "$@"' _ {}