Portscanner nur mit Linuxboardmitteln: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| + | =Einfache sequentielle Methode= | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
| Zeile 9: | Zeile 10: | ||
done | done | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | =Multithread Methode= | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | #!/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 "$@"' _ {} | ||
| + | </syntaxhighlight> | ||
| + | = 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 "$@"' _ {} | ||
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 "$@"' _ {}