`
isiqi
  • 浏览: 16482830 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

如何用VC++开发读取网卡MAC地址的程序

阅读更多
如何用VC++开发读取网卡MAC地址的程序实际的应用系统中,我们往往会需要在程序运行时获取当前机器的网卡的MAC地址,以便作为某种标识之用,如控制程序的合法性等。下文就如何用Microsoft Visual C++ 6.0开发这样的程序演示如何实现其要点。

<!-- frame contents -->
<!-- /frame contents -->
---- 这里采用的方法是通过Windows 9x/NT/Win2000中内置的NetApi32.DLL的功能来实现的,首先通过发送NCBENUM命令获取网卡的数目和每个网卡的内部编号,然后对每个网卡标号发送NCBASTAT命令获取其MAC地址。注意:这里的网卡是指捆绑了NetBeui协议的通信协议栈,可以在网卡的属性处查看到。

---- 请运行VC++,打开一个新的工程,选择创建一个Win32 Console程序,然后按下文输入代码,并请参见其中的注释:

#include "stdafx.h"

#include < windows.h >
#include < wincon.h >
#include < stdlib.h >
#include < stdio.h >
#include < time.h >

---- // 因为是通过NetAPI来获取网卡信息,所以需要包含其题头文件nb30.h #include < nb30.h >
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;

ASTAT Adapter;

---- // 定义一个存放返回网卡信息的变量
---- // 输入参数:lana_num为网卡编号,一般地,从0开始,但在Windows 2000中并不一定是连续分配的

void getmac_one (int lana_num)
{
NCB ncb;
UCHAR uRetCode;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num;
// 指定网卡号

---- // 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化
uRetCode = Netbios( &ncb );
printf( "The NCBRESET return code is:
0x%x \n", uRetCode );

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_num; // 指定网卡号

strcpy( (char *)ncb.ncb_callname,
"* " );
ncb.ncb_buffer = (unsigned char *) &Adapter;

---- // 指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);

---- // 接着,可以发送NCBASTAT命令以获取网卡的信息
uRetCode = Netbios( &ncb );
printf( "The NCBASTAT
return code is: 0x%x \n", uRetCode );
if ( uRetCode == 0 )
{

---- // 把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802
printf( "The Ethernet Number[%d]
is: %02X%02X-%02X%02X-%02X%02X\n",
lana_num,
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] );
}
}

int main(int argc, char* argv[])
{
NCB ncb;
UCHAR uRetCode;
LANA_ENUM lana_enum;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBENUM;

ncb.ncb_buffer = (unsigned char *) &lana_enum;
ncb.ncb_length = sizeof(lana_enum);

---- // 向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等
uRetCode = Netbios( &ncb );
printf( "The NCBENUM return
code is:
0x%x \n", uRetCode );
if ( uRetCode == 0 )
{
printf( "Ethernet Count is : %d\n\n", lana_enum.length);

---- // 对每一张网卡,以其网卡编号为输入编号,获取其MAC地址
for ( int i=0; i< lana_enum.length; ++i)
getmac_one( lana_enum.lana[i]);
}
return 0;
}

---- 此时,按F7编译、直至通过,按F5运行即可。
---- 这段代码可以直接嵌入相关的应用系统之中,或封装成.DLL或COM控件,以便可以在Visual Basic、Visual Foxpro、Power Builder或Delphi等其他程序中调用

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1779428

分享到:
评论

相关推荐

    如何用VC++开发读取网卡MAC的程序.docx

    标题中的“如何用VC++开发读取网卡MAC的程序”指的是使用Microsoft Visual C++编程语言来编写一个程序,该程序能够读取计算机上安装的网卡的物理地址(MAC地址)。MAC地址是一个唯一标识网络硬件的地址,在局域网...

    如何用VC++开发读取网卡MAC的程序.pdf

    总结起来,通过VC++开发读取网卡MAC地址的程序,我们需要了解和利用Windows的NetBIOS API,通过NCB命令与底层网络驱动通信。具体实现时,首先枚举网卡,然后对每个网卡发送NCBASTAT命令,获取并解析返回的MAC地址。...

    vc++ NETBIOS读取网卡物理地址(MAC)

    vc++ NETBIOS读取网卡物理地址(MAC),可读取多个网卡物理地址,并且判断是否相同 ,一个网卡返回值2 两个网卡mac不同返回值0 两个网卡mac相同返回值1

    使用VC++创建Win32 Console程序来读取网卡MAC地址的程序

    在Windows操作系统中,获取计算机的网卡物理地址(MAC地址)...通过以上步骤,我们已经了解了如何使用VC++和Win32 API来获取网卡的MAC地址。这个过程不仅可以用于学习,也可以用于实际项目中,例如网络配置或设备识别。

    VC++中怎样读取网卡的MAC地址.doc

    总的来说,通过VC++读取网卡MAC地址涉及到对Windows底层网络API的理解,以及正确使用NetBIOS控制块来与操作系统进行交互。在开发过程中,应确保正确处理各种返回码,并考虑不同操作系统的兼容性问题。

    VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号

    我们可以使用GetAdaptersInfo函数来获取网卡MAC地址。GetAdaptersInfo函数返回一个IP_ADAPTER_INFO结构体,该结构体包含了网卡的MAC地址、IP地址、子网掩码、网关地址等信息。 在获取网卡MAC地址时,我们首先需要...

    VC++ 读取网卡信息,物理地址(MAC),IP等的类及应用

    在VC++编程环境中,获取计算机的网络配置信息是常见的任务,包括网卡的物理地址(MAC)、IP地址、DNS设置等。这些信息对于网络通信、系统监控和故障排查至关重要。以下是一个详细的概述,介绍了如何使用VC++来实现...

    MACaddress.rar_VC++读取MAC地址

    标题"MACaddress.rar_VC++读取MAC地址"表明这个压缩包包含了一个用VC++编程实现的示例,其功能是读取并显示计算机的MAC地址。在Windows操作系统中,可以使用WinPCap库或者Windows API来获取MAC地址。WinPCap是强大的...

    网卡MAC读取(VC++)实现

    在Windows系统中,通过编程接口(API)可以获取到网卡的MAC地址。本主题主要围绕如何使用VC++编程语言来实现这一功能进行详细解释。 首先,我们需要了解Windows API中用于获取MAC地址的函数——`GetAdaptersInfo()`...

    VC 实现读取网卡MAC地址.pdf

    总的来说,通过VC++实现读取网卡MAC地址的过程涉及了对NetBIOS API的调用,需要理解NCB结构体和相关的网络协议知识。这个过程对于系统级编程和网络诊断是非常有用的。在实际开发中,确保正确处理各种错误情况和兼容...

    vc 读取网卡物理地址

    读取网卡物理地址需要使用`IOCTL_NDIS_QUERY_GLOBAL_STATS`这个IOCTL代码。 3. 定义结构体:我们需要定义一个结构体来存储网络适配器的信息,包括其物理地址。可以使用`NDISadapt`结构体,它是`NDIS_802_3_MAC_...

    vc++获得网卡MAC地址源代码

    在给定的标题“vc++获得网卡MAC地址源代码”中,我们可以推断这是一个使用Visual C++实现的功能,具体是通过VS2008编译并测试过的代码。描述中提到,该功能不仅能在VS2008环境下运行,还兼容较旧的VC6.0,这表明代码...

    VC 实现读取网卡MAC地址.docx

    在本文中,我们将探讨如何使用VC++编程语言来实现读取计算机中网卡的MAC地址。MAC地址(Media Access Control Address)是网络接口控制器的物理地址,用于唯一标识网络设备。在Windows系统中,可以通过调用NetApi32....

    读取网卡物理地址

    在Windows操作系统中,可以通过编程方式获取网卡的物理地址,例如使用VC++6.0进行开发。 在VC++6.0中,我们可以利用Windows API函数来实现这一功能。主要涉及的API函数有`GetAdaptersInfo`和`IP_ADAPTER_INFO`...

    读取网卡物理地址.rar

    `读取网卡物理地址.rar`是一个与之相关的压缩文件,很可能包含了用VC++编写的示例代码或库,用于演示如何在C++中实现这一功能。 在VC++6.0中,读取网卡物理地址通常涉及以下几个步骤: 1. **包含必要的头文件**: ...

    use_VC_get_mac.rar_VC控制_vc GetM_当前MAC

    用VC++开发读取网卡MAC地址的程序 在实际的应用系统中,我们往往会需要在程序运行时获取当前机器的网卡的MAC地址,以便作为某种标识之用,如控制程序的合法性等。下文就如何用Microsoft Visual C++ 6.0开发这样的...

    vC++获取cpu信息,硬盘ID,网卡MAC地址_内部资料.pdf

    - 获取网卡MAC地址的API函数使用 - 使用MFC框架进行用户界面设计及事件处理 - 使用Windows注册表来存储和读取配置信息 - 熟悉MFC的消息映射机制和消息处理函数 - 认识VC++开发环境中的AppWizard工具及项目设置选项 -...

    获取本地MAC地址小程序

    这个小程序使用了VC++(Visual C++)作为编程语言,VC++是Microsoft提供的一种集成开发环境,支持C++编程,同时具备Windows API调用能力,因此非常适合进行Windows平台的系统级编程。 程序的核心功能是通过调用...

    vC++_获取cpu信息_硬盘ID_网卡MAC地址

    ### vC++_获取cpu信息_硬盘ID_网卡MAC地址 #### 设计目的与基本要求 本项目的核心目标在于运用Visual C++编程环境来实现一个实用的应用程序,该程序能够帮助用户收集并显示计算机的基本硬件信息,主要包括CPU型号...

Global site tag (gtag.js) - Google Analytics