范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

java获取真实ip及真实地址工具类

  废话不多说,直接上代码!
  IpUtils.java类package com.fish.common.utils;  import java.net.InetAddress; import java.net.UnknownHostException; import javax.servlet.http.HttpServletRequest;  /**  * 获取IP方法  *   * @author fish  */ public class IpUtils {     public static String getIpAddr(HttpServletRequest request)     {         if (request == null)         {             return "unknown";         }         String ip = request.getHeader("x-forwarded-for");         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("X-Forwarded-For");         }         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.getHeader("X-Real-IP");         }          if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))         {             ip = request.getRemoteAddr();         }          return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;     }      public static boolean internalIp(String ip)     {         byte[] addr = textToNumericFormatV4(ip);         return internalIp(addr) || "127.0.0.1".equals(ip);     }      private static boolean internalIp(byte[] addr)     {         if (StringUtils.isNull(addr) || addr.length < 2)         {             return true;         }         final byte b0 = addr[0];         final byte b1 = addr[1];         // 10.x.x.x/8         final byte SECTION_1 = 0x0A;         // 172.16.x.x/12         final byte SECTION_2 = (byte) 0xAC;         final byte SECTION_3 = (byte) 0x10;         final byte SECTION_4 = (byte) 0x1F;         // 192.168.x.x/16         final byte SECTION_5 = (byte) 0xC0;         final byte SECTION_6 = (byte) 0xA8;         switch (b0)         {             case SECTION_1:                 return true;             case SECTION_2:                 if (b1 >= SECTION_3 && b1 <= SECTION_4)                 {                     return true;                 }             case SECTION_5:                 switch (b1)                 {                     case SECTION_6:                         return true;                 }             default:                 return false;         }     }      /**      * 将IPv4地址转换成字节      *       * @param text IPv4地址      * @return byte 字节      */     public static byte[] textToNumericFormatV4(String text)     {         if (text.length() == 0)         {             return null;         }          byte[] bytes = new byte[4];         String[] elements = text.split(".", -1);         try         {             long l;             int i;             switch (elements.length)             {                 case 1:                     l = Long.parseLong(elements[0]);                     if ((l < 0L) || (l > 4294967295L)) {                         return null;                     }                     bytes[0] = (byte) (int) (l >> 24 & 0xFF);                     bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);                     bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);                     bytes[3] = (byte) (int) (l & 0xFF);                     break;                 case 2:                     l = Integer.parseInt(elements[0]);                     if ((l < 0L) || (l > 255L)) {                         return null;                     }                     bytes[0] = (byte) (int) (l & 0xFF);                     l = Integer.parseInt(elements[1]);                     if ((l < 0L) || (l > 16777215L)) {                         return null;                     }                     bytes[1] = (byte) (int) (l >> 16 & 0xFF);                     bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);                     bytes[3] = (byte) (int) (l & 0xFF);                     break;                 case 3:                     for (i = 0; i < 2; ++i)                     {                         l = Integer.parseInt(elements[i]);                         if ((l < 0L) || (l > 255L)) {                             return null;                         }                         bytes[i] = (byte) (int) (l & 0xFF);                     }                     l = Integer.parseInt(elements[2]);                     if ((l < 0L) || (l > 65535L)) {                         return null;                     }                     bytes[2] = (byte) (int) (l >> 8 & 0xFF);                     bytes[3] = (byte) (int) (l & 0xFF);                     break;                 case 4:                     for (i = 0; i < 4; ++i)                     {                         l = Integer.parseInt(elements[i]);                         if ((l < 0L) || (l > 255L)) {                             return null;                         }                         bytes[i] = (byte) (int) (l & 0xFF);                     }                     break;                 default:                     return null;             }         }         catch (NumberFormatException e)         {             return null;         }         return bytes;     }      public static String getHostIp()     {         try         {             return InetAddress.getLocalHost().getHostAddress();         }         catch (UnknownHostException e)         {         }         return "127.0.0.1";     }      public static String getHostName()     {         try         {             return InetAddress.getLocalHost().getHostName();         }         catch (UnknownHostException e)         {         }         return "未知";     } }
  获取地址类:AddressUtils.javapackage com.fish.common.utils;  import com.fish.common.constant.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSONObject; import com.fish.common.utils.http.HttpUtils;  /**  * 获取地址类  *   * @author fish  */ public class AddressUtils {     private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);      // IP地址查询     public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp";      // 未知地址     public static final String UNKNOWN = "XX XX";      public static String getRealAddressByIP(String ip)     {         String address = UNKNOWN;         // 内网不查询         if (IpUtils.internalIp(ip))         {             return "内网IP";         }             try             {                 String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK);                 if (StringUtils.isEmpty(rspStr))                 {                     log.error("获取地理位置异常 {}", ip);                     return UNKNOWN;                 }                 JSONObject obj = JSONObject.parseObject(rspStr);                 String region = obj.getString("pro");                 String city = obj.getString("city");                 return String.format("%s %s", region, city);             }             catch (Exception e)             {                 log.error("获取地理位置异常 {}", e);             }         return address;     } }

新能源车有望在明年全面降价受新能源汽车热销的带动,今年以来动力电池及原材料不断上涨,新能源厂家纷纷收紧销售渠道的优惠政策,消费者购买新能源车的费用也所以增加,而厂家的盈利能力却下降了,显然这并不是一个良性循贝佐斯亚马逊总有一天会失败会破产文赵卫卫审校陈秋霖本文经授权转载自蓝洞商业(IDvaluecreation)贝佐斯的使命,至少在亚马逊,可以说是完成了。当然,仍然迫在眉睫的是,对一个现在几乎无解的长期问题给出明确8月新能源销量变天!Model3消失?秦PLUSDMi豪取第二名在节能减排主旋律的影响下,新能源汽车的需求量正不断扩大,并且带动销量增幅的持续攀升。今年8月,国内新能源汽车产销量创下了历史新高,首次突破30万辆大关,同比增长1。8倍,为今年的新雷军的瓜不够分了,为什么小米造车的事情一直在走漏消息?撰文AI财经社牛耕编辑张泽从来没有一家公司造车像小米这么热闹过。雷军马不停蹄拜访了多座城市以及大半个汽车圈,几乎每隔几天都有雷军就合作事宜进行深度对接洽谈的信息传出。难怪有行业人士冲刺三季度!前8个月顺丰收入达1173亿,续创新纪录韵达和圆通争二进入最后时刻新的十字路口已来。。提示!快递生态圈主要目标群(投资人私募基金券商机构各地方政府决策者快递监管部门快递经营者媒体从业者快递上下游经营者加盟网点老板年薪30万以上快递物流从业者)添加公众号之前请阅读提示新能源汽车的分类,看完就懂新能源汽车一般分两种纯电动汽车和混合动力车。混合动力车又包括油电混合动力插电式混合动力和增程式混合动力三类。纯电动车只有电池提供能源供给,只有电动机提供动力,驱动汽车前行。这类车型NS更新支持蓝牙耳机,从此不用发射器NS终于能用蓝牙耳机了NS系统固件更新13。0。0版本。添加对蓝牙音频输出设备的支持。(不支持蓝牙设备的麦克风输入)在主机选项中新增更新底座,只有NSOLED款式的底座HEG007HermsAppleWatchSeries7表带上新,Dior新香散发甜点香气丨是日美好事物记者罗天奕编辑楼婍沁HermsAppleWatchSeries7表带上新奢侈品牌似乎都爱Apple。不久前界面时尚还曾推荐过香奈儿苹果耳机保护套,爱马仕此前推出的iPhone12和机械键盘要怎么选择才是最好的选择呢大家好,这里是不会写报社的小编!今天给大家带来的是很重要的一个工具,那就是键盘,有人说,我笔记本的键盘不是很好么?为什么还需要外设!那是因为如果你不管是打游戏,还是办公,有一个合适实体行业还有能赚钱的吗?随着这几年的电商行业发展趋势越来越猛,实体行业发展前景越发低迷,加上这2年的疫情原因,更加是压垮了不少实体门店,每个月辛辛苦苦都不够交租金,请人也请不起,行情萧条也留不住人,每天都全面屏时代即将开启?这几款率先登场的机型大家觉得怎么样?中兴Axon30屏下版今年7月,也是说国内首款屏下前摄手机,虽然还看得到屏下前摄的点点痕迹,但当我们点亮屏幕之后,如果不刻意凑近屏幕去观察,无论深色还是浅色壁纸,其实都很难注意到屏
百公里加速仅需5。5秒2021款丰田GRYaris官图发布近日,丰田汽车发布了一组2021款丰田GRYaris的官方图片,新车是一款纯正的性能车,它源于Toyota在世界汽车拉力锦标赛中的夺冠经验,这正是丰田汽车佐佐(ToyotaGAZO量身定制2020款MiniConvertible人行道版官图发布近日,Mini发布了一组2020款MiniConvertible人行道敞篷版车型的官方图片,新车的创新性和精确协调的色彩和材料概念为个人风格和活力注入了新的亮点,新车将于2020年百公里加速仅需5。2秒丰田Supra2。0LTurbo官图发布近日,丰田汽车发布了一组2020款丰田Supra2。0LTurbo的官方图片,新车是丰田GRSupra系列的扩展车型,除了推出新的2。0升涡轮增压发动机之外,还带来了驾控方面的优化补贴退坡吗?工信部大家放心,不会退1月11日,在中国电动汽车百人会论坛(2020)上,工业和信息化部(以下简称工信部)部长苗圩就新能源汽车补贴政策发表言论时表示,大家放心!2020年7月1日,新能源汽车补贴不再进一过年买车,掀背轿车嘉悦A5可以考虑一下国内消费者对SUV车型关注度颇高,但是在国内市场上,轿车依旧占据着最大的市场份额,随着国内消费者年轻化趋势越来越强,在如今的市场上谁更能赢得年轻消费者的青睐,谁就能够迅速的占领市场限量发售250台2020款大众ArteonRLine版官图近日,大众汽车发布了一组2020款大众ArteonRLine版的官方图片,新车具有独特的设计特点,广泛的标准设备以及从140kW190PS到200kW272PS的四款强劲涡轮增压发八款合资主流家用轿车碰撞结果对比合资品牌主流紧凑型家用轿车中,马自达3昂克塞拉丰田雷凌卡罗拉的碰撞安全成绩是比较靠前的,而雪佛兰科鲁泽本田思域现代领动和菲斯塔等则出现不同程度的失分情况。长安马自达3昂克塞拉雪佛兰被纯电动车替代?传大众帕萨特或退市据外媒报道,在2020年芝加哥车展上,大众汽车美国公司首席运营官JohandeNysschen对外透露帕萨特车型在我们的计划中是有其寿命周期的,2019年该车型在美国的销量仅为14首搭微信车载版第二代GS4PK明日座驾CS75PLUS新年购车如何选?新春临近,各地的返乡大潮已经悄然来到。相对于坐着一票难求人山人海拥挤不堪各种行李无处安放的火车客车回家,拥有一辆属于自己的座驾,可以轻松解决这些烦恼,更可让自己的返乡更舒适更有面子中国流通协会建言解除限行限购近日,中国汽车流通协会发布信息,截止2月11日,在协会监测调研的近50家汽车经销商集团共2895家4S店中,仅有573家复工,复工率为19。8。面对疫情对汽车行业的影响,流通协会于吉利豪越亮相瞬间变出一张2。2米大床在国人固有的观点里,大即美。因此有了海外引入车型加长七座SUV热销家用MPV受欢迎等明显的购车趋势。在这样的市场需求下,4月28日吉利带来了更大空间的吉利豪越,号称躺赢的一款车。目