我会使用一个可以返回 JSON 的 Web 服务(与 jQuery 一起使事情变得更简单)。以下是全部active我可以找到免费的 IP 查找服务以及它们返回的信息。如果您知道其他人,请添加评论,我将更新此答案。
Abstract https://www.abstractapi.com/ip-geolocation-api
let apiKey = '1be9a6884abd4c3ea143b59ca317c6b2';
$.getJSON('https://ipgeolocation.abstractapi.com/v1/?api_key=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每月 10,000 个请求
- 需要注册才能获取 API 密钥
大数据云 https://www.bigdatacloud.com/ip-geolocation-apis
// Base
let apiKey = 'd9e53816d07345139c58d0ea733e3870';
$.getJSON('https://api.bigdatacloud.net/data/ip-geolocation?key=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
// Base + Confidence Area
let apiKey = 'd9e53816d07345139c58d0ea733e3870';
$.getJSON('https://api.bigdatacloud.net/data/ip-geolocation-with-confidence?key=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
// Base + Confidence Area + Hazard Report
let apiKey = 'd9e53816d07345139c58d0ea733e3870';
$.getJSON('https://api.bigdatacloud.net/data/ip-geolocation-full?key=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每月 10,000 个请求
- 需要注册才能获取 API 密钥
云耀 https://www.cloudflare.com/
$.get('https://www.cloudflare.com/cdn-cgi/trace', function(data) {
// Convert key-value pairs to JSON
// https://stackoverflow.com/a/39284735/452587
data = data.trim().split('\n').reduce(function(obj, pair) {
pair = pair.split('=');
return obj[pair[0]] = pair[1], obj;
}, {});
console.log(data);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
DB-IP https://db-ip.com/
Try it: https://api.db-ip.com/v2/free/self https://api.db-ip.com/v2/free/self
$.getJSON('https://api.db-ip.com/v2/free/self', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"ipAddress": "116.12.250.1",
"continentCode": "AS",
"continentName": "Asia",
"countryCode": "SG",
"countryName": "Singapore",
"city": "Singapore (Queenstown Estate)"
}
限制:
- 每天 1,000 个请求
- 要求非空
Origin
请求头
Geobytes https://geobytes.com/
Try it: http://gd.geobytes.com/GetCityDetails http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"geobytesforwarderfor": "",
"geobytesremoteip": "116.12.250.1",
"geobytesipaddress": "116.12.250.1",
"geobytescertainty": "99",
"geobytesinternet": "SA",
"geobytescountry": "Saudi Arabia",
"geobytesregionlocationcode": "SASH",
"geobytesregion": "Ash Sharqiyah",
"geobytescode": "SH",
"geobyteslocationcode": "SASHJUBA",
"geobytescity": "Jubail",
"geobytescityid": "13793",
"geobytesfqcn": "Jubail, SH, Saudi Arabia",
"geobyteslatitude": "27.004999",
"geobyteslongitude": "49.660999",
"geobytescapital": "Riyadh ",
"geobytestimezone": "+03:00",
"geobytesnationalitysingular": "Saudi Arabian ",
"geobytespopulation": "22757092",
"geobytesnationalityplural": "Saudis",
"geobytesmapreference": "Middle East ",
"geobytescurrency": "Saudi Riyal",
"geobytescurrencycode": "SAR",
"geobytestitle": "Saudi Arabia"
}
限制:
- 每小时 16,384 个请求
- 免费计划没有 SSL (https)
- 可以返回错误的位置
GeoIPLookup.io https://geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每小时 10,000 个请求
- 免费计划仅用于非商业用途
- 仅返回 IPv6 地址(如果有)
地理插件 https://www.geoplugin.com/
Try it: http://www.geoplugin.net/json.gp http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"geoplugin_request": "116.12.250.1",
"geoplugin_status": 200,
"geoplugin_credit": "Some of the returned data includes GeoLite data created by MaxMind, available from <a href=\\'http://www.maxmind.com\\'>http://www.maxmind.com</a>.",
"geoplugin_city": "Singapore",
"geoplugin_region": "Singapore (general)",
"geoplugin_areaCode": "0",
"geoplugin_dmaCode": "0",
"geoplugin_countryCode": "SG",
"geoplugin_countryName": "Singapore",
"geoplugin_continentCode": "AS",
"geoplugin_latitude": "1.2931",
"geoplugin_longitude": "103.855797",
"geoplugin_regionCode": "00",
"geoplugin_regionName": "Singapore (general)",
"geoplugin_currencyCode": "SGD",
"geoplugin_currencySymbol": "$",
"geoplugin_currencySymbol_UTF8": "$",
"geoplugin_currencyConverter": 1.4239
}
限制:
- 每分钟 120 个请求
- 免费计划没有 SSL (https)
黑客目标 https://hackertarget.com/geoip-ip-location-lookup/
$.get('https://api.hackertarget.com/geoip/?q=116.12.250.1', function(data) {
// Convert key-value pairs to JSON
// https://stackoverflow.com/a/39284735/452587
data = data.trim().split('\n').reduce(function(obj, pair) {
pair = pair.split(': ');
return obj[pair[0]] = pair[1], obj;
}, {});
console.log(data);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每天 100 个请求
- 需要IP地址参数
- 返回纯文本
ipapi https://ipapi.co/
Try it: https://ipapi.co/json/ https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"ip": "116.12.250.1",
"city": "Singapore",
"region": "Central Singapore Community Development Council",
"country": "SG",
"country_name": "Singapore",
"postal": null,
"latitude": 1.2855,
"longitude": 103.8565,
"timezone": "Asia/Singapore"
}
限制:
- 每天 1,000 个请求
- 需要 SSL (https)
- 要求非空
Origin
请求头
- 仅返回 IPv6 地址(如果有)
IP-API https://ip-api.com/
Try it: http://ip-api.com/json http://ip-api.com/json
$.getJSON('http://ip-api.com/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"as": "AS3758 SingNet",
"city": "Singapore",
"country": "Singapore",
"countryCode": "SG",
"isp": "SingNet Pte Ltd",
"lat": 1.2931,
"lon": 103.8558,
"org": "Singapore Telecommunications",
"query": "116.12.250.1",
"region": "01",
"regionName": "Central Singapore Community Development Council",
"status": "success",
"timezone": "Asia/Singapore",
"zip": ""
}
限制:
- 每分钟 150 个请求
- 免费计划没有 SSL (https)
ipdata https://ipdata.co/
let apiKey = 'be0f755b93290b4c100445d77533d291763a417c75524e95e07819ad';
$.getJSON('https://api.ipdata.co?api-key=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每天 1,500 个请求
- 需要注册才能获取 API 密钥
- 需要 SSL (https)
IP Find https://ipfind.co/
let apiKey = '50e887ce-e3bb-4f00-a9b9-667597db5539';
$.getJSON('https://ipfind.co/me?auth=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每天 300 个请求
- 需要注册才能获取 API 密钥
IP地理定位 https://ipgeolocation.io/
let apiKey = 'f8e0b361e8f4405c94613ab534959fdf';
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每月 50,000 个请求
- 需要注册才能获取 API 密钥
- 仅返回 IPv6 地址(如果有)
ipify https://www.ipify.org/
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
IPInfoDB https://ipinfodb.com/
let apiKey = '25864308b6a77fd90f8bf04b3021a48c1f2fb302a676dd3809054bc1b07f5b42';
$.getJSON('https://api.ipinfodb.com/v3/ip-city/?format=json&key=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
ipinfo.io https://ipinfo.io/
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
知识产权登记处 https://ipregistry.co/
$.getJSON('https://api.ipregistry.co/?key=tryout', function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 免费计划包括 100,000 个请求
- 需要注册才能获取 API 密钥
- 仅返回 IPv6 地址(如果有)
ipstack https://ipstack.com/(以前称为 freegeoip.net)
Try it: http://api.ipstack.com/?访问密钥= http://api.ipstack.com/116.12.250.1?access_key=7d558868069cc34f545d822af056be3c
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"ip": "116.12.250.1",
"type": "ipv4",
"continent_code": "AS",
"continent_name": "Asia",
"country_code": "SG",
"country_name": "Singapore",
"region_code": "01",
"region_name": "Central Singapore Community Development Council",
"city": "Singapore",
"zip": null,
"latitude": 1.2931,
"longitude": 103.8558,
"location": {
"geoname_id": 1880252,
"capital": "Singapore",
"languages": [
{
"code": "en",
"name": "English",
"native": "English"
},
{
"code": "ms",
"name": "Malay",
"native": "Bahasa Melayu"
},
{
"code": "ta",
"name": "Tamil",
"native": "தமிழ்"
},
{
"code": "zh",
"name": "Chinese",
"native": "中文"
}
],
"country_flag": "http://assets.ipstack.com/flags/sg.svg",
"country_flag_emoji": "????????",
"country_flag_emoji_unicode": "U+1F1F8 U+1F1EC",
"calling_code": "65",
"is_eu": false
}
}
限制:
- 每月 10,000 个请求
- 需要IP地址参数
- 需要注册才能获取 API 密钥
- 免费计划没有 SSL (https)
jsonip.com https://getjsonip.com/
$.getJSON('https://jsonip.com/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
JSON测试 https://www.jsontest.com/
Try it: http://ip.jsontest.com/ http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Returns:
{
"ip": "116.12.250.1"
}
限制:
- 无 SSL (https)
- 仅返回 IPv6 地址(如果有)
史努比.io https://www.snoopi.io/
let apiKey = 'ed5ebbeba257b8f262a6a9bbc0ec678e';
$.getJSON('https://api.snoopi.io/116.12.250.1?apikey=' + apiKey, function(data) {
console.log(JSON.stringify(data, null, 2));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
限制:
- 每月 10,000 个请求
- 每 2 秒 1 个请求
- 需要IP地址参数
- 需要注册才能获取 API 密钥
普通 JavaScript
使用现代浏览器,您可以使用本机获取API https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API而不是依赖 jQuery$.getJSON()
。这是一个例子:
let apiKey = '1be9a6884abd4c3ea143b59ca317c6b2';
// Make the request
fetch('https://ipgeolocation.abstractapi.com/v1/?api_key=' + apiKey)
// Extract JSON body content from HTTP response
.then(response => response.json())
// Do something with the JSON data
.then(data => {
console.log(JSON.stringify(data, null, 2))
});
NOTES
- 由于这些都是免费服务,谁知道它们何时/是否会下线(图表 A:Telize https://www.telize.com/).
- 如果您需要更多功能和稳定性,这些服务中的大多数还提供付费套餐。
- 正如 @skobaljic 在下面的评论中指出的那样,请求配额主要是学术性的,因为调用发生在客户端,并且大多数最终用户永远不会超过他们的配额。
- 某些服务没有可运行的代码片段,因为它们不允许免费计划中的 SSL 连接或需要非空
Origin
请求标头(StackOverflow 片段被迫使用 https 并具有Origin: null
在请求标头中)。
UPDATES
- 2016 年 2 月 1 日:已删除Telize https://www.telize.com/(不再提供免费计划)
- 2016 年 4 月 18 日:已删除自由地理网 http://freegeoip.net/(中止服务)
- 2016 年 4 月 26 日:添加DB-IP https://db-ip.com/
- 2016 年 4 月 26 日:添加黑客目标 https://hackertarget.com/geoip-ip-location-lookup/
- 2016 年 7 月 6 日:恢复自由地理网 http://freegeoip.net/
- 2016 年 7 月 6 日:已删除ip-json.rhcloud.com http://ip-json.rhcloud.com/(死链接)
- 2016 年 12 月 21 日:已删除黑客目标 https://hackertarget.com/geoip-ip-location-lookup/(中止服务)
- 2017 年 2 月 10 日:添加Nekudo http://geoip.nekudo.com/
- 2017 年 4 月 20 日:添加ipapi https://ipapi.co/(感谢艾哈迈德·阿瓦伊斯)
- 2017 年 4 月 24 日:恢复黑客目标 https://hackertarget.com/geoip-ip-location-lookup/
- 2017 年 4 月 24 日:已删除史努比.io https://www.snoopi.io/(中止服务)
- 2017 年 7 月 16 日:添加了限制“免费计划无 SSL (https)”
- 2017 年 7 月 16 日:添加IP Find https://ipfind.co/(感谢乔丹C)
- 2017 年 9 月 25 日:添加愚蠢的网络工具 http://www.stupidwebtools.com/(感谢心)
- 2018 年 3 月 16 日:添加ipdata https://ipdata.co/(谢谢乔纳森)
- 2018 年 4 月 14 日:将 freegeoip.net 重命名为ipstack https://ipstack.com/(感谢 MA-马丁)
- 2018 年 4 月 16 日:添加GeoIPLookup.io https://geoiplookup.io/(感谢罗布·瓦)
- 2018 年 6 月 11 日:添加IP地理定位 https://ipgeolocation.io/(感谢埃贾兹·艾哈迈德)
- 2019 年 7 月 31 日:添加知识产权登记处 https://ipregistry.co/(感谢劳伦特)
- 2019 年 8 月 16 日:添加智能IP.io https://smartip.io/(谢谢凯文尼)
- 2019 年 8 月 22 日:已删除愚蠢的网络工具 http://www.stupidwebtools.com/(中止服务)
- 2019 年 12 月 10 日:添加云耀 https://www.cloudflare.com/
- 2020 年 1 月 9 日:已删除智能IP.io https://smartip.io/(中止服务)
- 2020 年 11 月 6 日:添加Abstract https://www.abstractapi.com/
- 2020 年 11 月 13 日:添加AstroIP.co https://astroip.co/
- 2021 年 4 月 13 日:用代码片段替换代码示例(接近 30k 字符限制)
- 2021 年 4 月 13 日:添加了将键值对转换为 JSON 以进行纯文本响应的代码
- 2021 年 4 月 13 日:添加限制“要求非空
Origin
请求头”
- 2021 年 4 月 13 日:添加大数据云 https://www.bigdatacloud.com/ip-geolocation-apis
- 2021 年 4 月 13 日:恢复史努比.io https://www.snoopi.io/
- 2021 年 4 月 13 日:已删除AstroIP.co https://astroip.co/(中止服务)
- 2021 年 4 月 13 日:已删除Nekudo http://geoip.nekudo.com/(现在是 ipapi 的一部分)