javio 发表于 2013-2-6 09:37:37

java 根据IP获取客户端Mac地址

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

1.获取客户端ip地址( 这个必须从客户端传到后台):
   jsp页面下,很简单,request.getRemoteAddr() ;
   因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换
Java代码
public String getMyIP() {   
   try {   
         FacesContext fc = FacesContext.getCurrentInstance();   
         HttpServletRequest request = (HttpServletRequest)fc.getExternalContext().getRequest();   
         return request.getRemoteAddr();   
   }   
   catch (Exception e) {   
         e.printStackTrace();   
   }   
   return "";   
}

   public String getMyIP() {
      try {
            FacesContext fc = FacesContext.getCurrentInstance();
            HttpServletRequest request = (HttpServletRequest)fc.getExternalContext().getRequest();
            return request.getRemoteAddr();
      }
      catch (Exception e) {
            e.printStackTrace();
      }
      return "";
    }

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

    Java代码
public String getMACAddress(String ip){   
      String str = "";   
      String macAddress = "";   
      try {   
            Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);   
            InputStreamReader ir = new InputStreamReader(p.getInputStream());   
            LineNumberReader input = new LineNumberReader(ir);   
            for (int i = 1; i < 100; i++) {   
                str = input.readLine();   
                if (str != null) {   
                  if (str.indexOf("MAC Address") > 1) {   
                        macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());   
                        break;   
                  }   
                }   
            }   
      } catch (IOException e) {   
            e.printStackTrace(System.out);   
      }   
      return macAddress;   
    }

public String getMACAddress(String ip){
      String str = "";
      String macAddress = "";
      try {
            Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);
            InputStreamReader ir = new InputStreamReader(p.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            for (int i = 1; i < 100; i++) {
                str = input.readLine();
                if (str != null) {
                  if (str.indexOf("MAC Address") > 1) {
                        macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length());
                        break;
                  }
                }
            }
      } catch (IOException e) {
            e.printStackTrace(System.out);
      }
      return macAddress;
    }

完整代码:

Java代码
import java.io.IOException;   
import java.io.InputStreamReader;   
import java.io.LineNumberReader;   

public class GetMACAddress {   
public String getMACAddress(String ipAddress) {   
String str = "", strMAC = "", macAddress = "";   
try {   
Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);   
InputStreamReader ir = new InputStreamReader(pp.getInputStream());   
LineNumberReader input = new LineNumberReader(ir);   
for (int i = 1; i < 100; i++) {   
str = input.readLine();   
if (str != null) {   
if (str.indexOf("MAC Address") > 1) {   
strMAC = str.substring(str.indexOf("MAC Address") + 14,   
str.length());   
break;   
}   
}   
}   
} catch (IOException ex) {   
return "Can't Get MAC Address!";   
}   
//   
if (strMAC.length() < 17) {   
return "Error!";   
}   

macAddress = strMAC.substring(0, 2) + ":" + strMAC.substring(3, 5)   
+ ":" + strMAC.substring(6,http://www.agoit.com/images/smiles/icon_cool.gif + ":" + strMAC.substring(9, 11)   
+ ":" + strMAC.substring(12, 14) + ":"   
+ strMAC.substring(15, 17);   
//   
return macAddress;   
}   

public static void main(String[] args) {   
GetMACAddress getMACAddress = new GetMACAddress();   
System.out.println(getMACAddress.getMACAddress("59.78.63.38")); //获得该ip地址的mac地址   
}   

public static String procAll(String str) {   
return procStringEnd(procFirstMac(procAddress(str)));   
}   

public static String procAddress(String str) {   
int indexof = str.indexOf("Physical Address");   
if (indexof > 0) {   
return str.substring(indexof, str.length());   
}   
return str;   
}   

public static String procFirstMac(String str) {   
int indexof = str.indexOf(":");   
if (indexof > 0) {   
return str.substring(indexof + 1, str.length()).trim();   
}   
return str;   
}   

public static String procStringEnd(String str) {   
int indexof = str.indexOf("\r");   
if (indexof > 0) {   
return str.substring(0, indexof).trim();   
}   
return str;   
}   
}

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class GetMACAddress {
public String getMACAddress(String ipAddress) {
String str = "", strMAC = "", macAddress = "";
try {
Process pp = Runtime.getRuntime().exec("nbtstat -a " + ipAddress);
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (int i = 1; i < 100; i++) {
str = input.readLine();
if (str != null) {
if (str.indexOf("MAC Address") > 1) {
strMAC = str.substring(str.indexOf("MAC Address") + 14,
str.length());
break;
}
}
}
} catch (IOException ex) {
return "Can't Get MAC Address!";
}
//
if (strMAC.length() < 17) {
return "Error!";
}

macAddress = strMAC.substring(0, 2) + ":" + strMAC.substring(3, 5)
+ ":" + strMAC.substring(6,http://www.agoit.com/images/smiles/icon_cool.gif + ":" + strMAC.substring(9, 11)
+ ":" + strMAC.substring(12, 14) + ":"
+ strMAC.substring(15, 17);
//
return macAddress;
}

public static void main(String[] args) {
GetMACAddress getMACAddress = new GetMACAddress();
System.out.println(getMACAddress.getMACAddress("59.78.63.38")); //获得该ip地址的mac地址
}

public static String procAll(String str) {
return procStringEnd(procFirstMac(procAddress(str)));
}

public static String procAddress(String str) {
int indexof = str.indexOf("Physical Address");
if (indexof > 0) {
return str.substring(indexof, str.length());
}
return str;
}

public static String procFirstMac(String str) {
int indexof = str.indexOf(":");
if (indexof > 0) {
return str.substring(indexof + 1, str.length()).trim();
}
return str;
}

public static String procStringEnd(String str) {
int indexof = str.indexOf("\r");
if (indexof > 0) {
return str.substring(0, indexof).trim();
}
return str;
}
}
只要写一个servlet来调用这个类的getMACAddress(String netip)方法就可以获得客户端的mac地址了,相信你会写jsp应该对servlet也不陌生吧,在jsp中调用servlet通过session传递返回的mac地址,加以判断就可以了
页: [1]
查看完整版本: java 根据IP获取客户端Mac地址