HTTPポート80にTelnetで接続するにはどうすればよいですか?

HTTPポート80にTelnetで接続するにはどうすればよいですか?

telnetインターネット検索の後、Webサーバーをhttpポートに接続し、それを使用してGEThtmlページを検索できることを発見しました。

たとえば、

$ telnet web-server-name 80

しかし、これがどのように可能かを理解できませんか?

ポート80がhttpサーバーで使用されている場合、ポート80はhttp要求のみを受信します。しかし、港telnetまでどのように行きますか?HTTP

telnet2つのHTTP異なるプロトコルではありませんか?

ベストアンサー1

おめでとうございます。ポートとプロトコルが互いに直接接続されていないことを認識して、ネットワーク層の概念を詳しく調べました。他の人が言ったように、Telnetを使用してすべてのTCPポートに接続できます。ただし、これが考えられる理由を理解するには、ネットワーク層について知っておく必要があります。聞いたことがあるならOSI 7層モデルこれにより、Telnet を使用して別のポートに接続できます。インターネットではレイヤー4にのみ興味がありますが、これをレイヤーといいます。インターネットプロトコルスイート。ネットワーク層がない場合、各プログラムは独自のプロトコルを知る必要があるだけでなく、独自のIPアドレス指定方式とポートシステムも定義する必要があります。つまり、すべてのルータは、そのスキームとさまざまなプロトコルをルーティングする方法を知る必要があります。多くの問題を引き起こします。学び、診断するのは難しいです。簡単に言えば、レイヤーがなければ、インターネットは正常に動作しません。

あなたが興味を持っているのはトランスポート層とアプリケーション層です。トランスポート層にはTCPやUDPなどのインターネットプロトコルがあり、各プロトコルのポート番号は1から65535です。アプリケーション層には、HTTP、SMTP、DNSなどのプロトコルがあります。通常、プロトコルを定義する各インターネット標準文書は、そのプロトコルがデフォルトで使用するデフォルトのTCPまたはUDPポートを指定します。たとえば、HTTPの場合はTCPポート80、SMTPの場合はTCPポート25、DNSの場合はUDPポート53、Telnetの場合はTCPポート23です。 Telnetプログラムは実際にTELNETプロトコルについて話します。標準プロトコル、しかし、ほとんどは、現在の基準で見ると古代です。プロトコルシーケンスは8ビット文字で構成されているため、プロトコル自体はほとんど見られず、GET、POST、HELOなどの人が見ることができるASCIIワードを使用するHTTPやSMTPなどの他の最新のプロトコルと比較してほぼ透明です。 、ログインなど

これらのプロトコルは通常見えないため、Telnetは他のTCPポートに接続し、ユーザーがプロトコルを手動で入力できるようにする優れたツールを作成します。一部のネットワーク管理者はこの技術を使用してサーバーの問題を診断します。ただし、Telnetプログラムにはまだ独自のプロトコルがあり、時には追加のデータビットを送信できるため、この手法を使用すると問題が発生します。 Telnetを使用すると、実際にはアプリケーション層とトランスポート層で「接続を作成」します。他のアプリケーション層プロトコルはほとんどの診断に対してうまく機能し、Telnetプロトコルを妨げません。これを行うためのより良いプログラムはnc(Net Cat. catコマンドのネットワークベースのバージョン名にちなんで命名されました)です。

$ nc www.stackexchange.com 80

nc プログラムはアプリケーション層プロトコルを使用しません。接続を確立するときは、インターネット層(IPアドレス)とトランスポート層(TCPまたはUDP)でのみ「接続を確立」します。これは、どのアプリケーション層プロトコルが使用されるかを制御できることを意味します。バイナリプロトコルを含むほとんどすべてが公正なゲームです。これにより、ファイルを損傷せずに送信したり、ポートから着信トラフィックをリッスンしたりするなどの便利なタスクを実行できます。

nc -l 9000 < movie.mp4  (Your friend runs this)

nc friends.computer.hostname 9000 > movie.mp4  (you run this)

その後、movie.mp4は、アプリケーション層プロトコル(FTPなど)をまったく使用せずにネットワーク経由で送信されます。アプリケーションプロトコルは、基本的にコマンドを実行する準備ができたことを知らせる友人です。

ncはUDPパケットとUNIXドメインソケットも処理できます。聞くのも楽しいです。

nc -l 12345

GET / HTTP/1.1Webブラウザでhttp://localhost:12345/に移動すると、ncセッションにブラウザの要求が表示されます。この時点で何かを入力して押すと、Ctrl-Dブラウザにプレーンテキストとして表示されます(HTMLを表示するには、正しいHTTPプロトコル応答とHTMLコードを再送信する必要があります)。

場合によっては、1つのプロトコル(HTTPなど)をデフォルトで使用するプログラムが、他のプロトコルに対して別のポートに接続することがあります。通常、GUIブラウザは特定のポートへの接続を制限するため、これを行うことはできません。ただし、カールなどのプログラムを使用してポート25(メール送信用のSMTP)に接続すると、プロトコルを破るいくつかのバグが表示されることがあります。

$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.

これは、カールが通常HTTPプロトコルを使用するために発生するため、TCPハンドシェイクを設定した後、次のようにデータ転送を開始します。

GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl

ただし、SMTPサーバーは次のSMTPを期待しています。

HELO myhomecomputername.local

この時点で、サーバーは識別ラインを再送信します。

250 yourispsmtpserverhost.com

したがって、カールがSMTPサーバーとトランスポート層接続を確立するのを防ぐ方法はなく、プロトコルを使用できません。しかし、telnetやより良いncなどのプログラムを使用してプロトコルを直接話すことができます。

おすすめ記事