如何确定远程计算机位置,给定其IP(不付费)?

时间:2011-11-03 16:09:56

标签: networking geolocation ip geocoding geoip

我一直在研究这个项目。我发现有很多免费的数据库可以在IP编号(IP地址的操作类型)与长期和纬度的坐标之间进行映射。但是,这些数据库的准确性确实很糟糕。

我尝试在某些数据库之间进行合并,并在答案中找到最常见的答案或“平均”。

这确实提高了我的准确性,但没有我预期的那么多。

我有另一个想法 - 使用Traceroute命令找出这个目标的路径,并根据路上的跳跃来确定我的目标在哪里。

我正在寻找新的想法,或某种有助于找出位置的协议。我一直在考虑公共cookie,但这可能过于侵入。此外,一位朋友告诉我,SNMP协议可能对我有所帮助,但实施起来非常复杂。

我的目标是憎恨这台电脑在哪个城市。这是我的目标。

感谢和抱歉我的英语!

2 个答案:

答案 0 :(得分:1)

您可以使用HTML5的新地理位置。示例:http://html5demos.com/geo

(取自上面的链接)

代码:

<script>
function success(position) {
  var s = document.querySelector('#status');

  if (s.className == 'success') {
    // not sure why we're hitting this twice in FF, I think it's to do with a cached result coming back    
    return;
  }

  s.innerHTML = "found you!";
  s.className = 'success';

  var mapcanvas = document.createElement('div');
  mapcanvas.id = 'mapcanvas';
  mapcanvas.style.height = '400px';
  mapcanvas.style.width = '560px';

  document.querySelector('article').appendChild(mapcanvas);

  var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
  var myOptions = {
    zoom: 15,
    center: latlng,
    mapTypeControl: false,
    navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);

  var marker = new google.maps.Marker({
      position: latlng, 
      map: map, 
      title:"You are here!"
  });
}

function error(msg) {
  var s = document.querySelector('#status');
  s.innerHTML = typeof msg == 'string' ? msg : "failed";
  s.className = 'fail';

  // console.log(arguments);
}

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(success, error);
} else {
  error('not supported');
}

</script>

至于数据库,我一直走在那条路上,没有一个完美的解决方案,所有数据库只会给你大约50英里的准确度。

通过这种方式,您可以使用Ajax将位置数据推送到服务器。

答案 1 :(得分:1)

无法可靠地工作。例如,采取以下方案:

  • 我公司有VPN。

    有了这个,我可以从我的公司获得一个IP地址而无需亲自到场。

    我在哪里?在我公司的地方?或者在世界的另一边,我度过假期?

  • 我与我的提供商有拨号连接。

    我在哪里?在拨入节点所在的位置,或者我真正在哪里?

这两个例子表明,IP地址本身并不包含(也不能容纳)任何地理信息。它可以与经验相关 - 用户将他们的(动态?)IP地址输入数据库,与他们当前的IP地址相关,但就是这样。所以说,系统固有的不可能是精确的。

如果您查找通过ADSL和动态IP地址上线的“普通用户”,您不知道提供商从同一个池中获取地址的区域有多大。在我断开连接后,接下来获取此IP地址的用户可能距离我50公里,500公里甚至2000公里(取决于您所居住的国家/地区)。

即使分配给业务客户的固定IP也可能会改变其位置:业务移动,或者它不再存在,并且IP地址被分配给完全不同的客户。

随着IPv6变得越来越流行,所有这些东西将在未来几个月/几年内再次发生变化。