根据IP获取对应国家,代码中用到的csv文件,可以在ip段国家数据库下载。

import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** http://www.foxavideo.com/download/download-ip-to-country.php*/
public class IPCountryTest {private static final HashMap<Long,String> maxIpMap = new HashMap<>();private static final String IP4_PATH = "E:\\tmp\\ip4.csv";private static final String UNKNOWN = "unknown";private static final String LOCAL_IP_PROMPT = "本地循环地址";private static final String PRIVATE_IP_PROMPT = "私有地址";private static final String[] LOCAL_IPS = {"127.0.0.1","0.0.0.0","localhost"};private static final String PRIVATE_IP_REGEX = "^(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(172\\.((1[6-9])|(2\\d)|(3[01]))\\.\\d{1,3}\\.\\d{1,3})|(192\\.168\\.\\d{1,3}\\.\\d{1,3})$";private static final Pattern PRIVATE_IP_PATTERN = Pattern.compile(PRIVATE_IP_REGEX);private static Long[] maxIps;@Beforepublic void setUp() throws IOException {init();}@Testpublic void testIpToCountry() {String[] ips = {"176.60.152.42", "24.9.55.92", "46.221.227.19","127.0.0.1","0.0.0.0","LOCALHOST","192.168.33.174","10.2.2.2","172.17.3.3"};for(String ip : ips) {System.out.println(ipToContry(ip));}}public static String ipToContry(String ip){if(isLocalIp(ip)){return LOCAL_IP_PROMPT;}if(isPrivateIp(ip)){return PRIVATE_IP_PROMPT;}long ipNum = ipToNum(ip);Long bound = null;for(int i=0;i<maxIps.length;i++){if(maxIps[i] >= ipNum){bound = maxIps[i];break;}}if(bound == null){return UNKNOWN;}return maxIpMap.getOrDefault(bound,UNKNOWN);}public static boolean isPrivateIp(String ip){Matcher matcher = PRIVATE_IP_PATTERN.matcher(ip);return matcher.find();}public static boolean isLocalIp(String ip){for(String localIp : LOCAL_IPS){if(localIp.equalsIgnoreCase(ip)){return true;}}return false;}public static long ipToNum(String ip) {String[] parts = ip.split("\\.");assert parts.length == 4;return (Long.parseLong(parts[0]) << 24) + (Long.parseLong(parts[1]) << 16) + (Long.parseLong(parts[2]) << 8) + Long.parseLong(parts[3]);}private static void init() throws IOException {Path path = Paths.get(IP4_PATH);List<String> lines = Files.readAllLines(path);LinkedList<Long> maxIpList = new LinkedList<>();for(String line : lines){String[] split = line.split(",");if(split.length != 3){continue;}String country = split[0];
//            String start = split[1];//开始ipString end = split[2];//结束iplong endIp = ipToNum(end);maxIpList.add(endIp);maxIpMap.put(endIp,map.getOrDefault(country, UNKNOWN));}maxIps = new Long[maxIpList.size()];maxIpList.toArray(maxIps);Arrays.sort(maxIps);}private static final HashMap<String,String> map = new HashMap<>();static {map.put("AD","安道尔共和国");map.put("AE","阿拉伯联合酋长国");map.put("AF","阿富汗");map.put("AG","安提瓜和巴布达");map.put("AI","安圭拉岛");map.put("AL","阿尔巴尼亚");map.put("AM","亚美尼亚");map.put("AO","安哥拉");map.put("AR","阿根廷");map.put("AT","奥地利");map.put("AU","澳大利亚");map.put("AZ","阿塞拜疆");map.put("BB","巴巴多斯");map.put("BD","孟加拉国");map.put("BE","比利时");map.put("BF","布基纳法索");map.put("BG","保加利亚");map.put("BH","巴林");map.put("BI","布隆迪");map.put("BJ","贝宁");map.put("BL","巴勒斯坦");map.put("BM","百慕大群岛");map.put("BN","文莱");map.put("BO","玻利维亚");map.put("BR","巴西");map.put("BS","巴哈马");map.put("BW","博茨瓦纳");map.put("BY","白俄罗斯");map.put("BZ","伯利兹");map.put("CA","加拿大");map.put("CF","中非共和国");map.put("CG","刚果");map.put("CH","瑞士");map.put("CK","库克群岛");map.put("CL","智利");map.put("CM","喀麦隆");map.put("CN","中国");map.put("CO","哥伦比亚");map.put("CR","哥斯达黎加");map.put("CS","捷克");map.put("CU","古巴");map.put("CY","塞浦路斯");map.put("CZ","捷克");map.put("DE","德国");map.put("DJ","吉布提");map.put("DK","丹麦");map.put("DO","多米尼加共和国");map.put("DZ","阿尔及利亚");map.put("EC","厄瓜多尔");map.put("EE","爱沙尼亚");map.put("EG","埃及");map.put("ES","西班牙");map.put("ET","埃塞俄比亚");map.put("FI","芬兰");map.put("FJ","斐济");map.put("FR","法国");map.put("GA","加蓬");map.put("GB","英国");map.put("GD","格林纳达");map.put("GE","格鲁吉亚");map.put("GF","法属圭亚那");map.put("GH","加纳");map.put("GI","直布罗陀");map.put("GM","冈比亚");map.put("GN","几内亚");map.put("GR","希腊");map.put("GT","危地马拉");map.put("GU","关岛");map.put("GY","圭亚那");map.put("HK","中国香港特别行政区");map.put("HN","洪都拉斯");map.put("HT","海地");map.put("HU","匈牙利");map.put("ID","印度尼西亚");map.put("IE","爱尔兰");map.put("IL","以色列");map.put("IN","印度");map.put("IQ","伊拉克");map.put("IR","伊朗");map.put("IS","冰岛");map.put("IT","意大利");map.put("JM","牙买加");map.put("JO","约旦");map.put("JP","日本");map.put("KE","肯尼亚");map.put("KG","吉尔吉斯坦");map.put("KH","柬埔寨");map.put("KP","朝鲜");map.put("KR","韩国");map.put("KT","科特迪瓦共和国");map.put("KW","科威特");map.put("KZ","哈萨克斯坦");map.put("LA","老挝");map.put("LB","黎巴嫩");map.put("LC","圣卢西亚");map.put("LI","列支敦士登");map.put("LK","斯里兰卡");map.put("LR","利比里亚");map.put("LS","莱索托");map.put("LT","立陶宛");map.put("LU","卢森堡");map.put("LV","拉脱维亚");map.put("LY","利比亚");map.put("MA","摩洛哥");map.put("MC","摩纳哥");map.put("MD","摩尔多瓦");map.put("MG","马达加斯加");map.put("ML","马里");map.put("MM","缅甸");map.put("MN","蒙古");map.put("MO","中国澳门特别行政区");map.put("MS","蒙特塞拉特岛");map.put("MT","马耳他");map.put("MU","毛里求斯");map.put("MV","马尔代夫");map.put("MW","马拉维");map.put("MX","墨西哥");map.put("MY","马来西亚");map.put("MZ","莫桑比克");map.put("NA","纳米比亚");map.put("NE","尼日尔");map.put("NG","尼日利亚");map.put("NI","尼加拉瓜");map.put("NL","荷兰");map.put("NO","挪威");map.put("NP","尼泊尔");map.put("NR","瑙鲁");map.put("NZ","新西兰");map.put("OM","阿曼");map.put("PA","巴拿马");map.put("PE","秘鲁");map.put("PF","法属玻利尼西亚");map.put("PG","巴布亚新几内亚");map.put("PH","菲律宾");map.put("PK","巴基斯坦");map.put("PL","波兰");map.put("PR","波多黎各");map.put("PT","葡萄牙");map.put("PY","巴拉圭");map.put("QA","卡塔尔");map.put("RO","罗马尼亚");map.put("RU","俄罗斯");map.put("SA","沙特阿拉伯");map.put("SB","所罗门群岛");map.put("SC","塞舌尔");map.put("SD","苏丹");map.put("SE","瑞典");map.put("SG","新加坡");map.put("SI","斯洛文尼亚");map.put("SK","斯洛伐克");map.put("SL","塞拉利昂");map.put("SM","圣马力诺");map.put("SN","塞内加尔");map.put("SO","索马里");map.put("SR","苏里南");map.put("ST","圣多美和普林西比");map.put("SV","萨尔瓦多");map.put("SY","叙利亚");map.put("SZ","斯威士兰");map.put("TD","乍得");map.put("TG","多哥");map.put("TH","泰国");map.put("TJ","塔吉克斯坦");map.put("TM","土库曼斯坦");map.put("TN","突尼斯");map.put("TO","汤加");map.put("TR","土耳其");map.put("TT","特立尼达和多巴哥");map.put("TW","中国台湾省");map.put("TZ","坦桑尼亚");map.put("UA","乌克兰");map.put("UG","乌干达");map.put("US","美国");map.put("UY","乌拉圭");map.put("UZ","乌兹别克斯坦");map.put("VC","圣文森特岛");map.put("VE","委内瑞拉");map.put("VN","越南");map.put("YE","也门");map.put("YU","南斯拉夫");map.put("ZA","南非");map.put("ZM","赞比亚");map.put("ZR","扎伊尔");map.put("ZW","津巴布韦");
//        map.put("","阿森松");
//        map.put("","开曼群岛");
//        map.put("","科特迪瓦");
//        map.put("","马里亚那群岛");
//        map.put("","马提尼克");
//        map.put("","荷属安的列斯");
//        map.put("","留尼旺");
//        map.put("","东萨摩亚(美)");
//        map.put("","西萨摩亚");}
}

根据IP获取对应国家相关推荐

