探測網(wǎng)絡中的在線設備_第1頁
探測網(wǎng)絡中的在線設備_第2頁
探測網(wǎng)絡中的在線設備_第3頁
探測網(wǎng)絡中的在線設備_第4頁
探測網(wǎng)絡中的在線設備_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、探測網(wǎng)絡中的在線設備探測網(wǎng)絡中的在線設備主要知識點主要知識點p獲取本地計算機的網(wǎng)絡信息獲取本地計算機的網(wǎng)絡信息p掃描子網(wǎng)中的地址掃描子網(wǎng)中的地址1 獲取本地計算機的網(wǎng)絡信息獲取本地計算機的網(wǎng)絡信息6.1.1 6.1.1 使用使用ipconfigipconfig命令獲取本地網(wǎng)絡信息命令獲取本地網(wǎng)絡信息6.1.2 6.1.2 獲取本地網(wǎng)絡信息的開發(fā)接口獲取本地網(wǎng)絡信息的開發(fā)接口IP Helper IP Helper APIAPI6.1.3 6.1.3 獲取本地網(wǎng)絡適配器信息獲取本地網(wǎng)絡適配器信息6.1.4 6.1.4 獲取本地主機名、域名和獲取本地主機名、域名和DNSDNS服務器信息服務器信息6.

2、1.5 6.1.5 獲取本地計算機網(wǎng)絡接口的基本信息獲取本地計算機網(wǎng)絡接口的基本信息6.1.6 6.1.6 獲取本地計算機獲取本地計算機IPIP地址表地址表6.1.7 6.1.7 添加和刪除添加和刪除IPIP地址地址1.1 使用使用ipconfig命令獲取本地網(wǎng)絡信命令獲取本地網(wǎng)絡信息息p在在Windows操作系統(tǒng)中,可以使用操作系統(tǒng)中,可以使用ipconfig命令獲命令獲取本地網(wǎng)絡信息。在命令窗口中執(zhí)行取本地網(wǎng)絡信息。在命令窗口中執(zhí)行ipconfig命令。命令。1 獲取本地計算機的網(wǎng)絡信息獲取本地計算機的網(wǎng)絡信息1.2 獲取本地網(wǎng)絡信息的開發(fā)接口獲取本地網(wǎng)絡信息的開發(fā)接口IP Helper

3、APIIP Helper APIIP Helper API可以實現(xiàn)的主要功能如下:可以實現(xiàn)的主要功能如下:p 獲取網(wǎng)絡配置的信息。獲取網(wǎng)絡配置的信息。p 管理網(wǎng)絡適配器(管理網(wǎng)絡適配器(Network AdapterNetwork Adapter),也就是通常所說的網(wǎng)卡,),也就是通常所說的網(wǎng)卡,它位于數(shù)據(jù)鏈路層。它位于數(shù)據(jù)鏈路層。p 管理網(wǎng)絡接口(管理網(wǎng)絡接口(InterfaceInterface)。接口表示節(jié)點上對應連接的部分,)。接口表示節(jié)點上對應連接的部分,它位于它位于IPIP層,因此可以在接口上綁定層,因此可以在接口上綁定IPIP地址。在地址。在IP Helper APIIP Hel

4、per API中中,網(wǎng)絡適配器和接口是一一對應的。,網(wǎng)絡適配器和接口是一一對應的。p 管理管理IPIP地址。地址。p 使用使用ARPARP協(xié)議。協(xié)議。p 獲取獲取IPIP和和ICMPICMP協(xié)議中的信息。協(xié)議中的信息。p 管理路由信息。管理路由信息。p 接收網(wǎng)絡事務的通知信息。接收網(wǎng)絡事務的通知信息。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 獲取本地網(wǎng)絡適配器信息獲取本地網(wǎng)絡適配器信息p在在iphlpapi.hiphlpapi.h中聲明了中聲明了GetAdaptersInfoGetAdaptersInfo()()函數(shù),調用該函數(shù)可以返回本地網(wǎng)絡適配函數(shù),調用該函數(shù)可以返回本地網(wǎng)絡適配器的基本信息,語法如下器的基本

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指定網(wǎng)絡適配器鏈表中的下一個網(wǎng)絡適配器ComboIndex預留變量AdapterName網(wǎng)絡適配器的名稱Description網(wǎng)絡適配器的描述信息AddressLength網(wǎng)絡適配器MAC地址的長度Address網(wǎng)絡適

