netcatでインターネットからURLをダウンロードするにはどうすればいいですか?


3

私は使えます netcat 2台のコンピュータ間でファイルを転送します。

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

使ってもいいですか netcat インターネットからURLをダウンロードするには wget

回答:


6

通常のHTTP URLを想定している場合、それは可能ですが、手動でHTTPリクエストを入力する必要があります。 URLがURLエンコード形式のHTTP POSTを必要とする場合、または特定のヘッダーを探す場合、これは非常に面倒です。

あなたは有効なHTTPリクエストをnetcatの標準入力に提供する必要があります。一般的な考え方は次のとおりです。

コマンドを実行する nc example.com 80

netcatはから読み取りを開始します stdin入力したものや端末に貼り付けたものは、ネットワークを介して選択したポートのリモートサーバーに送信されます(80がデフォルトのHTTPポートです)。

次のように、HTTPリクエストを入力するか貼り付ける必要があります。

GET / HTTP/1.1
Host: example.com
User-Agent: netcat

最後に改行も必要になるので、HTTP応答が返されるまでEnterキーを繰り返し押します。それからあなたは手動でレスポンスを解析しなければならないでしょう。

netcatはTCPレイヤで動作するので、技術的にはHTTPをベースにしたプロトコルをnetcatで使うことができますが、人間の入力に適さないプロトコル(sshやhttpsなど)では、そうでないと使いにくいかもしれません。プログラムからスクリプトを作成します。そしてもしあなたがプログラムを書いているのなら、なぜあなたはただ普通のTCPソケットを使っていないのでしょうか?

この目的のためのnetcatの制限は以下のとおりです。

  • netcatは、HTTP、FTP、HTTPS、SSH、またはその他のアプリケーション層プロトコルを認識しません。どのようなスクリプト、プログラム、または手動のキー設定を使用する場合でも、その入力には、サーバーと適切に連動するためにアプリケーション層のワイヤプロトコルに関する十分な知識が必要です。
  • HTTPのような単純なプロトコルでさえ、プロトコルの詳細な知識を必要とする複雑な問題を抱えています - チャンクエンコーディング、URLエンコード形式、提供されるクッキー、ユーザエージェントなどによる動作の違い、そしてSSLハンドシェイクの成功を要求するHTTPS。自分の頭脳だけを使って手動でSSLハンドシェイクをキー入力できる人は誰も知りません。
  • netcatはダムなので提供します いいえ プログラムを書いているのであれば、プログラム的なTCPソケットを使うだけの利点があります。端末に入力するだけの場合は、wget、curl、lftp、sshなどの適切なアプリケーション層プロトコルをサポートするプログラムを使用する方が簡単です。

1
# create a request file
$ cat req
GET / HTTP/1.1
Host: superuser.com
User-Agent: Mozilla/5.0

# send request to get response
$ nc superuser.com 80 <req >res
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.