Nach der Suche in Google habe ich herausgefunden, dass wir über telnet
einen Webserver auf seinen http-Port zugreifen und GET
eine HTML-Seite abrufen können.
Zum Beispiel:
$ telnet web-server-name 80
Aber ich verstehe nicht, wie das möglich ist?
Ich dachte, wenn Port 80 für HTTP-Server ist, dann wird Port 80 nur auf http
Anfragen warten. Aber wie komme ich telnet
an einen HTTP
Hafen?
Ist nicht telnet
und HTTP
zwei verschiedene Protokolle?
networking
http
telnet
sps
quelle
quelle
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.Antworten:
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).
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:
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.
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.
Dies geschieht, weil curl normalerweise das HTTP-Protokoll spricht. Nachdem ein TCP-Handshake eingerichtet wurde, werden folgende Daten gesendet:
Was der SMTP-Server jedoch erwartet, ist SMTP.
An diesem Punkt sendet der Server seine Identifikationszeile zurück:
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.
quelle
curl
braucht ein-v
Argument, um eine ausführliche Ausgabe in OS X zu zeigen.telnet
ist ein Tool, das eine Verbindung zu jedem TCP-Port herstellen kann.Standardmäßig wird eine Verbindung zum Telnet-Port (23) hergestellt, Sie können jedoch festlegen, dass stattdessen eine Verbindung zum HTTP-Port (80) oder zum SMTP-Port (25) hergestellt werden soll.
Sie müssen jedoch wissen, wie das Protokoll "gesprochen" wird, auf das der Remote-Server an diesem Port wartet.
Wenn Sie beispielsweise die Header einer Website abrufen möchten (Domainnamen usw. wurden geändert, um die Schuldigen zu schützen):
Die
HEAD
Linie ist das, was ich in die Verbindung eingegeben habe. Beachten Sie, dass Sie nach dem http-Protokoll eine leere Zeile senden müssen, um das Ende Ihres HEAD- oder GET-Vorgangs oder einer beliebigen Anforderung anzuzeigen. Dies ist die leere Zeile unmittelbar nach der HEAD-Anforderung.quelle
Die anfängliche Aushandlung für beide Protokolle verwendet Textbefehle, sodass Sie eine Verbindung herstellen und mit der Eingabe von Befehlen beginnen können. Dies gilt auch für andere alte Protokolle wie SMTP, und Telnet wird seit langem zur Fehlerbehebung bei Verbindungen zu den jeweiligen Diensten verwendet.
Beispielsweise
Die Protokolle sind unabhängig von dem Port, an dem sie kommunizieren. Fast alle Implementierungen können so konfiguriert werden, dass sie jeden Port überwachen.
Einige Protokolle (z. B. HTTPS) verwenden keine Textbefehle für die Aushandlung. Sie können sich jedoch (normalerweise) mit dem Port verbinden, auf dem der Server lauscht, aber nichts Nützliches tun.
quelle
Ein Teil Ihres Verständnisses ist richtig und ein anderer Teil nicht. Port 80 ist im Allgemeinen für HTTP reserviert, aber das ist nur eine Konvention. Jedes Programm kann jeden offenen Port des Systems überwachen. Wenn auf dem System, zu dem Sie eine Verbindung herstellen, ein Webserver Port 80 überwacht, müssen Sie HTTP verwenden, um mit ihm zu kommunizieren.
telnet
ist überhaupt kein Protokoll, sondern ein Programm, mit dem Sie unformatierten Text an jeden Host an jedem Port senden können. Der Remote-Host hat keine Ahnung, welches Programm eine Verbindung zu ihm herstellt. Alles, was es sehen kann, sind die Pakete, die an es gesendet werden. Jedes Programm, das Pakete sendet, die dem vom Remotehost erwarteten Protokoll entsprechen, funktioniert, sodass Sietelnet
über jedes textbasierte Protokoll kommunizieren können.Sie haben etwas in der Art von gesendet. Dies
GET /path/to/a/file HTTP/1.1
ist ein gültiger HTTP 1.1-Befehl und sieht genauso aus wie eine Anfrage, die von einem Webbrowser gesendet wird. Das funktioniert also einwandfrei.quelle
telnet
ist ein Protokoll RFC 854 . Es ist nur so, dass normaletelnet
Clients nicht versuchen, dastelnet
Protokoll zu verwenden , es sei denn, sie stellen eine Verbindung hertcp/21
. Aus der Manpage: "Wenn eine Verbindung zu anderen Ports als dem Telnet-Port hergestellt wird, versucht Telnet nicht, Telnet-Protokollverhandlungen durchzuführen. Auf diese Weise können Verbindungen zu Diensten hergestellt werden, die das Telnet-Protokoll nicht unterstützen, ohne dass es zu Problemen kommt. Die Protokollverhandlung kann durch erzwungen werden einen Bindestrich vor die Portnummer setzen. "