通过netbios来获取mac值
来源:互联网 发布:js怎么判断分页 编辑:程序博客网 时间:2024/06/01 11:14
memset大多用来初始化
sprintf字符串格式化命令
#include <windows.h>
#include <stdlib.h>#include <stdio.h>
#include <time.h>
#pragma comment(lib,"netapi32.lib")
/*
Dev C++ -> include libnetapi32.a
BCC 5.5 or VC++ ->
*/
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
} ASTAT, *PASTAT; //定义一个网卡的结构体
void getMac(char * mac)
{
ASTAT Adapter;
NCB Ncb;//NCB结构代表了网络控制块。它包含有关该命令来执行,可选的后置程序中,一个可选的事件句柄,和一个指针,用于消息或其他数据的缓冲器信息。一个指向这个结构被传递到NetBIOS功能。
UCHAR uRetCode;
LANA_ENUM lenum;//结构包含当前LAN适配器的数量。
int i = 0;
memset(&Ncb, 0, sizeof(Ncb));//使用之前要使ncb结构清0, memset大多用来初始化
Ncb.ncb_command = NCBENUM;//统计系统中网卡的数量 指定指令为NCBENUM,用于获取网卡的数量及编号 向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡,每个网卡的编号(MAC地址)
Ncb.ncb_buffer = (UCHAR *)&lenum; //ncb_buffer成员指向由 LANA_ENUM结构填充的缓冲区 指定返回的信息存贮内存;指向消息缓冲区。该缓冲区必须具有写入权限
Ncb.ncb_length = sizeof(lenum);// 指定消息缓冲区的大小,以字节为单位。用于接收命令,该构件是由NetBIOS的功能,指示接收到的字节数。 如果缓冲区长度不正确时,NetBIOS函数返回NRC_BUFLEN错误代码。
uRetCode = Netbios( &Ncb );//向网卡查询来获取网卡的信息
printf( "The NCBENUM return adapter number is: %d \n ", lenum.length);//leum.length指定有效条目的LAN适配器编号的数组中的号码
for(i=0; i < lenum.length ; i++)
{
memset(&Ncb, 0, sizeof(Ncb));//使用之前要使ncb结构清0
Ncb.ncb_command = NCBRESET;//对选定的网卡发送命令,以便进行初始化
Ncb.ncb_lana_num = lenum.lana[i];//指定网卡号 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
uRetCode = Netbios( &Ncb );//向网卡查询来获取网卡的信息
memset(&Ncb, 0, sizeof(Ncb));//使用之前要使ncb结构清0
Ncb.ncb_command = NCBASTAT; //设定查询指定网卡,用NCBASTAT获取网卡的信息
Ncb.ncb_lana_num = lenum.lana[i];//指定网卡号
strcpy((char *)Ncb.ncb_callname, "* ");//很重要 指定返回信息的存储内存,strcpy(char* dest, const char *src):把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
//ncb_callname指定了远程应用程序的名称
Ncb.ncb_buffer = (unsigned char *) &Adapter;//指定消息缓冲区的大小,以字节为单位。用于接收命令,该构件是由NetBIOS的功能,指示接收到的字节数。 如果缓冲区长度不正确时,NetBIOS函数返回NRC_BUFLEN错误代码。
Ncb.ncb_length = sizeof(Adapter);//指定消息缓冲区的大小
uRetCode = Netbios( &Ncb );//向网卡查询来获取网卡的信息
if (uRetCode == 0)//调用成功
{
//sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x ",
sprintf(mac, "%02X%02X%02X%02X%02X%02X ",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);//字符串格式化命令,把数据按常用十六进制格式输出,X 表示以十六进制形式输出;02 表示不足两位,前面补0输出;
//printf( "The Ethernet Number on LANA %d is: %s\n ", lenum.lana[i], mac);
}
}
}
int main(int argc, char *argv[])
{
char *mac=new char[32];
getMac(mac);
printf( "%s\n ", mac);
delete[]mac;
system( "PAUSE> NUL ");
return 0;
}
0 0
- 通过netbios来获取mac值
- 用Netbios()获取本机的MAC地址
- NETBIOS()获得网卡MAC
- 再议NETBIOS()获得网卡MAC
- 两台Mac之间通过远程登录来获取操作权限
- 通过GetAdaptersInfo获取网卡MAC
- 通过IP获取MAC地址
- 通过IP地址获取MAC
- 通过ip获取mac地址
- 通过UIView 来获取 Controller
- 通过UIView 来获取 Controller
- NETBIOS
- NETBIOS
- netbios
- NETBIOS
- NETBIOS
- netbios
- 通过jQuery来获取DropDownList的Text/Value属性值
- 多线程用同一个dao对象就会存在多个线程执行同一方法,为什么不用考虑线程安全问题
- 第五章 Backbonejs中的View实践
- [笔记] 概率DP ZOJ-3822
- 解决无法安装SQL Server 2008 Management Studio Express的问题
- 黑马程序员-day05面向对象一
- 通过netbios来获取mac值
- HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- 遥感影像显示相关的技术总结
- 鼠标滚轮及左右键切换图片
- 时序图的介绍
- java反射和内省
- 阿语和波斯语下Actionbar不从右往左设计
- hdu1496(hash)
- Javascript对象---对象名只是某个对象的引用,并不是副本