Kürzester Port-Scanner

8

Schreiben Sie das kürzeste Programm, das versucht, eine Verbindung zu offenen Ports auf einem Remotecomputer herzustellen, und prüfen Sie, ob diese geöffnet sind. (Es heißt Port Scanner )

Nehmen Sie Eingaben von Befehlszeilenargumenten entgegen.

your-port-scanner host_ip startPort endPort

Angenommen, startPort <endPort (und endPort - startPort < 1000)

Ausgabe: Alle offenen Ports zwischen diesem Bereich sollten durch Leerzeichen oder Komma getrennt sein.

st0le
quelle
Gibt es rechtliche Gründe für die Verwendung von Port-Scannern? Außer andere Leute daran zu hindern, sich in Ihr Netzwerk zu hacken, indem Sie unnötige Ports schließen?
Alexander Craggs

Antworten:

5

sh / netcat, 39

nc -vz $1 $2-$3 2>&1|cut -f3 -d\ |xargs

Netcat führt das Scannen durch und gibt bei Standardfehlern Ergebnisse in dieser Form zurück:

localhost [127.0.0.1] 22 (ssh) open
localhost [127.0.0.1] 25 (smtp) open

cutund xargsextrahieren Sie die Portnummer und machen Sie eine einzelne Zeile daraus.

Erinnern Sie mich daran, SMTP auf diesem Knoten herunterzufahren.

JB
quelle
3

Perl, 92

$_='use I;$h=shift;grep I->new("$h:$_"),shift..shift';
s/I/IO::Socket::INET/g;@_=eval;say"@_"

Perl 5.10 oder höher ausführen mit perl -E 'code here'.

Uses Regexes zu komprimieren , dass lange IO::Socket::INET, dann eval; endgültige Formatierung mit Array-Interpolation.

Auf Anfrage eine ausführlichere Erklärung. Lassen Sie uns zum ersten Mal eine Pause einlegen:

$_ = << 'EOC';
  use I;
  $h = shift;
  grep I->new("$h:$_"), shift..shift;
EOC
s/I/IO::Socket::INET/g;
@_ = eval;
say "@_";

Die Zeile vor dem evalersetzt alle (zwei) Vorkommen von 'I' durch 'IO :: Socket :: INET'. Dies ist ein Standard-Perl-Golftrick, um die Auswirkungen unvermeidbarer langer Kennungen zu verringern. Wenn Sie einige der Provisorien benennen, entspricht der Code dem folgenden:

use IO::Socket::INET;
$h = shift;
$p1 = shift;
$p2 = shift;
@_ = grep IO::Socket::INET->new("$h:$_"), ($p1 .. $p2);
say "@_";

Kurz gesagt: Lesen Sie die Argumente für den Host- und Portbereich über die Befehlszeile. versuche nacheinander eine Verbindung zu allen herzustellen ( IO::Socket::INET->new()); eine Liste derjenigen führen, die erfolgreich waren ( grep); zeige das Ergebnis schön an ( say).

JB
quelle
Ich kann es irgendwie nicht verstehen :( sieht für mich nach tiefster schwarzer Magie aus: P, aber immer noch +1 für Verrücktheit
masterX244
@ masterX244 Ich habe die Innereien ein wenig detailliert. HTH
JB
1

sh / nmap / GNU grep / xargs - 36

nmap -p$2-$3 $1|grep -Po '^\d+'|xargs

Folgt den Eingabe- und Ausgabespezifikationen:

$ sh 1109.sh 127.0.0.1 1 80
22 25 80
Arnaud Le Blanc
quelle
2
Ich weiß nicht, ob dies hier nmapals gültige Antwort gilt, aber es ist definitiv nicht sh :)
Eelvex
Das Ausgabeformat könnte auch ein wenig poliert werden.
JB
2
@Eelvex das ist ein sh Skript, mit einer your-port-scanner host_ip startPort endPortSchnittstelle, die nmap aufruft ;-)
Arnaud Le Blanc
@JB, fertig :-) __
Arnaud Le Blanc
kommt nmapmit Linux gebündelt? : - \ Ich wusste nicht, dass ... :(
st0le
1

Rubin - 85

require"socket"
h,p,e=$*
p.upto(e){|p|begin
TCPSocket.new h,p
$><<"#{p} "
rescue
end}
Arnaud Le Blanc
quelle
1

BASH - 105

In reinem BASH (dh ohne nmap oder netcat).

exec 2>&- && exec 2<> /dev/null
for p in $(seq $2 $3); do
    > /dev/tcp/$1/$p &&
    echo -n "$p "
done

Bei Verwendung mit einer anderen Adresse als localhost ist das Zeitlimit ziemlich lang (in der Größenordnung von Minuten), wenn ein geschlossener Port auftritt, sodass aller Wahrscheinlichkeit nach eine Art Zeitlimit- / Alarmfunktion erforderlich ist.

JOgden
quelle
0

PHP - 70

<?for(list(,$h,$p,$e)=$argv;$p<=$e;++$p)@fsockopen($h,$p)&&print"$p ";
Arnaud Le Blanc
quelle
Ich bin sicher, Sie können die $p++in anderen Erwähnungen von drücken $p, wird ein
Zeichen
0

Perl, 178

Ich bin neu bei Perl, jeder Rat zur Verkürzung ist willkommen!

use IO::Socket::INET;for($x=$ARGV[1];$x<$ARGV[2]+1;$x++){if(fork()){if($sock=new IO::Socket::INET(PeerAddr=>$ARGV[0],PeerPort=>$x,Proto=>'tcp')){print"$x ";}close($sock);exit;}} 
Timtech
quelle