Portscanner nur mit Linuxboardmitteln: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(3 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 6: Zeile 7:
 
       then
 
       then
 
         echo "OPEN: $PORT"
 
         echo "OPEN: $PORT"
      fi
+
    fi
 
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 "$@"' _ {}