想在网页上显示下用户的IP信息和地址信息,或限制下访问,指定IP用户可访问,又不想搞得太复杂,直接使用别人发明好的轮子,稍加利用下不失为一个好的办法。
1.获取用户IP和所在地信息:利用国外cloudflare的公开接口
国外的 CDN 加速服务商cloudflare,还是很有名气的,有一个获取用户信息的地址:https://www.cloudflare.com/cdn-cgi/trace 打开后的信息还是比较全的:
fl=23f420
h=www.cloudflare.com
ip=157.119.235.**
ts=1641553735.987
visit_scheme=https
uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
colo=HKG
http=http/2
loc=HK
tls=TLSv1.3
sni=plaintext
warp=off
gateway=off
JS获取IP和地区信息:
<span id="ipaddress"></span> <span id="local"></span> <!--输出位置-->
<script type="text/javascript">
//定义text
text = (url) => {
return fetch(url).then(res => res.text());
}
//从接口信息里提取所需数据
text('https://www.cloudflare.com/cdn-cgi/trace').then(data => { //获取信息到data
let ipRegex = /[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/ //IP规则
let ip = data.match(ipRegex)[0]; //匹配出IP地址
document.getElementById('ipaddress').innerHTML = `IP Address: ${ip} `; //输出IP到指定的ipaddress标签
let localRegex = /loc=([A-Z]+)/ig; //地区编码定位规则
let local = data.match(localRegex)[0]; //匹配出loc=***
let reg = /([A-Z]+)/ //地区编码值规则
local.replace(reg, function () {
// alert(arguments[1]);
document.getElementById('local').innerHTML = `Local: ${arguments[1]} `; //输出地区编码到指定的ipaddress标签
});
});
</script>
2.获取用户IP和所在地信息:利用sohu的公开接口
在国内使用Sohu的接口,可以获取到IP和城市名字,地址:http://pv.sohu.com/cityjson?ie=utf-8 ,打开后的信息是这样:
var returnCitySN = {"cip": "111.59.248.**", "cid": "450000", "cname": "广西壮族自治区"};
JS获得IP地址和地区名:
<span id="ipdizhi"></span> <span id="cityname"></span><!-- 输出位置 -->
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
var cip = returnCitySN["cip"]; //获取IP
var cityid = returnCitySN["cid"]; //获取城市ID
var cityname = returnCitySN["cname"]; //获取城市名
document.getElementById('ipdizhi').innerHTML = `IP地址: ${cip} `; //输出IP到指定的ipdizhi标签
document.getElementById('cityname').innerHTML = `地址: ${cityname} `; //输出城市名到指定的cityname标签
</script>
3.设置IP禁止,指定访问IP
简单的IP限制,还是利用Sohu那个公开的地址,获取用户IP,看这个IP看不在允许规则里,来实现访问限制。在页面上添加以下代码:
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script>
var ip = returnCitySN["cip"]; //获取用户IP
var allowIP = ['111.***.***.4','121.***.***.5', '131.***.***.6', '141.***.***.7']; //列出可以访问的
var flag = false;
console.log(ip)
for(var i=0; i<allowIP.length; i++){
if (ip == allowIP[i]){
flag = true;
break;
}
}
if(!flag){
alert("Sorry, you are not allowed to access this page!"); //提示语
closewin();
}
//设置提示框
function closewin(){
if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") !=-1) {
window.location.href="about:blank";
window.close();
} else {
window.opener = null;
window.open("", "_self");
window.close();
}
}
</script>