IP 地址定位:接入方式、问题及新发现的 Ip2region 项目 南宁网络推广网站服务商
发布时间 - 2026-01-18 03:32:32 点击率:次接入过程相对简便,只需封装一个HTTP请求,将用户的IP地址作为参数传递,便能获取到相应的国家、省份以及城市信息。

原来的请求方式如下
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="syl-page-code"><code>/** * 获取IP地址来源 * 参数内容需符合指定格式,具体表现为:姓名等于某个值,与密码等于某个值,通过“&”符号连接。 服务器端请求所采用的编码类型,例如GBK或UTF-8等。 * @return 抛出异常:编码类型不受支持 */ 将内容字符串从第3个字符开始截取,并赋值给ip变量。 if (!Util.isIpAddress(ip)) { log.info("IP地址为空"); return null; } 淘宝平台遭遇了IP地址服务中断,当前正采用Ip2region技术进行替代,具体信息可参考:https://github.com/lionsoul2014/ip2region。 获取城市信息的方法是将IP地址作为参数传入,然后返回相应的城市信息字符串。 日志记录显示,所获取的IP相关信息为:,具体城市信息如下:。 // TODO 淘宝接口目前已经宕机,因此暂时注释下面代码 try { // 这里调用pconline的接口 String urlStr赋值为"http://ip.taobao.com/service/getIpInfo.php"; 通过访问http://whois.pconline.com.cn,我们可以获取到IP地址所对应的省份、市区信息。 获取结果字符串的操作是通过调用函数`getResult`来完成的,该函数接收三个参数:`urlStr`、`content`和`encodingString`。执行该函数后,返回的结果被赋值给变量`returnStr`。 if (returnStr != null) { // 处理返回的省市区信息 记录信息:关于IP解析接口的调用结果,输出内容为:"+" + returnStr; temp变量被赋予了一个由returnStr字符串通过逗号分隔后得到的字符串数组。 //无效IP,局域网测试 if (temp.length < 3) { return "0"; } // 国家 String country = ""; // 区域 String area = ""; // 省 String region = ""; // 市 String city = ""; // 县 String county = ""; // 运营商 String isp = ""; Map<String, Object>map变量被赋予了一个值,该值是通过将返回的字符串转换成映射结构得到的,这一转换过程是由JsonUtils类中的jsonToMap方法完成的。 若map中关于"code"的键值存在非空值。 Map<String, String> data = (Map<String, String>) map.get("data"); 国家信息通过data字典中的"country"键获取,并赋值给变量country。 area = data.get("area"); region = data.get("region"); city = data.get("city"); county = data.get("area"); isp = data.get("isp"); } 记录信息:查询IP地址所对应的地理位置信息,包括国家、区域、地区、城市、县区以及互联网服务提供商,具体为country、area、region、city、county和isp。 创建一个新的StringBuffer对象,命名为result。 result.append(country); result.append("|"); result.append(region); result.append("|"); result.append(city); result.append("|"); result.append(isp); return result.toString(); } } catch (Exception e) { log.error(e.getMessage()); return null; } return null; } </code></pre></p>然而,在先前接入淘宝IP库时,时常遭遇服务中断的问题,加之QPS限制在1,因此,在访问量较大时,便无法成功获取数据。
如今情况倒是变得更好了,该接口已经停止对外提供服务,已经彻底下线,不再允许调用。
后面,陌溪在 冲浪的时候,发现 了 项目。
此离线IP地址定位库准确度高达99.9%,查询速度可达到0.0x毫秒级别,其数据库文件大小仅为数MB,支持java、php、c、c++、c#等多种语言的查询绑定,并提供B树、内存等三种查询算法。
数据汇集了若干知名IP定位信息至地名查询服务方,这些数据均源自其官方发布的精确率,经过实际测试,其定位精度确实略胜于传统的纯IP定位。这些数据主要来源于以下几家服务商提供的开放API或数据源。
若上述开放API或数据资源未能提供开放数据,我们将不得不终止数据更新服务。
每条 ip 数据段都固定了格式:
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="syl-page-code"><code>_城市Id|国家|区域|省份|城市|ISP_</code></pre></p>中国的数据精确到城市级别,而其他国家的部分数据仅能锁定至国家层面;在此之前的选项均为0,这一设定涵盖了你能查询到的所有大小国家。
该数据库文件的大小仅有数MB,最小版本仅1.5MB,随着数据详细程度的提升,文件体积逐渐扩大,但截至目前,其容量仍未突破8MB。
内置的三种查询算法
所有查询客户端的单次查询均能在0.x毫秒内完成,并且集成了三种不同的查询算法。
安装
下面,就让我们给项目引入 ,进行 ip 信息转换吧
首先引入 maven 依赖
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="syl-page-code"><code><dependency> <groupId>org.lionsoul</groupId> <a style='color:#0000CC;font-size:15px;' rtifactId>ip2region</artifactId> <version>1.7.2</version> </dependency> </code></pre></p>然后编写一个工具类 ,首先需要加载 .db 文件
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="syl-page-code"><code>static { dbPath 等于 通过 FtlArray 创建的 Ftl 文件路径 加上 "ip2region.db"。 try { config = new DbConfig(); 捕捉到DbMakerConfigException异常后,{ e.printStackTrace(); } try { 初始化一个DbSearcher对象,其参数包括配置信息和数据库路径,命名为searcher。 捕获到文件未找到异常后,{ e.printStackTrace(); } } </code></pre></p>在执行加载操作期间,必须先下载位于仓库中的数据库文件,即 .db 文件,随后将其放置到指定目录之中。
然后,通过内置的三种算法,分别转换用户 ip 地址
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="syl-page-code"><code> 若数据库路径为空,则: 日志记录错误信息:“错误:ip2region.db文件无效”; return null; } 若配置项为空或搜索器为空, 系统日志记录:“错误:DbSearcher或DbConfig对象为空。” return null; } //查询算法 //B-tree, B树搜索(更快) 初始化算法变量为数据库搜索器中的二叉树算法常量;即 algorithm = DbSearcher.BTREE_ALGORITHM; //Binary,使用二分搜索 //DbSearcher.BINARY_ALGORITHM //Memory,加载内存(最快) //DbSearcher.MEMORY_ALGORITYM try { // 使用静态代码块,减少文件读取操作 创建一个新的DbConfig对象,命名为config。 创建了一个DbSearcher对象,该对象名为searcher,并初始化时传入了配置参数和数据库路径。 //define the method Method method = null; switch (algorithm) { 当采用DbSearcher的BTREE算法时: 获取方法的方式为:通过调用searcher对象的getClass()方法,进而使用该方法获取getMethod()函数,该函数接收一个String.class类型的参数,最终实现获取名为"btreeSearch"的方法。 break; 当采用DbSearcher的二进制算法时, 通过调用searcher对象的getClass()方法,我们获取了其类信息,进而使用getMethod()方法来寻找名为"binarySearch"的方法,该方法接受一个String类型的参数。 break; 若采用DbSearcher所定义的内存算法模式: 获取searcher类中名为"memorySearch"的方法,该方法接受一个String类型的参数; break; default: } DataBlock dataBlock = null; 若Util判断该IP地址并非有效,则不予以允许。 输出错误信息:“错误:无效的IP地址” } dataBlock是通过调用searcher对象上的method方法,并传入ip参数,最终得到的DataBlock类型实例。 获取到的数据块中的区域信息被赋值给了字符串变量ipInfo。 若ipInfo非空,则{ ipInfo变量经过处理,去除了其中的"|"和"0"字符。 ipInfo变量经过处理,去除了其中的"0|"字符。 } return ipInfo; } catch (Exception e) { e.printStackTrace(); } return null; } </code></pre></p>接下来,我们将着手编写 main 函数以进行测试,结果显示,我们能够顺利地解析出 IP 地址信息。
若IP地址源自我国境内,系统仅会显示所在省份;相对地,若IP地址位于国外,则仅会展示所属国家。鉴于此,我们有必要对该方法进行封装处理,以便获取IP地址的具体属地信息。
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="syl-page-code"><code>/** * 获取IP属地 * @param ip * @return */ String cityInfo = getCityInfo(ip); 若cityInfo非空,则{ 对cityInfo变量进行替换操作,将其中所有的竖线符号“|”更改为空格“ ”。 定义了一个名为cityList的字符串数组,该数组通过以空格为分隔符对cityInfo字符串进行分割操作得到。 if (cityList.length > 0) { // 国内的显示到具体的省 若城市列表的第一个元素与“中国”字样相符。 if (cityList.length > 1) { return cityList[1]; } } // 国外显示到国家 return cityList[0]; } } return "未知"; } </code></pre></p>稍后,我们将尝试连接一个境外IP以检验其功能。目前,我们已成功显示出IP地址的地理位置信息了。
抵达此处,用户的IP所在地信息已成功获取;若您希望深入了解更多功能,敬请访问相应地址进行学习。
# IP 地址定位:接入方式、问题及新发现的 Ip2region 项目
# IP 地址定位
# 接入方式、问题及新发现的 Ip2region 项目
# 三种
# 为空
# 淘宝
# 命名为
# 这一
# 数据库文件
# 加载
# 错误信息
# 创建一个
# 中国
# 类中
# 所对应
# 离线
# 国外
# 互联网
# 好了
# 第一个
# 在此
# 是由
# 只需
# 咸阳seo推广介绍
# 银川快手推广营销怎么做
# 微信社群私域营销推广
# Hyein Seo韩国实体店
# 东莞网站建设+信科网络
# 市场营销神器推广
# 网站代码优化从哪里来
# 网站推广引流seo
# 哪里有推广项目的网站
# 济宁网站建设案例报价
# 微端游戏推广网站
# 网站建设专家哪家好
# 优化网站分享好物推荐
# seo天津网站建设
# 荥阳德育网站建设招标
# 中山专业网站优化效果图
# 陇南网站建设及推广
# 北京seo优化公司页面
# 短视频营销推广的背景
# 有关网站建设的文案
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
广州百度推广有没有用?深入解析其价值与效果,服务类营销推广方案范文
如何选择合适的SEO加盟品牌?,seo优化项目经验心得
Ajax技术在SEO优化中的应用与步骤,seo优化抖音搜索
SEO每日:提高网站流量的秘密武器,助你脱颖而出,seo优化和排名技巧
关键词挖掘在项目SEO中的应用与步骤,多页面seo
江门全网营销SEO外包,助力企业腾飞的新引擎,韶关网站优化案例
广州百度推广投资,企业发展的明智选择,河南推广大数据营销
长治SEO网络推广,价格合理,效果显著,助力企业腾飞,网站优化搜索关键词排名
沙溪网站SEO优化步骤全介绍,助力网站排名,提升企业影响力,property 对seo
合肥SEO招商加盟,开启您的成功之旅,商丘广告推广营销宣传
SEO网页设计,优化方法与最佳方法,打造搜索引擎友好网页,获嘉seo优化
探索未知,莱山SEO推广的奥秘与实践,重庆网站建设 夹夹虫
横岗SEO优化,打造企业网络品牌新高度,哪些是免费流量 淘宝seo
SEO北京:数字时代,企业成功的关键,湖南网站建设湖南岚鸿
重启服务器,SEO优化的关键步骤与策略,周口抖音关键词排名
种草的关键你知道吗?品牌种草要重视,搜索才是开始
SEO指:如何通过精准优化提高网站流量和转化率,无锡论坛营销推广要多久
壮阳药的真相,科学视角下的真实效果与误区,免费推广网站一般多少钱
广州百度推广创新助力企业营销升级,咸宁推广获客网站在哪里
SEO用户:如何为您的网站带来持续流量和转化,惠州网站推广哪个好
详细介绍,SEO排名软件盘点与优化步骤详解,5g在线seo
SEO应该如何提升网站流量与排名?揭秘成功的SEO策略,肺炎疫苗推广营销
凉山SEO优化报价介绍,专业服务助力企业互联网营销,shopify seo 案例
主体信息查询:国家工商总局及地方工商局网站知多少?
广州百度推广时段如何选择才能更高效?,沧州泊头建设网站
广州百度推广帐号,助力企业营销的高效工具,西青区如何做好营销推广
SEO刷:让你的网站一夜之间登顶搜索引擎!,独特seo技巧
杭州SEO工作思路,揭秘成功的秘诀与策略,seo01仙踪林
重庆谷歌SEO,谁做得好?让我们一探究竟,南通网站建设总部在哪里
SEO爱站:提升网站排名,赢得流量的秘密武器,优化网站设计价格多少
福建百度推广开户渠道公司有哪些?,网站建设推广术
福建百度推广为什么接不到电话了?深入剖析原因与解决办法,智慧营销系统推广简历
探索自媒体营销的奥秘,如何在不使用SEO插件的情况下实现内容的有效传播,泸州爱采购seo排名
益阳SEO优化,介绍当地优质优化公司,助力企业网络营销腾飞,seo优化引流
9月11日叶县党员姜晓康谈吊瓜增产,党员教育课堂成效显著
SEO使用:如何让你的网站轻松登顶搜索引擎排名,秦皇岛关键词排名
广州百度推广收录找谁?全面解析推广服务选择秘诀,网站推广的具体方法包括
江北网络SEO优化排名,介绍提升网站排名的步骤与方法,西藏seo工具哪个适用
日常求人不得?这6款老司机才懂的见光死网站快收藏
谷歌SEO发展前景,趋势介绍与步骤应对,seo 维护
新手入门SEO外推,掌握方法,提升网站流量与排名,门窗网站seo优化托管
手机丢后微信钱包被刷走两万?几步操作就能锁死钱包
SEO联系:如何通过SEO优化提升您的网络营销效果,企业营销推广获客
广州百度推广职位,探索数字营销新机遇,韩漫无删减网站推广
性价比之选,介绍高SEO排名的秘密武器,seo网站建设规划
折叠页面,SEO优化中的新趋势与步骤,安徽seo推广效果如何
广州百度推广操作指南,让您的企业轻松触达目标客户,微信营销推广公司怎么样
西安SEO优化代理,助力企业提升网络竞争力,开县网站优化排名
茂名SEO,深耕本土,助力企业互联网转型,宋利娜seo
水城SEO优化公司,助力企业网站在互联网浪潮中乘风破浪,六枝seo公司排名

