0

特定のドメイン名のパケットをキャプチャするテスト プログラムを作成しました。gethostbyname() を使用して IP アドレスを取得し、pcap を使用してその IP アドレス宛てのパケットをキャプチャしていました。pcap_loop() のカウントは -1 に設定されているため、キャプチャを続けることになっています。

理論的には、私の PC からその IP アドレスに送信されるすべてのパケットは、そのドメイン名が Web ブラウザーによってアクセスされたか、単に ping によってアクセスされたかに関係なく、キャプチャされますよね?

テスト後、これは多くの Web サイトに当てはまりますが、google や ebay のようなトラフィックの多いサイトには当てはまりません。つまり、gethostbyname() から取得した IP アドレスに ping を実行すると、プログラムによって ping パケットがキャプチャされますが、firefox で google.com にアクセスすると、パケットはキャプチャされません。これは、google.com のような同じドメイン名に対して別の IP アドレスが存在する可能性があることを示しています。

その場合、DNS サーバーが google.com に対して異なる IP を返すのに、他の IP は同一であるのはなぜですか? また、gethostbyname() からのリクエストと Web ブラウザからのリクエストに違いがあるとすれば、それは何ですか?

前もって感謝します。

4

1 に答える 1

1

特定のドメイン名が複数の IP アドレスに解決される場合、Web ブラウザがどれを選択するか分からないため、キャプチャ フィルタがそれらすべてをキャプチャするように設定されていることを確認する必要があります。(たとえば) 最初に返されたものだけをフィルタリングする場合、Web ブラウザーと同じものを選択する可能性は n 分の 1 しかありません (n はアドレスの数です)。

ちなみに、のgetaddrinfo()代わりに使用することを検討する必要がありgethosybyname()ます。gethostbyname()廃止され、廃止されました。最も重要なことは、IPv6 アドレスを返すことができないことです。

gethostbyname()解決された IP アドレスのリストを配列として返します...ただし、IPv4 アドレスのみです。

getddrinfo()解決された IP アドレスのリストをリンクされたリストとして返します。

于 2013-06-04T14:10:42.753 に答える