第一种方法使用microsoft的netbios api. 这是一套通过winsock提供底层网络支持的命令.使用netbios的最大缺点是您必须在系统中安装了netbios服务(如果您在windows网络中启用了文件共享的话,这就不是问题了).除此此外,这种方法又快又准确.
【程序编程相关:Linux 上实现双向进程间通信管道】netbios api只包括了一个函数,就叫做netbios.这个函数使用网络控制块(network control block)结构作为参数,这个结构告诉函数要做什么.结构的定义如下: 【推荐阅读:同行们,注意自己的身体!对抗疲劳、元气大】
【扩展信息:未考虑普及化 专家质疑 Linux 缺陷】typedef struct _ncb { uchar ncb_command; uchar ncb_retcode; uchar ncb_lsn; uchar ncb_num; puchar ncb_buffer; word ncb_length; uchar ncb_callname[ncbnamsz]; uchar ncb_name[ncbnamsz]; uchar ncb_rto; uchar ncb_sto; void (callback *ncb_post) (struct _ncb *); uchar ncb_lana_num; uchar ncb_cmd_cplt; #ifdef _win64 uchar ncb_reserve[18]; #else uchar ncb_reserve[10]; #endif handle ncb_event; } ncb, *pncb;
重点在于ncb_command 成员.这个成员告诉netbios该作什么.我们使用三个命令来探测mac地址.他们在msdn的定义如下:
命令描述: ncbenum windows nt/2000: 列举系统中网卡的数量.使用此命令后,ncb_buffer成员指向由lana_enum结构填充的缓冲区. ncbenum 不是标准的 netbios 3.0 命令.... 下一页