很多时候在更换IP后需要获取本机的最新IP地址
公共API
使用公共API的好处是比较稳定,不会因为服务器宕机导致服务不可用,但是缺点就是有使用频率限制,特别是初次分配到新IP的时候更有可能会碰到这个情况。
以下为几个不需要注册就可以直接调用的公共API
1.ip-api.com
API:http://ip-api.com/json/?fields=258047&lang=en
返回值:json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ as: "AS4812 China Telecom (Group)", city: "Shanghai", country: "China", countryCode: "CN", isp: "Shanghai Network of ChinaTelecom", lat: 31.2304, lon: 121.474, mobile: false, org: "", proxy: false, query: "124.79.127.167", region: "SH", regionName: "Shanghai", status: "success", timezone: "Asia/Shanghai", zip: "" } |
限制:150 请求/分钟,2 请求/秒
2.ipapi.co
API示例:https://ipapi.co/json/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ ip: "124.79.127.167", city: "Shanghai", region: "Shanghai", region_code: "SH", country: "CN", country_name: "China", continent_code: "AS", in_eu: false, postal: null, latitude: 31.0456, longitude: 121.3997, timezone: "Asia/Shanghai", utc_offset: "+0800", country_calling_code: "+86", currency: "CNY", languages: "zh-CN,yue,wuu,dta,ug,za", asn: "AS4812", org: "China Telecom (Group)" } |
限制:30000 请求/月,1000 请求/天
3.ipify.org
API示例:https://api.ipify.org/?format=json
1 2 3 |
{ ip: "124.79.127.167" } |
限制:无请求限制
PHP调用示例
1 2 3 4 |
<?php // get self ip from ip-api.com $details_server = json_decode(file_get_contents("http://ip-api.com/json/")); echo 'The newest Server IP Address is: '.$local_ip = $details_server->query; |
但是通过API调用获取本机IP地址有一些潜在的问题,这些问题会发生在不需要重启主机就可以更改IP的服务器上,当服务器对应多个IP的时候,调用API只能获取到主机绑定的原始IP地址,但其实我们需要获取的是分配给服务器的动态IP地址,DigitalOcean和Google Cloud Platform都存在这个问题,但这个问题似乎是无解的,因为在服务器端看起来,并不存在什么动态IP,动态IP只不过是一个镜像IP的跳转而已。
目前有两种办法可以解决动态IP的问题,
1.被动监听入站请求,然后把所有入站的目的IP地址都记录下来,然后判断是否已经更换了新的动态IP。但是问题是得有新IP的入站请求,否则还是没办法知道新的IP地址。所以得更换IP之后主动用新IP访问一下某个页面来告诉服务器新的IP地址。
2.主动调用DO或GCP的管理API接口获取最新的动态IP地址
There are no comments yet