Herzlichen Glückwunsch, Sie haben sich gerade mit dem Konzept der Netzwerkebenen befasst und festgestellt, dass Ports und Protokolle nicht direkt miteinander verbunden sind. Wie bereits erwähnt, kann mit telnet eine Verbindung zu einem beliebigen TCP-Port hergestellt werden. Um zu verstehen, warum dies möglich ist, müssen Sie sich jedoch mit Netzwerkebenen auskennen. Wenn Sie jemals vom OSI 7-Schichtenmodell gehört haben, können Sie mit Telnet eine Verbindung zu einem anderen Port herstellen. Obwohl sie im Internet sind, beschäftigen sie sich nur mit 4 der Schichten und der sogenannten Internet Protocol Suite. Ohne Netzwerkschichten müsste jedes Programm nicht nur sein eigenes Protokoll verstehen, sondern auch sein eigenes IP-Adressierungsschema und Port-System definieren, was bedeutet, dass jeder Router verstehen muss, wie diese Schemata weitergeleitet werden, und dass verschiedene Protokolle sehr umfangreich sind schwerer zu lernen und zu diagnostizieren. Einfach gesagt, das Internet würde ohne Schichten nicht annähernd so gut funktionieren.
Es geht Ihnen um die Transportschicht und die Anwendungsschicht. Auf der Transportebene gibt es Internetprotokolle wie TCP und UDP mit Portnummern zwischen 1 und 65535. Auf der Anwendungsebene gibt es Protokolle wie HTTP, SMTP und DNS. Normalerweise gibt jedes Internet-Standarddokument, das ein Protokoll definiert, einen Standard-TCP- oder UDP-Port an, den das Protokoll standardmäßig verwenden soll. Zum Beispiel TCP-Port 80 für HTTP, TCP-Port 25 für SMTP, UDP-Port 53 für DNS und TCP-Port 23 für Telnet. Das Telnet-Programm spricht tatsächlich das TELNET-Protokoll, das ein Standardprotokoll ist, aber meistens ein altes für heutige Verhältnisse. Da die Protokollsequenzen aus 8-Bit-Zeichen bestehen, sehen Sie das Protokoll selbst selten und es ist im Vergleich zu anderen moderneren Protokollen wie HTTP und SMTP, die für den Menschen sichtbare Wörter in ASCII verwenden, wie GET, POST, HELO, LOGIN, etc.
Da das Protokoll im Allgemeinen nicht sichtbar ist, ist Telnet ein gutes Tool, um eine Verbindung zu anderen TCP-Ports herzustellen und dem Benutzer die manuelle Eingabe von Protokollen zu ermöglichen. Einige Netzwerkadministratoren verwenden diese Technik, um Probleme mit Servern zu diagnostizieren. Da das Telnet-Programm jedoch immer noch über ein eigenes Protokoll verfügt und manchmal zusätzliche Datenbits sendet, können weiterhin Probleme mit dieser Technik auftreten. Wenn Sie Telnet verwenden, "stellen Sie wirklich eine Verbindung her" sowohl auf der Anwendungsebene als auch auf der Transportebene. Es kommt nur vor, dass andere Protokolle der Anwendungsschicht für die meisten Diagnosen einwandfrei funktionieren und das Telnet-Protokoll nicht beeinträchtigen. Dafür gibt es ein besseres Programm namens nc (Net Cat. Der Name stammt von einer netzwerkbasierten Version des Befehls cat).
$ nc www.stackexchange.com 80
Das nc-Programm spricht kein Anwendungsschichtprotokoll, und wenn Sie eine Verbindung herstellen, stellen Sie eine Verbindung nur auf der Internetschicht (IP-Adresse) und der Transportschicht (TCP oder UDP) her. Dies bedeutet, dass Sie steuern, welches Anwendungsschichtprotokoll verwendet wird. Fast alles ist faires Spiel, sogar binäre Protokolle. Auf diese Weise können Sie auch nützliche Dinge wie das Übertragen von Dateien ausführen, ohne dass diese beschädigt werden, und Ports auf eingehenden Datenverkehr überwachen:
nc -l 9000 < movie.mp4 (Your friend runs this)
nc friends.computer.hostname 9000 > movie.mp4 (you run this)
Und dann wird movie.mp4 über das Netzwerk übertragen, ohne dass ein Protokoll auf Anwendungsebene (z. B. FTP) verwendet wird. Das Anwendungsprotokoll ist tatsächlich Ihr Freund, der Ihnen mitteilt, dass er bereit ist, Ihren Befehl auszuführen.
nc kann auch UDP-Pakete und UNIX-Domain-Sockets verarbeiten. Es kann auch interessant sein, damit zuzuhören.
nc -l 12345
Besuchen Sie jetzt in Ihrem Webbrowser http: // localhost: 12345 / und in Ihrer NC-Sitzung sollten Sie die GET / HTTP/1.1
Anforderung des Browsers sehen . An dieser Stelle können Sie etwas eingeben und drücken. Ctrl-D
Es sollte in Ihrem Browser im Klartext angezeigt werden. (Wenn HTML angezeigt werden soll, müssen Sie die richtige HTTP-Protokollantwort gefolgt von HTML-Code zurücksenden.)
Manchmal können Programme, die von Haus aus ein Protokoll wie HTTP sprechen, Verbindungen zu anderen Ports herstellen, die für ein anderes Protokoll bestimmt sind. Normalerweise können Sie dies in einem GUI-Browser nicht mehr tun, da sie die Verbindung zu einigen Ports eingeschränkt haben. Wenn Sie jedoch ein Programm wie curl verwenden, um eine Verbindung zu Port 25 (SMTP zum Senden von E-Mails) herzustellen, werden wahrscheinlich einige angezeigt Fehler beim Brechen des Protokolls.
$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.
Dies geschieht, weil curl normalerweise das HTTP-Protokoll spricht. Nachdem ein TCP-Handshake eingerichtet wurde, werden folgende Daten gesendet:
GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl
Was der SMTP-Server jedoch erwartet, ist SMTP.
HELO myhomecomputername.local
An diesem Punkt sendet der Server seine Identifikationszeile zurück:
250 yourispsmtpserverhost.com
Sie sehen also, dass nichts daran hindert, eine Transportschicht-Verbindung mit dem SMTP-Server herzustellen. Das Protokoll kann einfach nicht gesprochen werden. Aber Sie können das Protokoll selbst mit einem Programm wie Telnet oder besser nc sprechen.
nc(1)
) wesentlich flexibler. Es kann eine Verbindung zu SSL / TLS-verschlüsselten Diensten herstellen und auch als Server verwendet werden und sogar Daten weiterleiten.