- 浏览: 118358 次
- 性别:
- 来自: 宁波
文章分类
最新评论
从网上查找资料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=unescape(MACAddr); </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="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=<%=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.getByName(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; } }
发表评论
-
一次Java垃圾收集调优实战
2011-01-04 21:45 1441 资料 JDK5.0垃圾收集优化之--Don't ... -
架构师必读书籍
2011-01-04 21:40 476年又过年,去年在写在译的书又长出了一茬,又是时候订一份今 ... -
工作流相关
2011-01-04 10:09 815微内核工作流引擎体系架构与部分解决方案参考 -
jsp/servlet相关
2010-12-30 20:22 1150Servlet/JSP学习笔记(1)-tomcat和eclip ... -
memcached相关
2010-12-30 20:03 870memcached完全剖析-1.memcached基础: h ... -
Hibernate 和 memcached 的集成问题
2010-12-30 19:53 1058做过的项目中Hibernate都是直接采用ehcache做为缓 ... -
hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
2010-12-30 19:49 1419hibernate-memcached--在Hiberna ... -
数据库推荐
2010-12-30 19:09 737基于mysql的数据库集群系统的实现: http://hi. ... -
hadoop推荐
2010-12-30 15:27 851CSDN hadoop专题 http://subject. ... -
java与内存文章推荐
2010-12-30 10:58 764内存详解:理解jvm如何使用windows和linux上的内存 ... -
lucene相关
2010-12-29 20:12 793深入 Lucene 索引机制 http://www.i ... -
String的理解
2010-12-29 15:49 747本文是对http://www.iteye.com/topic/ ... -
Tomcat虚拟主机及Root Context配置
2010-12-12 21:44 10101.虚拟主机 对一个Tomcat,可以配置多台虚拟主机。 ... -
转载来的过来经典java网站
2010-12-04 22:30 788一个朋友给我的希望大家喜欢,自己留个备份,没事逛逛!!http ... -
继续Open Session In View
2010-12-04 22:26 1013转自:http://www.iteye.com/top ... -
j2ee中的事务浅谈(转)
2010-12-04 21:50 727事务是企业应用开发中的重要概念,对于部分 Web 应用,事务也 ... -
Tomcat6 使用 NIO
2010-12-04 21:49 912首先,何谓nio? ... -
深入探讨 Java 类加载器2
2010-12-04 21:44 589开发自己的类加载器 我的天,爱死这作者了!!(转载 ... -
通过 Tomcat Advanced I/O 获得高性能的 Ajax
2010-12-04 21:19 732转自:http://www.ibm.com/develop ... -
Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序
2010-12-04 21:16 795转自http://www.ibm.com/develo ...
相关推荐
本文将深入解析在Java/JSP环境中获取客户端网卡MAC地址的三种常见方法,旨在为开发者提供全面而深入的理解。 ### 方法一:通过Java NIO(非阻塞I/O)库 Java NIO库提供了访问底层网络接口的能力,从而可以获取包括...
### Java 获取客户端 IP 和 MAC 地址 在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端...
【JAVA/JSP论坛】是一个基于JAVA技术和JSP(JavaServer Pages)开发的在线讨论平台,它为用户提供了丰富的交互功能,让开发人员可以在此基础上进行二次开发或学习。这个论坛系统不仅展示了JAVA和JSP技术在实际应用中...
Java/JSP多功能上传下载模块是Web开发中常见的一种功能组件,尤其在企业级应用和网站中,用于处理用户上传文件(如图片、文档等)和下载资源的需求。本模块提供了完善的解决方案,支持多文件上传和下载,使得用户...
JAVA/JSP 英文参考文献及翻译 JAVA/JSP 方面通用的英文参考文献及翻译是 IT 行业中一个非常重要的知识点。下面我们将从技术发展历史、JSP 技术特点、JSP 和数据库相关知识、JavaBean 相关内容等几个方面来详细介绍 ...
获取客户端IP地址、浏览器版本和操作系统信息在JSP中的实现方法 在JSP中,获取客户端的IP地址、浏览器版本和操作系统信息是非常重要的。通过使用HttpServletRequest对象,我们可以获取到客户端的相关信息。 获取...
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core],解决办法:WEB/INF的lib下,除了导入jstl.jar包,还要导入standard.jar包。另外,解压standard.jar包,把.tld文件...
JSP文件被Web服务器解析成Servlet(Java类),然后由Servlet容器执行。JSP的主要元素包括指令(directives)、脚本元素(scriptlets)、表达式(expressions)和声明(declarations)。通过JSP,开发者可以轻松地...
Java,运用了多线程内部执行,不影响其他登录验证操作。在Controller类获取客户端的IP地址的方法是:request....所以我们这里添加了条件验证,将客户端IP及Mac地址(同网段)与本地本地IP及Mac地址方法分开。
标题中的“Oracle+java+jsp BS/CS 管理系统客户端源代码”指的是一个基于Oracle数据库、Java编程语言和JSP(Java Server Pages)技术开发的管理系统的客户端部分的源代码。这样的系统通常用于构建B/S(Browser/...
本实例将关注在Mac环境下,通过JSP(JavaServer Pages)来获取客户端MAC地址的方法。 首先,了解JSP的基础知识是必要的。JSP是一种动态网页开发技术,由Sun Microsystems(现为Oracle公司)推出,用于构建基于Java...
### JSP 页面获取客户端真实 IP 的方法 在 IT 领域中,了解客户端的真实 IP 地址对于网站统计、安全防护以及个性化推荐等方面都非常重要。由于互联网中的 HTTP 请求经常通过代理服务器转发,因此直接使用 `request....
【jsp 邮件客户端】是一个基于JavaMail和JSP技术构建的应用,它允许用户进行邮件的收发,并且具备富文本显示和搜索功能。在本文中,我们将深入探讨这个客户端实现的核心技术和涉及的关键概念。 首先,让我们了解**...
本文将详细介绍几种在JSP环境中获取客户端IP地址的有效方法,并提供实际的代码示例。 #### 二、获取客户端IP地址的重要性 1. **安全性**:通过识别用户的真实IP地址,可以帮助防止恶意攻击。 2. **统计分析**:收集...
2.JFreeChart:Java 图形解决方案(Application/Applet/Servlet/Jsp) 3.JCommon :JFreeReport和JFreeChart的公共类库 4.JFreeDesigner :JFreeReport的报表设计工具 我们可以从jfree官方网站上获取最新版本和...
【标题】:“图书馆管理系统Java/CS架构”是一个项目,它采用了经典的客户端-服务器(Client-Server,简称CS)架构,利用Java编程语言进行开发,并且与SQL Server 2000数据库系统相结合,实现了图书馆管理的基本功能...
- DWR (Direct Web Remoting) 是一种简化Ajax应用开发的技术,它允许在客户端JavaScript中直接调用服务器端的Java方法。 - 结合`commons-fileupload`和DWR可以实现在文件上传过程中显示进度条的功能,提高用户体验...
在Java Web环境中,客户端编程通常与Servlets、JSP(JavaServer Pages)、AJAX(异步JavaScript和XML)等技术相结合,以实现数据的实时更新和页面的无刷新加载。 本资料集包含了关于Java Web应用客户端编程的一些...
本项目"java,jsp,ajax进度条(jsp)"结合了这三种技术,旨在实现一个功能强大的进度条,用于监控大文件的上传或下载过程,提升用户体验。 首先,让我们深入理解这三个技术的基础概念: 1. **Java**:Java是一种跨...