Networking 考虑到远程计算机的IP(无需付费),如何确定远程计算机的位置?

Networking 考虑到远程计算机的IP(无需付费),如何确定远程计算机的位置?,networking,geolocation,ip,geocoding,geoip,Networking,Geolocation,Ip,Geocoding,Geoip,我做这个项目已经有一段时间了。我发现有很多免费的数据库在IP号码(IP地址的一种操作)和一个长的纬度坐标之间映射。然而,这些数据库的准确性确实很差 我尝试在一些数据库之间进行合并,以获得最佳频繁答案或答案中的“平均值” 这确实提高了我的准确性,但没有我预期的那么多 我有另一个想法-使用Traceroute命令找出到达该目标的路径,并根据途中的跳数确定目标的位置 我在寻找新的想法,或者某种协议来帮助确定位置。我一直在考虑公共cookie,但这可能太具侵入性了。此外,一位朋友告诉我SNMP协议可能对

我做这个项目已经有一段时间了。我发现有很多免费的数据库在IP号码(IP地址的一种操作)和一个长的纬度坐标之间映射。然而,这些数据库的准确性确实很差

我尝试在一些数据库之间进行合并,以获得最佳频繁答案或答案中的“平均值”

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

我有另一个想法-使用Traceroute命令找出到达该目标的路径,并根据途中的跳数确定目标的位置

我在寻找新的想法,或者某种协议来帮助确定位置。我一直在考虑公共cookie,但这可能太具侵入性了。此外,一位朋友告诉我SNMP协议可能对我有所帮助,但它的实现非常复杂

我的目标是确定这台计算机在哪个城市。这是accuray,我正在瞄准它


谢谢,对不起我的英语

你可以使用HTML5的新地理定位。例如:

(摘自上面的链接)

代码:


功能成功(职位){
var s=document.querySelector(“#status”);
如果(s.className=='success'){
//不确定为什么我们在FF中两次碰到这个,我认为这与缓存结果返回有关
返回;
}
s、 innerHTML=“找到你了!”;
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=新的google.maps.latlng(position.coords.latitude,position.coords.longitude);
变量myOptions={
缩放:15,
中心:拉特林,
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({
位置:latlng,
地图:地图,
标题:“你在这里!”
});
}
函数错误(msg){
var s=document.querySelector(“#status”);
s、 innerHTML=typeof msg=='string'?msg:“失败”;
s、 className='fail';
//log(参数);
}
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(成功,错误);
}否则{
错误('不支持');
}
至于数据库,我已经走了这条路,没有一个完美的解决方案,所有的数据库只能提供大约50英里的准确度


有了它,您可以使用Ajax将位置数据推送到服务器。

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

  • 我的公司有一个VPN

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

    我在哪里?在我公司的地方?还是在世界的另一边,我在那里度假

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

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

这两个示例表明IP地址本身不包含(也不能包含)任何地理信息。它可以通过经验与此相关-用户将其(动态?)IP地址输入数据库,与当前IP地址相关,但仅此而已。也就是说,系统固有的不精确性

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

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


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

你有没有研究过MaxMind(商业)的准确性,以及你的目标与之相比如何?@CharlesB-是的,我有研究过MaxMind。他们的免费数据库比商业数据库差得多。他们的付费服务真的很好,但我的目标是不用付费就能获得这些信息:)。我不是在寻找超精确的测定方法。我只想知道远程计算机在哪个城市。-这是一个很好的例子。但请注意,它仅适用于WIFI连接。我的房子里有局域网和无线网络。当我通过局域网连接时,它发现我在25英里外的另一个城市。但是,当我连接到我的Wifi时,它非常准确。我的解释是,谷歌一直在绘制世界各地的WIFI和接入点地图,根据你的信号强度,它可以确定你所在的位置。如果你最好解释一下:)它可以通过浏览器工作。HTML是客户端,基本上浏览器使用的方法是:“GPS、WLAN、基于AP的定位、IP定位”。这里还有更多:我不认为使用数据库会比25英里以外的地方获得更好的准确度。我知道我不会得到那样的准确度。这就是我寻找新想法的原因。这个HTML-5方法的问题是它也不准确。我已经用一些局域网的例子测试了它,结果很差。正如我之前所说,将此工具与WLAN结合使用是非常精确的,但我主要对LAN用户感兴趣。一个理论上的想法可能会导致精度不高,但可能会起作用,即让多台服务器连接到客户端,以确定每台服务器之间的延迟,并使用这些数据对客户端的位置进行三角测量。除此之外,我认为在没有访问互联网提供商信息的情况下,不可能确定位置。他们是唯一一个
<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>