使用ip-attribution.dat文件实现IP归属地查询
发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,这篇文章主要介绍"使用ip-attribution.dat文件实现IP归属地查询",在日常操作中,相信很多人在使用ip-attribution.dat文件实现IP归属地查询问题上存在疑惑,小编查阅了各
千家信息网最后更新 2024年10月20日使用ip-attribution.dat文件实现IP归属地查询
这篇文章主要介绍"使用ip-attribution.dat文件实现IP归属地查询",在日常操作中,相信很多人在使用ip-attribution.dat文件实现IP归属地查询问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"使用ip-attribution.dat文件实现IP归属地查询"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
使用ip-attribution.dat文件实现IP归属地查询。下载地址
网盘下载 提取码:2chr
package com.sky.common.utils;import cn.hutool.core.io.resource.ClassPathResource;import org.apache.commons.lang3.StringUtils;import java.io.*;import java.net.Inet4Address;import java.net.InetAddress;import java.net.UnknownHostException;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.util.Arrays;import java.util.HashMap;import java.util.Map;/** * ip归属地解析 * * @author Moses wsj1198878990@126.com * @since 1.0.0 2019-10-22 */public final class IPDataHandler { private static DataInputStream inputStream = null; private static long fileLength = -1; private static int dataLength = -1; private static MapcacheMap = null; private static byte[] allData = null; static {// File file = new File(IP_DATA_PATH); try { //把文件放到src/main/resources下面 File file = new ClassPathResource("ip-attribution.dat").getFile(); inputStream = new DataInputStream(new FileInputStream(file)); fileLength = file.length(); cacheMap = new HashMap (); if (fileLength > Integer.MAX_VALUE) { throw new Exception("the filelength over 2GB"); } dataLength = (int) fileLength; allData = new byte[dataLength]; inputStream.read(allData, 0, dataLength); dataLength = (int) getbytesTolong(allData, 0, 4, ByteOrder.BIG_ENDIAN); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } private static long getbytesTolong(byte[] bytes, int offerSet, int size, ByteOrder byteOrder) { if ((offerSet + size) > bytes.length || size <= 0) { return -1; } byte[] b = new byte[size]; for (int i = 0; i < b.length; i++) { b[i] = bytes[offerSet + i]; } ByteBuffer byteBuffer = ByteBuffer.wrap(b); byteBuffer.order(byteOrder); long temp = -1; if (byteBuffer.hasRemaining()) { temp = byteBuffer.getInt(); } return temp; } private static long ip2long(String ip) throws UnknownHostException { InetAddress address = InetAddress.getByName(ip); byte[] bytes = address.getAddress(); long reslut = getbytesTolong(bytes, 0, 4, ByteOrder.BIG_ENDIAN); return reslut; } private static int getIntByBytes(byte[] b, int offSet) { if (b == null || (b.length < (offSet + 3))) { return -1; } byte[] bytes = Arrays.copyOfRange(allData, offSet, offSet + 3); byte[] bs = new byte[4]; bs[3] = 0; for (int i = 0; i < 3; i++) { bs[i] = bytes[i]; } return (int) getbytesTolong(bs, 0, 4, ByteOrder.LITTLE_ENDIAN); } public static String findGeography(String address) { if (StringUtils.isBlank(address)) { return "illegal address"; } if (dataLength < 4 || allData == null) { return "illegal ip data"; } String ip = "127.0.0.1"; try { ip = Inet4Address.getByName(address).getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } String[] ipArray = StringUtils.split(ip, "."); int ipHeadValue = Integer.parseInt(ipArray[0]); if (ipArray.length != 4 || ipHeadValue < 0 || ipHeadValue > 255) { return "illegal ip"; } if (cacheMap.containsKey(ip)) { return cacheMap.get(ip); } long numIp = 1; try { numIp = ip2long(address); } catch (UnknownHostException e1) { e1.printStackTrace(); } int tempOffSet = ipHeadValue * 4 + 4; long start = getbytesTolong(allData, tempOffSet, 4, ByteOrder.LITTLE_ENDIAN); int max_len = dataLength - 1028; long resultOffSet = 0; int resultSize = 0; for (start = start * 8 + 1024; start < max_len; start += 8) { if (getbytesTolong(allData, (int) start + 4, 4, ByteOrder.BIG_ENDIAN) >= numIp) { resultOffSet = getIntByBytes(allData, (int) (start + 4 + 4)); resultSize = (char) allData[(int) start + 7 + 4]; break; } } if (resultOffSet <= 0) { return "resultOffSet too small"; } byte[] add = Arrays.copyOfRange(allData, (int) (dataLength + resultOffSet - 1024), (int) (dataLength + resultOffSet - 1024 + resultSize)); try { if (add == null) { cacheMap.put(ip, new String("no data found!!")); } else { cacheMap.put(ip, new String(add, "UTF-8")); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return cacheMap.get(ip); } public static void main(String[] args) { String s = findGeography("61.164.169.58"); System.out.println(s.trim()); }}
到此,关于"使用ip-attribution.dat文件实现IP归属地查询"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
文件
归属
查询
学习
更多
帮助
实用
接下来
地址
文章
方法
理论
知识
篇文章
网站
资料
跟着
问题
UTF-8
好用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库物理
软件开发人要具备那些特点
购入软件开发后销售的税率
建行找不到服务器
群英云集网络安全建设
软件开发可以考公务员吗
数据库字段选中没有
网络安全包括哪些性质
传播病毒是网络安全吗
dell服务器管理口在哪
安防监控视频管理服务器
湖北新华互联网科技学校
计算机网络技术和
数据库领域的安全措施
服务器宽带费
网络安全宣传设计物品
服务器引导管理
人防网络安全宣传周
数据库完整性实验
panto数据库
网络安全和便捷哪个重要
网络安全教授候亮
vr效果图解析软件开发
计算机网络技术类型及特点
实用手工创意网络技术
数据库领域的安全措施
信息网络安全技术基础
ios创建数据库文件
存储服务器怎么管理器
广电网络安全技能大赛题库