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

来源:互联网 发布:日本女孩做饭知乎 编辑:程序博客网 时间:2024/05/16 13:41
由于项目需要做用户体验的数据查询分析,从而分析用户的查询喜好和查询方式来改善系统的体验。上网也查找了很多方式来获取这个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 0
原创粉丝点击