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 get<span style="font-family: Arial, Helvetica, sans-serif;">Local</span>IP() throws IOException {  
		  InetAddress ia = InetAddress.getLocalHost();  
		  return ia.getHostAddress();  
	 } 


执行的结果如下:






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

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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值