JAVA获取IP地址和本机IP地址的工具类

由于项目需要做用户体验的数据查询分析,从而分析用户的查询喜好和查询方式来改善系统的体验。上网也查找了很多方式来获取这个IP地址问题。很多朋友也许会经常遇到这个方法。
public String getIpAddr(HttpServletRequest request) {
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("WL-Proxy-Client-IP");

if ((ip == null) || (ip.length() == 0)
|| ("unknown".equalsIgnoreCase(ip)))
ip = request.getRemoteAddr();

return ip;
}
但是结果都为:

要解决这个问题其实也很简单,这个错误,可能是本机的host设置有问题,我记得好像IE浏览器有一个安全设置,但是在局域网内的另一台电脑登入WEB端测试能显示出IP地址但是只是局域网的地址,并没有什么卵用。


想要获取IP地址的办法,参考了下流的办法,通过访问能获取IP地址的网站,读取网址信息并转换成流,用字符流(StringBuffer)截取IP的信息。

public static String getNetIP() throws IOException{
		 InputStream ins = null;
		 try {
			 URL url = new URL("http://city.ip138.com/ip2city.asp"); //获取IP地址的网站
			 URLConnection con = url.openConnection();    //打开网址的链接
			 ins = con.getInputStream();  
			 InputStreamReader isReader = new InputStreamReader(ins, "GB2312");  
			 BufferedReader bReader = new BufferedReader(isReader); 
			 StringBuffer webContent = new StringBuffer();  
			 String str = null;  
			 while ((str = bReader.readLine()) != null) {
				 webContent.append(str);  
			 }
			 int start = webContent.indexOf("[") + 1;  
			  int end = webContent.indexOf("]");  
			  return webContent.substring(start, end);  
		} finally {  
			if (ins != null) {  
				ins.close();  
			}
		}
	}
另一个:通过JDK本来就有的方法,是可以获取到局域网内的IP地址,

public static String getLocalIP() throws IOException {  
		  InetAddress ia = InetAddress.getLocalHost();  
		  return ia.getHostAddress();  
	 } 


执行的结果如下:






补充:遇项目里有多重反向代理

JAVA获取IP地址和本机IP地址的工具类_第1张图片

最后写的一个操作遇负载均衡时候需要处理下返回的值。



你可能感兴趣的:(开源,工具)