当访问诸如http://www.monip.org或http://ip-api.com之类的网站时,我得到以下结果:

Your current IP Address
 - IP:    197.158.x.x
 - Internal IP:    192.168.x.x


我了解我可以看到我的公共IP地址(197.158.xx)。我不知道是如何通过Internet看到我的内部IP地址的?

这些网站似乎没有使用Flash插件,Java applet或其他脚本。我的ISP正在对我的内部IP地址进行NAT以便访问Internet:

3G Wireless Modem [192.168.x.x] -------- ISP [NAT to 197.158.x.x] ------- Internet


那么网站如何看到我的内部IP地址?

评论

我查看了网络流量,发现页面生成了STUN请求。它从我的两个本地IP地址生成了STUN请求。该页面显示了我的两个本地IP地址,即使STUN请求仅适用于其中一个。

有趣的是,只有ip-api.com提供了我的内部IP地址,而不是monip.com。反正对我来说。

因为Mozilla&co不会对您的隐私感到遗憾。他们更喜欢Firefox静静地充当间谍软件,而不是通过提示打扰用户。

@CodesInChaos有趣的事实! Mozilla员工阻止尝试解决该问题的尝试,Eric Rescorla也与NSA合作,对Dual Eliptic Curve进行了“扩展随机”修改(后门),旨在使加密数量级更容易破解。 />
@Boann他不是与TLS相关的RFC的第二作者吗?因此,与NSA相关的RFC可能只是其与TLS相关的活动普遍较高的副产品。

#1 楼

此信息最有可能的来源是您的浏览器的WebRTC实现。

您可以在ip-api.com的源代码中看到它。

来自https:// github .com / diafygi / webrtc-ips,还提供了此技术的演示:


Firefox和Chrome浏览器实现了WebRTC,该WebRTC允许向STUN服务器发出请求,该请求将返回本地和用户的公共IP地址。这些请求结果可用于javascript,因此您现在可以在javascript中获取用户的本地和公共IP地址。


最近有人指出,《纽约时报》正在使用此技术来提供帮助区分真实的访问者和漫游器(即,如果WebRTC API可用并返回有效信息,则可能是真实的浏览器)。

有几个Chrome扩展程序旨在阻止此API,但它们目前似乎并不有效。可能是因为浏览器中还没有钩子,因为GitHub README暗示:


另外,这些STUN请求是在常规XMLHttpRequest过程之外进行的,因此它们在开发人员控制台中不可见,或者无法被AdBlockPlus或Ghostery之类的插件阻止。


评论


浏览器制造商将如此多的未经测试的新API推入浏览器中,却丝毫没有对隐私造成损害的深思熟虑,这是一种令人沮丧的状况。

– Boann
15年7月24日在16:18

真正的问题是,为什么您会出于正当目的而想要它(我想不是告诉用户)?

– Schilcote
15年7月24日在21:05

@Schilcote浏览器内VoIP或视频会议?但是,他们这样做的方式却无法禁用它,这令人恐惧。

–迈克尔·汉普顿
15年7月25日在0:26

禁用WebRTC是Firefox插件,可防止LAN IP泄漏。

–亚当·卡兹(Adam Katz)
15年7月25日在0:40

某些第三方知道您的NAT私有IP是否会对隐私产生影响?我本以为这对您网络之外的人没有多大意义。

– rakslice
15年7月27日在1:28

#2 楼

获取内部IP地址的一种常见方法是使用JavaScript中的RTCPeerConnection。例如,

http://ip-api.com/调用一个名为“ gi”的javascript函数,该函数包含以下内容:代码:

...
 o = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection,
...


从技术上讲,这是通过在RTC连接(对象o)上设置带有“ onicecandidate”的回调并从事件中获取候选人属性来实现的。 。这将列出您的网络接口的所有本地IP地址。

看一下模块:获取内部IP WebRTC。

JavaScript脚本可以将该信息发送回Internet服务器,但以http://ip-api.com/为例,只是将其显示给客户端。

#3 楼

WebRTC只是发现LAN IP地址的几种方法之一。

关于此主题的一个不错的Black Hat 2012演讲被称为“混合威胁和JavaScript:永久性网络折衷计划”,其中Phil Purviance和Josh Brashars提出了一种自动方法,只需在网站上单击即可查找和擦除家用wifi路由器。



