使用Javascript将IP映射到位置

时间:2011-02-08 19:40:46

标签: javascript jquery ip

<script type="application/javascript">
    function getip(json){
      alert(json.ip); // alerts the ip address
    }
</script>

<script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>

我可以通过此代码获得用户IP ...

我想找到这个IP的位置。 我怎么能?

14 个答案:

答案 0 :(得分:42)

您可以将收到的IP提交给在线地理定位服务,例如http://www.geoplugin.net/json.gp?ip=<your ip here>&jsoncallback=<suitable javascript function in your source>,然后包括它返回的来源,该来源将运行您在jsoncallback中使用地理定位信息指定的功能。

或者,您可能希望了解HTML5的地理定位功能 - 您可以在行动here中看到它的演示。这样做的好处是您不需要向外部服务器发出请求,但它可能不适用于不支持HTML5的浏览器。

答案 1 :(得分:26)

可在此处获取在MaxMind数据库上运行的免费开源社区运行geolocation ip服务: https://ipstack.com/

示例

https://api.ipstack.com/160.39.144.19

<强>限制

每月10,000次查询

答案 2 :(得分:9)

我想指出,如果您使用http://freegeoip.net/,则无需向其提供客户端位置的IP地址。试试这些:

1)http://freegeoip.net/xml/

2)http://freegeoip.net/json/

3)http://freegeoip.net/csv/

但是,我无法通过AJAX调用检索信息,可能是因为某些跨源策略。显然他们不允许公众访问他们的系统。

答案 3 :(得分:7)

使用API将IP地址映射到位置非常容易。运行代码段以获取城市和广告输入框中IP的国家/地区。

&#13;
&#13;
$('.send').on('click', function(){

  $.getJSON('https://ipapi.co/'+$('.ip').val()+'/json', function(data){
      $('.city').text(data.city);
      $('.country').text(data.country);
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input class="ip" value="8.8.8.8">
<button class="send">Go</button>
<br><br>
<span class="city"></span>, 
<span class="country"></span>
&#13;
&#13;
&#13;

答案 4 :(得分:6)

万一你无法完成上面的代码,这里有一个与jquery一起使用的简单方法:

$.getJSON("http://www.geoplugin.net/json.gp?jsoncallback=?",
    function (data) {
        for (var i in data) {
            document.write('data["i"] = ' + i + '<br/>');
        }
    }
);

答案 5 :(得分:3)

更好的方法是跳过&#34;中间人&#34; (IP)

jQuery.get("http://ipinfo.io", function(response) {
    console.log(response.city);
}, "jsonp");

这为您提供 IP 城市国家/地区

答案 6 :(得分:2)

以下链接中的任何一个都应该注意这一点:

http://ipinfodb.com/ip_location_api_json.php

http://www.adam-mcfarland.net/2009/11/19/simple-ip-geolocation-using-javascript-and-the-google-ajax-search-api/

这些链接提供了通过Javascript获取用户位置的教程。但是,他们通过API向外部数据服务这样做。如果您拥有极高流量的站点,您可能希望自己托管数据(或获得高级API服务)。要自己托管所有内容,您必须使用IP地理位置托管数据库,并使用ajax将用户位置提供给Javascript。如果这是您想要的方法,您可以在下面获得一个免费的IP信息数据库:

http://www.ipinfodb.com/ip_database.php

请注意,此方法需要定期更新数据库,以便在将ips跟踪到位置时保持准确。

答案 7 :(得分:2)

一个相当便宜的选择是使用ipdata.co API,每天最多1500个请求。

  

这个答案使用的“测试”API密钥非常有限,仅用于测试几个调用。 Signup用于您自己的免费API密钥,每天最多可获得1500个请求以进行开发。

$.get("https://api.ipdata.co?api-key=test", function (response) {
    $("#ip").html("IP: " + response.ip);
    $("#city").html(response.city + ", " + response.region);
    $("#response").html(JSON.stringify(response, null, 4));
}, "jsonp");
<h1><a href="https://ipdata.co">ipdata.co</a> - IP geolocation API</h1>

<div id="ip"></div>
<div id="city"></div>
<pre id="response"></pre>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

https://jsfiddle.net/ipdata/6wtf0q4g/922/

查看小提琴

答案 8 :(得分:1)

您可以使用此Google服务free IP geolocation webservice

<强>更新

该链接已损坏,我在此处放置了包含@NickSweeting的其他链接:

ip-api.com

你可以用json格式获取数据:

http://ip-api.com/docs/api:json

答案 9 :(得分:1)

你可以在获得api密钥后使用ipinfodb,你可以查询针对特定IP的位置,例如http://api.ipinfodb.com/v2/ip_query.php?key=" + apiKey + "&ip=" + ip + "&output=xml,然后你可以从xml响应中提取位置

答案 10 :(得分:1)

    $.getJSON('//freegeoip.net/json/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

答案 11 :(得分:0)

您需要一个包含IP地址和位置映射的数据库。或者您可以使用大量在线工具来实现此目的,例如:http://www.ipligence.com/geolocation

谷歌在关键词下搜索了大量结果:“IP位置”

答案 12 :(得分:0)

尝试TUQ GEO IP API它是免费的,并且jsonp支持非常整洁和甜蜜

http://tuq.in/tools/geo

http://tuq.in/tools/geo+stats

答案 13 :(得分:0)

我建议您使用this查找IP地址的位置。

它非常易于使用,查询速度高,延迟最小,并且每周都会更新大量数据库。除了付费计划外,它还有每月45000个请求的免费计划。

您首先需要在https://ipgeolocation.io/注册并选择所需的    计划。

然后登录并从仪表板复制API密钥。

现在使用此API密钥查找IP地址的位置,如下所示:

curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=1.1.1.1'

您将收到如下的JSON响应:

{
    "ip": "8.8.8.8",
    "hostname": "google-public-dns-a.google.com",
    "continent_code": "NA",
    "continent_name": "North America",
    "country_code2": "US",
    "country_code3": "USA",
    "country_name": "United States",
    "country_capital": "Washington",
    "state_prov": "California",
    "district": "",
    "city": "Mountain View",
    "zipcode": "94043",
    "latitude": "37.4229",
    "longitude": "-122.085",
    "is_eu": false,
    "calling_code": "+1",
    "country_tld": ".us",
    "languages": "en-US,es-US,haw,fr",
    "country_flag": "https://ipgeolocation.io/static/flags/us_64.png",
    "isp": "Level 3 Communications",
    "connection_type": "",
    "organization": "Google Inc.",
    "geoname_id": "5375480",
    "currency": {
        "code": "USD",
        "name": "US Dollar",
        "symbol": "$"
    },
    "time_zone": {
        "name": "America/Los_Angeles",
        "offset": -8,
        "current_time": "2019-01-14 03:30:00.135-0800",
        "current_time_unix": 1547465400.135,
        "is_dst": false,
        "dst_savings": 1
    }
}

注意:此解决方案的一些附带好处,您还可以获取时区API和天文API。