中易网

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

答案:3  悬赏:80  
解决时间 2021-01-15 20:30
javaWeb开发,如何取得客户端的MAC,注意,客户端是子网的一个PC
最佳答案
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);  
        }

记得判断一下是什么系统

全部回答
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;
     }
WEB服务器在这个内网吗?
如果不在,只能通过ActiveX获取客户PC MAC地址
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我想问一下支付宝蚂蚁借呗我前两天借了500,
酒媪为我言,君来苦不早 什么意思
温泉铭是唐朝皇帝谁写的
男撩机是什么意思!
什么是年初未弥补亏损和年初累计亏损
卢氏什么组词的
在cad上怎么取消cass环境啊 谢谢了 小弟是个
最近看《明日之子》综艺节目你有没有什么想法
有一首粤语老歌歌词是回头望
大话里那些高级守护还是神兽还是什么超级守护
剑侠情缘手游全区服战力排行称号在哪
如何计算现货仓单中的多仓和空仓数量
我国二十三家金融央企分别是
读书使人优美中,作者认为读书是人美好的理由
c编译完全数检测
推荐资讯
领尚天地地址在什么地方,我要处理点事
[image]100 惠普暗夜精灵3plus,据说屏蔽核显
属木的行业
用千方万计,千辛万苦,原封不动造句
理想彩票站地址在什么地方,想过去办事
埙怎么吹低音跟高音?
求助:G602玩游戏会出现偶尔卡顿
拳皇97根据那部动画片拍出来的
傲剑2九夜明珠第五价到第六价要多少夜影浆
辐射4汉化,这段话什么意思
西安都市时空装饰与西安实创装饰公司那个好
求【初音ミク】等待顺风的hello world的罗马
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?