获取本地网络信息

- /Files/duzouzhe/iphlpapi.rar

最近要写的程序里需要获得主机的MAC地址...我查了很久终于找到了..下面这个就要用于获得网络相关的信息.我并没有组织成类只是将获取方法写了出来....等有时间再组织吧 ^_^

刚开始用vc6编写时总是提示没有找到Iphlpapi.h这个头文件..原来是我的sdk版本太低,最后我下载了这些头文件.

主要通过获得IP_ADAPTER_INFO结构获得

 

 1typedef struct _IP_ADAPTER_INFO {
 2  struct _IP_ADAPTER_INFO* Next;//链表指针域,通过这个来遍历静态键表
 3
 4  DWORD ComboIndex;//保留未用
 5
 6  char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];//网卡名
 7
 8char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//对网卡的描述
 9
10  UINT AddressLength;//物理地址的长度,通过这个显示下面数组中的物理地址
11
12  BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//物理地址,每个字节存放一个十六进制的数值,配合上一个数据域在printf中用x格式把每个字节输出。
13
14  DWORD Index;//网卡索引号
15
16  UINT Type;//网卡类型
17
18  UINT DhcpEnabled;//是否启用了DHCP动态IP分配
19
20  PIP_ADDR_STRING CurrentIpAddress;//当前使用的IP地址
21
22  IP_ADDR_STRING IpAddressList;//绑定到此网卡的IP地址链表,重要项目
23
24  IP_ADDR_STRING GatewayList;//网关地址链表,重要项目
25
26  IP_ADDR_STRING DhcpServer;//DHCP服务器地址,只有在DhcpEnabled==TRUE的情况下才有效
27
28  BOOL HaveWins;//是否启用了WINS
29
30   IP_ADDR_STRING PrimaryWinsServer;//主WINS地址
31
32  IP_ADDR_STRING SecondaryWinsServer;//辅WINS地址
33
34  time_t LeaseObtained;//当前DHCP租借获取的时间
35
36  time_t LeaseExpires;//当前DHCP租借失效时间。这两个数据结构只有在启用了DHCP时才有用。
37
38}
 IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

 

引用:

#include <Iphlpapi.h>

#pragma comment(lib, "Iphlpapi.lib")

  1void CArpTestDlg::OnButton1() 
  2{
  3    // TODO: Add your control notification handler code here    
  4    IP_ADAPTER_INFO AdapterInfo,*pAdapterInfo; 
  5    ULONG ulLen = sizeof(AdapterInfo); 
  6    
  7    //先得到所需要的结构的大小..ulLen
  8    DWORD dwRet=GetAdaptersInfo(NULL,&ulLen);
  9    
 10    BYTE *pAdapterListBuffer=new BYTE[ulLen];
 11    dwRet=GetAdaptersInfo((PIP_ADAPTER_INFO)pAdapterListBuffer,&ulLen);
 12    if (ERROR_SUCCESS==dwRet)
 13    {    
 14        CString strErr;
 15        pAdapterInfo=(PIP_ADAPTER_INFO)pAdapterListBuffer;
 16        
 17        while (pAdapterInfo)
 18        {    
 19            //AdapterName[网卡名]
 20            strErr.Format("%s",pAdapterInfo->AdapterName);
 21            m_ctrlList.InsertString(0,strErr);
 22            strErr="";
 23
 24            //Description[适配器描述]
 25            strErr.Format("%s",pAdapterInfo->Description);
 26            m_ctrlList.InsertString(0,strErr);
 27            strErr="";
 28
 29            //MAC
 30            strErr.Format("%02x%02x%02x%02x%02x%02x",
 31                pAdapterInfo->Address[0],
 32                pAdapterInfo->Address[1],
 33                pAdapterInfo->Address[2],
 34                pAdapterInfo->Address[3],
 35                pAdapterInfo->Address[4],
 36                pAdapterInfo->Address[5]
 37                );
 38            m_ctrlList.InsertString(0,strErr);
 39            strErr="";
 40
 41            //Adapter Type[适配器类型]
 42            /*
 43            MIB_IF_TYPE_OTHER     1 
 44            MIB_IF_TYPE_ETHERNET     6 
 45            MIB_IF_TYPE_TOKENRING     9 
 46            MIB_IF_TYPE_FDDI     15 
 47            MIB_IF_TYPE_PPP     23 
 48            MIB_IF_TYPE_LOOPBACK      24 
 49            MIB_IF_TYPE_SLIP      28 
 50            */

 51            strErr.Format("%d",pAdapterInfo->Type);
 52            m_ctrlList.InsertString(0,strErr);
 53            strErr="";
 54
 55            //DhcpEnabled[是否启动Dhcp]
 56            strErr.Format("%d",pAdapterInfo->DhcpEnabled);
 57            if ("1"==strErr)
 58            {
 59                //当前DHCP租借获取的时间
 60                strErr.Format("%ld",pAdapterInfo->LeaseObtained);
 61                m_ctrlList.InsertString(0,strErr);
 62                strErr="";
 63                //当前DHCP租借失效时间
 64                strErr.Format("%ld",pAdapterInfo->LeaseExpires);
 65                m_ctrlList.InsertString(0,strErr);
 66                strErr="";
 67            }

 68            m_ctrlList.InsertString(0,strErr);
 69            strErr="";
 70
 71            //IP address[ip地址]
 72            strErr.Format("%s",pAdapterInfo->IpAddressList.IpAddress.String);
 73            m_ctrlList.InsertString(0,strErr);
 74            strErr="";
 75            //Sub Make[子网掩码]
 76            strErr.Format("%s",pAdapterInfo->IpAddressList.IpMask.String);
 77            m_ctrlList.InsertString(0,strErr);
 78            strErr="";
 79
 80            //Gateway[网关地址]
 81            strErr.Format("%s",pAdapterInfo->GatewayList.IpAddress.String);
 82            m_ctrlList.InsertString(0,strErr);
 83            strErr="";
 84            
 85            //DhcpServer[Dhcp地址]
 86            strErr.Format("%s",pAdapterInfo->DhcpServer.IpAddress.String);
 87            m_ctrlList.InsertString(0,strErr);
 88            strErr="";
 89
 90            
 91            //Wins[是否启用了WINS]
 92            if (true==AdapterInfo.HaveWins)
 93            {
 94                m_ctrlList.InsertString(0,"true");
 95                //主Wins地址
 96                strErr.Format("%s",pAdapterInfo->PrimaryWinsServer.IpAddress.String);
 97                m_ctrlList.InsertString(0,strErr);
 98                strErr="";
 99                //辅Wins地址
100                strErr.Format("%s",pAdapterInfo->SecondaryWinsServer.IpAddress.String);
101                m_ctrlList.InsertString(0,strErr);
102                strErr="";
103            }

104            else
105                m_ctrlList.InsertString(0,"false");
106
107            pAdapterInfo=pAdapterInfo->Next;
108        }

109    }

110        
111    delete pAdapterListBuffer;
112}

113

 

注:

vc6 的sdk还是98年的现在很多程序在vc6下都调不通.一般需要升级sdk...当然也可以用vs2005或更高版本.不过有些人比较喜欢vc6 的简约..呵呵..^_^.我比较喜欢.虽然装了vs2008...但是还是用vc6....

posted @ 2008-12-04 22:29  独奏者  阅读(1631)  评论(0编辑  收藏  举报