第三种方法是用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 = 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);
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;
}
}
分享到:
相关推荐
.net内置方法 获得MAC地址 .Net提供获得MAC地址的方法。 首先添加引用 : 在.net组件中找到 System.Management 添加引用。 在类中引用:using System.Management 然后方法中调用: ................ 参考页面:...
标题中的“在pb获得mac”可能是指在PowerBuilder(PB)环境中获取MAC(Media Access Control)地址的过程。PowerBuilder是一款强大的、基于事件驱动的可视化编程工具,主要用于开发企业级的应用程序,尤其在数据库...
### ASP.NET 获取用户IP与MAC地址的技术解析 #### 背景介绍 在网络应用开发过程中,经常需要收集访问者的相关信息来实现特定的功能需求,比如防止重复注册或恶意投票等行为。其中,获取客户端的IP地址和MAC地址是两...
在C#编程语言中,可以通过多种方法来获取系统的MAC地址,其中一种常用的方法是利用WMI(Windows Management Instrumentation)。 ### C#中通过WMI获取MAC地址 在上述提供的代码片段中,展示了一个名为`...
本文将深入解析在Java/JSP环境中获取客户端网卡MAC地址的三种常见方法,旨在为开发者提供全面而深入的理解。 ### 方法一:通过Java NIO(非阻塞I/O)库 Java NIO库提供了访问底层网络接口的能力,从而可以获取包括...
有些软件还要根据Mac地址来判定当前用户以前是否登录过。下面将一一介绍获取这些手机状态信息的方法。 1 通过build获取手机硬件信息 运用反射获取Build信息,然后从build中得到对应字段的值。这种情况适用于获取...
接着,它调用`SendARP`函数,这是一个通过动态链接库(DLL)调用Windows API来发送ARP(Address Resolution Protocol)请求的方法,从而获取目标IP地址对应的MAC地址。最后,将获取到的MAC地址格式化为标准形式,并...
因此,只要解析出Answer包中的“UnitID”字段,即可获得远程主机的MAC地址。 #### 程序实现:Delphi 6下的TNMUDP组件应用 在程序设计层面,实现这一机制的关键在于构造正确的UDP数据包并解析应答包。这里以Borland...
本文将详细解析“获取客户端MAC地址Demo”的工作原理、使用方法及其在实际应用中的重要性。 首先,MAC地址是网络设备(如网卡)在物理层上的唯一标识,由12个16进制数字组成,用于在网络中区分不同的设备。在Web...
C语言获取Linux系统的IP地址和MAC地址的方法 在Linux系统中,获取IP地址和MAC地址是一件棘手的事情,特别是在特殊场合下,我们可能需要更多的信息,如系统中有几块网卡,他们的MAC地址是多少,每块网卡分配了几个IP...
在描述中提到的"获得本机MAC地址"的Delphi代码,很可能是通过调用系统API或者使用第三方库来实现的。下面将详细介绍这个过程中的关键知识点: 1. **系统API调用**: - `WinAPI`:Windows API(应用程序接口)是...
标题中的"pb获取ip地址/mac地址"指的是在PowerBuilder(简称pb)环境下获取计算机的IP地址和MAC地址。PowerBuilder是一种流行的.NET和Java应用程序开发工具,尤其适合于创建数据库驱动的应用程序。在这个场景中,...
注意,这个方法可能会返回多个MAC地址,特别是当系统有多个网络接口时。 总结来说,获取MAC地址涉及对不同操作系统的理解以及利用适当的语言特性或系统调用。PHP主要依赖于shell命令,而Java则通过直接访问网络接口...
以上就是使用C#获取本机MAC地址的基本知识,包括相关的类和方法、如何遍历和筛选网络接口,以及如何处理可能的异常情况。这个小程序对于初学者理解C#的网络编程和.NET Framework的API使用非常有帮助。通过学习和实践...
通过程序化的方法,用户可以批量获取和记录网络设备的MAC地址和硬盘的序列号,这对于网络管理、设备追踪以及系统安全等方面都具有实际的应用价值。了解和掌握这类工具的原理和实现方法,对于提升IT专业人士的工作...
### VB获取本机IP与MAC地址详解 在计算机网络中,IP地址和MAC地址是两个非常重要的标识符,它们分别用于在网络层和数据链路层唯一地标识每一台设备。对于开发人员而言,在某些场景下可能需要通过编程手段来获取这些...
此外,`PhysicalAddress`类代表一个硬件地址,如MAC地址,它提供了多种方法来操作这些地址,如与字符串之间的转换。`OperationalStatus`枚举值表示网络接口的状态,`Up`表示接口已启用并可以进行数据传输。 通过这...
首先,我们讨论获取本机MAC地址的方法。在C#中,我们可以利用Windows Management Instrumentation (WMI)规范,这是一个在.NET框架中通过`System.Management`命名空间提供的功能。WMI允许程序访问和操作系统的各种...
C# 获取本地IP地址以及MAC地址 C# 获取本地IP地址以及MAC地址是计算机网络编程中的一项重要任务。本文将详细介绍如何使用C#语言获取本地IP地址和MAC地址。 一、获取本地IP地址 获取本地IP地址可以通过多种方式...
`getHardwareAddress`方法用于从`NetworkInterface`对象中获取Mac地址并格式化为标准的十六进制表示。 然而,题目中提到了"regular expression"(正则表达式),在获取Mac地址的过程中,正则表达式可能不直接参与,...