吵吵   2011-03-03  阅读:3,792

在通信类的编程,尤其是一些网络协议中经常要获取到网卡的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-&gt;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&lt;=5;i++)
{
strFind.Format("%0.2X",pAdapter-&gt;Address[i]);
macaddr+=strFind;
userInfo.mac[i]=pAdapter-&gt;Address[i];
}

{

}
}

}
strFind.Empty();
pAdapter = pAdapter-&gt;Next;
}

}

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注