  1. PHP 跟据用户IP获取所在国家高效解决方案(GEOIP)

    最近项目中有一个需求统计访客数据,为了保证效率.前端尽量轻量化,仅将访客原始请求信息不作任何处理直接写入消息队列.后端计划任务服务器监听消息队列,解析 user agent, ip 地址,处理结果写入 ...

  2. openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息

    openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息 ...

  3. golang中获取公网ip、查看内网ip、检测ip类型、校验ip区间、ip地址string和int转换、根据ip判断地区国家运营商等

    作者: 一蓑烟雨1989 所属专栏: Go从不放弃到实战 本文链接:https://blog.csdn.net/wangshubo1989/article/details/78066344 生命不止, ...

  4. PHP 通过ip获取国家及地址方法集合

    一.通过http请求淘宝和新浪的接口进行在线查询 优点:调用简单方便代码量少   缺点:在无网络的情况下无法查询. print_r(get_area('223.67.235.28')); functi ...

  5. Python通过GeoIP获取IP信息(国家、城市、经纬度等)

    IP地址信息是非常重要的情报信息,通过IP可以定位到该IP所在的国家.城市.经纬度等. 获取IP信息的方式有很多,很多服务商都提供了相应的地址库或API接口服务. 如国内的ipip.net,国外的ip ...

