Telnet ist ein Netzwerkprotokoll, das für den Fernzugriff auf einen Computer verwendet wird und eine textbasierte Zwei-Wege-Kommunikation ermöglicht. Sie benötigen also einen Telnet-Server und -Client, um miteinander zu kommunizieren.
Telnet ist eines der beliebtesten Linux/Windows-Dienstprogramme, das seinen Zweck schon lange erfüllt hat.
Ein großes Problem mit Telnet auf modernen Systemen ist, dass es nicht sicher ist. Die gesamte Kommunikation in Telnet erfolgt im Klartext und der gesamte Netzwerkverkehr ist unverschlüsselt. Im Wesentlichen kann jeder mit entsprechendem Zugriff und geeigneten Tools den Netzwerkverkehr ausspionieren, um diesen Verkehr zu lesen. Daher ist Telnet auf den meisten modernen Linux-Betriebssystemen nicht vorinstalliert, und andere raten davon ab, es zu verwenden.
Mit dem Aufkommen des SSH- oder Secure Shell-Protokolls, das mehr als ein verschlüsselter Ersatz für Telnet ist, ist die Verwendung von Telnet für den vorgesehenen Zweck längst überholt. Aber es gibt eine alternative Verwendung von Telnet, die viele Systemadministratoren und Technikbegeisterte immer noch verwenden, nämlich die Überprüfung der Konnektivität von Remote-TCP-Ports.
Man kann einfach mit dem telnet-Befehl prüfen, ob der Remote-TCP-Port lauscht und richtig antwortet. Das folgende Snippet zeigt, wie wir überprüfen können, ob google.com aktiv ist und funktioniert, indem wir die HTTP/HTTPS-Konnektivität überprüfen.
$ telnet google.com 80 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $ $ telnet google.com 443 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $
Ein TCP-Port, der nicht geöffnet oder zugänglich ist, verhält sich wie folgt, wenn er mit Telnet überprüft wird:
$ telnet google.com 22 Trying 142.250.193.174... ^C $
Dies erleichtert die Fehlerbehebung bei einfachen Netzwerkverbindungsproblemen in Kombination mit Ping-, Traceroute- oder Tracepath-, Netstat- usw. Befehlen.
Wenn Sie RHEL 8 (oder sogar ältere Versionen von RHEL/CentOS) verwenden, haben Sie die Möglichkeit, nc (oder Ncat oder Network Connector) zu verwenden, das viele netzwerkdiagnosebezogene Optionen unterstützt. Wir werden besprechen, wie dieses Tool auf RHEL8 und ähnlichen Systemen installiert und verwendet wird.
Inhaltsverzeichnis
Was ist nc?
nc (oder Ncat) ist ein beliebtes Allzweck-Befehlszeilentool zum Lesen, Schreiben, Umleiten und Verschlüsseln von Daten über ein Netzwerk. Ursprünglich für das nmap-Projekt geschrieben, sind jetzt mehrere Netcat-Implementierungen verfügbar. Es funktioniert sowohl mit TCP als auch mit UDP über IPv4 und IPv6 und bietet unbegrenzte potenzielle Anwendungsfälle.
Im Folgenden sind einige der Hauptfunktionen des Dienstprogramms nc aufgeführt:
- Fähigkeit, Ncats miteinander zu verketten
- Umleitung von TCP-, UDP- und SCTP-Ports zu anderen Sites
- Verschlüsseln Sie die Kommunikation mit SSL-Unterstützung
- Proxy-Unterstützung über SOCK4/5- oder HTTP-Proxys (einschließlich Authentifizierung)
- Unterstützt mehrere Plattformen, einschließlich Windows, Linux und macOS
NC installieren
nc ist als Teil der Standard-Repositorys in RHEL-Systemen verfügbar. Um es auf einem RHEL 7-System zu installieren, geben Sie einfach den folgenden Befehl auf dem Terminal ein:
$ sudo yum install -y nc
Für das RHEL 8-System können Sie dnf verwenden als:
$ sudo dnf install -y nc
Überprüfen Sie die TCP-Konnektivität
Obwohl nc eine Vielzahl von Funktionen bietet, die eine Reihe von Anwendungsfällen in verschiedenen Anwendungen unterstützen, ist einer der häufigsten die Netzwerk-Fehlerbehebung anstelle von Telnet.
nc kann anzeigen, ob Sie einen TCP-Port erreichen können. Hier ist die Syntax:
$ nc -vz <IP/DNS> <Port>
Als Beispiel, wenn ich prüfen möchte, ob ich wdzwdz über http oder https erreichen kann. Ich kann das mit nc wie unten gezeigt überprüfen (Port 80 ist für http, während 443 für https ist):
$ nc -vz wdzwdz.com 80 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.11.88:80. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds. $ $ nc -vz wdzwdz.com 443 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.10.88:443. Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds. $
In ähnlicher Weise zeigt ein nicht erreichbarer oder blockierter Port eine Ausgabe wie (mehrere Adressen werden als wdzwdz-DNS-Punkte auf mehrere IPs überprüft):
$ nc -vz wdzwdz.com 22 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connection to 172.67.70.213 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.11.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.10.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Network is unreachable. $ $ dig wdzwdz.com +short 104.26.10.88 172.67.70.213 104.26.11.88 $
Überprüfen Sie die UDP-Konnektivität
telnet kann nur die Kommunikation mit einem entfernten TCP-Port überprüfen, während nc Ihnen erlaubt, sowohl TCP- als auch UDP-Konnektivität zu überprüfen.
nc kann einfach UDP-Pakete anstelle der Standard-TCP-Pakete senden, indem Sie Folgendes verwenden:
$ nc -vzu <IP/DNS> <Port>
Aber UDP ist im Gegensatz zu TCP ein sitzungsloses Protokoll, sodass Sie die End-to-End-UDP-Konnektivität nicht in allen möglichen Szenarien bestätigen können, indem Sie einfach UDP-Pakete an einem Ende senden, es sei denn, der Abhörprozess am entfernten Ende sendet Bei einer Antwort kann nc nicht beurteilen, ob das gesendete Paket das Ziel erreicht hat oder nicht. Aber nc bietet eine Alternative, um die End-to-End-UDP-Konnektivität zu bestimmen, indem ein UDP-Listener gestartet wird, vorausgesetzt, Sie haben ordnungsgemäßen Zugriff auf die CLI auf dem Remote-Server.
Angenommen, Sie müssen die UDP-Konnektivität zwischen zwei Linux-Hosts für DNS mit nc überprüfen, wäre eine einfache Möglichkeit, dies zu tun, den nc-Server zu starten, der den erforderlichen Port überwacht:
$ sudo nc -ul <Port>
Für DNS müssen wir Port 53 überprüfen, was den obigen Befehl wie folgt machen würde:
$ nc -ul 53
Auf der Client-Seite müssten Sie einen weiteren nc-Prozess starten, der UDP-Pakete an den Server sendet:
$ nc -u <IP/DNS> <Port>
Was unseren Befehl machen würde:
$ nc -u <IP/DNS> 53
In Anbetracht dessen, dass nichts den UDP-Verkehr für Port 53 zwischen diesen beiden Computern blockiert, sollte alles, was Sie auf einem Computer eingeben und eingeben, auf den anderen Hosts sichtbar sein, wie z. B. ein Zwei-Wege-Chat. Wenn nicht, blockiert eine Firewall die Konnektivität zwischen diesen beiden Systemen.
Das Server- und Client-Modell mit nc funktioniert einwandfrei für diese Art von einfachen Verbindungsprüfungen zwischen Hosts. Wie der obige UDP-Check kann nc auch TCP-Pakete auf einem bestimmten Port abhören:
$ sudo nc -l <Port>
Auf der Client-Seite können Sie normalerweise TCP-Pakete senden, um die Konnektivität zu überprüfen:
$ nc <IP/DNS> <Port>
Das obige Server/Client-nc-Verfahren ist bei TCP-Verbindungen (im Gegensatz zu UDP) nicht erforderlich, da es sich um ein verbindungsorientiertes Protokoll handelt, das mit Bestätigungen arbeitet. Jeder lauschende Prozess, der auf TCP arbeitet, antwortet direkt auf nc TCP-Pakete.
Zusammenfassung
Dieser Artikel fasst zusammen, wie das Dienstprogramm nc als direkter Ersatz für Telnet in modernen Linux-Systemen fungiert, was die Überprüfung der Portkonnektivität betrifft, und dem Endbenutzer viel mehr Möglichkeiten bei der Diagnose und Lösung von Netzwerkproblemen bietet.
Auf die nc-Hilfe kann mit dem Befehl nc -h zugegriffen werden:
$ nc -h Ncat 7.70 ( https://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait <time> Connect timeout -z Zero-I/O mode, report connection status only --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4" or "socks5") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --ssl-ciphers Cipherlist containing SSL ciphers to use --ssl-alpn ALPN protocol list to use. --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples $
Ausführlichere Informationen zum Befehl nc finden Sie auf seiner Handbuchseite.
$ man nc