Welche Alternativen gibt es neben Telnet, um offene Ports zu prüfen?

24

Wir können Folgendes verwenden, um den Telnet-VIA-Port zu testen. Im folgenden Beispiel testen wir Port 6667:

[root@kafka03 ~]# telnet kafka02 6667
Trying 103.64.35.86...
Connected to kafka02.
Escape character is '^]'.
^CConnection closed by foreign host

Da wir auf einigen Rechnern (aus internen Gründen) kein Telnet verwenden können, was sind die Alternativen, um Ports zu prüfen, wie Telnet?

yael
quelle
Ist Perl eine Option?
Jeff Schaller
5
Diese "internen Gründe" können dazu führen, dass Sie keine andere Port-Scan-Software verwenden können. Ich kannte einen Mann, der bei einer Bank arbeitete und dessen Vertrag gekündigt wurde, weil er eine Kopie von nmap auf seinem PC hatte. Er benutzte es für arbeitsbedingte Zwecke, aber es stand auf der verbotenen Liste, und so wurde er aus dem Gebäude geführt.
Roger Lipscombe
2
Ist Perl eine Option? - JA
Ja
2
Beachten Sie, dass Telnet ein ausgeklügeltes Protokoll ist. Das telnetDienstprogramm deaktiviert das Protokollverhalten, wenn in der Befehlszeile ein Port angegeben wird. Dann verhält es sich ähnlich netcat, nur mit Zeilenendeerkennung.
rexkogitans
Eine eher betriebssystemunabhängige Frage, die nicht einmal auf Port-Scans hindeutet , ist unix.stackexchange.com/questions/499694 .
JdeBP

Antworten:

23

Wenn Sie Bash Shell verwenden, können Sie anhand dieser Funktion prüfen, ob ein Port offen oder geschlossen ist:

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

Beachten Sie, dass, wenn der Server nach 1 Sekunde nicht antwortet, das Timeout erreicht ist, die Befehle zwischen 'unterbrochen und somit nichts gedruckt werden.

in2nix4life
quelle
5
Vielleicht solltest du stattdessen den Hostnamen aus der Frage (kafka02) verwenden 127.0.0.1, wodurch es so aussieht, als würde es nur mit dem Loopback funktionieren.
Dmitry Grigoryev
1
(timeout 1 bash -c '</dev/tcp/www.google.com/444 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/nulldruckt nichts für mich. (timeout 1 bash -c '</dev/tcp/www.google.com/444' && echo PORT OPEN || echo PORT CLOSED) 2>/dev/nullhat wie erwartet funktioniert (druckt PORT CLOSED). Notieren Sie die Position des '.
thecarpy
Was bekommst du auf bash -c '</ dev / tcp / kafka01 / 6667'
Yael
dann echo $? (wenn 0, dann ist der Port offen)
Yael
IIRC Diese Bash-Funktion war vor einiger Zeit in Debian deaktiviert. Es ist ein ordentlicher Trick, der aber nicht immer funktioniert.
AnonymousLurker
32

Netcat ist eine Option.

nc -zv kafka02 6667
  • -z = Legt fest, dass nc einfach nach hörenden Daemons sucht, ohne tatsächlich Daten an sie zu senden
  • -v = aktiviert den ausführlichen Modus
Steve
quelle
ist es möglich standard ausgang vom nc zu bekommen? weil ich in mein bash script schreiben will
yael
2
Lesen Sie die Dokumentation! Ohne Optionen ncverhält sich das sehr ähnlich telnet.
Henrik - hör auf, Monica
ja ich habe die docs gelesen aber -w flag funktioniert nicht als
timeout
Beispiel - c -v -w 1 kafka01 6667 (wir bekommen keine Auszeit)
yael
nc -v -w 3 kafka01 6667 Ncat: Version 6.40 ( nmap.org/ncat ) Ncat: Verbunden mit 10.164.235.85:6667. (das hängt noch)
Yael
23

Der Goldstandard ist zweifellos nmap( nmap.org ), aber normalerweise ist root erforderlich, um die besten Ergebnisse zu erzielen . Es sind jedoch eigenständige Binärdateien verfügbar, und es ist möglich, sie als nicht privilegierter Benutzer auszuführen, nur mit eingeschränkten Funktionen. Beispielsweise wird anstelle eines Stealth- synScans ( -sS) auf einen Standard-TCP-Verbindungsscan ( -sT) zurückgegriffen. Dies ist funktional äquivalent zu Netcat, aber mit den netten Multi-Host-Beschleunigungsfähigkeiten, die es hat.

Ein Beispiel:

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
Landak
quelle
1
In den meisten Organisationen wird nmap als Scan-Tool betrachtet und man kann nmap nicht ohne entsprechende Genehmigung verwenden. Auch wenn es sich um eine EC2-Instanz handelt, ist eine Autorisierung von AWS erforderlich.
al mamun
4

Wenn Perl eine Option ist, können Sie mit seinem IO::SocketModul eine Verbindung zu einem bestimmten Host und Port testen. Das folgende Skript kodiert TCP als Protokoll (welches Telnet verwenden würde):

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

Beispielausgabe von einem geschlossenen Port:

$ ./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

Beispielausgabe von einem offenen Port:

$ ./above-script kafka02 4200
Success!
Jeff Schaller
quelle
2

Die Gerätedatei / dev / tcp und / dev / udp kann anstelle von Telnet verwendet werden. Beispiel: Echo 0> /dev/tcp/103.64.35.86/6667. Überprüfen Sie dann den Exit-Status mit #echo $? . Wenn der Beendigungsstatus 0 ist, ist der Port geöffnet. Wenn der Exit-Status nicht Null ist, wird der Port geschlossen. Verwenden Sie zum Überprüfen von udp-Paketen echo 0> /dev/udp/103.64.35.86/6667.

al mamun
quelle
in meiner redhat 7 unter / dev / haben wir keine tcp
yael
ls / dev / tcp / ls: Kein Zugriff auf / dev / tcp /: Keine solche Datei oder Verzeichnis
yael
Auf welchem ​​OS testest du es?
Yael
@yael, Sie werden während ls nicht / dev / tcp oder / dev / udp bekommen. Versuchen Sie genau den gleichen Befehl auf Ihrer Shell und Sie erhalten das Ergebnis. Übrigens, ich benutze es häufig auf RHEL6,7
al mamun
0
ss -lt 

Dies ist ein weiterer Befehl, den Sie verwenden können.

Dileep Jayasundara
quelle
Es funktioniert nur auf lokalen Rechnern. Ich glaube, bei dieser Frage geht es darum, die offenen Ports eines Remote-Hosts zu überprüfen.
Alex Baranowski