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地址外,还是否有另外的方法来获取,请各位大大详细告知。
有回答上来的,我还另外开帖加分。
...全文
1733 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
加载更多回复(2)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