欢迎使用CSDN-markdown编辑器

     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);   
     }

经测试,上面这种方法极慢,获取127.0.0.1 Mac地址时要9秒,
建议采用下面第三种办法,速度很快,但是获取不了127.0.0.1地址,建议对于127.0.0.1地址直接过滤,
如果不是127.0.0.1是差不多,但是UDP方式还是快一点

Java/JSP获得客户端网卡MAC地址的三种方法解析
从网上查找资料java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种。
1、通过命令方式,在客户端执行Ipconfig 等等。(java/jsp)
2、通过ActiveX的方法。(jsp)
3、通过向137的端口发送查询指令的方法。(java/jsp)

简介:
第一种方法,在真正用到时候不知道为什么获得mac地址的指令阻塞了,不往下继续执行。而且速度是这三种方法中最慢的一种。
代码如下:
String sip=”“;
String smac=”“;
sip = request.getHeader(“x-forwarded-for”);
if(sip == null ||sip.length() == 0 || “unknown”.equalsIgnoreCase(sip))
{
sip = request.getHeader(“proxy-Client-IP”);
}
if (sip == null || sip.length() == 0 || “unknown”.equalsIgnoreCase(sip))
{
sip = request.getHeader(“WL-Proxy-Client-IP”);
}
if (sip == null ||sip.length() == 0 || “unknown”.equalsIgnoreCase(sip))
{
sip = request.getRemoteAddr();
}

if(!"127.0.0.1".equals(sip)) //本机过滤掉

{
Process process = Runtime.getRuntime().exec(“nbtstat -a ” + sip);
InputStreamReader ir = new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null)
if (line.indexOf(“MAC Address”) > 0)
{
smac = line.substring(line.indexOf(“-“) - 2);
}

第二种方法是用ActiveX来获得,速度比第一种方法快但是必须降低安全设置否则脚本不被执行
IE设置如下
1.打开IE浏览器
2.工具->Internet选项->安全
3.自定义级别(C)…
4.设置中对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本
选中启动(不安全)->每次不用点击”是”按钮,推荐,当然你的机器不能上互联网否则会有安全问题。
选中提示->每次都得点击”是”按钮。
5.点击”确定”->”确定”按钮
6.重新启动IE浏览器设置生效

代码

document.forms[0].userMacAddr.value=unescape(MACAddr);


if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
MACAddr = objObject.MACAddress;
}







var service = locator.ConnectServer();
var MACAddr ;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');

… 标 识:

第三种方法是用UDP协议来发送查询mac指令然后返回值中解析mac。个人认为这是最好的方法(暂时)速度最快

<%
String smac = “”;
String sip = request.getHeader(“x-forwarded-for”);
if(sip == null || sip.length() == 0 || “unknown”.equalsIgnoreCase(sip)) {
sip = request.getHeader(“Proxy-Client-IP”);
}
if(sip == null || sip.length() == 0 || “unknown”.equalsIgnoreCase(sip)) {
sip = request.getHeader(“WL-Proxy-Client-IP”);
}
if(sip == null || sip.length() == 0 || “unknown”.equalsIgnoreCase(sip)) {
sip = request.getRemoteAddr();
}
UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);
smac = umac.GetRemoteMacAddr();
%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值