您的位置:首页技术文章
文章详情页

java怎么获取用户客户端mac地址

【字号: 日期:2023-11-17 15:38:13浏览:43作者:猪猪

问题描述

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

问题解答

回答1:

用java.net.NetworkInterface

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();for (NetworkInterface netint : Collections.list(nets)) { System.out.printf('Name: %sn', netint.getName()); for (InetAddress inetAddress : Collections.list(inetAddresses)) {System.out.printf('InetAddress: %sn', inetAddress); } System.out.printf('Hardware address: %sn', Arrays.toString(netint.getHardwareAddress())); ...}回答2:

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

回答3:

声明本答案转载,如需删除,请告知。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);// 寻找标示字符串[physicalindex = 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地址拼装成StringStringBuffer 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);} }}

标签: java
相关文章: