web-dev-qa-db-ja.com

ホスト名の解決に関する「ping」と「wget」の違い

wgetを使用した場合、ホスト名の解決は問題ありません

root:here cd$ wget https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1

結果は

Resolving gfe.cit.api.here.com... 52.51.134.116, 54.154.19.134, 52.208.9.155
Connecting to gfe.cit.api.here.com|52.51.134.116|:443... connected.
HTTP request sent, awaiting response... 400 Bad Request
2016-12-24 13:18:47 ERROR 400: Bad Request.

しかし、私がpingを使用したとき

ping https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1

結果は

cannot resolve https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123: Unknown Host

ホスト名の解決に失敗しました。wgetpingの違いは何ですか?

4
cdhit

回答:

ホスト名の解決に関して、「ping」と「wget」の違いは何ですか

Pingは、パラメーターとしてIPアドレスまたはホスト名のいずれかを想定しています。ホスト名として解決しようとして失敗する完全なURLを指定しています。完全修飾された名前以外のすべてが削除されると、pingコマンドは接続をチェックできます(おそらく、ICMP要求がブロックされているか、サーバーがダウンしているため、次のテストで失敗します) :

$ ping gfe.cit.api.here.com

Pinging cle2-cit.eu-west-1.elasticbeanstalk.com [54.154.19.134] with 32 bytes of data:
Request timed out.

pingwgetの一般的な違いについては、Alecの回答を参照してください。

エラー400を説明する考えられる理由については、roaimaのものを参照してください。

11
jlliagre

Wgetは主にHTTP、HTTPS、およびFTPを介したダウンロードに使用されるため、デフォルトでは接続にTCPを使用します。Pingは[〜#〜] icmp [〜#〜 ]、これは基本的にホストに「こんにちは」と言って、それが応答するかどうかを確認します。ICMPはポートを使用しません。これはhttp://が意味することです。「コンピュータ」にポート80で接続を開くように指示します、 "およびHTTPSポート443の場合。ICMPはポートを使用しないため、pingはIPアドレスのみを予期しますが、wgetはTCP接続を確立し、ファイルをダウンロードします。

5
Alec Petridis

あなたが実際に尋ねた質問に答えるために。 wgetはURLを取りますが、pingはホスト名を取ります。 URLは、プロトコル(https)、ホスト名(gfe.cit.api.here.com)、パス(/1/layer_put.json)、および3つのエンコードされたパラメーター(layer_id=123&app_id=x2&app_code=x1)で構成されます。認証やポートなど、URLに表示される可能性のある他の項目があります。

pingコマンドでは、ホスト名コンポーネントのみを使用できます。

次に、wgetコマンドは、プロトコルが期待するポート(httpsの場合は443/tcp)へのTCP/IP接続を開き、HTTPプロトコルを使用して指定された場所からコンテンツを取得しますURL。

pingコマンドは、ICMPを使用してping要求を指定されたホストに送信し、ホストはエコー応答応答を返します。これらは、それぞれICMPパケットタイプ8および0です。


さて、wgetが失敗する根本的な理由は、パラメータをwgetに引用していないため、シェルがそれを解析することです。 URLの中央にある&文字は、バックグラウンドでそのポイントまですべてを実行するようにシェルに指示します。次に、行の残りの2つの部分をすぐに実行し、すぐにエラーを出します。

URLを一重引用符で囲むと、おそらく意図したとおりに機能します。

だから私たちは持っています

wget -O layer_put.json 'https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1'

ping -c3 gfe.cit.api.here.com
5
roaima