Suchen Sie nach Telnet auf RHEL 8? Versuchen Sie es mit nc

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.

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
  So rekrutieren Sie neue Dorfbewohner in „Animal Crossing: New Horizons“

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.

  Was bedeutet „NSFW“ und wie wird es verwendet?

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