Java web 怎么得到客户端的Mac地址

 我来答
易建议
2016-07-01 · 喜欢分享的人都容易获得幸福感~
易建议
采纳数:344 获赞数:1342

向TA提问 私信TA
展开全部
import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.SocketException;

import java.net.UnknownHostException;


/*

 * 物理地址是48位,别和ipv6搞错了

 */

public class LOCALMAC {


/**

 * @param args

 * @throws UnknownHostException 

 * @throws SocketException 

 */

public static void main(String[] args) throws UnknownHostException, SocketException {

// TODO Auto-generated method stub



//得到IP,输出PC-201309011313/122.206.73.83

InetAddress ia = InetAddress.getLocalHost();

System.out.println(ia);

getLocalMac(ia);

}


private static void getLocalMac(InetAddress ia) throws SocketException {

// TODO Auto-generated method stub

//获取网卡,获取地址

byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

System.out.println("mac数组长度:"+mac.length);

StringBuffer sb = new StringBuffer("");

for(int i=0; i<mac.length; i++) {

if(i!=0) {

sb.append("-");

}

//字节转换为整数

int temp = mac[i]&0xff;

String str = Integer.toHexString(temp);

System.out.println("每8位:"+str);

if(str.length()==1) {

sb.append("0"+str);

}else {

sb.append(str);

}

}

System.out.println("本机MAC地址:"+sb.toString().toUpperCase());

}

}
ljcfeixiang
2017-06-26 · 超过20用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:18.8万
展开全部
仅限于同一网段(内网中)你才有可能得到Mac地址,而且基本都要通过request header获取到的ip 后通过arp命令做一下二次查询。
仅仅依靠servlet是不可能的,如果在internet上,request客户端经过了任何路由也是不可能获得的。
arp命令通过ip 获取mac的方法示例如下,
private String getMac(String ip) {

// Find OS and set command according to OS
String OS = System.getProperty("os.name").toLowerCase();

String[] cmd;
if (OS.contains("win")) {
// Windows
macpt = Pattern
.compile("[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+");
String[] a = { "arp", "-a", ip };
cmd = a;
} else {
// Mac OS X, Linux
macpt = Pattern
.compile("[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+");
String[] a = { "arp", ip };
cmd = a;
}

try {
// Run command
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
// read output with BufferedReader
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line = reader.readLine();

// Loop trough lines
while (line != null) {
Matcher m = macpt.matcher(line);

// when Matcher finds a Line then return it as result
if (m.find()) {
System.out.println("Found");
System.out.println("MAC: " + m.group(0));
return m.group(0);
}

line = reader.readLine();
}

} catch (IOException e1) {
e1.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

// Return empty string if no MAC is found
return "";
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
li668xiao
2017-06-23 · TA获得超过611个赞
知道小有建树答主
回答量:412
采纳率:61%
帮助的人:249万
展开全部
单纯依靠前端js或者后台代码是做不到的。
js没有权限也没有提供接口供获取客户机的mac地址,后台就更不用说了,能看到的最多是客户机的ip地址(还未必是客户机真的ip地址,因为客户机可能在内网里面),是看不到mac地址的。
依靠前端插件能够实现,但是客户得设置浏览器,允许运行这个插件才行。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
samismiling
2017-06-23 · 知道合伙人软件行家
samismiling
知道合伙人软件行家
采纳数:1340 获赞数:5603

向TA提问 私信TA
展开全部
纯web环境是不能的(所谓纯web就是指没有让客户装任何插件),因为web沙箱不允许访问客户机系统信息(包括但不限于mac地址、文件夹)
要想获得mac,必须有一个有权限的程序运行在客户端,比如一个plugin
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式