web-dev-qa-db-ja.com

インターネットサーバーはどのようにしてローカルIPアドレスを見つけることができますか?

このサイト は、パブリックIPv6、パブリックIPv4、およびローカルIPアドレスを示しています。 1つ目と2つ目は明らかですが、ルーターがそのような慣行を防ぐために作られ、プライベートホームネットワークをグローバルパブリックネットワークから分離するために作られているため、WWWにあるWebサービスがローカルIPアドレスをどのように決定できるでしょうか。

だから私の質問は、インターネットにあるwebsericeが、コンピューターがローカルプライベートネットワーク内の他のユーザーと会話するために使用するローカルIPアドレスをどのように決定できるのかということです。

3
Valor Naram

結局のところ、HTML5の最近のWebRTC拡張機能により、JavaScriptはローカルクライアントのIPアドレスを照会できます。概念実証はこちらから入手できます: http://net.ipcalf.com

この機能は明らかに仕様によるものであり、バグではありません。しかし、物議を醸している性質を考えると、私はこの振る舞いに依存することに慎重になるでしょう。それにもかかわらず、私はそれが完全かつ適切にあなたの意図した目的に対処していると思います(ブラウザがリークしているものをユーザーに明らかにします)。

https://webrtc.org/

4
again

Whatismyip.comのようなWebサービスは、JavaScriptを使用してローカルIPアドレスを決定します。以下は、上記の site から抽出されたコードです。

function checkLocal() {
            window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;   //compatibility for firefox and chrome
            var pc = new RTCPeerConnection({iceServers: []}), noop = function () {
            };
            pc.createDataChannel("");    //create a bogus data channel
            pc.createOffer(pc.setLocalDescription.bind(pc), noop);    // create offer and set local description
            pc.onicecandidate = function (ice) {  //listen for candidate events
                if (!ice || !ice.candidate || !ice.candidate.candidate) return;
                //reads out local ip
                var myIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
                jQuery(document).ready(function () {
                    jQuery("#local-ip").append("Your Local IP is: " + myIP);
                    jQuery("#local-ip").show("slow");
                });

                pc.onicecandidate = noop;
            };

}

コードはPCにバインドしますが(PCは自己参照です)、インターフェースを使用すると、ソケットの詳細を読み取ることができ、ローカルエリアネットワークでコンピューターが認識されているローカルIPが含まれます。これは、ローカルIPアドレスを取得するための一般的な方法です。 JavaScriptで実行できるのは私にとっては初めてです。

RTCPeerConnection js APIの詳細: https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection

3
Valor Naram