首页 获取用户IP地址

获取用户IP地址

举报
开通vip

获取用户IP地址获取用户IP地址 public static string IPAddress { get { string userIP; // HttpRequest Request = HttpContext.Current.Request; HttpRequest Request = HttpContext.Current.Request; // ForumContext.Current.Context.Request; // 如果使用代理,获取真实IP if (Request.ServerVariable...

获取用户IP地址
获取用户IP地址 public static string IPAddress { get { string userIP; // HttpRequest Request = HttpContext.Current.Request; HttpRequest Request = HttpContext.Current.Request; // ForumContext.Current.Context.Request; // 如果使用代理,获取真实IP if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "") userIP = Request.ServerVariables["REMOTE_ADDR"]; else userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (userIP == null || userIP == "") userIP = Request.UserHostAddress; return userIP; } } 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分 情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 IP地址了。 如果使用了反向代理软件,将:2046/ 的URL反向代理为 的URL时,用request.getRemoteAddr() 方法获取的IP地址是: 127.0.0.1 或 192.168.1.110 ,而并不是客户端的真实,,。 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP 头信息中,增加了X,FORWARDED,FOR信息。用以跟踪原有的客户端IP地址和原来客户端请 求的服务器地址。当我们访问时,其实并不是我们浏览器 真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问 :2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览 器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr() 的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。 于是可得出获得客户端真实IP地址的方法一: Java代码 public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } 可是当我访问时,返回的IP地址始终是unknown,也并不 是如上所示的127.0.0.1 或 192.168.1.110 了,而我访问 :2046/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去 验证。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 项默认是为on,如 果 forwarded_for 设成了 off 则:X-Forwarded-For: unknown 于是可得出获得客户端真实IP地址的方法二: Java代码 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; } 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; } 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串,,值, 究竟哪个才是真正的用户端的真实IP呢, 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如: X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100 用户真实IP为: 192.168.1.110 说明:按这种方法不一定100%准,网上很多人提到要准确的话必须做一个客户端空间,如 applet。 1获取本机的IP地址 Java代码 private static String getIpAddress() throws UnknownHostException { InetAddress address = InetAddress.getLocalHost(); return address.getHostAddress(); } private static String getIpAddress() throws UnknownHostException { InetAddress address = InetAddress.getLocalHost(); return address.getHostAddress(); } 2获得网卡地址 Java代码 public static String getMACAddress(){ String address = ""; String os = System.getProperty("os.name"); String osUser=System.getProperty("user.name"); if (os != null && os.startsWith("Windows")) { try { String command = "cmd.exe /c ipconfig /all"; Process p = Runtime.getRuntime().exec(command); BufferedReader br =new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { if (line.indexOf("Physical Address") > 0) { int index = line.indexOf(":"); index += 2; address = line.substring(index); break; } } br.close(); return address.trim(); } catch (IOException e) { } } return address; } public static String getMACAddress(){ String address = ""; String os = System.getProperty("os.name"); String osUser=System.getProperty("user.name"); if (os != null && os.startsWith("Windows")) { try { String command = "cmd.exe /c ipconfig /all"; Process p = Runtime.getRuntime().exec(command); BufferedReader br =new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { if (line.indexOf("Physical Address") > 0) { int index = line.indexOf(":"); index += 2; address = line.substring(index); break; } } br.close(); return address.trim(); } catch (IOException e) { } } return address; } 3获得操作系统帐号 Java代码 String osUser=System.getProperty("user.name"); String osUser=System.getProperty("user.name"); 4获得操作系统版本 Java代码 1. import java.util.Properties; 2. 3. Properties props=System.getProperties(); //获得系统属性集 4. String osName = props.getProperty("os.name"); //操作系统名称 5. String osArch = props.getProperty("os.arch"); //操作系统构架 6. String osVersion = props.getProperty("os.version"); //操作系统版本 1. import java.util.Properties; 2. 3. Properties props=System.getProperties(); //获得系统属性集 4. String osName = props.getProperty("os.name"); //操作系统名称 5. String osArch = props.getProperty("os.arch"); //操作系统构架 6. String osVersion = props.getProperty("os.version"); //操作系统版本 5一些常用的信息获得 Java代码 public static String getProperty(String key) 键 相关值的描述 java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 java.vm.specification.version Java 虚拟机 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 版本 java.vm.specification.vendor Java 虚拟机规范供应商 java.vm.specification.name Java 虚拟机规范名称 java.vm.version Java 虚拟机实现版本 java.vm.vendor Java 虚拟机实现供应商 java.vm.name Java 虚拟机实现名称 java.specification.version Java 运行时环境规范版本 java.specification.vendor Java 运行时环境规范供应商 java.specification.name Java 运行时环境规范名称 java.class.version Java 类格式版本号 java.class.path Java 类路径 java.library.path 加载库时搜索的路径列表 java.io.tmpdir 默认的临时文件路径 java.compiler 要使用的 JIT 编译器的名称 java.ext.dirs 一个或多个扩展目录的路径 os.name 操作系统的名称 os.arch 操作系统的架构 os.version 操作系统的版本 file.separator 文件分隔符(在 UNIX 系统中是“/”) path.separator 路径分隔符(在 UNIX 系统中是“:”) line.separator 行分隔符(在 UNIX 系统中是“/n”) user.name 用户的账户名称 user.home 用户的主目录 user.dir 用户的当前工作目录
本文档为【获取用户IP地址】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_633808
暂无简介~
格式:doc
大小:27KB
软件:Word
页数:0
分类:互联网
上传时间:2018-06-26
浏览量:14