当前位置: 代码迷 >> Java相关 >> java 如何获取客户端的mac地址
  详细解决方案

java 如何获取客户端的mac地址

热度:1239   发布时间:2014-03-07 16:53:32.0

===============解决方案=================

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
  
public class UdpGetClientMacAddr { 
    private String sRemoteAddr; 
    private int iRemotePort = 137; 
    private byte[] buffer = new byte[1024]; 
    private DatagramSocket ds = null; 
  
    public static void main(String[] args) { 
        try { 
            UdpGetClientMacAddr mac = new UdpGetClientMacAddr("10.0.150.207"); 
            String ma = mac.GetRemoteMacAddr(); 
            System.out.println(ma); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
  
    public UdpGetClientMacAddr(String strAddr) throws Exception { 
        sRemoteAddr = strAddr; 
        ds = new DatagramSocket(); 
    } 
  
    protected final DatagramPacket send(final byte[] bytes) throws IOException { 
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress 
                .getByName(sRemoteAddr), iRemotePort); 
        ds.send(dp); 
        return dp; 
    } 
  
    protected final DatagramPacket receive() throws Exception { 
        DatagramPacket dp = new DatagramPacket(buffer, buffer.length); 
        ds.receive(dp); 
        return dp; 
    } 
  
    protected byte[] GetQueryCmd() throws Exception { 
        byte[] t_ns = new byte[50]; 
        t_ns[0] = 0x00; 
        t_ns[1] = 0x00; 
        t_ns[2] = 0x00; 
        t_ns[3] = 0x10; 
        t_ns[4] = 0x00; 
        t_ns[5] = 0x01; 
        t_ns[6] = 0x00; 
        t_ns[7] = 0x00; 
        t_ns[8] = 0x00; 
        t_ns[9] = 0x00; 
        t_ns[10] = 0x00; 
        t_ns[11] = 0x00; 
        t_ns[12] = 0x20; 
        t_ns[13] = 0x43; 
        t_ns[14] = 0x4B; 
  
        for (int i = 15; i < 45; i++) { 
            t_ns[i] = 0x41; 
        } 
  
        t_ns[45] = 0x00; 
        t_ns[46] = 0x00; 
        t_ns[47] = 0x21; 
        t_ns[48] = 0x00; 
        t_ns[49] = 0x01; 
        return t_ns; 
    } 
  
    protected final String GetMacAddr(byte[] brevdata) throws Exception { 
  
        int i = brevdata[56] * 18 + 56; 
        String sAddr = ""; 
        StringBuffer sb = new StringBuffer(17); 
  
        for (int j = 1; j < 7; j++) { 
            sAddr = Integer.toHexString(0xFF & brevdata[i + j]); 
            if (sAddr.length() < 2) { 
                sb.append(0); 
            } 
            sb.append(sAddr.toUpperCase()); 
            if (j < 6) 
                sb.append(':'); 
        } 
        return sb.toString(); 
    } 
  
    public final void close() { 
        try { 
            ds.close(); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        } 
    } 
  
    public final String GetRemoteMacAddr() throws Exception { 
        byte[] bqcmd = GetQueryCmd(); 
        send(bqcmd); 
        DatagramPacket dp = receive(); 
        String smac = GetMacAddr(dp.getData()); 
        close(); 
  
        return smac; 
    } 
}

===============解决方案=================

public class GetMac { 
//通过IP获取网卡地址 
private String getMacAddressIP(String remotePcIP){ 
String str=""; 
String macAddress=""; 
try { 
Process pp= Runtime.getRuntime().exec ("nbtstat -A " + remotePcIP); 
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){  
macAddress=str.substring(str.indexOf("MAC Address")+14,str.length()); 
break; 
} 
} 
} 
} catch (IOException ex) {} 
return macAddress; 
} 
//通过机器名获取网卡地址 
private String getMacAddressName(String remotePcIP){ 
String str=""; 
String macAddress=""; 
try { 
Process pp= Runtime.getRuntime().exec ("nbtstat -a " + remotePcIP); 
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) {  
macAddress=str.substring(str.indexOf("MAC Address")+14,str.length()); 
break; 
} 
} 
} 
} catch (IOException ex) {} 
return macAddress; 
} 
// 主函数 
public static void main(String[] args) { 
GetMac getmac; 
getmac=new GetMac(); 
String mac=""; 
mac=getmac.getMacAddressIP("192.168.0.18");//YOUR IP 
System.out.println(mac); 
mac=getmac.getMacAddressName("tom");// YOUR HOST-NAME 
System.out.println(mac); 
} 
}

