获取本机网络配置信息及ARP包的发送
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lylfqy.blog.51cto.com/67498/44219 |
第二篇 获取本机网络配置信息及ARP包的发送 1、获取本机网络配置信息 /*-------------------------------------------------------- 利用IP帮助函数获取本机网络适配器名称、 MAC地址、IP地址、子网掩码及广播地址等 ---------------------------------------------------------*/ 代码如下:(说明:俺没查到为什么不能获得子网掩码,总是提示:IpMask' : undeclared identifier) PIP_ADAPTER_INFO ad_info; DWORD uLen=0; //DWORD和ULONG意义相同啊,与unsigned long区别,俺不知道啊 //但曾经吃过亏啊 PIP_ADDR_STRING pAddrStr; //int nitem; /*----------------------------------------------------------------- 在网上搜到的结构体的一定,俺的MSDN上查不到啊 struct _IP_ADAPTER_INFO 中结构体的定义 typedef struct _IP_ADDR_STRING { struct _IP_ADDR_STRING* Next; IP_ADDRESS_STRING IpAddress; IP_MASK_STRING IpMask; DWORD Context; } IP_ADDR_STRING, *PIP_ADDR_STRING; typedef struct { char String[4 * 4]; } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; --------------------------------------------------------------------*/ /*-------------------------------------------------- 参数说明:m_adapt_info为列表控件对象 ---------------------------------------------------*/ //一定为ad_info分配空间哦! ad_info=(PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO)); if(GetAdaptersInfo(ad_info,&uLen)==ERROR_BUFFER_OVERFLOW) { TRACE("%ld\n",uLen); ad_info=(PIP_ADAPTER_INFO)malloc(uLen); } if(GetAdaptersInfo(ad_info,&uLen)==ERROR_SUCCESS) { while(ad_info) { int nitem; switch (ad_info->Type) { case MIB_IF_TYPE_ETHERNET: nitem=m_adapt_info.InsertItem(0,"Ethernet adapter"); break; case MIB_IF_TYPE_TOKENRING: nitem=m_adapt_info.InsertItem(0,"Token Ring adapter"); break; case MIB_IF_TYPE_FDDI: nitem=m_adapt_info.InsertItem(0,"FDDI adapter"); break; case MIB_IF_TYPE_PPP: nitem=m_adapt_info.InsertItem(0,"PPP adapter"); break; case MIB_IF_TYPE_LOOPBACK: nitem=m_adapt_info.InsertItem(0,"Loopback adapter"); break; case MIB_IF_TYPE_SLIP: nitem=m_adapt_info.InsertItem(0,"Slip adapter"); break; case MIB_IF_TYPE_OTHER: default: nitem=m_adapt_info.InsertItem(0,"Other adapter "); } m_adapt_info.SetItemText(nitem,1,ad_info->AdapterName);//网卡名称 CString string; string.Format("%2x-%2x-%2x-%2x-%2x-%2x",ad_info->Address[0],ad_info->Address[1], ad_info->Address[2],ad_info->Address[3],ad_info->Address[4],ad_info->Address[5]); m_adapt_info.SetItemText(nitem,2,string); //网卡MAC地址 m_adapt_info.SetItemText(nitem,3,ad_info->DhcpEnabled ? "yes" : "no"); //DHCP是否可 //用 pAddrStr=&(ad_info->IpAddressList); CString str1,str2; while(pAddrStr) { str1+=" "; str2+=" "; str1+=pAddrStr->IpAddress.String; str2+=pAddrStr>IpMask.String; //有该句总是提示:IpMask' : undeclared identifier //不知道为啥呀 pAddrStr=pAddrStr->Next; } m_adapt_info.SetItemText(nitem,4,str1); //网卡对应的IP地址 m_adapt_info.SetItemText(nitem,5,str2); //对应的子网掩码 CString str3=ad_info->GatewayList.IpAddress.String; pAddrStr = ad_info->GatewayList.Next; while(pAddrStr) { str3+=" "; str3+=pAddrStr->IpAddress.String; pAddrStr=pAddrStr->Next; } m_adapt_info.SetItemText(nitem,6,str3); //默认网关 m_adapt_info.SetItemText(nitem,7,ad_info->DhcpServer.IpAddress.String); //DHCP服务 //器IP地址 ad_info=ad_info->Next ; } free(ad_info); } 本文出自 “lylfqy” 博客,请务必保留此出处http://lylfqy.blog.51cto.com/67498/44219 本文出自 51CTO.COM技术博客 |


lylfqy
博客统计信息
热门文章
最新评论
友情链接