
公网ip地址
-
2023年2月20日发(作者:)公⽹ip定位原理-⼼得
1.前⾔
正在做⼀个根据公⽹ip来定位到⼤体的位置,⼀般是精确到城市或地区,
如果想要精确到街道和地图⼀⼀对应,那得使⽤GPS才可以,这⾥不讨论。
2.科普
公⽹也就是外⽹,由运营商的机房服务器⾃动给每⼀个⽤户分配⼀个IP地址,
每次登录上⽹它都会⾃动分配⼀个,如果是专线如光纤上⽹,那外⽹IP就是电信给固定IP,是不会变。
我们的设备⼀般都是在⼀个区域内,共同使⽤⼀个公⽹ip,⽽我们则使⽤该公⽹ip下分的⼦接⼝,不同的接⼝还可以设置不同的内⽹,也就
是家⾥的wifi等局域⽹。
维度公⽹ip被划分后则不可变的,是固定位置的,因此可以作为定位功能的依据。
3.⽹上博客流⾏ip定位⽅式分三种:
⽅式⼀:前端访问第三⽅⽹址,⽆需ip参数,返回结果为该设备浏览器的公⽹ip地理信息;
缺点:可能会遇到跨域访问服务器拒绝处理的问题,报错代码403;
优点:速度快;
⽅式⼆:前端访问第三⽅⽹址,需要指定ip参数,⼀般是ipv4,或者设备浏览器的经纬度,
返回结果为该指定ip参数的地理信息。
缺点:可能会遇到跨域访问服务器拒绝处理的问题,报错代码403;
优点:速度快;
【
那么,这就需要提前获取ip参数,获取⽅式有两种,
第⼀:访问第三⽅⽹址,返回公⽹ip参数,(需要第三⽅⽹址服务器允许前端跨域访问才可以);
第⼆,前端访问⾃⼰的服务器,服务器解析前端请求获取公⽹ip参数。
】
⽅式三:访问⾃⼰的服务器,根据前端的公⽹ip参数,由服务器访问第三⽅⽹址,这样就不会遇到跨域403问题,但是,也有可能会遇到中
⽂乱码,
需要提前⼿动调制
缺点:代码量⼤,查询速度慢,还有时候第三⽅服务器拒绝频繁访问,⽐如淘宝的接⼝,这就很蛋疼了;
优点:⽆跨域问题;
4.探讨第三⽅⽹址服务器的实现原理
上诉三种⽅法,其实归根结底都是需要访问第三⽅⽹址的服务器,等待它的处理结果,没有给ip参数它就提取出发送请求
的浏览的的公⽹ip来查询地理位置,如果有指定的ip参数则使⽤该参数查询,然后根据ip参数,转换成长整数,
以长整数为查询条件,去ip地址数据库⾥查询这个长整数的范围就可以获取对应的地理信息和提供的运营商,【ip地址数据库因为每天都有
局部变化,但是⼤体的是稳定不变的,所以⽹上只能找到更全的,⽽没有全部的IP地址数据库】,
查询结果进⾏总结,然后⼀般使⽤json串的形式返回给请求端。
5.震惊
是不是很不可思议,就是这么简单,⽽我们缺少的,正是这个ip地址库,淘宝上有得卖,⼀般70块钱左右
给的⽂件⼀般是access数据库,当然,我们可以⾃⼰转成⾃⼰使⽤的数据库,如redis、mysql、oracle等,也可以录⼊xml等⽂件,根据需要
使⽤。
6.思考
其实,⾃⼰也可以制作⼀个ip服务接⼝,其实核⼼就是个查询IP地址数据库的操作⽽已,但是,我觉得没这个必要,因为我只是想要
⼤体定位前端在哪个省哪个市哪个地区⽽已,就这么⼀个⼩功能,⼜不是商⽤,没必要花那么多钱买⼀个数据库然后⾃⼰做⼀个查询功能,
还不如使⽤别⼈的第三⽅免费接⼝,内容简洁,速度还快,还可以分担⾃⼰服务器的负担,何乐⽽不为?
【虽然可以免费下载IP地址数据库,但是⼀般不全⾯,还不好找】
7.⽹页跨域问题
服务器其实可以设置防⽌外链的使⽤权限,可以让浏览器跨域永远403失败但是直接⽤浏览器访问⽹址却可以正常使⽤,我苦难研究
了⼀天才弄明⽩,
解决⽅法则是在服务端⾥进⾏url访问,这样没不会出现这种跨域问题,太平洋⽹ip接⼝就是这样
。
⼀般的跨域,ajax和这两种⽅法都可以访问,
⽐如使⽤搜狐的ip访问接⼝
8.最后的妥协
考虑再三,希望查询速度快,允许⾼频率查询,准确性⾼,关键是免费
因此,我选择⽤第三⽅⽹址IP接⼝
测试返回结果:
很不错!
也可以指定ip参数
不知道是哪位⼤佬做的,免费开放,这⾥先⽤着。