如何使用 JavaScript 获取本地/内部 IP

     2023-03-23     300

关键词:

【中文标题】如何使用 JavaScript 获取本地/内部 IP【英文标题】:How to get local/internal IP with JavaScript 【发布时间】:2015-12-26 13:11:50 【问题描述】:

如何使用 WebRTC 获取本地客户端 IP。

我不需要客户端的REMOTE_ADDR,而是他的本地网络IP。 我以前在sharedrop.com 之类的网站上看到过,它使用 WebRTC 识别同一网络中的计算机。

在 PHP 中,我这样做是为了获取客户端远程 IP:

<?php
  echo $_SERVER["REMOTE_ADDR"]; // which would return 72.72.72.175
?>

我查看了***,但每个问题都使用远程地址回答。

如何使用 JavaScript 而不是远程地址获取我的本地 IP(例如 192.168.1.24)。

【问题讨论】:

@JaromandaX 不幸的是,有可能... @mido22 - 这很烦人:p Chrome 将 WebRTC 默认更改为 mDNS 并破坏了内网。 ***.com/questions/56755747/… 【参考方案1】:

更新

不幸的是,以下答案不再有效,因为浏览器出于安全考虑已经改变了这种行为。见this *** Q&A for more details。


我从哪里获取代码 --> Source

你可以在 --> Demo找到一个演示

我已经修改了源代码,减少了行数,没有发出任何 stun 请求,因为您只想要本地 IP 而不是公共 IP,以下代码适用于最新的 Firefox 和 Chrome:

    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;
        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];
        console.log('my IP: ', myIP);   
        pc.onicecandidate = noop;
    ;
    

这里发生的事情是,我们正在创建一个虚拟对等连接,并且为了让远程对等方与我们联系,我们通常会相互交换 ice 候选者。并且读取冰候选我们可以知道用户的 ip。

【讨论】:

这实际上有安全隐患,因为这允许攻击者找出当前用户的内部 IP 地址 这缺少清理代码以在您完成后关闭此连接。一遍又一遍地调用它最终会抛出 野生动物园怎么样? Chrome 将 WebRTC 默认更改为 mDNS 并破坏了内网。 ***.com/questions/56755747/…【参考方案2】:

您可以在现代浏览器上使用此版本(带有Promisesasync / await

// minified onliner, 219b
const ip = await new Promise((s,f,c=new RTCPeerConnection(),k='candidate')=>(c.createDataChannel(''),c.createOffer(o=>c.setLocalDescription(o),f),c.onicecandidate=i=>i&&i[k]&&i[k][k]&&c.close(s(i[k][k].split(' ')[4]))))
// cleaned, 363b
const ip = await new Promise((resolve, reject) => 
  const conn = new RTCPeerConnection()
  conn.createDataChannel('')
  conn.createOffer(offer => conn.setLocalDescription(offer), reject)
  conn.onicecandidate = ice => 
    if (ice && ice.candidate && ice.candidate.candidate) 
      resolve(i.candidate.candidate.split(' ')[4])
      conn.close()
    
  
)

【讨论】:

Chrome 将 WebRTC 默认更改为 mDNS 并破坏了内网。 ***.com/questions/56755747/…

如何使用 javascript 从 iframe 内部获取 iframe 的高度?具有多个 iframe 的页面呢?

】如何使用javascript从iframe内部获取iframe的高度?具有多个iframe的页面呢?【英文标题】:Howtogettheheightofaniframewithjavascriptfrominsidetheiframe?Whataboutpageswithmultipleiframes?【发布时间】:2011-07-0212:25:26【问题描述】:有没有办法通过从ifr... 查看详情

如何创建使用本地存储的 javascript ipad 应用程序?

】如何创建使用本地存储的javascriptipad应用程序?【英文标题】:HowdoIgoaboutcreatingajavascriptipadappthatuseslocalstorage?【发布时间】:2015-04-2816:46:00【问题描述】:我需要创建一个内部管理应用。该应用需要能够:对于V1-包装并执行java... 查看详情

Solana - 如何从 JavaScript / Node.js 中的本地密钥对获取帐户?

】Solana-如何从JavaScript/Node.js中的本地密钥对获取帐户?【英文标题】:Solana-HowtogettheaccountfrommylocalkeypairinJavaScript/Node.js?【发布时间】:2021-12-0702:24:11【问题描述】:我正在尝试编写一个node.js程序,将一个SOL空投到我的devnet帐户... 查看详情

Javascript:如何使用字符串数组获取对象属性? [复制]

】Javascript:如何使用字符串数组获取对象属性?[复制]【英文标题】:Javascript:HowtoGetObjectpropertyusingArrayofstring?[duplicate]【发布时间】:2017-08-0908:50:45【问题描述】:如何使用字符串数组(属性名称)获取对象属性?(数组的最后... 查看详情

如何在javascript中获取节点内部文本?

】如何在javascript中获取节点内部文本?【英文标题】:Howtogetthenodesinnertextinjavascript?【发布时间】:2012-06-0214:12:10【问题描述】:我有一个XML格式的字符串。如下图:<gt><st>sample1</st><tt>sample2</tt><tt>sampl... 查看详情

Android 性能 - “避免内部获取器/设置器”

...此内容:AvoidInternalGetters/Setters在C++等本地语言中,通常使用getter(例如i=getCount())而不是直接访问字段(i=mCount)。这对于C++来 查看详情

尝试使用 chrome 控制台 javascript/jquery 获取内部元素

】尝试使用chrome控制台javascript/jquery获取内部元素【英文标题】:TryingtogetInnerElementsusingchromeconsolejavascript/jquery【发布时间】:2019-12-1007:23:47【问题描述】:您好,我正在尝试使用chrome控制台获取内部元素,但它抛出了一个错误... 查看详情

在 JavaScript 中获取 Json 中的字典

】在JavaScript中获取Json中的字典【英文标题】:GetDictinJsoninJavaScript【发布时间】:2020-07-2003:31:41【问题描述】:如何在RCodDepartamento中获取Nombre的值?我可以得到Nombre,Apellido,FechaNacimiento使用:data[i].Nombre;数据[i].Apellido;数据[i].Fec... 查看详情

如何在 JavaScript 中获取 CPU 使用率?

】如何在JavaScript中获取CPU使用率?【英文标题】:HowtogetCPUusageinJavaScript?【发布时间】:2016-09-1517:22:29【问题描述】:有没有办法在浏览器的JavaScript中获取CPU使用率?【问题讨论】:提示重复的链接不存在了有一种方法可以在No... 查看详情

İ 可以使用 JavaScript 更改我在托管中的文件吗?

】İ可以使用JavaScript更改我在托管中的文件吗?【英文标题】:CanİchangemyfilesinhostingwithJavaScript?【发布时间】:2021-09-1607:00:08【问题描述】:我已经建立了我的第一个网站。但是有很多问题,例如当我点击文章的海报时,点击海... 查看详情

如何使用本地存储使用javascript登录

】如何使用本地存储使用javascript登录【英文标题】:howtouselocalstorageforloginusingjavascript【发布时间】:2015-02-2008:04:54【问题描述】:我已经编写了一个使用javascript登录的代码functioncheckLogin()if(localStorage.login=="true")window.location.href="... 查看详情

如何在 django 中使用 Javascript 获取跨域数据?

】如何在django中使用Javascript获取跨域数据?【英文标题】:Howtogetcross-domaindatausingJavascriptindjango?【发布时间】:2011-10-0308:33:51【问题描述】:想象一下,您有两个域,并且您希望它们通过Javascript机制进行交互。所以,到目前为... 查看详情

如何使用 JavaScript 打开本地磁盘文件?

】如何使用JavaScript打开本地磁盘文件?【英文标题】:HowtoopenalocaldiskfilewithJavaScript?【发布时间】:2011-04-0416:53:50【问题描述】:我试图打开文件window.open("file:///D:/Hello.txt");浏览器不允许以这种方式打开本地文件,可能是出于安... 查看详情

使用javascript从组件外部遍历本地dom

我试图使用JavaScript从Polymer组件外部访问本地DOM元素。在过去,我可以使用document.querySelector并使用::shadow选择器选择shadowDOM元素。目前,据我所知,本地DOM实现为“shadyDOM”。在这种情况下如何访问本地DOM元素?答案假设您有一... 查看详情

javaScript / API - 如何获取用户的精确位置? [复制]

】javaScript/API-如何获取用户的精确位置?[复制]【英文标题】:javaScript/API-Howtogetuser\'spreciselocation?[duplicate]【发布时间】:2016-03-2911:22:42【问题描述】:我已经使用ipinfo(不需要用户的授权)或等效的来获取用户的位置信息,用... 查看详情

如何使用具有多个内部函数的非本地语句?

】如何使用具有多个内部函数的非本地语句?【英文标题】:Howtousenonlocalstatementwithseveralinnerfunctions?【发布时间】:2019-01-0612:57:42【问题描述】:有人能解释一下为什么这个功能不起作用吗?“非本地”语句不应该使x在g中可以... 查看详情

使用 JavaScript 和 EJS 获取 HTML 标记的内部文本并作为值传递给输入字段

】使用JavaScript和EJS获取HTML标记的内部文本并作为值传递给输入字段【英文标题】:GettheinnertextofanHTMLtagandpassasvaluetoaninputfieldusingJavaScriptandEJS【发布时间】:2021-09-2616:45:33【问题描述】:我正在使用一个网格容器,每个网格项都... 查看详情

如何使用 Javascript 编写本地 .text

】如何使用Javascript编写本地.text【英文标题】:Howtowritealocal.txtwithJavascript【发布时间】:2013-12-2115:09:56【问题描述】:我想在IE中使用javascript控制台编写一个.txt文件。我已经有了要写在文件上的字符串;所以,我想做的是:varr... 查看详情