nc
、curl
、whois
、Dig
、nslookup
などのさまざまなネットワーククエリツールをよりよく理解しようとしています。同時に、インターネット要求、サーバーなど(NIC、Aレコード、MX)のアーキテクチャについてもう少し詳しく説明しますが、TCP、ネームサーバー、ドメインレジストラ、パケットスニファ、HTTPヘッダー、およびIPアドレスについてはすでに少し知っています。それが私の背景です、これが私の質問です。
Dig
またはwhois
とすると、www.valgrind.org(またはvalgrind.org)とすると、少なくとも2つの異なるIP回答(178.250.76.80と172.16.0.23#53)が得られます。
$ nslookup valgrind.org
Server: 172.16.0.23
Address: 172.16.0.23#53
Non-authoritative answer:
Name: valgrind.org
Address: 178.250.76.80
w3m
またはchromium
でこれらのいずれかを参照しようとすると、403 Forbidden
エラーが発生します。さらに、どちらに移動するかわかりませんが、しかしping
はどういうわけかそれを理解することができます! ping valgrind.org
(またはping www.valgrind.org
)の場合、
$ ping valgrind.org
PING valgrind.org (178.250.76.80) 56(84) bytes of data.
64 bytes from 178.250.76.80: icmp_req=1 ttl=50 time=80.2 ms
それをどうやって知ったのですか?また、ブラウザが178.250.76.80
からvalgrind.org
に移行して何かをロードする方法を見つけるために、他にどのようなツールを使用する必要がありますか?
ここではさまざまなプログラムとプロトコルが機能しており、それぞれが他とは独立して応答するように構成されています。
Linuxホストは、IPアドレスを見つけるために、通常、 / etc/nsswitch.conf のhosts:ディレクティブを使用して、さまざまなソースにクエリを実行する順序を決定します。典型的なエントリは
hosts: files dns
これは、ファイル(通常は / etc/hosts )をチェックしてから、DNSシステムをチェックすることを示しています。そのため、/ etc/hostsファイルの検索が実行され、valgrind.orgのエントリが含まれている場合は、関連付けられたIPアドレスが返されます。/etc/hostsにvalgrind.orgのエントリが含まれていない場合、DNSに対してリクエストが行われます。これには、 / etc/resolv.conf の内容を読み取って、DNS情報を要求するためにどのサーバーに接続する必要があるかを判断することが含まれます...
コマンドからの出力を見ると、2つの異なるアドレスを取得していません。出力の最初の部分は、どのサーバーが nslookup (172.16.0.23)によって接続されたか、またどのポート(#53)で回答を得たかを示しています。また、172.16.0.23のPTRレコードが正しく構成されていないこともわかっています。これは、RobMの回答が示すように、サーバーが名前として表示される場合に表示されるためです。
出力の2番目の部分は、要求した情報であり、178.250.76.80がvalgrind.orgのIPv4アドレスであることを示しています。
ポート80( http )で178.250.76.80に直接接続すると、そのアドレスのhttpサーバーが構成されているため、403が禁止されます。名前ベースの仮想サーバーとして構成されている可能性が高いため、リクエストを適切なvhostにルーティングするには、有効なhttp Host:(sec 14.23) ヘッダーが必要です。
ICMPプロトコルスイート でICMPエコー要求の場合、pingコマンドは一部です。178.250.76.80のホストはpingに応答するように構成されているため、pingに応答し、各エコーにICMPエコー応答を送信します。リクエスト。
Nslookupの出力を誤解しています。それは2つの答えを与えるのではなく、1つだけです。最初のアドレスは、回答を得た場所です。 ping
はまったく同じタスクを実行し、まったく同じ結果を取得します。ブラウザにIPアドレスを与えようとしたときに403が表示されるのは、サーバーが仮想ホスティングを実行しているためです。仮想ホスティングを使用すると、サーバーは単一のIPアドレスのみで複数のサイトを持つことができます。閲覧者が入力した名前に基づいて、サービスを提供するサイトを決定します。 IPアドレスを入力すると、サーバーは必要なサイトを認識しません。
Nslookupがどのように機能するかを理解する必要があります。
答えの最初の部分は、ここでより明確になるはずですが、あなたが話しているネームサーバーです。それが提供する答えは2番目の部分です
したがって、私の例では、nslookupに、現在構成されているDNSサーバーに、www.serverfault.comがどこにあると思われるかについて問い合わせるように依頼しています。
nslookupは、クエリの実行に使用したサーバーのアドレスと、その回答を返します。これは、Digまたはnslookupを実行する特定のDNSサーバーを指定する場合に重要です。これは、名前解決の問題のトラブルシューティングのごく普通の部分です。
oSとpingのバージョンによって異なります。 Linuxの場合は、straceを使用して何が行われているのかを知ることができます。
strace ping valgrind.org
ステップバイステップで表示されます。投稿するには長すぎますが、これが私の出力であるため、ある時点でホストファイルをチェックすることがわかります
。
.
.
open("/etc/Host.conf", O_RDONLY) = 3
.
.
.