从网上查找资料java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种。
1、通过命令方式,在客户端执行Ipconfig 等等
2、通过ActiveX的方法
3、通过向137的端口发送查询指令的方法
简介:
第一种方法,在真正用到时候不知道为什么获得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浏览器设置生效
代码
<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
document.forms[0].userMacAddr.value=http://blog.soso.com/qz.q/unescape(MACAd dr);
</SCRIPT>
<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
MACAddr = objObject.MACAddress;
}
</SCRIPT>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
...
<body>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223>< /OBJECT>
<SCRIPT language=JScript>
var service = locator.ConnectServer();
var MACAddr ;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</SCRIPT>
... <td height="20" align="center">标识:</td>
<td><input value="http://blog.soso.com/qz.q/no" name="userMacAddr" size="20" style="width:150px" readonly="yes"></td>
第三种方法是用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();
%>
...
<input value=http://blog.soso.com/qz.q/<%=smac %> name="userMacAddr" size="20" style="width:150px" readonly="yes">
UdpGetClientMacAddr.java
package cch;
import java.io.*;
import java.net.*;
public class UdpGetClientMacAddr {
private String sRemoteAddr;
private int iRemotePort=137;
private byte[] buffer = new byte[1024];
private DatagramSocket ds=null;
public UdpGetClientMacAddr(String strAddr) throws Exception{
sRemoteAddr = strAddr;
ds = new DatagramSocket();
}
protected final DatagramPacket send(final byte[] bytes) throws IOException {
DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getB yName(sRemoteAddr),iRemotePort);
ds.send(dp);
return dp;
}
protected final DatagramPacket receive() throws Exception {
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
ds.receive(dp);
return dp;
}
protected byte[] GetQueryCmd() throws Exception {
byte[] t_ns = new byte[50];
t_ns[0] = 0x00;
t_ns[1] = 0x00;
t_ns[2] = 0x00;
t_ns[3] = 0x10;
t_ns[4] = 0x00;
t_ns[5] = 0x01;
t_ns[6] = 0x00;
t_ns[7] = 0x00;
t_ns[8] = 0x00;
t_ns[9] = 0x00;
t_ns[10] = 0x00;
t_ns[11] = 0x00;
t_ns[12] = 0x20;
t_ns[13] = 0x43;
t_ns[14] = 0x4B;
for(int i = 15; i < 45; i++)
{
t_ns[i] = 0x41;
}
t_ns[45] = 0x00;
t_ns[46] = 0x00;
t_ns[47] = 0x21;
t_ns[48] = 0x00;
t_ns[49] = 0x01;
return t_ns;
}
protected final String GetMacAddr(byte[] brevdata) throws Exception {
int i = brevdata[56] * 18 + 56;
String sAddr="";
StringBuffer sb = new StringBuffer(17);
for(int j = 1; j < 7;j++)
{
sAddr = Integer.toHexString(0xFF & brevdata[i+j]);
if(sAddr.length() < 2)
{
sb.append(0);
}
sb.append(sAddr.toUpperCase());
if(j < 6) sb.append(':');
}
return sb.toString();
}
public final void close() {
try
{
ds.close();
}
catch (Exception ex){
ex.printStackTrace();
}
}
public final String GetRemoteMacAddr() throws Exception {
byte[] bqcmd = GetQueryCmd();
send(bqcmd);
DatagramPacket dp = receive();
String smac = GetMacAddr(dp.getData());
close();
return smac;
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Pipi0714/archive/2008/11/19/3 333399.aspx

java 获取客户端MAC地址相关推荐

  1. Java获取客户端mac地址

    问题: 项目中需要实现一个功能,在用户登录的时候,要求系统账号和计算机绑定,只有绑定的账号才可以登录,并且每个账号只能绑定一台计算机. 解决方案: 通过请求IP获取mac地址,然后将账号与mac地址进 ...

  2. java 根据ip获取mac地址,java服务器端根据ip获取客户端mac地址

    java服务器端根据ip获取客户端mac地址 2014/8/20 22:01:29  475900947  程序员俱乐部  我要评论(1) 摘要://判断系统publicStringcheckSys( ...

  3. java客户端mac地址_Java 获取客户端mac地址

    package com.alpha.test; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...

  4. 获取客户端mac地址 php,js获取客户端mac地址的方法

    首先声明,此篇文章纯属标题党.今日QQ群里探讨用JS获取客户端mac地址的方法,众说纷纭,有说行有说不行的,闲着没事儿研究了一下,js确实可以获取到客户端当前电脑的mac地址,代码如下,但这段代码放到 ...

  5. java获取本地mac地址

    如何用java代码获取本地mac地址呢? 我们可以通过cmd命令:ipconfig -all  来查看我们电脑上的mac地址是多少. 目录 一.自定义方法获取本地mac地址 二.利用第三方工具类获取本 ...

  6. java获取客户端IP地址工具类

    代码如下自取: import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletRequest; import java.n ...

  7. java如何获得wlan mac_如何获取客户端MAC地址(三个方法)

    方法一: 调用Windows的DOS命令,从输出结果中读取MAC地址: public static String getMACAddress() { String address = "&q ...

  8. 如何获取客户端MAC地址(三个方法)

    方法一: 调用Windows的DOS命令,从输出结果中读取MAC地址: public static String getMACAddress() { String address = "&q ...

  9. java获取操作系统的MAC地址和硬盘序列号

    1.判断操作系统是Windows还是Linux private static Boolean isLinux() {String os = System.getProperty("os.na ...

最新文章

  1. python新手之一环境安装
  2. a Line Segment Detector
  3. opencv使用问题总结
  4. 【已作废】基于Freeswitch的ASTPP计费系统的安装 (CentOS 7)
  5. 精通Spring Boot——第三篇:详解WebMvcConfigurer接口
  6. 武汉大学计算机学院易碧波,王峰(武汉大学计算机学院副教授)_百度百科
  7. 每日单词20110502
  8. 李清照《声声慢》欣赏(转载)
  9. 听某个老师的ElasticSearch记的笔记了
  10. css预编译的优缺点
  11. java怎么画竖线_画竖线的4种方法
  12. c++、7-5 估算数学常数e的值
  13. java上课听不懂怎么办_上课听不懂怎么办?我们告诉你解决办法!
  14. ORACLE数据库23道练习题
  15. 面试题 10.11. 峰与谷-快速排序
  16. EAS的WEB开发入门
  17. 阿里、腾讯御用PPT设计师:让你在年终汇报中做最靓的仔!
  18. 年薪50万的人如何工作
  19. 【狮子数学】chapter2-07-凹凸性与拐点
  20. http://www.coobai.com/ 代理 ssn

热门文章

  1. 淘宝客教程:如何利用JS调用淘宝商品javascript教程
  2. 人工智能和显扬科技机器视觉如何影响视觉机器人
  3. 2023-2028年中国高纯度糖精市场运营模式分析及发展趋势研究报告
  4. 一个上海程序员的一天工作日志
  5. MySql......
  6. 我的第一篇html代码
  7. 计算机产品设计需要学什么,产品设计需要学什么课程 就业前景怎么样
  8. Navicat整理导出Word文档
  9. 艾永亮:企业未来的创新方向,跳出思维惯性是打造超级产品的基础
  10. 6款非常好用的设计软件盘点