java怎么获取用户客户端mac地址
PHPz
PHPz 2017-05-27 17:41:02
0
3
1183

怎么在java中获取到用户客户端MAC地址,试过很多方法获取到的都是获取服务器端MAC地址,并且也要考虑用户有多个网卡的情况,如果有多个网卡就会有多个mac地址,需要获取联网的网卡的mac地址,系统没有使用反向代理。

PHPz
PHPz

学习是最好的投资!

全部回复(3)
巴扎黑

用java.net.NetworkInterface

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets)) {
    System.out.printf("Name: %s\n", netint.getName());
    for (InetAddress inetAddress : Collections.list(inetAddresses)) {
        System.out.printf("InetAddress: %s\n", inetAddress);
    }
    System.out.printf("Hardware address: %s\n", Arrays.toString(netint.getHardwareAddress()));
    ...
}
给我你的怀抱

你的这段代码在哪运行就拿到的是哪的mac地址
如果你是web应用,除非你的客户端和你的应用服务器在同一个局域网,否则你拿不到的
如果你是c/s应用,那就在c端获取,在报文里传给s端
具体原因,可以看下OSI7层网络模型

仅有的幸福

声明本答案转载,如需删除,请告知。http://blog.csdn.net/yfkiss/a...


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;

/**
 * 与系统相关的一些常用工具方法.
 * 
 * @author lvbogun
 * @version 1.0.0
 */
public class SystemTool {

    /**
     * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等.
     */
    public static String getOSName() {
        return System.getProperty("os.name").toLowerCase();
    }

    /**
     * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取.
     * 如果有特殊系统请继续扩充新的取mac地址方法.
     * 
     * @return mac地址
     */
    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;
    }

    /**
     * 获取widnows网卡的mac地址.
     * 
     * @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;
    }

    /**
     * windows 7 专用 获取MAC地址
     * 
     * @return
     * @throws Exception
     */
    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();
    }

    /**
     * 测试用的main方法.
     * 
     * @param argc 运行参数.
     * @throws Exception
     */
    public static void main(String[] argc) throws Exception {
        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);
        }
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板