----请 运 行VC + +, 打 开 一 个 新 的 工 程, 选 择 创 建 一 个Win32 Console 程 序, 然 后 按 下 文 输 入 代 码, 并 请 参 见 其 中 的 注 释: #include “stdafx.h" #include
#include
#include
#include
#include // 因 为 是 通 过NetAPI 来 获 取 网 卡 信 息,
所 以 需 要 包 含 其 题 头 文 件nb30.h
#include 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----此 时, 按F7 编 译, 按F5 运 行 即 可。 ----这 段 代 码 可 以 直 接 嵌 入 相 关 的 应 用 系 统 之 中, 或 封 装 成.DLL 或COM 控 件, 以 便 可 以 在Visual Basic、Visual Foxpro、Power Builder 或Delphi 等 其 他 程 序 中 调 用。
#include
#include
#include
#include // 因 为 是 通 过NetAPI 来 获 取 网 卡 信 息,
所 以 需 要 包 含 其 题 头 文 件nb30.h
#include 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----此 时, 按F7 编 译, 按F5 运 行 即 可。 ----这 段 代 码 可 以 直 接 嵌 入 相 关 的 应 用 系 统 之 中, 或 封 装 成.DLL 或COM 控 件, 以 便 可 以 在Visual Basic、Visual Foxpro、Power Builder 或Delphi 等 其 他 程 序 中 调 用。
解决方案 »
- MFC界面在不同分辨率下显示有问题 的问题
- 再开一帖!!!!!!!!!!!!!!求解!!!!!!!!!!!1全分给!!!!!!!1要详细!!!!!!谢谢了!!!!!!急啊!!!!!!!!!!!!!!谢谢了
- 请问如何做到线程不同步
- VC++ createfile打开设备名如何获得
- 一个类与数据库中多个表连接的问题!急!!!
- 定义了对话框类对象后出现的错误,请问该怎样解决~
- 最快捷的得到如“2003-12-24 12:36:00”格式时间办法是什么?
- 知道一个目录名后怎么样获得这个目录下的所有文件的名称既怎么样调用目录下的所有文件
- active x控件中的para自己可以写吗
- 怎样让发出去的贴子再次位于最上方?
- 98下的vc工程在2000下编译时出错,提示信息:Error exduting c:\winnt\system32\cmd.exe
- 用Winsock API编写的Server是否支持多个用户同时连接到Server的同一个端口?如何实现?谢谢!!!
调用NCBASTAT时如果指定ncb_callname为远端机器的NetBios名,可以获得远端机器的MAC号,但是不知怎样才能通过IP地址得到机器的NetBios名?
typedef DWORD (CALLBACK* GETIPNETTABLE)(PMIB_IPNETTABLE,PULONG,BOOL);
GETIPNETTABLE GetARP;
hModule=LoadLibrary("IPhlpapi.DLL");
GetARP=(GETIPNETTABLE)GetProcAddress(hModule,"GetIpNetTable");