GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Testen von Netzwerkdiensten mit Netcat

Warnung: Der Softwareentwickler von Netcat hat die Software seit 2006 nicht mehr aktualisiert. Daher übernimmt Rackspace Technology keine Garantie dafür, dass die Qualität von Netcat Ihren Erwartungen entspricht.

Netcat verwenden

Wenn Ihr Netzwerkdienst nicht funktioniert, Sie aber wissen, dass der Dienst einen Netzwerkport abhört, können Sie die Programmverbindung überprüfen, um das Problem zu beheben.

Verwenden Sie den Netcat-Befehl nc , um auf den Dienst zuzugreifen. Wenn Sie eine Red Hat®-basierte Distribution ausführen und nc nicht haben installiert ist, geben Sie den folgenden Befehl in der Befehlszeile ein:

$ sudo yum install nc`

Geben Sie für eine Debian®-basierte Distribution den folgenden Befehl in die Befehlszeile ein:

$ sudo apt-get install Netcat`

Basistest

Führen Sie einen einfachen Test durch, um zu überprüfen, ob der Port Verbindungen akzeptiert.

Geben Sie nc ein auf der Kommandozeile, gefolgt von -vz Option mit Ihrer IP-Adresse und Port:

$ nc -vz IP_address port

Die IP-Adresse sollte diejenige sein, auf der der Dienst Verbindungen empfängt.

Die folgenden Beispiele zeigen die möglichen Ausgabemeldungen:

Die Verbindung ist erfolgreich

$ nc -vz 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!

Die Verbindung wird abgelehnt

$ nc -vz 203.0.113.96 80
nc: connect to 203.0.113.96 port 80 (tcp) failed: Connection refused

Es gibt keine Antwort auf die Verbindungsanfrage

$ nc -vz 203.0.113.96 80
nc: connect to 203.0.113.96 port 80 (tcp) failed: Connection timed out

Verbindung abgelehnt

Der Dienst wird nicht ausgeführt oder eine Firewall lehnt die Verbindung ab. Überprüfen Sie den Prozessstatus, indem Sie ps ausführen auf der Kommandozeile. Weitere Optionen finden Sie unter Laufende Dienste unter Linux überprüfen.

Hinweis: Wenn Ihr Dienst ausgeführt wird, lehnt Ihre Firewall möglicherweise die Verbindung ab. Lesen Sie den Zeitüberschreitung der Verbindung Abschnitt für Anweisungen zur Firewall-Fehlerbehebung.

Zeitüberschreitung der Verbindung

Eine Zeitüberschreitung bei der Verbindung Die Antwort zeigt an, dass Ihre Verbindung nicht funktioniert, was bedeuten könnte, dass Ihre Firewall den Port blockiert. Testen Sie den Verbindungsstatus, indem Sie eine Regel hinzufügen, die Verbindungen auf dem erforderlichen Port akzeptiert.

Das folgende Beispiel fügt eine Regel in Zeile 1 der Eingabekette ein, die alle TCP-Verbindungen auf Port 80 akzeptiert (HTTP). Verwenden Sie diese Regel beim Testen eines Webservers wie Apache®.

$ sudo /sbin/iptables -I INPUT 1 -p tcp --dport http -j ACCEPT

IP-Tabellen spiegeln sofort alle vorgenommenen Änderungen wider. Wiederholen Sie den Test mit nc um zu sehen, ob sich die Antwort geändert hat.

Wenn Sie die hinzugefügte Regel entfernen möchten, können Sie das -D verwenden Option kombiniert mit der Position der Regel in der Kette. Im vorherigen Beispiel wurde eine Regel in Zeile 1, dem Anfang der Kette, hinzugefügt. Das folgende Beispiel zeigt, wie es entfernt wird.

$ sudo /sbin/iptables -D INPUT 1

Sie können Ihre aktuelle Firewall-Konfiguration jederzeit überprüfen, indem Sie den folgenden Befehl in der Befehlszeile ausführen:

$ sudo /sbin/iptables -L -v

Verbindung erfolgreich

Wenn die anfängliche Verbindung erfolgreich ist, kann Netcat eine Verbindung zum Dienst herstellen. Sehen Sie sich die Verbindung genauer an.

Verwenden Sie zuerst das -vt Option, um zu sehen, ob der Dienst auf grundlegende Netzwerkanfragen antworten kann:

$ nc -vt IP Address Port

Wenn Sie Befehle an den Service-Daemon senden und Antworten erhalten können, bedeutet dies, dass auf das Programm zugegriffen werden kann, und Ihr Problem könnte auf die Verbindungskonfiguration des Clients zurückzuführen sein.

