获取本地网络信息
- /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;
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
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....