Java获取IP地址

1import java.net.Inet4Address; 2import java.net.InetAddress; 3import java.net.NetworkInterface; 4import java.util.Enumeration; 5 6import javax.servlet.http.HttpServletRequest; 7 8/** 9 * @version v1.0 10 * @Description: TODO 11 * @Author: cnb 12 * @Date: 2020/1/18 23:08 13 */ 14public class IpUtils { 15 16 private static final String[] HEADERS = { 17 "X-Forwarded-For", 18 "Proxy-Client-IP", 19 "WL-Proxy-Client-IP", 20 "HTTP_X_FORWARDED_FOR", 21 "HTTP_X_FORWARDED", 22 "HTTP_X_CLUSTER_CLIENT_IP", 23 "HTTP_CLIENT_IP", 24 "HTTP_FORWARDED_FOR", 25 "HTTP_FORWARDED", 26 "HTTP_VIA", 27 "REMOTE_ADDR", 28 "X-Real-IP" 29 }; 30 31 /** 32 * 判断ip是否为空,空返回true 33 * @param ip 34 * @return 35 */ 36 public static boolean isEmptyIp(final String ip){ 37 return (ip == null || ip.length() == 0 || ip.trim().equals("") || "unknown".equalsIgnoreCase(ip)); 38 } 39 40 41 /** 42 * 判断ip是否不为空,不为空返回true 43 * @param ip 44 * @return 45 */ 46 public static boolean isNotEmptyIp(final String ip){ 47 return !isEmptyIp(ip); 48 } 49 50 /*** 51 * 获取客户端ip地址(可以穿透代理) 52 * @param request HttpServletRequest 53 * @return 54 */ 55 public static String getIpAddress(HttpServletRequest request) { 56 String ip = ""; 57 for (String header : HEADERS) { 58 ip = request.getHeader(header); 59 if(isNotEmptyIp(ip)) { 60 break; 61 } 62 } 63 if(isEmptyIp(ip)){ 64 ip = request.getRemoteAddr(); 65 } 66 if(isNotEmptyIp(ip) && ip.contains(",")){ 67 ip = ip.split(",")[0]; 68 } 69 if("0:0:0:0:0:0:0:1".equals(ip)){ 70 ip = "127.0.0.1"; 71 } 72 return ip; 73 } 74 75 76 /** 77 * 获取本机的局域网ip地址,兼容Linux 78 * @return String 79 * @throws Exception 80 */ 81 public String getLocalHostIP() throws Exception{ 82 Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces(); 83 String localHostAddress = ""; 84 while(allNetInterfaces.hasMoreElements()){ 85 NetworkInterface networkInterface = allNetInterfaces.nextElement(); 86 Enumeration<InetAddress> address = networkInterface.getInetAddresses(); 87 while(address.hasMoreElements()){ 88 InetAddress inetAddress = address.nextElement(); 89 if(inetAddress != null && inetAddress instanceof Inet4Address){ 90 localHostAddress = inetAddress.getHostAddress(); 91 } 92 } 93 } 94 return localHostAddress; 95 } 96 97}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

Java获取IP地址 - HelloWorld