5

JavaScript を使用して、STUN サーバーにクエリを実行し、パブリック IP とポートを取得するコード例を見つけようとしています。おそらく、サーバーを使用して

http://www.stunserver.org

STUN 仕様はhttp://www.ietf.org/rfc/rfc3489.txtで説明されていますが (これは長い文書です。明らかに、あなたがそれを読むことを期待していません)、コード例を見つけることができませんでした。まったく、それは私の人生を楽にするでしょう。何かのようなもの

function getMyIPAndPort() {
//query stun server for it
}

ありがとうございました

4

3 に答える 3

3

ローカルIPと外部IPの両方を取得できます

 function  determineIPs() {
    const pc = new RTCPeerConnection({ iceServers: [ {urls: 'stun:stun.l.google.com:19302'} ] });
    pc.createDataChannel('');
    pc.createOffer().then(offer => pc.setLocalDescription(offer))
    pc.onicecandidate = (ice) => {
        if (!ice || !ice.candidate || !ice.candidate.candidate) {
          console.log("all done.");
          pc.close();   
          return;
        }
        let split = ice.candidate.candidate.split(" ");
        if (split[7] === "host") {
          console.log(`Local IP : ${split[4]}`);
        } else {
          console.log(`External IP : ${split[4]}`);
         }
    };
  }
determineIPs();

例: https://jsbin.com/zosayiyidu/1/edit?js,console

STUN サーバーは外部 IP 用です。stun:stun.l.google.com:19302 へのアクセスを妨げるプロキシの背後にいないことを確認するか、別の STUN サーバーを使用してください

于 2019-11-11T03:20:15.410 に答える
2

非常に遅い答え。このミニ プロジェクトをご覧ください: https://diafygi.github.io/webrtc-ips/

IPは表示されますが、ポートは表示されないようです。ただし、これらの行を見ると、次のようになります。//match just the IP address var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ var ip_addr = ip_regex.exec(candidate)[1];

ポートを削除しているようです。よくわかりませんが、遊んで調べてみてください。

于 2015-03-08T09:15:31.627 に答える
1

プロジェクト ( https://diafygi.github.io/webrtc-ips ) もチェックしましたが、それがあまり好きではなかった素晴らしいスクリプトであってもです。つまり、その理由は、どちらの IP がパブリックとプライベートであるかを想定しているためです。IP が 10/8、172.16/12、または 192.168/16 でない場合、それはパブリック IPv4 です。これは常に正しいとは限りません。(残念ながら) LAN 内に他の範囲の IPv4 アドレスを設定し、それを NAT することができます。この考えは、STUN サーバーによって返される IP アドレスを取得することであり、それを想定するものではありません。

よろしく、

于 2016-02-17T03:13:26.560 に答える