我们如何使用 Javascript 代码查找 IP 地址?

How can we Find Ip Address using Javascript code?

提问人:Gopal k .Dwivedi 提问时间:9/14/2023 最后编辑:VLAZGopal k .Dwivedi 更新时间:9/14/2023 访问量:176

问:

const peerConnection = new RTCPeerConnection({ iceServers: [] });
     peerConnection.createDataChannel('');

     peerConnection.createOffer()
    .then((offer) => peerConnection.setLocalDescription(offer))
    .catch((error) => console.log(error));

    peerConnection.onicecandidate = (event) => {
    if (event.candidate) {
      console.log(`Client's IP address is ${event.candidate.address}`);
     }
   };
JavaScript Angular 操作系统 IP 地址

评论


答:

0赞 Riyas 9/14/2023 #1

从候选属性中提取 IP 地址

const ipAddress = event.candidate.candidate.split(' ')[4];

打印 IP 地址

console.log('IP address:', ipAddress);

评论

0赞 Gopal k .Dwivedi 9/14/2023
我们得到这个“b15671cc-af68-41e6-8dd4-999ca8dd90e9.local”作为输出 如何从中找到ip?
0赞 Riyas 9/14/2023
参考这个:链接
0赞 Gopal k .Dwivedi 9/14/2023
@RTC Connectoin 只给我们浏览器 ip,而不是机器
0赞 VLAZ 9/14/2023
@Gopalk.Dwivedi没有“每个申请的知识产权”的概念。一台机器也没有一个 IP。你应该真正弄清楚你在寻找什么,因为由于各种原因,这些信息不会直接暴露。其中最重要的是,它在很多情况下都没有用。
0赞 Gopal k .Dwivedi 9/14/2023
我需要运行应用程序的客户端计算机 IP 地址 (IPV4) @VLAZ
0赞 Mevil Bhojani 9/14/2023 #2

出于安全和隐私考虑,当 JavaScript 在 Web 浏览器中运行时,无法直接获取用户的公共 IP 地址。但是,您可以使用对第三方站点的 API 调用来获取用户的公共 IP 地址。

下面介绍如何使用 JavaScript 和外部服务来查找 IP 地址:

1. 使用 IP API 的免费服务

若要获取公共 IP 地址,可以使用 ipify 等工具。

fetch('https://api.ipify.org?format=json')
    .then(response => response.json())
    .then(data => {
        console.log(data.ip);
    })
    .catch(error => {
        console.log('Error:', error);
    });

2.使用WebRTC(公共IP不可靠)

WebRTC 可用于找出用户的私有甚至公共 IP 地址。但这种方法并不能保证公共 IP,它可能会泄露私有 IP,这可能是一个隐私问题。

function findIP(onNewIP) {
    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
    var pc = new myPeerConnection({
        iceServers: []
    }),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;

    function iterateIP(ip) {
        if (!localIPs[ip]) onNewIP(ip);
        localIPs[ip] = true;
    }

    pc.createDataChannel("");

    pc.createOffer(function(sdp) {
        sdp.sdp.split('\n').forEach(function(line) {
            if (line.indexOf('candidate') < 0) return;
            line.match(ipRegex).forEach(iterateIP);
        });

        pc.setLocalDescription(sdp, noop, noop);
    }, noop);

    pc.onicecandidate = function(ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
    };
}

findIP(ip => console.log('your IP is ' + ip));

请记住,如果您像第一种方式一样使用外部服务,您将依赖于该服务的可用性,并且如果您在短时间内发出过多请求,可能会遇到速率限制。

评论

0赞 Gopal k .Dwivedi 9/14/2023
通过使用“api.ipify.org”,我们只能获得我们使用Internet的服务器IP。例如,如果我们使用以太网,它将为我们提供路由器 IP 地址,如果我们使用 WIFI,那么我们将获得 WIFI 提供商机器,而不是我们正在使用应用程序的本地机器。