[java]获取IP地址的常用方法
来源:互联网 发布:nginx 文件服务器 编辑:程序博客网 时间:2024/05/23 16:39
常见问题:
1.明确要获取的是用户浏览器所在的用户端IP地址,还是服务器IP地址
2.是局域网网的IP地址还是外网IP地址
3. 如果用代理的话该怎么获取真实的IP地址
具体实现方法如下:
import org.jsoup.Connection;import org.jsoup.Jsoup;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.net.InetAddress;import java.net.UnknownHostException;/** * Created by Kangbin on 2017/9/12. */public class IPUtils { /** * 获取浏览器所在用户端的ip地址 * @param request * @return */ public static String getClientIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) { //根据网卡取本机配置的IP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress = inet.getHostAddress(); } } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if (ipAddress != null && ipAddress.length() > 15) { //"***.***.***.***".length() = 15 if (ipAddress.indexOf(",") > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } }// if (ipAddress != null && (ipAddress.indexOf("172.") >= 0 || ipAddress.indexOf("192.") >= 0)) { //如果是内网ip, 则说明在同一局域网, 直接取系统外网ip// ipAddress = "183.131.11.57"; //如果是内网,写死为外网值//// ipAddress = getPublicIP();// } return ipAddress; } /** * 得到本机的外网ip,出现异常时返回本地IP * * @return */ public static String getPublicIP() { String ip = null; try { ip = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } org.jsoup.nodes.Document doc = null; Connection con = null; // 连接 http://1212.ip138.com/ic.asp con = Jsoup.connect("http://1212.ip138.com/ic.asp").timeout(10000); try { doc = con.get(); // 获得包含本机ip的文本串:您的IP是:[xxx.xxx.xxx.xxx] 来自:YY org.jsoup.select.Elements els = doc.body().select("center"); for (org.jsoup.nodes.Element el : els) { ip = el.text(); } // 从文本串过滤出ip,用正则表达式将非数字和.替换成空串"" ip = ip.replaceAll("[^0-9.]", ""); } catch (IOException e) { e.printStackTrace(); return ip; } return ip; }}
阅读全文
0 0
- [java]获取IP地址的常用方法
- java 获取IP地址的方法
- Java获取IP地址的多种方法
- 获取IP地址的方法
- 获取IP地址的方法
- 获取ip地址的方法
- IP控件获取IP地址的方法
- java中获取当前服务器的Ip地址的方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- HDU
- iOS 宏定义~DirectoryPath(目录路径)
- Linux-高可用High Availability
- 每天一python 题 0003
- u-boot移植--5、支持烧写yaffs文件系统映像
- [java]获取IP地址的常用方法
- LeetCode169. Majority Element
- Java中的Graphics2D类基本使用教程
- http://www.cnblogs.com/shanyou/archive/2008/09/15/1291264.html
- 二叉树——高度
- 作业临时存放
- wamp最新版本php7和apache
- PAT 1123. Is It a Complete AVL Tree (30) 平衡树构建+ 完全二叉树判断
- MacOS 开发