中易网

javaWeb开发,如何取得客户端的MAC,注意,客户端是子网的一个PC

答案:3  悬赏:80  
解决时间 2021-01-15 20:30
  • 提问者网友:富士山上尢
  • 2021-01-15 10:06
javaWeb开发,如何取得客户端的MAC,注意,客户端是子网的一个PC
最佳答案
  • 二级知识专家网友:拾荒鲤
  • 2021-01-15 11:20
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.InetAddress;  
import java.net.NetworkInterface;  
  
  
public class SystemTool {  
  
      
    public static String getOSName() {  
        return System.getProperty("os.name").toLowerCase();  
    }  
  
      
    public static String getUnixMACAddress() {  
        String mac = null;  
        BufferedReader bufferedReader = null;  
        Process process = null;  
        try {  
            // linux下的命令,一般取eth0作为本地主网卡  
            process = Runtime.getRuntime().exec("ifconfig eth0");  
            // 显示信息中包含有mac地址信息  
            bufferedReader = new BufferedReader(new InputStreamReader(  
                    process.getInputStream()));  
            String line = null;  
            int index = -1;  
            while ((line = bufferedReader.readLine()) != null) {  
                // 寻找标示字符串[hwaddr]  
                index = line.toLowerCase().indexOf("hwaddr");  
                if (index >= 0) {// 找到了  
                    // 取出mac地址并去除2边空格  
                    mac = line.substring(index + "hwaddr".length() + 1).trim();  
                    break;  
                }  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (bufferedReader != null) {  
                    bufferedReader.close();  
                }  
            } catch (IOException e1) {  
                e1.printStackTrace();  
            }  
            bufferedReader = null;  
            process = null;  
        }  
        return mac;  
    }  
  
      
    public static String getWindowsMACAddress() {  
        String mac = null;  
        BufferedReader bufferedReader = null;  
        Process process = null;  
        try {  
            // windows下的命令,显示信息中包含有mac地址信息  
            process = Runtime.getRuntime().exec("ipconfig /all");  
            bufferedReader = new BufferedReader(new InputStreamReader(  
                    process.getInputStream()));  
            String line = null;  
            int index = -1;  
            while ((line = bufferedReader.readLine()) != null) {  
                System.out.println(line);  
                // 寻找标示字符串[physical  
                index = line.toLowerCase().indexOf("physical address");  
                  
                if (index >= 0) {// 找到了  
                    index = line.indexOf(":");// 寻找":"的位置  
                    if (index >= 0) {  
                        System.out.println(mac);  
                        // 取出mac地址并去除2边空格  
                        mac = line.substring(index + 1).trim();  
                    }  
                    break;  
                }  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (bufferedReader != null) {  
                    bufferedReader.close();  
                }  
            } catch (IOException e1) {  
                e1.printStackTrace();  
            }  
            bufferedReader = null;  
            process = null;  
        }  
  
        return mac;  
    }  
  
      
    public static String getMACAddress() throws Exception {  
          
        // 获取本地IP对象  
        InetAddress ia = InetAddress.getLocalHost();  
        // 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。  
        byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();  
  
        // 下面代码是把mac地址拼装成String  
        StringBuffer sb = new StringBuffer();  
  
        for (int i = 0; i < mac.length; i++) {  
            if (i != 0) {  
                sb.append("-");  
            }  
            // mac[i] & 0xFF 是为了把byte转化为正整数  
            String s = Integer.toHexString(mac[i] & 0xFF);  
            sb.append(s.length() == 1 ? 0 + s : s);  
        }  
  
        // 把字符串所有小写字母改为大写成为正规的mac地址并返回  
        return sb.toString().toUpperCase();  
    } 
}

写一个全局拦截的servlet,只要有请求的时候就调用这个类里面的获取mac地址的方法
 String os = getOSName();  
        System.out.println(os);  
        if (os.equals("windows 7")) {  
            String mac = getMACAddress();  
            System.out.println(mac);  
        } else if (os.startsWith("windows")) {  
            // 本地是windows  
            String mac = getWindowsMACAddress();  
            System.out.println(mac);  
        } else {  
            // 本地是非windows系统 一般就是unix  
            String mac = getUnixMACAddress();  
            System.out.println(mac);  
        }

记得判断一下是什么系统

全部回答
  • 1楼网友:渡鹤影
  • 2021-01-15 13:11
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;
     }
  • 2楼网友:北城痞子
  • 2021-01-15 12:57
WEB服务器在这个内网吗?
如果不在,只能通过ActiveX获取客户PC MAC地址
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息