100分求教,如何用C语言获取板载网卡的MAC地址

yjjbmk 2007-09-12 08:39:17
我想用C语言编写一段小程序,功能是在纯DOS环境(而非Win98下的DOS或。WIN2000/XP下的命令提示符)下,当运行该程序时,能获取本地计算机主板上板载网卡的mac地址。请问各位大大,我该如何实现上述功能?
注意,是在纯DOS环境下运行,而非windows2000/xp窗口环境下,所以,我想,使用Visual C++的Win32平台是不可行的吧?!
我只想知道本地计算机的mac地址,而不是局域网中所有计算机的mac。
我想,读取本地计算机主板上的UUID是否可行?因为主板上的UUID内也包含有mac地址。请问,C语言中关于读取主板上的UUID的函数是什么?
请问各位大侠, 除了读取主板上板载网卡的uuid来获取mac地址外,还是否有另外的方法来获取,请各位大大详细告知。
有回答上来的,我还另外开帖加分。
...全文
1638 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yjjbmk 2007-10-21
这几天忙着搬家,一直没有机会上网,望包涵!
真的是多谢各位大大的帮助,虽然没有解决,但我终于有了点头绪!
再次感谢!!!
回复
nemo_lian 2007-09-15
真是高人啊!
回复
xeppp 2007-09-14
C 呀 不敢恭为了 只用C# 虽说效率 差多远了 但是 门槛低呀 学习
回复
aceouter 2007-09-14
学习了
回复
lihao1111111111 2007-09-14
学习.
回复
mgtcllxl 2007-09-14
mark
回复
wjlsmail 2007-09-13
SendARP
回复
xugang_2001 2007-09-13
不知道楼主是什么用途,我以前写过验证软件注册码的时候需要用到机器的唯一识别。有几个选择:取硬盘号;取网卡ID;甚至取CPU ID;但是各有各的缺点,硬盘ID虽然唯一,但是某些厂商生产硬盘没有ID号,比如三星的有些型号硬盘;网卡ID虽然唯一,但是因为在windwos下可以人为修改伪装MAC 号,所以也不够完美。
回复
qld001 2007-09-13
星羽那个详细的过头了,netbios的头文件都搞出来了。。。。
关于这个获取mac地址,我只在linux下做过,没再dos下做过。。。。不知道LZ为啥要在dos下弄这玩意儿。。。
回复
ribut9225 2007-09-13
关注
回复
chary8088 2007-09-13
回复
xiaciping 2007-09-13
先顶一个
回复
jixingzhong 2007-09-13
【Ref】

...
#include "nb30.h"

typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, *PASTAT;

ASTAT Adapter;

void getmac_one (int lana_num)
{
char text[256];

NCB ncb;
UCHAR uRetCode;

memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_num;

uRetCode = Netbios( &ncb );
sprintf( text, "The NCBRESET return code is: 0x %x \n", uRetCode );
AfxMessageBox(text,0,0);

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 命 令 以 获 取 网 卡 的 信 息
// debug
uRetCode = Netbios( &ncb );
sprintf( text,"The NCBASTAT return code is: 0x %x \n", uRetCode );
AfxMessageBox(text,0,0);

if ( uRetCode == 0 )
{
// 把 网 卡MAC 地 址 格 式 化 成 常 用 的16 进 制 形 式, 如0010 -A4E4 -5802
sprintf( text,"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] );

AfxMessageBox(text,0,0);
}
}

void CNetcard2Dlg::OnButton1()
{
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 )
{
char text[256];
sprintf( text,"Ethernet Count is : %d\n\n", lana_enum.length);
AfxMessageBox(text,0,0);

// 对 每 一 张 网 卡, 以 其 网 卡 编 号 为 输 入 编 号, 获 取 其MAC 地 址
for ( int i=0; i<lana_enum.length;i++)
{
getmac_one (lana_enum.lana[i]);
}
}
}
回复
p0303230 2007-09-13
留名
回复
cceczjxy 2007-09-13
帮顶
回复
shuage123 2007-09-13
先顶一个
回复
yixulab 2007-09-13
呵呵``星羽兄的这个可有点太深奥了
回复
feitianmouse 2007-09-13
mark
回复
wh_peng 2007-09-13
飘过
回复
星羽 2007-09-12


http://www.80diy.com/home/20041117/09/3560042.html
回复
加载更多回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2007-09-12 08:39
社区公告
暂无公告