11、配器的MAC地址Index網(wǎng)絡適配器索引。當一個網(wǎng)絡適配器被禁用然后又重新啟用后,該適配器的索引將發(fā)生變化。因此該值并不是網(wǎng)絡適配器的唯一標識Type網(wǎng)絡適配器的類型,包括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指定該網(wǎng)絡適配器上是否啟用了DHCP協(xié)議CurrentIpAddress預留變量IpAddressList

12、與此網(wǎng)絡適配器相關聯(lián)的IP地址列表GatewayList該網(wǎng)絡適配器上定義的IP地址的默認網(wǎng)關DhcpServer該網(wǎng)絡適配器上定義的DHCP服務器的IP地址HaveWins標明該網(wǎng)絡適配器是否啟用了WINSPrimaryWinsServer主WINS服務器的IP地址SecondaryWinsServer從WINS服務器的IP地址LeaseObtained當前的DHCP租借獲取的時間,只有在啟用DHCP時生效LeaseExpires當前的DHCP租借失效的時間,只有在啟用DHCP時生效實例實例p 通過一個實例來介紹如何使用通過一個實例來介紹如何使用Visual C+Visual C+編寫獲取本

13、編寫獲取本地網(wǎng)絡信息的程序。實例是一個控制臺項目。地網(wǎng)絡信息的程序。實例是一個控制臺項目。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 在主函數(shù)在主函數(shù)_ _tmaintmain()()中,首先需要聲明程序中使用的變量,代碼如中,首先需要聲明程序中使用的變量,代碼如下:下:/ / 指定獲取到的網(wǎng)絡信息結構體鏈表的指針指定獲取到的網(wǎng)絡信息結構體鏈表的指針I(yè)P_ADAPTER_INFO IP_ADAPTER_INFO * *pAdapterInfopAdapterInfo; ;/ / 保存獲取到的網(wǎng)絡信息結構體鏈表的長度保存獲取到的網(wǎng)絡信息結構體鏈表的長度ULONG ULONG ulOutBufLenulOutBufLen; ;/ / 返回調用編碼返回調用編碼DWOR

15、D DWORD dwRetValdwRetVal; ;/ / 在輪循所有網(wǎng)絡適配器信息時使用的單個結構體變量在輪循所有網(wǎng)絡適配器信息時使用的單個結構體變量PIP_ADAPTER_INFO PIP_ADAPTER_INFO pAdapterpAdapter; ;3獲取本地網(wǎng)絡適配器信息獲取本地網(wǎng)絡適配器信息p在獲取本地信息的過程中,需要兩次調用在獲取本地信息的過程中,需要兩次調用GetAdaptersInfoGetAdaptersInfo()()函數(shù)。第函數(shù)。第1 1次調用可以獲取返次調用可以獲取返回數(shù)據(jù)的大小,第回數(shù)據(jù)的大小,第2 2次調用使用前面獲取到的數(shù)據(jù)大小作為參數(shù),獲取實際的次調用使用

16、前面獲取到的數(shù)據(jù)大小作為參數(shù),獲取實際的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()(),獲取本地網(wǎng)絡信息到結構體,獲取本地網(wǎng)絡信息到結構體pAdapterInfopAdapterInfo中中if(if(dwRetValdwRetVal = = GetAdaptersInfoGetAdaptersInfo( (pAdapterInfopAdapterInfo, &, &ulOutBufLenulOu

19、tBufLen) != ERROR_SUCCESS) != ERROR_SUCCESS) printfprintf(GetAdaptersInfoGetAdaptersInfo Error! %dn, Error! %dn, dwRetValdwRetVal);); 4顯示本地網(wǎng)絡適配器信息顯示本地網(wǎng)絡適配器信息p現(xiàn)在本地網(wǎng)絡信息已經(jīng)讀取到現(xiàn)在本地網(wǎng)絡信息已經(jīng)讀取到pAdapterInfopAdapterInfo鏈表中,因為本地計算機上可能安裝多個網(wǎng)絡適鏈表中,因為本地計算機上可能安裝多個網(wǎng)絡適配器,所以需要使用配器,所以需要使用WhileWhile語句循環(huán)處理語句循環(huán)處理pAdapterIn

