`
啸笑天
  • 浏览: 3435873 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

JSF/JAVA 根据IP获取客户端Mac地址

    博客分类:
  • jsf
阅读更多

需要对用户的 ip 和 mac 地址进行验证,这里用到获取客户端ip和mac地址的两个方法,留存。 

1.获取客户端ip地址( 这个必须从客户端传到后台): 
   jsp页面下,很简单,request.getRemoteAddr() ; 
   因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换 

Java代码 
  1. public String getMyIP() {  
  2.      try {  
  3.          FacesContext fc = FacesContext.getCurrentInstance();  
  4.          HttpServletRequest request = (HttpServletRequest)fc.getExternalContext().getRequest();  
  5.          return request.getRemoteAddr();  
  6.      }  
  7.      catch (Exception e) {  
  8.          e.printStackTrace();  
  9.      }  
  10.      return "";  
  11.  }  



2.获取客户端mac地址 
    调用window的命令,在后台Bean里实现 通过ip来获取mac地址。方法如下:

   
Java代码 
  1. public String getMACAddress(String ip){  
  2.         String str = "";  
  3.         String macAddress = "";  
  4.         try {  
  5.             Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);  
  6.             InputStreamReader ir = new InputStreamReader(p.getInputStream());  
  7.             LineNumberReader input = new LineNumberReader(ir);  
  8.             for (int i = 1; i < 100; i++) {  
  9.                 str = input.readLine();  
  10.                 if (str != null) {  
  11.                     if (str.indexOf("MAC Address") > 1) {  
  12.                         macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());  
  13.                         break;  
  14.                     }  
  15.                 }  
  16.             }  
  17.         } catch (IOException e) {  
  18.             e.printStackTrace(System.out);  
  19.         }  
  20.         return macAddress;  
  21.     }  



完整代码:

Java代码 
  1. import java.io.IOException;   
  2. import java.io.InputStreamReader;   
  3. import java.io.LineNumberReader;  
  4.   
  5. public class GetMACAddress {   
  6. public String getMACAddress(String ipAddress) {   
  7. String str = "", strMAC = "", macAddress = "";   
  8. try {   
  9. Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);   
  10. InputStreamReader ir = new InputStreamReader(pp.getInputStream());   
  11. LineNumberReader input = new LineNumberReader(ir);   
  12. for (int i = 1; i < 100; i++) {   
  13. str = input.readLine();   
  14. if (str != null) {   
  15. if (str.indexOf("MAC Address") > 1) {   
  16. strMAC = str.substring(str.indexOf("MAC Address") + 14,   
  17. str.length());   
  18. break;   
  19. }   
  20. }   
  21. }   
  22. catch (IOException ex) {   
  23. return "Can't Get MAC Address!";   
  24. }   
  25. //   
  26. if (strMAC.length() < 17) {   
  27. return "Error!";   
  28. }  
  29.   
  30. macAddress = strMAC.substring(02) + ":" + strMAC.substring(35)   
  31. ":" + strMAC.substring(68) + ":" + strMAC.substring(911)   
  32. ":" + strMAC.substring(1214) + ":"   
  33. + strMAC.substring(1517);   
  34. //   
  35. return macAddress;   
  36. }  
  37.   
  38. public static void main(String[] args) {   
  39. GetMACAddress getMACAddress = new GetMACAddress();   
  40. System.out.println(getMACAddress.getMACAddress("59.78.63.38")); //获得该ip地址的mac地址   
  41. }  
  42.   
  43. public static String procAll(String str) {   
  44. return procStringEnd(procFirstMac(procAddress(str)));   
  45. }  
  46.   
  47. public static String procAddress(String str) {   
  48. int indexof = str.indexOf("Physical Address");   
  49. if (indexof > 0) {   
  50. return str.substring(indexof, str.length());   
  51. }   
  52. return str;   
  53. }  
  54.   
  55. public static String procFirstMac(String str) {   
  56. int indexof = str.indexOf(":");   
  57. if (indexof > 0) {   
  58. return str.substring(indexof + 1, str.length()).trim();   
  59. }   
  60. return str;   
  61. }  
  62.   
  63. public static String procStringEnd(String str) {   
  64. int indexof = str.indexOf("\r");   
  65. if (indexof > 0) {   
  66. return str.substring(0, indexof).trim();   
  67. }   
  68. return str;   
  69. }   
  70. }  

 


只要写一个servlet来调用这个类的getMACAddress(String netip)方法就可以获得客户端的mac地址了,相信你会写jsp应该对servlet也不陌生吧,在jsp中调用servlet通过session传递返回的mac地址,加以判断就可以了 
mac地址是可以通过注册表修改的,不建议以此来作为限制依据~ 

 

补充: 
关于获取IP地址的方式,最近在linux下有一个教训,如果单纯通过InetAddress来获取IP地址,就会出现在不同的机器上IP地址不同的问题。 
InetAddress.getLocalHost().getAddress() 实际上是根据hostname来获取IP地址的。linux系统在刚刚装完默认的hostname是localhost,所以通过上面代码获取到的本机 ip就是127.0.0.1, 相对应,比如我的hostname就是rjlin.atsig.com 返回的ip地址确是atsig.com的地址。暂时采用下面代码来处理,当然还不够灵活: 
public static byte[] getIp() throws UnknownHostException { 
byte[] b = InetAddress.getLocalHost().getAddress(); 
Enumeration allNetInterfaces = null; 
try { 
allNetInterfaces = NetworkInterface.getNetworkInterfaces(); 
} catch (SocketException e) { 
e.printStackTrace(); 

InetAddress ip = null; 
NetworkInterface netInterface = null; 
while (allNetInterfaces.hasMoreElements()) { 
netInterface = (NetworkInterface) allNetInterfaces.nextElement(); 
if (netInterface.getName().trim().equals("eth0")){ 
Enumeration addresses = netInterface.getInetAddresses(); 
while (addresses.hasMoreElements()) { 
ip = (InetAddress) addresses.nextElement(); 

break; 


if (ip != null && ip instanceof Inet4Address) { 
return b = ip.getAddress(); 

return b; 
}

 

补充:

// 获取真实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;
   }

 

 

 

 

http://justsee.iteye.com/blog/803316

 

 

 

 

分享到:
评论

相关推荐

    java 获取客户端ip mac地址

    获取客户端ip地址( 这个必须从客户端传到后台): jsp页面下,很简单,request....因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换java 获取客户端ip mac地址

    JSF/Facelets/xhtml学习

    JSF/Facelets/xhtml学习

    jsf1.2 source code

    jsf1.2得源代码,包括jsf-api,jsf-ri,jsf-tools,jsf-doc等等。。。

    JSF+HTML标签总结

    jsf标签总结和说明,以及和html标签的对应关系

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...

    各种jsf标签Java语言

    各种jsf标签Java语言各种jsf标签Java语言各种jsf标签Java语言各种jsf标签Java语言

    Practical JSF in Java EE 8 pdf

    Practical JSF in Java EE 8 pdf Master the Java EE 8 and JSF (JavaServer Faces) APIs and web framework with this practical, projects-driven guide to web development. This book combines theoretical ...

    JSF H 标签在HTML中的对应元素

    首先在页面引入,假定前缀是h,即这样声明:&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;

    jsf/jstl/MyFaces包

    MyFaces,jsf使用时用到的包,包括jstl的包,也包括了一些格式和模板文件,将jar放到lib下或者配置到环境中就可以直接使用了

    JSF/JDBC试题管理系统 netbeans & java DB

    用jsf2.0 和 jdbc做的一个试题管理系统 包括登录、增删改差。界面美观 用到了DIV+CSS JAVASCRIPT JSF JDBC

    java+jsf+js

    java+jsf+js java+jsf+js java+jsf+js java+jsf+js java+jsf+js java+jsf+js java+jsf+js

    JSF2自定义组件编程系列 第五部分 源代码

    package composite component into jar maven3 jsf2 UBuntu glassfishv3.0.1 Emacs JDEE

    JSF-Java-jar包

    JSF的jar包 jsf-api.jar +jsf-impl.jar 这个JSF的jar包上课需要,找老师要的,现在分享给需要学习的人用

    jsf教程 JSF为JAVA的 Web应用用户界面

    JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等...

    jsf 客户端验证包

    针对jsf 1.2等使用的客户端验证jar包。也可以从www.sourceforge.net网站搜索下载。

    jsf/RichFaces组件

    RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。

    Practical JSF in Java EE 8

    In a sense, this book teaches you to develop Java EE applications with JSF as user interface. It’s a book for Java enthusiasts. Knowledge about web technologies is helpful, but not required. For ...

    java java jsp jsf

    java jsp jsf fx java jsp jsf fx java jsp jsf fx

    JSF(JavaServer Faces)学习手册

    JSF(JavaServer Faces)学习手册

    jsf1.2 download javaserver faces

    jsf1.2 javaserver faces

Global site tag (gtag.js) - Google Analytics