此WebRTC早于WebRTC,因此他们不得不以另一种方式发现路由器的IP地址。可以使用jslanscanner,JSScan,JS-Recon之类的JavaScript扫描器来完成此任务,但是可以通过简单的(至今)大量嵌入式对象集合来猜测路由器的地址(例如,通过嵌入预期的路由器图像并指出何时成功加载路由器图像)。获得地址后,您可以使用RouterPasswords.com猜测密码(以预期的默认值开头),甚至可以绕过Routerpwn.com的身份验证。

作为演示的概念证明,路由器IP,查找其默认密码,登录并自动安装替换固件(DD-WRT)。真正的攻击可能在新固件上具有许多恶意功能,并且很容易使它看起来像是未经修改的原始路由器系统。

(诚然,这标识了您的家用wifi路由器的LAN IP地址,而不是您的本地LAN IP地址,但是它非常接近并且可以说更令人担忧。)

#4 楼

您的浏览器(或ISP)很可能正在发送X-Forwarded-For标头,其中显示了您的内部IP地址。检查这样的网站,看看您要发送的标题。

评论


我也不会想到我的ISP也会有该信息。浏览器可能正确了。

–阿什·伯拉琴科(Ash Burlaczenko)
15年7月24日在9:41



如果他们是进行NAT(或者更可能是代理)的人,则他们必须具有该信息,以便从服务器发回答案。

–斯蒂芬(Stephane)
15年7月24日在10:25

我测试了链接,但事实并非如此。没有发送X-Forwarded-For标头,并且第二个链接仍然设法找到本地IP地址。

–卡巴斯德
15年7月24日在10:29

这不是NAT的工作方式。您在混淆概念。 -1

–轨道轻赛
15年7月26日在18:58



@LightnessRacesinOrbit,这不是NAT的工作方式,但我从未说过NAT。一个透明的代理将添加标题就好了。

–马克
15年7月26日在19:32

#5 楼

您的两个链接中的第一个不适用于我,但第二个却适用。在查看第二个链接的JavaScript代码时,我发现它正在使用window.RTCPeerConnection。并非所有浏览器都支持RTCPeerConnection,但是在这样做的浏览器中,可以将其用于标识浏览器的本地IP地址。 。这个关于StackOverflow的答案给出了一个示例,说明如何使用RTCPeerConnection的异步API查找本地IP地址。

评论


这似乎与先前发布的答案有很多重叠之处。我想知道最后一句话作为对现有答案之一的编辑而不是对新答案的有用吗?

– D.W.
15年7月24日在19:26

@ D.W。当时我发布的答案只有三个。他们都没有提到RTCPeerConnection。我不知道为什么当时没有向我显示其他两个答案。

–卡巴斯德
15年7月24日在19:31

凉!系统故障,也许;谁知道。无论如何,感谢您与SO的链接;好东西。

– D.W.
15年7月24日在19:33



#6 楼

该网站可能托管了一些在您的计算机上运行的JavaScript,并确定您的内部地址并将其显示在屏幕上。

远程服务器将看不到您的内部地址,并且不太可能在HTTP标头中转发。

评论


这可能是正确的。但是,javascript代码如何能够找到运行它的主机的IP地址?

–卡巴斯德
15年7月24日在10:31

我相信该特定页面不会看到本地IP地址。但是,如果javascript可见,则任何站点都可以包含javascript,并将其发送回服务器。

–卡巴斯德
15年7月24日在10:43

@kasperd这可以通过javascript实现,这里有概念证明

– BadSkillz
15年7月24日在11:05



您可以在JavaScript中使用WebRTC来完成此任务。另一个演示在这里

–kevino_17
15年7月24日在11:12

#7 楼

基本的TCP / IP协议不会公开您的内部地址-它不用于在公共Internet上进行路由,也不会捕获/存储在第3层的协议数据包中,因为数据包是由外围路由器创建的。您正在运行的任何数量的服务或客户端都可能在标头,服务横幅等的第7层中公开此信息。

找出泄漏此信息的确切方法是使用网络流量转储内部网络上的程序(例如wirehark或tcpdump),并检查第7层中数据包的内容,即数据有效载荷,并且如果客户端未将内部地址记录在数据有效载荷中的某处,则它可能来自您的外围路由器(尽管这种情况不太可能发生),您将需要在某处路由器的Internet端捕获网络流量,以了解这种情况的发生。