Nachdem Sie eine Verbindung hergestellt haben, testen Sie den Dienst, um eine Antwort zu erhalten. Sie können den Dienst testen, indem Sie ein GET senden Anfrage an einen Webserver oder andere geeignete Daten, um den Server zu einer Antwort aufzufordern.

Schließen der Verbindung

Sie können die Verbindung beenden, indem Sie entweder Strg-C drücken oder geben Sie den dienstspezifischen Befehl quit ein.

Beispielsweise können Sie mit QUIT eine Verbindung zu einem File Transfer Protocol, FTP, Server beenden Befehl:

$ nc -vt 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
220 (vsFTPd 2.0.5)
$ QUIT
221 Goodbye.

Befehle zurückgewiesen

Angenommen nc meldet Erfolg, erlaubt Ihnen aber nicht, irgendwelche Befehle zu senden, oder Sie erhalten eine Antwort vom Dienst-Daemon, der meldet, dass der Dienst nicht verfügbar ist. In diesem Fall haben Sie möglicherweise Übertragungssteuerungsprotokoll-Wrapper, TCP-Wrapper , bietet Zugriffskontrolle.

Ein durch TCP-Wrapper blockierter FTP-Dienst könnte wie im folgenden Beispiel aussehen:

$ nc -vt 203.0.113.96 21
Connection to 203.0.113.96 21 port [tcp/ftp] succeeded!
421 Service not available.

Programme, die mit TCP-Wrappern kompatibel sind, werden mit libwrap kompiliert . Um zu überprüfen, ob ein Programm TCPwrapper verwenden kann, verwenden Sie den folgenden Befehl:

$ ldd /path/to/binary | grep libwrap

Das folgende Beispiel prüft den vsftpd Programm für die libwrap Shared-Library-Datei.

ldd /usr/sbin/vsftpd | grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f62c734a000)

Wenn das Programm nicht mit TCP-Wrappern kompatibel ist, wird das vorangestellte grep Befehl gibt nichts zurück.

Protokolle prüfen

Eine blockierte Verbindung erzeugt einen Protokolleintrag. Überprüfen Sie die Protokolle des Programms auf relevante Meldungen.

Im vsftpd logs, zu finden unter /var/log/vsftpd.log , sieht eine blockierte Verbindung aufgrund von TCP-Wrappern wie im folgenden Beispiel aus:

Tue Jun  7 16:14:21 2011 [pid 28599] CONNECT: Client "203.0.113.43", "Connection refused: tcp_wrappers denial."

hosts.deny

Die /etc/hosts.deny Datei legt die Definition für blockierte Verbindungen fest. Wenn Sie Probleme haben, einen Eintrag für Ihren Dienst in der Datei zu sehen, verwenden Sie grep um danach zu suchen.

Durchsuchen Sie die Datei nach dem Programmnamen, indem Sie den folgenden Befehl ausführen:

$ sudo grep "vsftpd" /etc/hosts.deny
vsftpd : ALL

Versuchen Sie, anstößige Zeilen mit einem Hash (#) zu kommentieren. Änderungen an dieser Datei werden automatisch wirksam – Sie müssen keine Dienste neu starten.

Beachten Sie, dass TCP-Wrapper standardmäßig eine Verbindung zulassen. Wenn dies also die Ursache des Problems ist, muss ein Eintrag in /etc/hosts.deny vorhanden sein für den Dienst. Sie könnten die Datei /etc/hosts.deny umbenennen um vorübergehend alle Ihre Verweigerungsregeln zu entfernen. Führen Sie beispielsweise sudo mv /etc/hosts.deny /etc/hosts.deny.old aus . Beachten Sie, dass dieser Befehl alle Anwendungen betrifft, die TCP-Wrapper verwenden. Vergessen Sie nicht, es nach Abschluss Ihrer Tests bei Bedarf wieder zu ändern.

Weitere Untersuchung

Wenn Sie alle Tests in diesem Artikel abgeschlossen haben, ohne Probleme festgestellt zu haben, wird der Dienst wahrscheinlich normal ausgeführt. Der nächste Schritt besteht darin, die Verbindung zum Server mit ping zu testen und traceroute Dienstprogramme.


Linux
  1. Beginnen Sie mit NetworkManager unter Linux

  2. Verwalten Sie Netzwerkverbindungen über die Linux-Befehlszeile mit nmcli

  3. Konfigurieren der Netzwerkschnittstelle mit statischer IP-Adresse auf RHEL 7

  4. Kann ich mein eigenes Netzwerk testen?

  5. Starten der Netzwerkverbindung von der Ubuntu-Wiederherstellung?

Auflisten von Linux-Diensten mit Systemctl

Netcat (nc) Befehl mit Beispielen

Analyse des Netzwerkverkehrs mit tcpdump

Netzwerkdienste

Netzwerkdienste und Protokolle

Network Manager unter Linux mit Beispielen