【问题标题】:getCurrentPosition fails behind VPN - why?getCurrentPosition 在 VPN 后面失败 - 为什么?
【发布时间】:2015-06-25 15:42:35
【问题描述】:

我之前的问题:https://stackoverflow.com/questions/29581698/getcurrentposition-fails-behind-vpn 因“不清楚”而被关闭。指示表明我应该改写问题,但这样做后,问题仍然关闭。因此,我正在用重新措辞的问题打开一个新问题。

我使用 AirVpn.org 并注意到虽然处于活动状态,但地理定位失败:如果我关闭 VPN 客户端,下面的代码显示“工作”,打开它,我得到“无法确定当前位置”。

if (!navigator.geolocation) {
  alert('No navigator');
} else navigator.geolocation.getCurrentPosition(
      function() { alert('works'); },
      function(e) { alert(e.message); }, {
      timeout: 30000, 
      enableHighAccuracy: true, 
      maximumAge: 75000
    });

我要问的是,当通过 VPN 连接到 Internet 而不是其他方式时,从地理定位器请求当前位置失败的原因是什么?具体来说,我很想知道navigator.geolocation 软件用于确定位置的机制以及为什么该机制在 VPN 条件下可能不起作用

【问题讨论】:

    标签: javascript geolocation vpn


    【解决方案1】:

    浏览器确定您的位置的方式有多种。如果您的设备上没有 GPS 等位置传感器,则存在一些后备方案。其中主要是通过附近的 WiFi 热点进行地理定位,如果失败,则基于 IP 的定位。这两者都需要有效的互联网连接,因为它们将 WiFi 标识符和/或 IP 发送到服务器,并将它们解析到可能的位置。据我所知,它们还需要有效的 TLS(端口 443),因此如果您的 VPN 正在剥离 HTTPS,您可能无法获取您的位置,因为您无法获得对“我基于哪里”的查询的响应我可以接收什么 WiFi”。

    然而,更可能的事实是,VPN 会掩盖您的 IP 地址。因此,如果您的“工作”地理位置仅基于 IP 地址,则在 VPN 上将失败。你可以通过它非常低的精度来判断你的位置是基于 IP 的,通常在几十公里,而 WiFi 位置通常在几十或几百米。这些地理定位服务变得非常智能,因此它们可能会将 VPN 地址列入“黑名单”并将其 IP 解析为“未知”。

    我想到的另一种可能性可能是您的 IP 和 WiFi 位置不匹配,导致模棱两可的状态再次解析为“未知”。

    我的钱是因为您位于仅限 IP 的位置,而地理定位服务无法或不想解析您的“屏蔽”地址。

    【讨论】:

    • 我能否正确理解您,当我从连接到无线网络的设备发出网络请求时,网络标识符(SSID?或网络的某些 MAC 地址类型?)不知何故嵌入到请求中?我知道谷歌有一个基于这些 wifi 标识符的位置数据库,所以这将是一个简单的查找,但是标识符是如何传输的?它是 TCP/IP 的一部分吗?
    • 关于这一点,我认为可以合理地说我的 VPN 的出口点是硬连线的,而不是在 WiFi 上。但是,我希望地理定位软件能够对退出 IP 地址进行回退,但事实并非如此。它只是失败了。另外,我不确定我是否了解被剥离的 HTTPS?
    • 大多数地理定位服务都会向服务器(例如 Google 的)发出位置请求。所有“可见”网络的 SSID 都由软件(例如浏览器)收集并在请求正文中传输。它不会像 IP 那样在任何标头中传播。因此,服务器获取 SSID 列表发送请求的 IP。这可能会导致歧义。至于 SSL 剥离,地理位置数据包是敏感数据,大多数浏览器都要求它通过 HTTPS 传输。如果您的 VPN 不支持 SSL 流量,请求将失败。
    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多