Java利用ip2region实现获取IP地址详情
最近有个需求是通过ip地址获取地址详情,没有弄过相关的接口,通过查资料搞定之后赶紧记录分享一下
一开始我是通过api的方法获取但是总是报错获取不到所以改用了ip2region离线ip解析的方法获取的,废话不多说看操作。
首先要下载ip2region.db
下载地址:百度网盘 请输入提取码
提取码:vik5
配置依赖
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
将文件放到resources目录下
配置一个工具类(里面有个测试方法)
之前我在网上查的资料用完之后本地是可以的测试的但是部署到服务器之后就找不到ip2region.db这个文件了,因为这个文件我是放在resources目录 下面的,大家都知道打包之后resources这个目录 是不存在的所以找不到这个文件,后来试了很久才搞定,下面是优化的工具类
@Slf4j
public class IpUtil {
/**
* 获取IP地址
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if ("0:0:0:0:0:0:0:1".equals(ip)) {
ip = "127.0.0.1";
}
if (ip.split(",").length > 1) {
ip = ip.split(",")[0];
}
return ip;
}
/**
* 根据IP地址获取城市
* @param ip
* @return
*/
public static String getCityInfo(String ip) throws IOException {
// 这里能读到这个流,但是是找不到这个文件的
ClassPathResource classPathResource = new ClassPathResource("ip2region.db");
// 我们新建一个文件,把流存放到这个文件,再从这个文件里面读取数据,就可以了
File file = new File("ip2region.db");
FileUtils.copyInputStreamToFile(classPathResource.getInputStream(),file);
// todo 获取输入流
InputStream inputStream = new FileInputStream(file);
try {
int len;
byte[] buffer = new byte[1024];
//todo 这里的输出记得删除再上线
while ((len = inputStream.read(buffer)) != -1) {
// System.out.println(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}finally {
// TODO 记得关闭流操作
inputStream.close();
}
//查询算法
int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
try {
DbConfig config = new DbConfig();
DbSearcher searcher = new DbSearcher(config,file.getPath());
Method method;
switch ( algorithm )
{
case DbSearcher.BTREE_ALGORITHM:
method = searcher.getClass().getMethod("btreeSearch", String.class);
break;
case DbSearcher.BINARY_ALGORITHM:
method = searcher.getClass().getMethod("binarySearch", String.class);
break;
case DbSearcher.MEMORY_ALGORITYM:
method = searcher.getClass().getMethod("memorySearch", String.class);
break;
default:
return null;
}
DataBlock dataBlock;
if (!Util.isIpAddress(ip)) {
log.info("Error: Invalid ip address");
return null;
}
dataBlock = (DataBlock) method.invoke(searcher, ip);
return dataBlock.getRegion();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
try {
// 这个ip的结果是 中国|0|香港|0|香港宽频
String detail = IpUtil.getCityInfo("58.176.81.30");
System.out.println(detail);
}catch (IOException e){
}
}
}
到这里就完事了。
这下面是一下国外的ip地址可以测试一下
'35.187.132.16',
'35.187.132.18',
'49.35.162.6',
'5.188.210.227',
'64.233.173.10',
'74.125.151.127',
'74.125.212.219',
'74.125.212.221',
'95.184.60.224'
到此这篇关于Java利用ip2region实现获取IP地址详情的文章就介绍到这了,更多相关Java ip2region获取IP地址内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!
相关内容
-
iPad的手势功能iPad4手势的使用教程
iPad的手势功能iPad4手势的使用教程,,可能有很多朋友刚刚接触...
-
笔记本ip地址设置|怎么设置笔记本ip地址
笔记本ip地址设置|怎么设置笔记本ip地址,,1. 怎么设置笔记本ip...
-
ipad怎么设置主题|iPad怎么设主题
ipad怎么设置主题|iPad怎么设主题,,1. iPad怎么设主题打开ipad...
-
如何设置路由器ip|如何设置路由器ip地址不冲突
如何设置路由器ip|如何设置路由器ip地址不冲突,,1. 如何设置路...
-
iphone当电脑显示器|苹果电脑当显示器用
iphone当电脑显示器|苹果电脑当显示器用,,苹果电脑当显示器用...
-
怎么判断一个iPhone手机有没有被拆过
怎么判断一个iPhone手机有没有被拆过,电池,手机,本文目录怎么...
-
ipadmini5配置参数是多少?努比亚z11mini 刷入沉
ipadmini5配置参数是多少?努比亚z11mini 刷入沉默之星工具箱 ...
-
eclipse改快捷键|eclipse修改快捷键设置
eclipse改快捷键|eclipse修改快捷键设置,,1. eclipse修改快捷...
-
iphone屏幕连接电脑投影|苹果手机怎么连接电脑
iphone屏幕连接电脑投影|苹果手机怎么连接电脑投影仪,,苹果手...
-
philips电脑显示器170s|philips电脑显示器怎么
philips电脑显示器170s|philips电脑显示器怎么样,,1. philips...
-
网卡ip设置不正确|网卡相关设置不正确怎么办
网卡ip设置不正确|网卡相关设置不正确怎么办,,网卡ip设置不正...
-
新闻人人网将提交IPO上市在今年六月
新闻人人网将提交IPO上市在今年六月,,根据汤姆逊路透社IFR,中国...
-
ip和dns怎么设置|ip及dns设置
ip和dns怎么设置|ip及dns设置,,1. ip及dns设置一如何手动更改I...
-
5s快捷键设置|iphone5s控制中心设置快捷键
5s快捷键设置|iphone5s控制中心设置快捷键,,iphone5s控制中心...
-
eclipse快捷键缩进|eclipse后退快捷键
eclipse快捷键缩进|eclipse后退快捷键,,eclipse后退快捷键撤销...