===============解决方案=================

private  static  String   getMacAddress(String   remotePcIP){    
        String   str="";    
        String   macAddress="";    
        try   {    
                  Process   pp=   Runtime.getRuntime().exec   ("nbtstat   -A   "   +   remotePcIP);    
                  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)    
                                      {    
                                          macAddress=str.substring(str.indexOf("MAC Address")+14,str.length());    
                                          break;    
                                    }    
                              }    
                        }    
                }    
        catch   (IOException   ex)   {}    
        return   macAddress;    
}

===============解决方案=================

 //获取Ip地址:    
 public String getRemoteIp(){ 
        FacesContext facesContext=FacesContext.getCurrentInstance(); 
        HttpServletRequest request= (HttpServletRequest)facesContext.getExternalContext().getRequest(); 
        String ip=request.getRemoteAddr(); 
        return ip; 
    } 
//也就是使用request.getRemoteAddr();获取 
//获取MAc地址: 
public static void main(String[] args) { 
        Main main=new Main(); 
        String mac=main.getMACAddress("192.168.5.222"); //如果获取ip为127.0.0.1的话就不会得到值了。 
        System.out.println("客户端的mac地址为:"+mac); 
    } 
     public String getMACAddress(String ip){ 
         String str; 
        String macAddress = ""; 
        try { 
            Process process = Runtime.getRuntime().exec("nbtstat -A " + ip); 
            InputStreamReader inputReader = new InputStreamReader(process.getInputStream()); 
            LineNumberReader lineReader = new LineNumberReader(inputReader); 
            for (int i = 1; i < 100; i++) { 
                str = lineReader.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(); 
        } 
        return macAddress; 
    }

===============解决方案=================

package com.alpha.test; 
  
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.LineNumberReader; 
  
public class GetMac { 
  
    /** 
     * java获取客户端网卡的MAC地址 
     *  
     * @param args 
     */
    public static void main(String[] args) { 
        GetMac get = new GetMac(); 
        System.out.println("1="+get.getMAC()); 
        System.out.println("2="+get.getMAC("127.0.0.1")); 
    } 
  
    // 1.获取客户端ip地址( 这个必须从客户端传到后台): 
    // jsp页面下,很简单,request.getRemoteAddr() ; 
    // 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换 
  
    // 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地址。方法如下: 
  
    // 运行速度【快】 
    public String getMAC() { 
        String mac = null; 
        try { 
            Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all"); 
  
            InputStream is = pro.getInputStream(); 
            BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
            String message = br.readLine(); 
  
            int index = -1; 
            while (message != null) { 
                if ((index = message.indexOf("Physical Address")) > 0) { 
                    mac = message.substring(index + 36).trim(); 
                    break; 
                } 
                message = br.readLine(); 
            } 
            System.out.println(mac); 
            br.close(); 
            pro.destroy(); 
        } catch (IOException e) { 
            System.out.println("Can't get mac address!"); 
            return null; 
        } 
        return mac; 
    } 
  
    // 运行速度【慢】 
    public String getMAC(String ip) { 
        String str = null; 
        String macAddress = null; 
        try { 
            Process p = Runtime.getRuntime().exec("nbtstat -A " + ip); 
            InputStreamReader ir = new InputStreamReader(p.getInputStream()); 
            LineNumberReader input = new LineNumberReader(ir); 
            for (; true;) { 
                str = input.readLine(); 
                if (str != null) { 
                    if (str.indexOf("MAC Address") > 1) { 
                        macAddress = str 
                                .substring(str.indexOf("MAC Address") + 14); 
                        break; 
                    } 
                } 
            } 
        } catch (IOException e) { 
            e.printStackTrace(System.out); 
            return null; 
        } 
        return macAddress; 
    } 
}

  相关解决方案