20、fopAdapterInfo鏈表中的每個鏈表中的每個IP_ADAPTER_INFOIP_ADAPTER_INFO結構體結構體,并顯示其中的網(wǎng)絡信息,代碼如下:,并顯示其中的網(wǎng)絡信息,代碼如下:/ / 從從pAdapterInfopAdapterInfo 獲取并顯示本地網(wǎng)絡信息獲取并顯示本地網(wǎng)絡信息pAdapterpAdapter = = pAdapterInfopAdapterInfo; ;while(while(pAdapterpAdapter) ) printfprintf(網(wǎng)絡適配器名網(wǎng)絡適配器名: t: tt%st%sn, n, pAdapterpAdapter-AdapterName

21、AdapterName););printfprintf(網(wǎng)絡適配器描述網(wǎng)絡適配器描述: : 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顯示本地網(wǎng)絡適配器信息顯示本地網(wǎng)絡適配器信息printf(IPprintf(IP地址地址: : tt%sntt%sn, , pAdapterpAdapter-IpAddressList.IpAddress.StringIpAddressList.IpAddress.String););printfpr

23、intf(子網(wǎng)掩碼子網(wǎng)掩碼: : tt%sntt%sn, , pAdapterpAdapter-IpAddressList.IpMask.StringIpAddressList.IpMask.String););printfprintf(網(wǎng)關網(wǎng)關: : 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); / / 處理下一個網(wǎng)絡適配器處理下一個網(wǎng)絡適配器pAdapterpAdapter = = pAdapterpAdapter-Next;-Next; 5釋放資源釋放資源p 處理完成后,需要將釋放到處理完成后,需要將釋放到pAdapterpAdapter鏈表所占用的內存空間鏈表所占用的內存空間,代碼如下:,代碼如下:/ / 釋放資源釋放資源if(if(pAdapterInfopAdapterInfo) )free(free(pAdapterInfopAdapterInfo););6暫停程序,等待用戶響應暫停程序,等

26、待用戶響應p 在顯示本地網(wǎng)絡信息后,程序處于暫停狀態(tài),等待用在顯示本地網(wǎng)絡信息后,程序處于暫停狀態(tài),等待用戶響應,代碼如下:戶響應,代碼如下:printfprintf(nn);(nn);system(pause); system(pause); return 0;return 0;p system(pause);system(pause);語句的功能是暫停系統(tǒng)的工作,并語句的功能是暫停系統(tǒng)的工作,并在控制臺輸出在控制臺輸出“按任意鍵繼續(xù)按任意鍵繼續(xù)”。用戶按任意鍵后。用戶按任意鍵后,程序繼續(xù)運行,執(zhí)行,程序繼續(xù)運行,執(zhí)行return 0;return 0;語句退出語句退出_ _tmaintma

27、in()()函函數(shù)。數(shù)。1.4 獲取本地主機名、域名和獲取本地主機名、域名和DNS服務器信服務器信息息p 調用調用GetNetworkParamsGetNetworkParams()()函數(shù)可以函數(shù)可以返回本地的網(wǎng)絡參數(shù)信息,返回本地的網(wǎng)絡參數(shù)信息,包括本地的主機名、域名和包括本地的主機名、域名和DNSDNS服務器列表等。服務器列表等。GetNetworkParamsGetNetworkParams()()函數(shù)的語法如下:函數(shù)的語法如下:DWORD DWORD GetNetworkParamsGetNetworkParams( ( _out PFIXED_INFO _out PFIXED_IN

28、FO pFixedInfopFixedInfo, , _in PULONG _in PULONG pOutBufLenpOutBufLen););p 參數(shù)參數(shù)pFixedInfopFixedInfo是輸出參數(shù),它是一個指向緩沖區(qū)的指針,緩是輸出參數(shù),它是一個指向緩沖區(qū)的指針,緩沖區(qū)中使用沖區(qū)中使用FIXED_INFOFIXED_INFO結構體保存獲取到的本地網(wǎng)絡參數(shù)信息結構體保存獲取到的本地網(wǎng)絡參數(shù)信息;p 參數(shù)參數(shù)pOutBufLenpOutBufLen是一個指向是一個指向ULONGULONG變量的指針,保存變量的指針,保存pFixedInfopFixedInfo緩沖區(qū)的大小緩沖區(qū)的大小。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獲取本地網(wǎng)絡參數(shù)信息的具體代碼。首獲取本地網(wǎng)絡參數(shù)信息的具體代碼。首先創(chuàng)建一個先創(chuàng)建一個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 在主函數(shù)在主函數(shù)_ _tmaintmai

