在通信类的编程,尤其是一些网络协议中经常要获取到网卡的mac地址,如在winpacap中构造数据包发送,就需要知道mac地址了;以下是代码:www.chaochaoblog.com
首次使用需要下载sdk并注意设置好连接库等。
VC6.0提示需要Iphlpapi.lib与Iphlpapi.h的时候,安装SDK,然后工具->选项->目录->Include files,将Iphlpapi所在路径加入,如果编译时出现说’PMIB_ICMP_EX’ : undeclared identifier,将刚才的Iphlpapi.h的路径移动到最顶端,编译通过。然后将Iphlpapi.lib的路径加入工具->选项->目录->Library files,链接通过。
PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapter = NULL; DWORD dwRetVal = 0; ULONG ulOutBufLen; pAdapterInfo=(PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO)); ulOutBufLen = sizeof(IP_ADAPTER_INFO); // 第一次调用GetAdapterInfo获取ulOutBufLen大小 if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); } if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { pAdapter = pAdapterInfo; CString strFind; CString macaddr; while (pAdapter) { strFind.Format("%s",pAdapter->Description); if(strFind.Find("Wireless")==-1)//过滤一下无线网卡<a href="http://www.chaochaoblog.com">www.chaochaoblog.com</a> { strFind.Empty(); strFind.Format("%s",pAdapter->AdapterName); strFind.Insert(0,"<a href="file://\\Device\\NPF">\\Device\\NPF_");//</a>这里加上device是为了pcap的调用;pcap的open函数需要的网卡名称是串号加上前面这一串的。 strcpy(userInfo.ethName,strFind.GetBuffer(strFind.GetLength())); { strFind.Empty(); for(i=0;i<=5;i++) { strFind.Format("%0.2X",pAdapter->Address[i]); macaddr+=strFind; userInfo.mac[i]=pAdapter->Address[i]; } { } } } strFind.Empty(); pAdapter = pAdapter->Next; } }
如无特别说明,本博客文章皆为原创。转载请说明,来自吵吵博客。
原文链接:http://chaochaoblog.com/archives/98
吵吵微信朋友圈,请付款实名加入: