版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、探测网络中的在线设备探测网络中的在线设备主要知识点主要知识点p获取本地计算机的网络信息获取本地计算机的网络信息p扫描子网中的地址扫描子网中的地址1 获取本地计算机的网络信息获取本地计算机的网络信息6.1.1 6.1.1 使用使用ipconfigipconfig命令获取本地网络信息命令获取本地网络信息6.1.2 6.1.2 获取本地网络信息的开发接口获取本地网络信息的开发接口IP Helper IP Helper APIAPI6.1.3 6.1.3 获取本地网络适配器信息获取本地网络适配器信息6.1.4 6.1.4 获取本地主机名、域名和获取本地主机名、域名和DNSDNS服务器信息服务器信息6.
2、1.5 6.1.5 获取本地计算机网络接口的基本信息获取本地计算机网络接口的基本信息6.1.6 6.1.6 获取本地计算机获取本地计算机IPIP地址表地址表6.1.7 6.1.7 添加和删除添加和删除IPIP地址地址1.1 使用使用ipconfig命令获取本地网络信命令获取本地网络信息息p在在Windows操作系统中,可以使用操作系统中,可以使用ipconfig命令获命令获取本地网络信息。在命令窗口中执行取本地网络信息。在命令窗口中执行ipconfig命令。命令。1 获取本地计算机的网络信息获取本地计算机的网络信息1.2 获取本地网络信息的开发接口获取本地网络信息的开发接口IP Helper
3、APIIP Helper APIIP Helper API可以实现的主要功能如下:可以实现的主要功能如下:p 获取网络配置的信息。获取网络配置的信息。p 管理网络适配器(管理网络适配器(Network AdapterNetwork Adapter),也就是通常所说的网卡,),也就是通常所说的网卡,它位于数据链路层。它位于数据链路层。p 管理网络接口(管理网络接口(InterfaceInterface)。接口表示节点上对应连接的部分,)。接口表示节点上对应连接的部分,它位于它位于IPIP层,因此可以在接口上绑定层,因此可以在接口上绑定IPIP地址。在地址。在IP Helper APIIP Hel
4、per API中中,网络适配器和接口是一一对应的。,网络适配器和接口是一一对应的。p 管理管理IPIP地址。地址。p 使用使用ARPARP协议。协议。p 获取获取IPIP和和ICMPICMP协议中的信息。协议中的信息。p 管理路由信息。管理路由信息。p 接收网络事务的通知信息。接收网络事务的通知信息。p 接收接收TCPTCP和和UDPUDP信息。信息。引用引用IPHELPAPI.libp 在在Visual C+Visual C+项目中,可以使用下面的语句引用项目中,可以使用下面的语句引用IPHELPAPI.libIPHELPAPI.lib。# #pragma comment(lib, IPHL
5、PAPI.libpragma comment(lib, IPHLPAPI.lib)p 也可以在项目属性对话框中选择也可以在项目属性对话框中选择“配置属性配置属性”/ /“链接器链接器”/ /“输入输入”,然后在右侧的,然后在右侧的“附加依赖项附加依赖项”中输入中输入IPHLPAPI.libIPHLPAPI.lib。1.3 获取本地网络适配器信息获取本地网络适配器信息p在在iphlpapi.hiphlpapi.h中声明了中声明了GetAdaptersInfoGetAdaptersInfo()()函数,调用该函数可以返回本地网络适配函数,调用该函数可以返回本地网络适配器的基本信息,语法如下器的基本
6、信息,语法如下:DWORD DWORD GetAdaptersInfoGetAdaptersInfo( ( PIP_ADAPTER_INFO PIP_ADAPTER_INFO pAdapterInfopAdapterInfo, , PULONG PULONG pOutBufLenpOutBufLen ););结构体结构体IP_ADAPTER_INFOp在在iptypes.hiptypes.h中声明,定义代码如下中声明,定义代码如下:typedeftypedef structstruct _IP_ADAPTER_INFO _IP_ADAPTER_INFO structstruct _IP_ADA
7、PTER_INFO _IP_ADAPTER_INFO* * Next; Next; DWORD DWORD ComboIndexComboIndex; ; char char AdapterNameAdapterNameMAX_ADAPTER_NAME_LENGTH + 4;MAX_ADAPTER_NAME_LENGTH + 4; char DescriptionMAX_ADAPTER_DESCRIPTION_LENGTH + 4; char DescriptionMAX_ADAPTER_DESCRIPTION_LENGTH + 4; UINT UINT AddressLengthAddres
8、sLength; ; BYTE AddressMAX_ADAPTER_ADDRESS_LENGTH; BYTE AddressMAX_ADAPTER_ADDRESS_LENGTH; DWORD Index; DWORD Index; UINT Type; UINT Type; UINT UINT DhcpEnabledDhcpEnabled; ; PIP_ADDR_STRING PIP_ADDR_STRING CurrentIpAddressCurrentIpAddress; ; IP_ADDR_STRING IP_ADDR_STRING IpAddressListIpAddressList;
9、 ; IP_ADDR_STRING IP_ADDR_STRING GatewayListGatewayList; ; IP_ADDR_STRING IP_ADDR_STRING DhcpServerDhcpServer; ; BOOL BOOL HaveWinsHaveWins; ; IP_ADDR_STRING IP_ADDR_STRING PrimaryWinsServerPrimaryWinsServer; ; IP_ADDR_STRING IP_ADDR_STRING SecondaryWinsServerSecondaryWinsServer; ; time_ttime_t Leas
10、eObtainedLeaseObtained; ; time_ttime_t LeaseExpiresLeaseExpires; ; IP_ADAPTER_INFO, IP_ADAPTER_INFO, * *PIP_ADAPTER_INFO;PIP_ADAPTER_INFO;结构体结构体IP_ADAPTER_INFO中定义的成员变中定义的成员变量量成员变量成员变量说明说明Next指定网络适配器链表中的下一个网络适配器ComboIndex预留变量AdapterName网络适配器的名称Description网络适配器的描述信息AddressLength网络适配器MAC地址的长度Address网络适
11、配器的MAC地址Index网络适配器索引。当一个网络适配器被禁用然后又重新启用后,该适配器的索引将发生变化。因此该值并不是网络适配器的唯一标识Type网络适配器的类型,包括MIB_IF_TYPE_OTHER、MIB_IF_TYPE_ETHERNET、MIB_IF_TYPE_TOKENRING、MIB_IF_TYPE_FDDI、MIB_IF_TYPE_PPP、MIB_IF_TYPE_LOOPBACK和MIB_IF_TYPE_SLIP等。这些值在IPIfCons.h中定义DhcpEnabled指定该网络适配器上是否启用了DHCP协议CurrentIpAddress预留变量IpAddressList
12、与此网络适配器相关联的IP地址列表GatewayList该网络适配器上定义的IP地址的默认网关DhcpServer该网络适配器上定义的DHCP服务器的IP地址HaveWins标明该网络适配器是否启用了WINSPrimaryWinsServer主WINS服务器的IP地址SecondaryWinsServer从WINS服务器的IP地址LeaseObtained当前的DHCP租借获取的时间,只有在启用DHCP时生效LeaseExpires当前的DHCP租借失效的时间,只有在启用DHCP时生效实例实例p 通过一个实例来介绍如何使用通过一个实例来介绍如何使用Visual C+Visual C+编写获取本
13、编写获取本地网络信息的程序。实例是一个控制台项目。地网络信息的程序。实例是一个控制台项目。1声明头文件声明头文件p 在在GetIPConfig.cppGetIPConfig.cpp中需要声明程序中使用的头文件,并引用中需要声明程序中使用的头文件,并引用IPHLPAPI.libIPHLPAPI.lib,代码如下:,代码如下:#include #include stdafx.hstdafx.h #pragma comment(lib, IPHLPAPI.lib) #pragma comment(lib, IPHLPAPI.lib) #include #include #include #inclu
14、de #include #include 2声明变量声明变量p 在主函数在主函数_ _tmaintmain()()中,首先需要声明程序中使用的变量,代码如中,首先需要声明程序中使用的变量,代码如下:下:/ / 指定获取到的网络信息结构体链表的指针指定获取到的网络信息结构体链表的指针IP_ADAPTER_INFO IP_ADAPTER_INFO * *pAdapterInfopAdapterInfo; ;/ / 保存获取到的网络信息结构体链表的长度保存获取到的网络信息结构体链表的长度ULONG ULONG ulOutBufLenulOutBufLen; ;/ / 返回调用编码返回调用编码DWOR
15、D DWORD dwRetValdwRetVal; ;/ / 在轮循所有网络适配器信息时使用的单个结构体变量在轮循所有网络适配器信息时使用的单个结构体变量PIP_ADAPTER_INFO PIP_ADAPTER_INFO pAdapterpAdapter; ;3获取本地网络适配器信息获取本地网络适配器信息p在获取本地信息的过程中,需要两次调用在获取本地信息的过程中,需要两次调用GetAdaptersInfoGetAdaptersInfo()()函数。第函数。第1 1次调用可以获取返次调用可以获取返回数据的大小,第回数据的大小,第2 2次调用使用前面获取到的数据大小作为参数,获取实际的次调用使用
16、前面获取到的数据大小作为参数,获取实际的IP_ADAPTER_INFOIP_ADAPTER_INFO结构体内容,具体代码如下:结构体内容,具体代码如下:/ / 为为pAdapterInfopAdapterInfo分配空间分配空间pAdapterInfopAdapterInfo = (IP_ADAPTER_INFO = (IP_ADAPTER_INFO * *) )mallocmalloc( (sizeofsizeof(IP_ADAPTER_INFO);(IP_ADAPTER_INFO);ulOutBufLenulOutBufLen = = sizeofsizeof(IP_ADAPTER_INF
17、O);(IP_ADAPTER_INFO);/ / 第第1 1次调用次调用GetAdaptersInfoGetAdaptersInfo()(),获取返回结果的大小到,获取返回结果的大小到ulOutBufLenulOutBufLen中中if(if(GetAdaptersInfoGetAdaptersInfo( (pAdapterInfopAdapterInfo, &, &ulOutBufLenulOutBufLen) != ERROR_SUCCESS) != ERROR_SUCCESS) free(free(pAdapterInfopAdapterInfo););pAdapterInfopAdap
18、terInfo = (IP_ADAPTER_INFO = (IP_ADAPTER_INFO * *) )mallocmalloc( (ulOutBufLenulOutBufLen);); / / 第第2 2次调用次调用GetAdaptersInfoGetAdaptersInfo()(),获取本地网络信息到结构体,获取本地网络信息到结构体pAdapterInfopAdapterInfo中中if(if(dwRetValdwRetVal = = GetAdaptersInfoGetAdaptersInfo( (pAdapterInfopAdapterInfo, &, &ulOutBufLenulOu
19、tBufLen) != ERROR_SUCCESS) != ERROR_SUCCESS) printfprintf(GetAdaptersInfoGetAdaptersInfo Error! %dn, Error! %dn, dwRetValdwRetVal);); 4显示本地网络适配器信息显示本地网络适配器信息p现在本地网络信息已经读取到现在本地网络信息已经读取到pAdapterInfopAdapterInfo链表中,因为本地计算机上可能安装多个网络适链表中,因为本地计算机上可能安装多个网络适配器,所以需要使用配器,所以需要使用WhileWhile语句循环处理语句循环处理pAdapterIn
20、fopAdapterInfo链表中的每个链表中的每个IP_ADAPTER_INFOIP_ADAPTER_INFO结构体结构体,并显示其中的网络信息,代码如下:,并显示其中的网络信息,代码如下:/ / 从从pAdapterInfopAdapterInfo 获取并显示本地网络信息获取并显示本地网络信息pAdapterpAdapter = = pAdapterInfopAdapterInfo; ;while(while(pAdapterpAdapter) ) printfprintf(网络适配器名网络适配器名: t: tt%st%sn, n, pAdapterpAdapter-AdapterName
21、AdapterName););printfprintf(网络适配器描述网络适配器描述: : t%st%snn, nn, pAdapterpAdapter-Description);-Description);printfprintf(MAC(MAC地址地址: tt);: tt);/ / 处理处理MACMAC地址地址for(for(intint i=0; i i=0; i-AddressLengthAddressLength; i+); i+) if(i=(if(i=(pAdapterpAdapter-AddressLengthAddressLength -1) -1)printfprintf(
22、%.2Xn, (%.2Xn, (intint) )pAdapterpAdapter-Addressi);-Addressi);elseelseprintfprintf(%.2X-, (%.2X-, (intint) )pAdapterpAdapter-Addressi);-Addressi); 4显示本地网络适配器信息显示本地网络适配器信息printf(IPprintf(IP地址地址: : tt%sntt%sn, , pAdapterpAdapter-IpAddressList.IpAddress.StringIpAddressList.IpAddress.String););printfpr
23、intf(子网掩码子网掩码: : tt%sntt%sn, , pAdapterpAdapter-IpAddressList.IpMask.StringIpAddressList.IpMask.String););printfprintf(网关网关: : ttt%snttt%sn, , pAdapterpAdapter-GatewayList.IpAddress.StringGatewayList.IpAddress.String););printfprintf(* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
24、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n);n);if(pAdapterif(pAdapter-DhcpEnabledDhcpEnabled) ) printfprintf(启用启用DHCP: DHCP: tttt是是n);n);printf(DHCPprintf(DHCP服务器服务器: : tt%sntt%sn, , pAdapterpAdapter- - DhcpServer.IpAddress.StringDhcpServer.IpAddress.String);); elseelse
25、printfprintf(启用启用DHCP: DHCP: tttt否否n);n); / / 处理下一个网络适配器处理下一个网络适配器pAdapterpAdapter = = pAdapterpAdapter-Next;-Next; 5释放资源释放资源p 处理完成后,需要将释放到处理完成后,需要将释放到pAdapterpAdapter链表所占用的内存空间链表所占用的内存空间,代码如下:,代码如下:/ / 释放资源释放资源if(if(pAdapterInfopAdapterInfo) )free(free(pAdapterInfopAdapterInfo););6暂停程序,等待用户响应暂停程序,等
26、待用户响应p 在显示本地网络信息后,程序处于暂停状态,等待用在显示本地网络信息后,程序处于暂停状态,等待用户响应,代码如下:户响应,代码如下:printfprintf(nn);(nn);system(pause); system(pause); return 0;return 0;p system(pause);system(pause);语句的功能是暂停系统的工作,并语句的功能是暂停系统的工作,并在控制台输出在控制台输出“按任意键继续按任意键继续”。用户按任意键后。用户按任意键后,程序继续运行,执行,程序继续运行,执行return 0;return 0;语句退出语句退出_ _tmaintma
27、in()()函函数。数。1.4 获取本地主机名、域名和获取本地主机名、域名和DNS服务器信服务器信息息p 调用调用GetNetworkParamsGetNetworkParams()()函数可以函数可以返回本地的网络参数信息,返回本地的网络参数信息,包括本地的主机名、域名和包括本地的主机名、域名和DNSDNS服务器列表等。服务器列表等。GetNetworkParamsGetNetworkParams()()函数的语法如下:函数的语法如下:DWORD DWORD GetNetworkParamsGetNetworkParams( ( _out PFIXED_INFO _out PFIXED_IN
28、FO pFixedInfopFixedInfo, , _in PULONG _in PULONG pOutBufLenpOutBufLen););p 参数参数pFixedInfopFixedInfo是输出参数,它是一个指向缓冲区的指针,缓是输出参数,它是一个指向缓冲区的指针,缓冲区中使用冲区中使用FIXED_INFOFIXED_INFO结构体保存获取到的本地网络参数信息结构体保存获取到的本地网络参数信息;p 参数参数pOutBufLenpOutBufLen是一个指向是一个指向ULONGULONG变量的指针,保存变量的指针,保存pFixedInfopFixedInfo缓冲区的大小缓冲区的大小。P
29、FIXED_INFOp PFIXED_INFOPFIXED_INFO是指定结构体是指定结构体FIXED_INFOFIXED_INFO的指针,它在的指针,它在iptypes.hiptypes.h中声明中声明,定义代码如下:,定义代码如下:typedeftypedef structstruct char char HostNameHostNameMAX_HOSTNAME_LEN + 4;MAX_HOSTNAME_LEN + 4; char char DomainNameDomainNameMAX_DOMAIN_NAME_LEN + 4;MAX_DOMAIN_NAME_LEN + 4; PIP_AD
30、DR_STRING PIP_ADDR_STRING CurrentDnsServerCurrentDnsServer; ; IP_ADDR_STRING IP_ADDR_STRING DnsServerListDnsServerList; ; UINT UINT NodeTypeNodeType; ; char char ScopeIdScopeIdMAX_SCOPE_ID_LEN + 4;MAX_SCOPE_ID_LEN + 4; UINT UINT EnableRoutingEnableRouting; ; UINT UINT EnableProxyEnableProxy; ; UINT
31、UINT EnableDnsEnableDns; ;FIXED_INFO, FIXED_INFO, * *PFIXED_INFO;PFIXED_INFO;【实例实例2】介绍使用介绍使用IP Helper APIIP Helper API获取本地网络参数信息的具体代码。首获取本地网络参数信息的具体代码。首先创建一个先创建一个Win32Win32控制台应用程序,项目名称为控制台应用程序,项目名称为GetNetworkParamsGetNetworkParams,其主文件名为,其主文件名为GetNetworkParams.cppGetNetworkParams.cpp。1声明头文件声明头文件p 在在
32、GetNetworkParams.cppGetNetworkParams.cpp中需要声明程序中使用的头文中需要声明程序中使用的头文件,并引用件,并引用IPHLPAPI.libIPHLPAPI.lib,代码如下:,代码如下:#include #include stdafx.hstdafx.h #include #include #include #include #include #include #pragma comment(lib, IPHLPAPI.lib)#pragma comment(lib, IPHLPAPI.lib)2声明变量声明变量p 在主函数在主函数_ _tmaintmai
33、n()()中,首先需要声明程序中使用的变量,代码中,首先需要声明程序中使用的变量,代码如下:如下:/ / 定义保存本地计算机网络参数信息的结构体指针定义保存本地计算机网络参数信息的结构体指针FIXED_INFO FIXED_INFO * * FixedInfoFixedInfo; ;/ / 保存获取到的本地计算机网络参数信息结构体链表的长度保存获取到的本地计算机网络参数信息结构体链表的长度ULONG ULONG ulOutBufLenulOutBufLen; ;/ / 调用调用GetNetworkParamsGetNetworkParams()()函数的返回值函数的返回值DWORD DWORD
34、 dwRetValdwRetVal; ;/ / 保存所有保存所有DNSDNS服务器的服务器的IPIP地址列表地址列表IP_ADDR_STRING IP_ADDR_STRING * * pIPAddrpIPAddr; ;3获取本地网络参数信息获取本地网络参数信息p 需要需要两次调用两次调用GetNetworkParamsGetNetworkParams()()函数。第函数。第1 1次调用可以获取返回数次调用可以获取返回数据的大小,第据的大小,第2 2次调用使用前面获取到的数据大小作为参数,获取实次调用使用前面获取到的数据大小作为参数,获取实际的际的FIXED_INFOFIXED_INFO结构体内
35、容,具体代码如下结构体内容,具体代码如下:/ / 为为FixedInfoFixedInfo结构体分配内存空间结构体分配内存空间FixedInfoFixedInfo = (FIXED_INFO = (FIXED_INFO * *) ) GlobalAllocGlobalAlloc( GPTR, ( GPTR, sizeofsizeof( FIXED_INFO ) );( FIXED_INFO ) );/ / 初始化初始化ulOutBufLenulOutBufLen变量值变量值ulOutBufLenulOutBufLen = = sizeofsizeof( FIXED_INFO );( FIXED
36、_INFO );/ / 第次调用第次调用GetNetworkParamsGetNetworkParams()()函数,获取返回结果的大小到函数,获取返回结果的大小到ulOutBufLenulOutBufLen中中if( ERROR_BUFFER_OVERFLOW = if( ERROR_BUFFER_OVERFLOW = GetNetworkParamsGetNetworkParams( ( FixedInfoFixedInfo, &, &ulOutBufLenulOutBufLen ) ) ) ) GlobalFreeGlobalFree( ( FixedInfoFixedInfo ); )
37、;FixedInfoFixedInfo = (FIXED_INFO = (FIXED_INFO * *) ) GlobalAllocGlobalAlloc( GPTR, ( GPTR, ulOutBufLenulOutBufLen ); ); / / 第次调用第次调用GetNetworkParamsGetNetworkParams()()函数,以前面获取的函数,以前面获取的ulOutBufLenulOutBufLen作为参数,作为参数,if ( if ( dwRetValdwRetVal = = GetNetworkParamsGetNetworkParams( ( FixedInfoFixe
38、dInfo, &, &ulOutBufLenulOutBufLen ) != ERROR_SUCCESS) ) != ERROR_SUCCESS) printfprintf( ( 调用调用GetNetworkParamsGetNetworkParams()()函数失败。返回值函数失败。返回值: %08xn, : %08xn, dwRetValdwRetVal ); ); 4显示本地网络参数信息显示本地网络参数信息else else printfprintf( ( 主机名主机名: %: %snsn, , FixedInfoFixedInfo-HostNameHostName ); );print
39、fprintf( ( 域名域名: %: %snsn, , FixedInfoFixedInfo-DomainNameDomainName ); ); printf(nprintf(n=网络信息网络信息=n); =n); / / 生成节点类型字符串生成节点类型字符串 char char* * NodeTypeNodeType; ; 4显示本地网络参数信息显示本地网络参数信息p switch( switch(FixedInfoFixedInfo-NodeTypeNodeType) ) p p case BROADCAST_NODETYPE: case BROADCAST_NODETYPE: p N
40、odeTypeNodeType=BroadcaseBroadcase Node; Node; p break; break; p case PEER_TO_PEER_NODETYPE: case PEER_TO_PEER_NODETYPE: p NodeTypeNodeType=Peer to Peer Node; =Peer to Peer Node; p break; break; p case MIXED_NODETYPE: case MIXED_NODETYPE: p NodeTypeNodeType=Mixed Node; =Mixed Node; p break; break; p
41、 case HYBRID_NODETYPE: case HYBRID_NODETYPE: p NodeTypeNodeType=Hybrid Node; =Hybrid Node; p break; break; p default: default: p NodeTypeNodeType=Unknown Node; =Unknown Node; p break; break; p 4显示本地网络参数信息显示本地网络参数信息printfprintf(节点类型节点类型.:%d - %.:%d - %snsn, , FixedInfoFixedInfo- - NodeTypeNodeType, ,
42、 NodeTypeNodeType); ); printfprintf(是否启用路由功能是否启用路由功能.:%.:%snsn, (, (FixedInfoFixedInfo- - EnableRoutingEnableRouting != 0) ? != 0) ? 是是 : : 否否); ); printfprintf(是否启用是否启用ARPARP代理功能代理功能.:%.:%snsn, (, (FixedInfoFixedInfo- - EnableProxyEnableProxy != 0) ? != 0) ? 是是 : : 否否); ); printfprintf(是否启用是否启用DNSD
43、NS服务器服务器.:%.:%snsn, (, (FixedInfoFixedInfo- - EnableDnsEnableDns != 0) ? != 0) ? 是是 : : 否否); ); printfprintf( ( nDNSnDNS服务器列表服务器列表:n );:n );printfprintf( %( %snsn, , FixedInfoFixedInfo - - DnsServerList.IpAddress.StringDnsServerList.IpAddress.String ); );pIPAddrpIPAddr = = FixedInfoFixedInfo - - Dns
44、ServerList.NextDnsServerList.Next; ; while ( while ( pIPAddrpIPAddr ) ) printfprintf( ( t%snt%sn, , pIPAddrpIPAddr - -IpAddress.StringIpAddress.String ); );pIPAddrpIPAddr = = pIPAddrpIPAddr -Next; -Next; IP_ADDR_STRING结构体结构体typedeftypedef structstruct _IP_ADDR_STRING _IP_ADDR_STRING structstruct _IP
45、_ADDR_STRING _IP_ADDR_STRING* * Next; Next; IP_ADDRESS_STRING IP_ADDRESS_STRING IpAddressIpAddress; ; IP_MASK_STRING IP_MASK_STRING IpMaskIpMask; ; DWORD Context; DWORD Context; IP_ADDR_STRING, IP_ADDR_STRING, * *PIP_ADDR_STRING;PIP_ADDR_STRING;5暂停程序,等待用户响应暂停程序,等待用户响应 在显示本地网络信息后,程序处于暂停状态,等待在显示本地网络信息
46、后,程序处于暂停状态,等待用户响应,代码如下:用户响应,代码如下:printf(nn);system(pause); return 0; 1.5 获取本地计算机网络接口的基本信息获取本地计算机网络接口的基本信息1 1获取本地计算机的网络接口数量获取本地计算机的网络接口数量2 2获取本地计算机网络接口的基本信息获取本地计算机网络接口的基本信息1获取本地计算机的网络接口数量获取本地计算机的网络接口数量p 可以通过调用可以通过调用GetNumberOfInterfaces()GetNumberOfInterfaces()函数获取本地计算机的网络接函数获取本地计算机的网络接口数量,语法如下:口数量,语
47、法如下:DWORD GetNumberOfInterfaces(DWORD GetNumberOfInterfaces( _out PDWORD _out PDWORD pdwNumIfpdwNumIf););参数参数pdwNumIfpdwNumIf用于接受获取到的本地计算机网络接口数量用于接受获取到的本地计算机网络接口数量。函数函数的返回值为的返回值为DWORDDWORD类型,如果调用成功,则返回类型,如果调用成功,则返回NO_ERRORNO_ERROR;否则表示;否则表示调用失败。调用失败。【实实例例3】#include #include stdafx.hstdafx.h #include
48、 #include #include #include #include #include # #pragmapragma comment(libcomment(lib, , IPHLPAPI.libIPHLPAPI.lib)intint _ _tmain(inttmain(int argcargc, _TCHAR, _TCHAR* * argvargv) / / 用于获取接口数量用于获取接口数量DWORD DWORD dwNumIfdwNumIf; ;/ / 返回值返回值DWORD DWORD dwRetValdwRetVal; ;if(dwRetValif(dwRetVal = = Get
49、NumberOfInterfaces(&dwNumIfGetNumberOfInterfaces(&dwNumIf) = NO_ERROR) = NO_ERROR) printfprintf(本地网络接口数量为本地网络接口数量为: %d, : %d, dwNumIfdwNumIf);); elseelse printfprintf(调用调用GetNumberOfInterfacesGetNumberOfInterfaces()()函数时出现错误。函数时出现错误。);); printf(nnprintf(nn););system(pausesystem(pause); ); return 0;r
50、eturn 0; 2获取本地计算机网络接口的基本信息获取本地计算机网络接口的基本信息p 可以通过调用可以通过调用GetInterfaceInfoGetInterfaceInfo()()函数获取本地计算机函数获取本地计算机网络接口的基本信息,语法如下:网络接口的基本信息,语法如下:DWORD DWORD GetInterfaceInfoGetInterfaceInfo( ( _out PIP_INTERFACE_INFO _out PIP_INTERFACE_INFO pIfTablepIfTable, , _ _inoutinout PULONG PULONG dwOutBufLendwOut
51、BufLen););PIP_INTERFACE_INFOtypedeftypedef structstruct _IP_INTERFACE_INFO _IP_INTERFACE_INFO LONG LONG NumAdaptersNumAdapters; ; IP_ADAPTER_INDEX_MAP Adapter1; IP_ADAPTER_INDEX_MAP Adapter1;IP_INTERFACE_INFO, IP_INTERFACE_INFO, * *PIP_INTERFACE_INFO;PIP_INTERFACE_INFO;typedeftypedef structstruct _I
52、P_ADAPTER_INDEX_MAP _IP_ADAPTER_INDEX_MAP ULONG Index; ULONG Index; WCHAR WCHAR NameMAX_ADAPTER_NAMENameMAX_ADAPTER_NAME;IP_ADAPTER_INDEX_MAP, IP_ADAPTER_INDEX_MAP, * *PIP_ADAPTER_INDEX_MAP;PIP_ADAPTER_INDEX_MAP;【实实例例4】p首先创建一个首先创建一个Win32Win32控制台应用程序,项目名控制台应用程序,项目名称为称为GetInterfaceInfoGetInterfaceInfo
53、,其主文件名为,其主文件名为GetInterfaceInfo.cppGetInterfaceInfo.cpp。头文件和库文件头文件和库文件#include #include stdafx.hstdafx.h #include #include #include #include #include #include #pragma comment(lib, IPHLPAPI.lib)#pragma comment(lib, IPHLPAPI.lib)分配和释放内存空间分配和释放内存空间/ / 分配内存空间分配内存空间#define #define MALLOC(xMALLOC(x) ) Heap
54、Alloc(GetProcessHeapHeapAlloc(GetProcessHeap(), 0, (x) (), 0, (x) / / 释放内存空间释放内存空间#define #define FREE(xFREE(x) ) HeapFree(GetProcessHeapHeapFree(GetProcessHeap(), (), 0, (x)0, (x)在主函数在主函数_tmain()中声明变量中声明变量/ / 保存网络接口信息的结构体指针保存网络接口信息的结构体指针PIP_INTERFACE_INFO PIP_INTERFACE_INFO pInfopInfo; ;/ / 保存获取数据的
55、长度保存获取数据的长度ULONG ULONG ulOutBufLenulOutBufLen = 0; = 0;/ / 返回结果返回结果DWORD DWORD dwRetValdwRetVal = 0; = 0;/ _/ _tmaintmain()()函数的返回结果函数的返回结果intint iReturniReturn = 1; = 1;调用调用GetInterfaceInfo()函数函数/ / 第次调用第次调用GetInterfaceInfoGetInterfaceInfo,获取数据大小,保存到,获取数据大小,保存到ulOutBufLenulOutBufLen变量中变量中dwRetValdw
56、RetVal = = GetInterfaceInfo(NULLGetInterfaceInfo(NULL, &, &ulOutBufLenulOutBufLen););if (if (dwRetValdwRetVal = ERROR_INSUFFICIENT_BUFFER) = ERROR_INSUFFICIENT_BUFFER) pInfopInfo = (IP_INTERFACE_INFO = (IP_INTERFACE_INFO * *) ) MALLOC(ulOutBufLenMALLOC(ulOutBufLen);); if ( if (pInfopInfo = NULL) = N
57、ULL) printfprintf(无法分配无法分配GetInterfaceInfoGetInterfaceInfo函数需要的内存空间函数需要的内存空间。n);n); return 1; return 1; 调用调用GetInterfaceInfo()函数函数/ / 第次调用第次调用GetInterfaceInfoGetInterfaceInfo函数,获取需要的实际数据函数,获取需要的实际数据dwRetValdwRetVal = = GetInterfaceInfoGetInterfaceInfo( (pInfopInfo, &, &ulOutBufLenulOutBufLen););if (
58、if (dwRetValdwRetVal = NO_ERROR) = NO_ERROR) printfprintf(网络适配器数量网络适配器数量: %: %ldldnn, nn, pInfopInfo-NumAdaptersNumAdapters);); for ( for (intint i = 0; i ( i = 0; i -NumAdaptersNumAdapters; i+) ; i+) printfprintf(网络适配器索引网络适配器索引%d: %d: %ldldn, i,n, i, pInfopInfo-Adapteri.Index);-Adapteri.Index); pri
59、ntfprintf(网络适配器名称网络适配器名称%d: %d: %wswsnn, i,nn, i, pInfopInfo-Adapteri.Name);-Adapteri.Name); iReturniReturn = 0; = 0; else if (else if (dwRetValdwRetVal = ERROR_NO_DATA) = ERROR_NO_DATA) printfprintf(本地计算机上没有支持本地计算机上没有支持IPv4IPv4的网络适配器。的网络适配器。n);n); iReturniReturn = 0; = 0; else else printfprintf(Get
60、InterfaceInfoGetInterfaceInfo调用失败调用失败: %dn, : %dn, dwRetValdwRetVal);); iReturniReturn = 1; = 1; 等待用户响应等待用户响应/ / 释放内存空间释放内存空间FREE(FREE(pInfopInfo););/ / 按任意键继续按任意键继续system(pause);system(pause);return (return (iReturniReturn););1.6 获取本地计算机获取本地计算机IP地址表地址表p 可以通过调用可以通过调用GetIpAddrTableGetIpAddrTable()()函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《大西洋真鳕鱼皮胶原蛋白-肉桂精油复合膜的制备及应用研究》
- 2024年兴安c1客运从业资格证考试
- 2024年陕西客运资格证考试考什么
- 2024年郑州申请客运从业资格证条件
- 2024年泰州从业资格证客运考试题库
- 2023届新高考化学选考一轮总复习学案-热点18 常规仪器的创新使用
- 财务管理会计专业考试中级试卷与参考答案
- 工商管理案例分析
- 计算机专业简单求职信范文
- 2024年度N企业知识产权合同协议书
- (试卷)建瓯市2024-2025学年第一学期七年级期中质量监测
- 《安徽省二年级上学期数学期末试卷全套》
- 2024年企业业绩对赌协议模板指南
- “全民消防生命至上”主题班会教案(3篇)
- 2024年海南省高考历史试卷(含答案解析)
- 2024年湖北武汉大学化学与分子科学学院招聘1人(实验中心)历年高频难、易错点500题模拟试题附带答案详解
- 2024新能源光伏电站运行规程和检修规程
- 24秋国家开放大学《当代中国政治制度》形考任务1-4参考答案
- “以德育心,以心育德”
- 艰辛与快乐并存-压力与收获同在——我的课题研究故事
- 混凝土拦挡坝的施工方案
评论
0/150
提交评论