33、n()()中,首先需要聲明程序中使用的變量,代碼中,首先需要聲明程序中使用的變量,代碼如下:如下:/ / 定義保存本地計算機網(wǎng)絡參數(shù)信息的結構體指針定義保存本地計算機網(wǎng)絡參數(shù)信息的結構體指針FIXED_INFO FIXED_INFO * * FixedInfoFixedInfo; ;/ / 保存獲取到的本地計算機網(wǎng)絡參數(shù)信息結構體鏈表的長度保存獲取到的本地計算機網(wǎng)絡參數(shù)信息結構體鏈表的長度ULONG ULONG ulOutBufLenulOutBufLen; ;/ / 調用調用GetNetworkParamsGetNetworkParams()()函數(shù)的返回值函數(shù)的返回值DWORD DWORD

34、 dwRetValdwRetVal; ;/ / 保存所有保存所有DNSDNS服務器的服務器的IPIP地址列表地址列表IP_ADDR_STRING IP_ADDR_STRING * * pIPAddrpIPAddr; ;3獲取本地網(wǎng)絡參數(shù)信息獲取本地網(wǎng)絡參數(shù)信息p 需要需要兩次調用兩次調用GetNetworkParamsGetNetworkParams()()函數(shù)。第函數(shù)。第1 1次調用可以獲取返回數(shù)次調用可以獲取返回數(shù)據(jù)的大小,第據(jù)的大小,第2 2次調用使用前面獲取到的數(shù)據(jù)大小作為參數(shù),獲取實次調用使用前面獲取到的數(shù)據(jù)大小作為參數(shù),獲取實際的際的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()()函數(shù),獲取返回結果的大小到函數(shù),獲取返回結果的大小到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()()函數(shù),以前面獲取的函數(shù),以前面獲取的ulOutBufLenulOutBufLen作為參數(shù),作為參數(shù),if ( if ( dwRetValdwRetVal = = GetNetworkParamsGetNetworkParams( ( FixedInfoFixe

38、dInfo, &, &ulOutBufLenulOutBufLen ) != ERROR_SUCCESS) ) != ERROR_SUCCESS) printfprintf( ( 調用調用GetNetworkParamsGetNetworkParams()()函數(shù)失敗。返回值函數(shù)失敗。返回值: %08xn, : %08xn, dwRetValdwRetVal ); ); 4顯示本地網(wǎng)絡參數(shù)信息顯示本地網(wǎng)絡參數(shù)信息else else printfprintf( ( 主機名主機名: %: %snsn, , FixedInfoFixedInfo-HostNameHostName ); );print

39、fprintf( ( 域名域名: %: %snsn, , FixedInfoFixedInfo-DomainNameDomainName ); ); printf(nprintf(n=網(wǎng)絡信息網(wǎng)絡信息=n); =n); / / 生成節(jié)點類型字符串生成節(jié)點類型字符串 char char* * NodeTypeNodeType; ; 4顯示本地網(wǎng)絡參數(shù)信息顯示本地網(wǎng)絡參數(shù)信息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顯示本地網(wǎng)絡參數(shù)信息顯示本地網(wǎng)絡參數(shù)信息printfprintf(節(jié)點類型節(jié)點類型.:%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暫停程序,等待用戶響應暫停程序,等待用戶響應 在顯示本地網(wǎng)絡信息后,程序處于暫停狀態(tài),等待在顯示本地網(wǎng)絡信息

46、后,程序處于暫停狀態(tài),等待用戶響應,代碼如下:用戶響應,代碼如下:printf(nn);system(pause); return 0; 1.5 獲取本地計算機網(wǎng)絡接口的基本信息獲取本地計算機網(wǎng)絡接口的基本信息1 1獲取本地計算機的網(wǎng)絡接口數(shù)量獲取本地計算機的網(wǎng)絡接口數(shù)量2 2獲取本地計算機網(wǎng)絡接口的基本信息獲取本地計算機網(wǎng)絡接口的基本信息1獲取本地計算機的網(wǎng)絡接口數(shù)量獲取本地計算機的網(wǎng)絡接口數(shù)量p 可以通過調用可以通過調用GetNumberOfInterfaces()GetNumberOfInterfaces()函數(shù)獲取本地計算機的網(wǎng)絡接函數(shù)獲取本地計算機的網(wǎng)絡接口數(shù)量,語法如下:口數(shù)量,語

47、法如下:DWORD GetNumberOfInterfaces(DWORD GetNumberOfInterfaces( _out PDWORD _out PDWORD pdwNumIfpdwNumIf););參數(shù)參數(shù)pdwNumIfpdwNumIf用于接受獲取到的本地計算機網(wǎng)絡接口數(shù)量用于接受獲取到的本地計算機網(wǎng)絡接口數(shù)量。函數(shù)函數(shù)的返回值為的返回值為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) / / 用于獲取接口數(shù)量用于獲取接口數(shù)量DWORD DWORD dwNumIfdwNumIf; ;/ / 返回值返回值DWORD DWORD dwRetValdwRetVal; ;if(dwRetValif(dwRetVal = = Get

49、NumberOfInterfaces(&dwNumIfGetNumberOfInterfaces(&dwNumIf) = NO_ERROR) = NO_ERROR) printfprintf(本地網(wǎng)絡接口數(shù)量為本地網(wǎng)絡接口數(shù)量為: %d, : %d, dwNumIfdwNumIf);); elseelse printfprintf(調用調用GetNumberOfInterfacesGetNumberOfInterfaces()()函數(shù)時出現(xiàn)錯誤。函數(shù)時出現(xiàn)錯誤。);); printf(nnprintf(nn););system(pausesystem(pause); ); return 0;r

