1. 目的:获得当前网卡的MAC地址
2.方法:使用OID: OID_DOT11_CURRENT_ADDRESS
3.信息准备:
DOT11_MAC_ADDRESS MacAddress;
pFilter = CONTAINING_RECORD(Link, MS_FILTER, FilterModuleLink);
Status = filterDoInternalRequest(pFilter,
NdisRequestQueryInformation,
Oid,
&MacAddress,
sizeof(DOT11_MAC_ADDRESS),
sizeof(DOT11_MAC_ADDRESS),
MethodId,
&BytesProcessed);
if(Status == NDIS_STATUS_SUCCESS)
{
DEBUGP(DL_TEST,("Get Curremt address Successfully!\n"));
DEBUGP(DL_TEST,("Mac Address is %x-%x-%x-%x-%x-%x\n",MacAddress[0],MacAddress[1],MacAddress[2],MacAddress[3],MacAddress[4],MacAddress[5]));
filterSendOriginatedBufferList(pFilter,NDIS_DEFAULT_PORT_NUMBER,&MacAddress);//You can modify this method to do what you want!
}else{
DEBUGP(DL_TEST,("Delete a mac fail\n"));
break;
}
4.是执行filterDoInterNalRequest函数(来自LWF驱动源码)
NDIS_STATUS
filterDoInternalRequest(
IN PMS_FILTER FilterModuleContext,
IN NDIS_REQUEST_TYPE RequestType,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
IN ULONG OutputBufferLength, OPTIONAL
IN ULONG MethodId, OPTIONAL
OUT PULONG pBytesProcessed
)
/*++
Routine Description:
Utility routine that forms and sends an NDIS_OID_REQUEST to the
miniport, waits for it to complete, and returns status
to the caller.
NOTE: this assumes that the calling routine ensures validity
of the filter handle until this returns.
Arguments:
FilterModuleContext - pointer to our filter module context
RequestType - NdisRequest[Set|Query|method]Information
Oid - the object being set/queried
InformationBuffer - data for the request
InformationBufferLength - length of the above
OutputBufferLength - valid only for method request
MethodId - valid only for method request
pBytesProcessed - place to return bytes read/written
Return Value:
Status of the set/query request
--*/
{
FILTER_REQUEST FilterRequest;
PNDIS_OID_REQUEST NdisRequest = &FilterRequest.Request;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
DEBUGP(DL_TEST,("==>filterDoInternalRequest\n"));
NdisZeroMemory(NdisRequest, sizeof(NDIS_OID_REQUEST));
NdisInitializeEvent(&FilterRequest.ReqEvent);
NdisRequest->Header.Type = NDIS_OBJECT_TYPE_OID_REQUEST;
NdisRequest->Header.Revision = NDIS_OID_REQUEST_REVISION_1;
NdisRequest->Header.Size = sizeof(NDIS_OID_REQUEST);
NdisRequest->RequestType = RequestType;
switch (RequestType)
{
case NdisRequestQueryInformation:
NdisRequest->DATA.QUERY_INFORMATION.Oid = Oid;
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer =
InformationBuffer;
NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength =
InformationBufferLength;
break;
case NdisRequestSetInformation:
NdisRequest->DATA.SET_INFORMATION.Oid = Oid;
NdisRequest->DATA.SET_INFORMATION.InformationBuffer =
InformationBuffer;
NdisRequest->DATA.SET_INFORMATION.InformationBufferLength =
InformationBufferLength;
break;
case NdisRequestMethod:
NdisRequest->DATA.METHOD_INFORMATION.Oid = Oid;
NdisRequest->DATA.METHOD_INFORMATION.MethodId = MethodId;
NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer =
InformationBuffer;
NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength =
InformationBufferLength;
NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength = OutputBufferLength;
break;
default:
FILTER_ASSERT(FALSE);
break;
}
NdisRequest->RequestId = (PVOID)FILTER_REQUEST_ID;
Status = NdisFOidRequest(FilterModuleContext->FilterHandle,
NdisRequest);
if (Status == NDIS_STATUS_PENDING)
{
NdisWaitEvent(&FilterRequest.ReqEvent, 0);
Status = FilterRequest.Status;
}
if (Status == NDIS_STATUS_SUCCESS)
{
if (RequestType == NdisRequestSetInformation)
{
*pBytesProcessed = NdisRequest->DATA.SET_INFORMATION.BytesRead;
}
if (RequestType == NdisRequestQueryInformation)
{
*pBytesProcessed = NdisRequest->DATA.QUERY_INFORMATION.BytesWritten;
InformationBuffer = NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer;
}
if (RequestType == NdisRequestMethod)
{
*pBytesProcessed = NdisRequest->DATA.METHOD_INFORMATION.BytesWritten;
InformationBuffer = NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer;
}
// The driver below should set the correct value to BytesWritten
// or BytesRead. But now, we just truncate the value to InformationBufferLength
if (RequestType == NdisRequestMethod)
{
if (*pBytesProcessed > OutputBufferLength)
{
*pBytesProcessed = OutputBufferLength;
}
}
else
{
if (*pBytesProcessed > InformationBufferLength)
{
*pBytesProcessed = InformationBufferLength;
}
}
}
//add by leyond
if(Status == NDIS_STATUS_INVALID_LENGTH || Status == NDIS_STATUS_BUFFER_TOO_SHORT)
{
DEBUGP(DL_TEST,("Still need more bytes = %u",NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded));
}
if(Status == NDIS_STATUS_INVALID_OID)
{
DEBUGP(DL_TEST,(" NDIS_STATUS_INVALID_OID--||--"));
}
return (Status);
}
这样就完成了~
Mac Address is 0-14-78-7a-88-b6
分享到:
相关推荐
在VC++编程环境中,获取计算机网卡的MAC(Media Access Control)地址是一项常见的任务,特别是在网络通信和设备识别中。MAC地址是网络接口控制器(NIC)的唯一标识,由6个字节(48位)组成,通常表示为12位的十六...
《Sonix二代OID驱动原码解析与应用》 在嵌入式系统开发中,驱动程序是连接硬件设备和操作系统的关键部分,它使得操作系统能够有效地控制和管理硬件资源。本篇文章将详细探讨“Sonix二代OID驱动原码”,这是针对松翰...
2. **构建PDU(Protocol Data Unit)**:创建一个GetRequest PDU,指定要查询的OID(Object Identifier),在本场景下,通常是与MAC地址相关的MIB(Management Information Base)对象。 3. **发送请求并接收响应**...
- **获取方法**:通过查询NDIS对象或者使用特定的OID请求可以获得IP地址。 - **应用场景**:网络监控、日志记录等。 #### 49. Ndis过滤驱动:拷贝NetBufferList数据 - **拷贝方法**:使用NdisMCopyFromBusMemory等...
### Java实现SNMP获取OID值:深入解析与代码示例 #### SNMP协议简介与OID概念 简单网络管理协议(SNMP)是一种应用层协议,用于收集和组织有关网络设备的信息,如路由器、交换机和服务器等,并对其进行管理。SNMP...
操作系统: win 10 x64 ...1. 发送OID请求; 2. 发送自定义数据包,以ICMP数据包为例; 3. 接收数据包; 可以从代码中学习: 1. 内核OID的请求发送和接收; 2. 内核资源的分配和回收; 3. 数据包的发送和接受;
以上代码片段展示了如何使用C#和SnmpSharpNet库发送一个GET请求并获取OID对应的值。在实际大型项目中,可能需要处理更复杂的场景,如错误处理、定时轮询、批量查询等。SnmpSharpNet库提供了丰富的功能,能够满足这些...
【标题】"基于Java的Oid获取软件"指的是一个利用Java编程语言开发的工具,它主要用于SNMP(简单网络管理协议)环境下获取OID(Object Identifier,对象标识符)信息。OID是SNMP中的一个重要概念,它唯一地标识网络...
内存利用率和CPU使用率是常见的监控指标,它们可以通过特定的OID获取。例如,内存利用率可能对应于`HOST-RESOURCES-MIB::hrMemorySize`或`UCD-SNMP-MIB::memAvailReal`等OID,而CPU使用率可能对应于`HOST-RESOURCES-...
在构建网管系统时,获取设备的OID(Object Identifier,对象标识符)是至关重要的一步,因为OID就像是网络设备上的唯一地址,它能标识出特定的管理信息,如CPU利用率和内存使用情况。 OID是一个树状结构,由多个...
然后,通过发送一个GETBULK请求来获取所有OID,以提高性能。收到响应后,遍历并打印每个OID及其对应的值。 除了直接获取所有OID,还可以使用Snmp4j提供的`SnmpUtilites`类,这个类包含了各种实用工具方法,如解析...
- **1.3.6.1.2.1.2.2.1.6**: 接口的物理地址,通常是MAC地址,通过`WALK`请求可获取。 - **1.3.6.1.2.1.2.2.1.8**: 接口的当前操作状态(如up或down),通过`WALK`请求可获取。 - **1.3.6.1.2.1.2.2.1.10**: 接口...
"SNMP_WALK"是利用SNMP协议进行数据查询的一个功能,它能够遍历设备的MIB(Management Information Base)树,获取指定OID(Object Identifier,对象标识符)的所有子节点信息。 SNMP_WALK工具通常是一个命令行实用...
Zabbix通过查询特定的OID(Object Identifier,对象标识符)来获取交换机的运行数据,如接口状态、带宽利用率、错误统计等。OID是一个唯一的数字序列,用于在SNMP管理的信息结构中定位特定的管理对象。例如,`.1.3....
4. **执行查询**:使用SNMP工具,指定目标主机的IP地址、社区字符串以及要查询的OID,发送SNMP GET请求。对于Java环境,可以使用如`snmp4j`这样的库来编写SNMP查询代码。 5. **解析响应**:收到SNMP响应后,解析...
3. NdisM OID Request:微型端口驱动处理OID请求,根据请求类型执行相应的操作。 4. NdisCompleteRequest:完成OID请求,告知发起者请求的状态。 四、中断处理 1. MiniportInterrupt:微型端口驱动处理硬件中断的回...
对于获取交换机下的PC信息,我们需要知道特定OID,例如,"1.3.6.1.2.1.4.22.1.2" 可以用于获取接口的物理地址(即MAC地址)。 以下是一个基本的Java代码示例,展示了如何使用Snmp4j来获取交换机的MAC地址: ```...
F5 SNMP OID 说明 本资源摘要信息涵盖了 F5 BIG-IP LTM V9.2.x SNMP 的详细信息,包括 SNMP 基础、F5 BIG-IP SNMP 系统概述、在 BIG-IP LTM 上配置 SNMP、BIG-IP LTM 的 SNMP MIB 库文件、通过 SNMP 采集 BIG-IP 的...
OID,全称Object Identifier,是网络协议中用于唯一标识对象的一种编码方式。它在各种网络标准、证书、协议中广泛使用,比如SNMP(简单网络管理协议)和X.509数字证书。OID编解码工具是针对这种编码方式进行操作的...
5. **协议驱动获取 Filter Module 列表**:当 NDIS 重启驱动程序栈时,协议驱动程序可以获得栈上所有 Filter Module 的列表。这有助于协议驱动程序了解网络数据流所经过的所有过滤层。 6. **通信过滤**:Filter ...