訪問者 IP の検出は簡単です。しかし、訪問者の DNS サーバー IP を検出するのはどうですか?
このPHP関数を見つけましたが、ドメイン名のDNSしか見つけられません。
dns_get_record("website.com", DNS_ANY);
訪問者の DNS サーバーを検出できますか?
訪問者 IP の検出は簡単です。しかし、訪問者の DNS サーバー IP を検出するのはどうですか?
このPHP関数を見つけましたが、ドメイン名のDNSしか見つけられません。
dns_get_record("website.com", DNS_ANY);
訪問者の DNS サーバーを検出できますか?
簡単ではありませんが、それは可能です。http://ipleak.net/の Adam Dobrawy による別の回答で提案されたアプローチのデモンストレーションがあります。
少し詳細を追加すると、このようなものを実装する方法は次のとおりです。
パート 1 - myspecialdomain.com に独自の DNS サーバーをセットアップする
この DNS サーバーは、着信要求と送信元 IP アドレスをログに記録して保存するためにカスタムで作成する必要があります。このストレージは短期間で十分なので、memcache のようなものがうまく機能する可能性があります。DNS 応答は NXDOMAIN である必要があります。
パート 2 - クライアント側のコード
JavaScript で大きな乱数を作成して保存します。ブラウザで .myspecialdomain.com を検索します。エラー ハンドラを含む JS img タグを介してこれをロードします。そのエラー ハンドラで、乱数を渡すサーバー側コードにクエリを作成します。
パート 3 - Web アプリケーション (サーバー側)
ランダムな文字列を取得してデータストアで検索し、DNS サーバーの IP アドレスを取得するサーバー側のロジックを実装する必要があります。ここでの IP アドレスは、特定のサーバーの IP ユニキャスト アドレスであり、8.8.8.8 のような IP エニーキャスト アドレスではないことに注意してください。ここでは、GeoIP または Whois データベースを使用して、その IP アドレスの所有者を特定できます (OpenDNS、Google など)。次に、クライアント ロジックに送信する応答を生成できます。
はい、できます。たとえば、訪問者のページ解像度を検出できます。
独自の DNS サーバーが必要であり、ユーザーに一意の dns 名を解決するよう強制します。ユーザーが解決しようとすると、DNS サーバー自身の DNS サーバー アドレスに漏洩します。次に、DNS サーバーは、一意の dns 名について尋ねた情報を Web アプリに共有する必要があります。
DNS 解決は要求自体の一部ではありません。つまり、要求の受信者は、クライアント (ブラウザー) がどの DNS を使用したかを知る方法がありません。
ホスト名を IP アドレスに解決する必要があるため、DNS 要求が最初に発生します。これが完了すると、問題のアドレスに対して別のリクエストが実行されます。
答えはノーだ。サーバーが取得したのは、訪問者への TCP 接続、つまり [IP, Port] ペアだけです。DNS 解決は、訪問者のローカル構成に依存し、プロキシによって実行できます。