  6. JAVA根据IP地址获取省份城市和经纬度(可获取国家名称 淘宝高德API如果是国外IP获取到的为空)

    所需jar包maven地址: <!-- 根据ip获取位置 --><dependency><groupId>com.maxmind.geoip2</groupI ...

  7. 【java】使用ip获取 国家 省份 城市

    1.下载GeoLite2 City库 下载地址: http://dev.maxmind.com/geoip/geoip2/geolite2/ https://download.csdn.net/dow ...

  8. PHP根据IP获取当前所在地地址

    原理简述: 利用"ip.taobao.com"提供的一个功能,先获取json格式字符串,再解码json字符串 新建文件getaddress.class.php: <?php ...

  9. 根据IP获取地理位置信息 — Golang

    根据IP获取地理位置信息 - Golang 1 介绍 1.1 ip2region 1.2 geoip2-golang 1.3 总结 2 使用 2.1 ip2region 2.2 geoip2-gola ...

  10. java根据IP获取当前区域天气信息

    java根据IP获取当前区域天气信息 大致思路是客户端发起请求,我们首先根据请求获取到外网IP,然后再根据外网IP获取到用户所在城市,最后根据城市获取到天气信息 获取外网IP 万网获取外网IP地址: ...

最新文章

  1. pytorch BiLSTM+CRF代码详解 重点
  2. python3网络编程
  3. [Win32]IP数据报的首部如何定义
  4. 关于vue+element-ui项目的分页,返回默认显示第一页的问题解决
  5. 使用极光推送实现分组发送和服务端集成
  6. 放大器非线性失真研究装置设计报告_走进自动化 | 本科生科技论文报告会圆满结束...
  7. Android软键盘调用及隐藏,以及获得点击软键盘输入的字母信息
  8. 3d数学基础学习总结
  9. 详解计算机内部存储数据的形式 二进制数
  10. 如何自定义 maven中的archetype
  11. 单片机IC卡读取开题报告_基于单片机的IC卡读写器设计(含开题报告)
  12. B站新规下的视频码率压制方案
  13. 软件工程课程设计-ch小说网站
  14. cmake依赖ffmpeg库(x264)错误
  15. 机考[51 - 60]
  16. 华师大计算机考研825,2020华东师范大学计算机/软件专业课改考408
  17. 江城如画里,山晚望晴空。 两水夹明镜,双桥落彩虹。 人烟寒橘柚,秋色老梧桐。谁念北楼上,临风怀谢公
  18. vue中怎么获取元素
  19. Java与eclipse的配置安装
  20. mms彩信发送 java_Android编程之非调用系统界面实现发送彩信的方法(MMS)

热门文章

  1. 双霖度盘下载器(第三方百度网盘不限速下载工具)
  2. matlab自动识别粗大误差,剔除粗大误差
  3. iOS常用的几种锁详解以及用法
  4. 使用pyspider框架抓取猫途鹰旅游信息
  5. Python标准库——turtle库
  6. Web在线预览CAD(使用AUTODESK)
  7. 创新创业技术路线怎么写_【精选】如何撰写创新创业项目申请书.ppt
  8. dubbo源码解析-directory
  9. 怎么用odbc连接mysql数据库连接_怎么用odbc连接mysql数据库
  10. ASM1117-3.3V稳压芯片的典型电路图及分析