50、eturn 0; 2獲取本地計算機網(wǎng)絡接口的基本信息獲取本地計算機網(wǎng)絡接口的基本信息p 可以通過調用可以通過調用GetInterfaceInfoGetInterfaceInfo()()函數(shù)獲取本地計算機函數(shù)獲取本地計算機網(wǎng)絡接口的基本信息,語法如下:網(wǎng)絡接口的基本信息,語法如下: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首先創(chuàng)建一個首先創(chuàng)建一個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)在主函數(shù)在主函數(shù)_tmain()中聲明變量中聲明變量/ / 保存網(wǎng)絡接口信息的結構體指針保存網(wǎng)絡接口信息的結構體指針PIP_INTERFACE_INFO PIP_INTERFACE_INFO pInfopInfo; ;/ / 保存獲取數(shù)據(jù)的

55、長度保存獲取數(shù)據(jù)的長度ULONG ULONG ulOutBufLenulOutBufLen = 0; = 0;/ / 返回結果返回結果DWORD DWORD dwRetValdwRetVal = 0; = 0;/ _/ _tmaintmain()()函數(shù)的返回結果函數(shù)的返回結果intint iReturniReturn = 1; = 1;調用調用GetInterfaceInfo()函數(shù)函數(shù)/ / 第次調用第次調用GetInterfaceInfoGetInterfaceInfo,獲取數(shù)據(jù)大小,保存到,獲取數(shù)據(jù)大小,保存到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函數(shù)需要的內存空間函數(shù)需要的內存空間。n);n); return 1; return 1; 調用調用GetInterfaceInfo()函數(shù)函數(shù)/ / 第次調用第次調用GetInterfaceInfoGetInterfaceInfo函數(shù),獲取需要的實際數(shù)據(jù)函數(shù),獲取需要的實際數(shù)據(jù)dwRetValdwRetVal = = GetInterfaceInfoGetInterfaceInfo( (pInfopInfo, &, &ulOutBufLenulOutBufLen););if (

58、if (dwRetValdwRetVal = NO_ERROR) = NO_ERROR) printfprintf(網(wǎng)絡適配器數(shù)量網(wǎng)絡適配器數(shù)量: %: %ldldnn, nn, pInfopInfo-NumAdaptersNumAdapters);); for ( for (intint i = 0; i ( i = 0; i -NumAdaptersNumAdapters; i+) ; i+) printfprintf(網(wǎng)絡適配器索引網(wǎng)絡適配器索引%d: %d: %ldldn, i,n, i, pInfopInfo-Adapteri.Index);-Adapteri.Index); pri

59、ntfprintf(網(wǎng)絡適配器名稱網(wǎng)絡適配器名稱%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的網(wǎng)絡適配器。的網(wǎng)絡適配器。n);n); iReturniReturn = 0; = 0; else else printfprintf(Get

60、InterfaceInfoGetInterfaceInfo調用失敗調用失敗: %dn, : %dn, dwRetValdwRetVal);); iReturniReturn = 1; = 1; 等待用戶響應等待用戶響應/ / 釋放內存空間釋放內存空間FREE(FREE(pInfopInfo););/ / 按任意鍵繼續(xù)按任意鍵繼續(xù)system(pause);system(pause);return (return (iReturniReturn););1.6 獲取本地計算機獲取本地計算機IP地址表地址表p 可以通過調用可以通過調用GetIpAddrTableGetIpAddrTable()()函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論