在vb中使用Iphlpapidll獲取網(wǎng)絡(luò)信息_第1頁
在vb中使用Iphlpapidll獲取網(wǎng)絡(luò)信息_第2頁
在vb中使用Iphlpapidll獲取網(wǎng)絡(luò)信息_第3頁
在vb中使用Iphlpapidll獲取網(wǎng)絡(luò)信息_第4頁
在vb中使用Iphlpapidll獲取網(wǎng)絡(luò)信息_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、在 vb 中使用 Iphlpapi.dll 獲取網(wǎng)絡(luò)信息第一章 前言Windows 98 以上的操作系統(tǒng)在系統(tǒng)目錄下都帶有 iphlpapi.dll 這個動態(tài)庫文件,它可以 幫助程序員方便地獲取計算機(jī)網(wǎng)絡(luò)信息。 對于 C 程序員來說, 只要有 iphlpapi 的頭文件, 調(diào) 用 iphlpapi.dll 是很簡單的事,但是對于 Vb 程序員則是比較困難的問題。本文將就 Vb 中調(diào) 用 iphlpapi.dll 來介紹 iphlpapi 的使用。第二章 IPHLPAPI 的主要函數(shù)本章將根據(jù) iphlpapi.dll 提供函數(shù)的功能來分別講解 iphlpapi.dll 的主要函數(shù)。編程時, 我

2、們可以調(diào)用這些函數(shù)迅速獲得本機(jī)大部分網(wǎng)絡(luò)信息。第一節(jié) 獲取本機(jī)網(wǎng)絡(luò)適配器的信息1、函數(shù):Private Declare Function GetAdaptersInfo Lib iphlpapi.dll ( IpAdapterInfo As Any, pOutBufLen As Long) As Long參數(shù)說明:pAdapterInfo :輸出 指向一個 IP_ADAPTER_INFO 類型的連接表;pOutBufLen :輸入 指定 pAdapterInfo 參數(shù)的大小,如果指定大小不足, GetAdaptersInfo 將此參數(shù)置為所需大小 , 并返回一個 ERROR_BUFFER_OV

3、ERFLOW 錯誤代碼。返回值:成功,返回 0;失敗,返回錯誤代碼。備注:此函數(shù)不能獲得回環(huán)( Loopback )適配器的信息2、使用到的類型: IP_ADAPTER_INFO 類型:包含本機(jī)網(wǎng)絡(luò)適配器信息。Type IP_ADAPTER_INFONext As Long 在適配器列表中指向下一個適配器適配器名ComboIndex As Long保留未用AdapterName As String * MAX_ADAPTER_NAME_LENGTHDescription As String * MAX_ADAPTER_DESCRIPTION_LENGTH對網(wǎng)卡的描述,實際上好象是驅(qū)動程序的名字

4、AddressLength As Long 適配器物理地址的長度Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte物理地址, 每個字節(jié)存放一個十六進(jìn)制的數(shù)值Index As Long適配器索引號Type As Long適配器類型,包含以下類型的適配器(見下表) :常量名稱值說明MIB_IF_TYPE_ETHERNET6以太網(wǎng)適配器MIB_IF_TYPE_TOKENRING9令牌環(huán)適配器MIB_IF_TYPE_FDDI15光纖接口適配器MIB_IF_TYPE_PPP23點到點協(xié)議適配器MIB_IF_TYPE_LOOPBACK24回環(huán)( Loopback

5、 )適配器MIB_IF_TYPE_SLIP28串行適配器MIB_IF_TYPE_OTHER其他值其他類型的適配器DhcpEnabled As Long 適配器是否啟用了動態(tài)主機(jī)配置協(xié)議( DHCP )CurrentIpAddress As Long 保留(當(dāng)前使用的 IP 地址?)IpAddressList As IP_ADDR_STRING 綁定到此適配器的 IP 地址鏈表GatewayList As IP_ADDR_STRING 默認(rèn)網(wǎng)關(guān)地址鏈表DhcpServer As IP_ADDR_STRINGDHCP 服務(wù)器地址, DhcpEnabled=TRUE 時有效HaveWins As B

6、yte是否啟用 WINS ( Windows Internet Name Service )輔 WINS 地址PrimaryWinsServer As IP_ADDR_STRING 主 WINS 地址SecondaryWinsServer As IP_ADDR_STRINGLeaseObtained As Long 向 DHCP 服務(wù)器租用 IP 地址的時間, DhcpEnabled=TRUE 時有 效LeaseExpires As Long 向 DHCP 服務(wù)器租用 IP 地址到期時間, DhcpEnabled=TRUE 時有效End Type IP_ADDR_STRING 描述 IP 地址

7、鏈表的節(jié)點。Type IP_ADDR_STRINGNext As Long 指向列表中下一個 IP_ADDR_STRING 類型。為空,則是最后一個地址IpAddress As String * 16 點式十進(jìn)制字串表示 Ip 地址IpMask As String * 16子網(wǎng)掩碼Context As Long 網(wǎng)絡(luò) IP 地址標(biāo)識,符合 AddIPAddress 和 DeleteIPAddress 函數(shù)中的網(wǎng) 接口關(guān)聯(lián)參數(shù)。End Type3、使用到的常量:Const MAX_ADAPTER_NAME_LENGTH = 260/適配器名字長度Const MAX_ADAPTER_ADDRESS

8、_LENGTH = 8/適配器物理地址長度Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132/適配器描述長度4、主要代碼分析: 調(diào)用函數(shù) GetAdaptersInfo ,以及在調(diào)用中應(yīng)該注意的問題:對函數(shù) GetAdaptersInfo 進(jìn)行 兩次調(diào)用, 第一次調(diào)用獲得參數(shù) pOutBufLen 的實際大小; 第二次調(diào)用獲取 IpAdapterInfo 的 數(shù)據(jù)。代碼如下:pOutBufLen = 0error = GetAdaptersInfo(ByVal 0&, pOutBufLen)ReDim AdapterInfoBuffer(pOutBufLen

9、- 1) error = GetAdaptersInfo(AdapterInfoBuffer(0), pOutBufLen) IpAdapterInfo 中可能包含多個 IP_ADAPTER_INFO 類型,因此下一步使用 copymemory 函數(shù)將數(shù)據(jù)拷貝到 IP_ADAPTER_INFO 類型:CopyMemory AdapterInfo, AdapterInfoBuffer(0), pOutBufLen 獲得了首個 IP_ADAPTER_INFO 類型后,根據(jù) IP_ADAPTER_INFO 類型中的 Next 成員 并調(diào)用循環(huán)語句 (DoLoop Until) 來獲得所有 IP_AD

10、APTER_INFO 類型:DopAdapt = AdapterInfo.NextIf pAdapt 0 ThenCopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSizeEnd IfLoop Until pAdapt = 0 由每次獲得的 IP_ADAPTER_INFO 類型來獲取網(wǎng)絡(luò)適配器物理地址:PhysicalAddress = For i = 0 To AdapterInfo.AddressLength - 1PhysicalAddress = PhysicalAddress & Hex(AdapterInfo.Address(i)If

11、 i AdapterInfo.AddressLength - 1 ThenPhysicalAddress = PhysicalAddress & -End IfNext 對于屬 于 IP_ADDR_STRING 類 型的 IpAddressList 、 GatewayList 、 DhcpServer 、 PrimaryWinsServer 、 SecondaryWinsServer,同樣要注意 IP_ADDR_STRING 中 Next 成員的 使用:DoCopyMemory IP_ADDR_STRING , AdapterInfo.IpAddressList, LenB(IP_ADDR_S

12、TRING)Print IP Address: & IP_ADDR_STRING.IpAddressPrint Subnet Mask: & IP_ADDR_STRING .IpMaskpAddrStr = IP_ADDR_STRING .NextIf pAddrStr 0 ThenCopyMemory IP_ADDR_STRING .IpAddressList, ByVal pAddrStr, _LenB(IP_ADDR_STRING .IpAddressList)End IfLoop Until pAddrStr = 05、運行時截圖:第二節(jié) 獲取 MIB-II 接口表1、函數(shù):Priva

13、te Declare Function GetIfTable Lib iphlpapi.dll (ByRef pIfTable As MIB_IFTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long參數(shù)說明:pIfTable :輸入 成功的話指向一個 MIB_IFTABLE 類型的緩沖區(qū)。PdwSize:輸入,輸出指定 pIfTable 參數(shù)所占緩沖區(qū)的大小, 如果緩沖區(qū)不是足夠大返回接 口表,函數(shù)設(shè)置這個參數(shù)等于所必須的緩沖區(qū)大小。bOrder:輸入 指定返回的接口表是否按接口序號按上升順序排列。如果參數(shù)為TRUE 那么按上升

14、順序排列。返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型:MIB_IFTABLE 包含接口表Private Type MIB_IFTABLEdwNumEntries As Long當(dāng)前網(wǎng)絡(luò)接口的總數(shù)MIB_Table(9) As MIB_IFROW指向一個包含 MIB_IFROW 類型的指針End TypeMIB_IFROW 保存接口信息Private Type MIB_IFROWwszName(0 To 511) As Byte 接口名稱的 Unicode 字符串,必須為 512 字節(jié)dwIndex As Long接口編號dwType As Long接口類型,參看 IP_ADA

15、PTER_INFO 類型的 Type 成員dwMtu As Long最大傳輸單元dwSpeed As Long接口速度(字節(jié))dwPhysAddrLen As Long由 bPhysAddr 獲得的物理地址有效長度bPhysAddr(0 To 7) As Byte 物理地址dwAdminStatus As Long接口管理狀態(tài)dwOperStatus As Long操作狀態(tài),以下值之一:網(wǎng)絡(luò)適配器被禁止, 例如: 地址沖突常量名稱 值 說明1 沒有連接MIB_IF_OPER_STA TUS_NON_OPERATIONAL 0MIB_IF_OPER_STA TUS_UNREACHABLEMIB_

16、IF_OPER_STA TUS_DISCONNECTED2 局域網(wǎng):電纜未連接;廣域網(wǎng):無載波信號廣域網(wǎng)適配器連接中廣域網(wǎng)適配器連接上遠(yuǎn)程對等點局域網(wǎng)適配器默認(rèn)狀態(tài)MIB_IF_OPER_STA TUS_CONNECTING3MIB_IF_OPER_STA TUS_CONNECTED4MIB_IF_OPER_STA TUS_OPERA TIONAL5dwLastChange As Long操作狀態(tài)最后改變的時間dwInOctets As Long總共收到 (字節(jié) )dwInUcastPkts As Long總共收到 (unicast 包 )dwInNUcastPkts As Long總共收到

17、(non-unicast 包 ),包括廣播包和多點傳送包dwInDiscards As Long收到后丟棄包總數(shù)(即使沒有錯誤)dwInErrors As Long收到出錯包總數(shù)dwInUnknownProtos As Long 收到后因協(xié)議不明而丟棄的包總數(shù)dwOutOctets As Long總共發(fā)送 (字節(jié) )dwOutUcastPkts As Long總共發(fā)送 (unicast 包 )dwOutNUcastPkts As Long 總共發(fā)送 (non-unicast 包 ),包括廣播包和多點傳送包dwOutDiscards As Long發(fā)送丟棄包總數(shù)(即使沒有錯誤)dwOutErro

18、rs As Long發(fā)送出錯包總數(shù)dwOutQLen As Long發(fā)送隊列長度dwDescrLen As Long bDescr 部分有效長度bDescr(0 To 255) As Byte接口描述End Type3、使用到的常量:無4、主要代碼分析: 分配足夠大的緩存空間,然后直接調(diào)用 GetIfTable 獲得接口信息:Dim ifT As MIB_IFTABLELenIfT = Len(ifT)RValue = GetIfTable(ifT, LenIfT, True) 由 ifT.dwNumEntries 獲得接口數(shù)量,然后用 for next 循環(huán)獲取每個接口信息:For i =

19、0 To ifT.dwNumEntries - 1Print 接口編號: & ifT.MIB_Table(i).dwIndexPrint 接口速度: & ifT.MIB_Table(i).dwSpeedNext 物理地址的獲得:PhysAddr = Right(00 & Hex(ifT.MIB_Table(i).bPhysAddr(0), 2)For j = 1 To 5PhysAddr = PhysAddr & - & Right(00 & Hex(ifT.MIB_Table(i).bPhysAddr(j), 2)NextPrint 物理地址: & PhysAddr5、運行時截圖:第三節(jié) 獲

20、取本機(jī) TCP 信息列表1、函數(shù):AsPrivate Declare Function GetTcpStatistics Lib iphlpapi.dll (ByRef pTcpStats MIB_TCPSTATS) As Long參數(shù)說明:pStats :輸出 指向一個接收本機(jī)TCP 統(tǒng)計表的 MIB_TCPSTA TS 類型返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型: MIB_TCPSTATS 包含本機(jī)上正運行的 TCP 協(xié)議的統(tǒng)計表Type MIB_TCPSTATSdwRtoAlgorithm As Long 指定重傳輸 (RTO: retransmission tim

21、e-out) 算法dwRtoMin As Long重傳輸超時的最小值,毫秒dwRtoMax As Long重傳輸超時的最大值,毫秒dwMaxConn As Long連接最大數(shù)目,如果為 -1,則連接的最大數(shù)目是可變的dwActiveOpens As Long主動連接數(shù)目,即客戶端正向服務(wù)器進(jìn)行連接數(shù)目dwPassiveOpens As Long被動連接數(shù)目,即服務(wù)器監(jiān)聽連接客戶端請求數(shù)目dwAttemptFails As Long嘗試連接失敗的次數(shù)dwEstabResets As Long對已建立的連接實行重設(shè)的次數(shù)dwCurrEstab As Long目前已建立的連接dwInSegs As

22、Long收到分段數(shù)據(jù)報的數(shù)目dwOutSegs As Long傳輸?shù)姆侄螖?shù)據(jù)報數(shù)目,不包括轉(zhuǎn)發(fā)的數(shù)據(jù)包dwRetransSegs As Long轉(zhuǎn)發(fā)的分段數(shù)據(jù)報數(shù)目dwInErrs As Long收到錯誤的數(shù)目dwOutRsts As Long重設(shè)標(biāo)志設(shè)定后傳輸分段數(shù)據(jù)報數(shù)目dwNumConns As Long累計連接的總數(shù)End Type3、使用到的常量:無4、主要代碼分析: 定義一個 MIB_TCPSTA TS 類型變量,然后直接調(diào)用 GetTcpStatistics :Dim mTcpS As MIB_TCPSTA TSRValue = GetTcpStatistics(mTcpS)5、

23、運行時截圖:第四節(jié) 獲取當(dāng)前 TCP 連接情況1、函數(shù):Private Declare Function GetTcpTable Lib iphlpapi.dll (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long參數(shù)說明:pTcpTable: 輸入 指向包含了 MIB_TCPTABLE 類型的 TCP 連接表。pdwSize: 輸入,輸出 指向 pTcpTable 參數(shù)的緩沖區(qū)大小,如果分配的緩沖不夠,那么就等 于最小需要緩沖。bOrder:輸入指定連接表是否按照類型排列

24、。 TRUE ,那么就按以下類型順序排列: Local IP address, Local port , Remote IP address, Remote port。返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型: MIB_TCPTABLE 類型包含 Tcp 連接表。Type MIB_TCPTABLEdwNum_Of_Entries As Long 當(dāng)前包含 MIB_TCPROW 類型的總數(shù)TCP_Table() As MIB_TCPROW 指向包含 MIB_TCPROW 類型的指針End Type備注:實際使用中可以定義: TCP_Table(120) As MIB_TCPR

25、OW 預(yù)留足夠緩存 MIB_TCPROW 類型包含了 TCP 連接信息。Type MIB_TCPROWdwState As Long TCP 連接狀態(tài),為以下值之一:值說明1關(guān)閉2正在監(jiān)聽3同步發(fā)送4同步接收5已建立6FINWAIT 17FINWAIT 28關(guān)閉等待9正在關(guān)閉MIB_TCP_STA TE_CLOSING最后一次確認(rèn)常量名稱MIB_TCP_STA TE_CLOSEDMIB_TCP_STA TE_LISTENMIB_TCP_STA TE_SYN_SENTMIB_TCP_STA TE_SYN_RCVDMIB_TCP_STA TE_ESTABMIB_TCP_STA TE_FIN_WAI

26、T1MIB_TCP_STA TE_FIN_WAIT2MIB_TCP_STA TE_CLOSE_W AITMIB_TCP_STA TE_LAST_ACK 10MIB_TCP_STA TE_TIME_W AIT 11時間等待刪除連接MIB_TCP_STA TE_DELETE_TCB 12dwLocalAddr As Long本地 IPdwLocalPort As Long本地端口dwRemoteAddr As Long遠(yuǎn)程機(jī)器 IPdwRemotePort As Long遠(yuǎn)程機(jī)器端口End Type3、使用到的常量:無4、主要代碼分析: 定義一個 MIB_TCPTABLE 類型的變量, 因為我們在

27、定義 MIB_TCPTABLE 類型的時候預(yù) 留了足夠的緩存 ( TCP_Table(120) As MIB_TCPROW ) ,因此獲得定義變量的大小后直接調(diào)用 GetTcpTable,但是要注意的是,實際獲得的 TCP 連接的總數(shù)應(yīng)為 dwNum_Of_Entries 的值, 一般小于我們的定義( 120):Dim mtcp As MIB_TCPTABLEmtcplen = Len(mtcp)rvalue = GetTcpTable(mtcp, mtcplen, True)使用 ForNext 循環(huán)遍歷各個 Tcp 連接的信息:For i = 0 To mtcp.dwNum_Of_Entr

28、ies - 1Print mtcp.TCP_Table(i).dwLocalAddr & - & mtcp.TCP_Table(i).dwRemoteAddrNext 因為 MIB_TCPROW 類型中 dwLocalAddr 、dwRemoteAddr 均為一長整型數(shù),因此要通過 轉(zhuǎn)換來獲得 IP 地址:Dim Ip_Buf(1 To 4) As ByteCopyMemory Ip_Buf(1), dwLocalAddr, 4GetIp = CStr(Ip_Buf(1) + . + CStr(Ip_Buf(2) + . + CStr(Ip_Buf(3) + . + CStr(Ip_Buf(4

29、) 因為 MIB_TCPROW 類型中 dwLocalPort 、dwRemotePort 均為一長整型數(shù), 因此要通過轉(zhuǎn) 換來獲得端口:GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 2565、運行時截圖:第五節(jié) 獲取本機(jī) UDP 信息列表1、函數(shù):Private Declare Function GetUdpStatistics Lib iphlpapi.dll (pStats As MIB_UDPSTATS) As Long參數(shù)說明:pStats: 輸出指向一個接收到本機(jī) UDP 統(tǒng)計表的 MIB_UDPSTA TS 類型返回值:

30、成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型:MIB_UDPSTATS 包含 UDP (User Datagram Protocol) 運行信息Type MIB_UDPSTATSdwInDatagrams As Long已收到數(shù)據(jù)報數(shù)目dwNoPorts As Long因為端口號有誤而丟棄的數(shù)據(jù)報數(shù)目dwInErrors As Long已收到多少錯誤數(shù)據(jù)報,不包括dwNoPorts 中統(tǒng)計的數(shù)目dwOutDatagrams As Long已傳輸數(shù)據(jù)報數(shù)目dwNumAddrs As LongUDP 監(jiān)聽者表中接口數(shù)目End Type3、使用到的常量:無4、主要代碼分析:定義一個 MIB_

31、UDPSTA TS 類型的變量,然后直接使用 GetUdpStatistics 函數(shù)即可:Dim Mudp As MIB_UDPSTATS r = GetUdpStatistics(Mudp)5、運行時截圖:第六節(jié) 獲取當(dāng)前 UDP 連接情況1、函數(shù):Private Declare Function GetUdpTable Lib iphlpapi.dll (ByRef pTcpTable As MIB_UDPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long參數(shù)說明:pUdpTable: 輸出 指向一個緩存作為 MIB_UD

32、PTABLE 類型用來接收 UDP 監(jiān)聽表。pdwSize:輸入或輸出 輸入,指定 pUdpTable 參數(shù)所占緩存大小; 輸出, 如果指定的緩存大 小不足,將設(shè)置為所須的大小。bOrder:輸入指定返回的表是否按分類排列。 如果為 TRUE ,按以下分類排列: 1、IP 地址;2、端口。返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型: MIB_UDPTABLE 包含 MIB_UDPROW 類型Type MIB_UDPTABLEdwNum_Of_Entries As Long當(dāng)前 UDP 連接的總數(shù)UDP_Table() As MIB_UDPROW指向包含 MIB_UDPROW

33、類型的指針預(yù)留足夠緩存End Type備注:實際使用中可以定義: UDP_Table(120) As MIB_UDPROW MIB_UDPROW 包含發(fā)送和接收UDP 數(shù)據(jù)包的地址信息。它的格式如下:Type MIB_UDPROWdwLocalAddr As Long 本地 IPdwLocalPort As Long本地端口End Type3、使用到的常量:4、主要代碼分析: 定義一個 MIB_TCPTABLE 類型的變量, 因為我們在定義 MIB_TCPTABLE 類型的時候預(yù) 留了足夠的緩存 ( TCP_Table(120) As MIB_TCPROW ) ,因此獲得定義變量的大小后直接調(diào)

34、用 GetTcpTable。但是要注意的是,實際獲得的 UDP 連接的總數(shù)應(yīng)為 dwNum_Of_Entries 的值, 一般小于我們的定義( 120):Dim Mudp As MIB_UDPTABLEmudplen = Len(Mudp)rvalue = GetUdpTable(Mudp, mudplen, True) 使用 ForNext 循環(huán)遍歷各個 Tcp 連接的信息:For i = 0 To Mudp.dwNum_Of_Entries - 1Print Mudp.UDP_Table(i).dwLocalAddr & : & Mudp.UDP_Table(i).dwLocalPortN

35、ext 因為 MIB_UDPTABLE 類型中 dwLocalAddr 為一長整型數(shù), 因此要通過轉(zhuǎn)換來獲得 IP 地 址:Dim Ip_Buf(1 To 4) As ByteCopyMemory Ip_Buf(1), dwLocalAddr, 4GetIp = CStr(Ip_Buf(1) + . + CStr(Ip_Buf(2) + . + CStr(Ip_Buf(3) + . + CStr(Ip_Buf(4) 因為 MIB_UDPTABLE 類型中 dwLocalPort 為一長整型數(shù),因此要通過轉(zhuǎn)換來獲得端口:GetPort = dwLocalPort/ 256 + (dwLocalP

36、ort Mod 256) * 2565、運行時截圖:第七節(jié) 獲取本機(jī)網(wǎng)間控制報文協(xié)議( ICMP : Internet Control Message Protocol )信息1、函數(shù):Private Declare Function GetIcmpStatistics Lib iphlpapi.dll (pStats As MIB_ICMP) As Long 參數(shù)說明:pStats:輸出 指向一個本機(jī)收到 ICMP 統(tǒng)計表的 MIB_ICMP 類型。 返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型: MIB_ICMP 為特殊適配器包含網(wǎng)間控制報文協(xié)議(ICMP : Intern

37、et Control MessageProtocol )統(tǒng)計表。Public Type MIB_ICMPstats As MIBICMPINFO 指定 MIBICMPINFO 類型包含了電腦 ICMP 統(tǒng)計信息表End TypeMIBICMPINFO 通過 MIBICMPSTA TS 結(jié)構(gòu)存儲的接收或發(fā)出的 ICMP 信息。Public Type MIBICMPINFOicmpInStats As MIBICMPSTA TS 指向 MIBICMPSTA TS 類型,包含接收數(shù)據(jù)icmpOutStats As MIBICMPSTATS 指向 MIBICMPSTA TS 類型,包含發(fā)出數(shù)據(jù)End

38、Type MIBICMPSTATS 包含 ICMP (Internet Control Message Protocol) 接收或發(fā)出的統(tǒng)計信息。Public Type MIBICMPSTATSdwMsgs As Long已收發(fā)多少消息dwDestUnreachs As Long已收發(fā)多少 目標(biāo)不可抵達(dá) 消息dwTimeExcds As Long已收發(fā)多少生存期已過消息dwParmProbs As Long已收發(fā)多少表明數(shù)據(jù)報有錯誤 IP 信息的消息dwSrcQuenchs As Long已收發(fā)多少源結(jié)束消息dwRedirects As Long已收發(fā)多少重定向消息dwEchos As Lon

39、g已收發(fā)多少 ICMP 響應(yīng)請求dwEchoReps As Long已收發(fā)多少 ICMP 響應(yīng)應(yīng)答dwTimestamps As Long已收發(fā)多少時間戳請求dwTimestampReps As Long已收發(fā)多少時間戳響應(yīng)dwAddrMasks As Long已收發(fā)多少地址掩碼dwAddrMaskReps As Long 已收發(fā)多少地址掩碼響應(yīng)dwErrors As Long已收發(fā)多少錯誤End Type3、使用到的常量:無4、主要代碼分析:定義一個 MIB_ICMP 類型的變量,然后直接調(diào)用 GetIcmpStatistics :Dim Micmp As MIB_ICMP r = GetI

40、cmpStatistics(Micmp)使用 Micmp.stats.icmpInStats 成員獲取收到的數(shù)據(jù)信息;使用 Micmp.stats.icmpOutStats 成員獲取發(fā)送的數(shù)據(jù)信息。5、運行時截圖:第八節(jié) 獲取本機(jī)網(wǎng)絡(luò)參數(shù)1、函數(shù):Private Declare Function GetNetworkParams Lib IPHlpApi.dll (FixedInfo As Any, pOutBufLenAs Long) As Long參數(shù)說明:pFixedInfo : 輸出 指向一個接收本機(jī)網(wǎng)絡(luò)參數(shù)的數(shù)據(jù)塊。pOutBufLen : 輸入,輸出 指向一個 ULONG 變量,改

41、變量指定了 FixedInfo 參數(shù)的大小。 如果指定的大小不夠大, 將設(shè)置為須要的大小并返回 ERROR_BUFFER_OVERFLOW 錯誤。返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型:IP_ADDR_STRING 描述 IP 地址鏈表的節(jié)點。見 第二章 第一節(jié) 2 FIXED_INFO 包含電腦網(wǎng)絡(luò)參數(shù)信息Type FIXED_INFOHostName As String * MAX_HOSTNAME_LEN本機(jī)名CurrentDnsServer As Long 址DomainName As String * MAX_DOMAIN_NAME_LEN本機(jī) DNS 域保留,

42、使用 DnsServerList 獲取 DNS 服務(wù)器的 IP 地DnsServerList As IP_ADDR_STRING 本機(jī)采用的 DNS 服務(wù)器鏈表節(jié)點類型,以下值:NodeType As Long1 BROADCAST_NODETYPE2 PEER_TO_PEER_NODETYPE4 MIXED_NODETYPE8 HYBRID_NODETYPEElseScopeId As String * MAX_SCOPE_ID_LENEnableRouting As LongEnableProxy As LongEnableDns As LongIP 廣播, b 節(jié)點 NetBIOS 名字

43、解析法 點到點通信, p 節(jié)點名字解析 Mixed , m 節(jié)點 NetBIOS 名字解析法Hybrid ,h節(jié)點 NetBIOS 名字解析法 未知節(jié)點類型DHCP 圍名字本機(jī)能否路由本機(jī)能否作為地址解析協(xié)議(本機(jī)能否 DNS 查詢ARP )代理End Type備注:此類型在 vb中和 c中的定義有所不同,詳情請參看 MSDN 。3、使用到的常量:Const MAX_HOSTNAME_LEN = 132Const MAX_DOMAIN_NAME_LEN = 132Const MAX_SCOPE_ID_LEN = 2604、主要代碼分析: 由于 IP_ADDR_STRING 的實際大小未知,我們

44、不能直接獲取其大小,所以首先對函數(shù) GetNetworkParams 進(jìn)行兩次調(diào)用,第一次調(diào)用獲得參數(shù) pOutBufLen 的實際大?。坏诙握{(diào) 用獲取 FixedInfoBuffer(0) 的數(shù)據(jù)。代碼如下:Dim FixedInfoBuffer() As ByteFixedInfoSize = 0rvalue = GetNetworkParams(ByVal 0, FixedInfoSize)ReDim FixedInfoBuffer(FixedInfoSize - 1)rvalue = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize

45、) 使用 copymemory 函數(shù)將數(shù)據(jù)拷貝到 FixedInfo 中,然后就可以使用CopyMemory FixedInfo, FixedInfoBuffer(0), FixedInfoSizePrint Host Name, FixedInfo.HostName 采用 Do 循環(huán)來獲取所有 DNS 服務(wù)器地址:Print DnsServer IP, FixedInfo.DnsServerList.IpAddress pAddrStr = FixedInfo.DnsServerList.NextDo While pAddrStr 0CopyMemory IPAS, ByVal pAddrS

46、tr, LenB(IPAS)Print DNSServer IP, IPAS.IpAddresspAddrStr = IPAS.NextLoop5、運行時截圖:第九節(jié) 獲取網(wǎng)卡 IP 地址映射表1、函數(shù):FIXED_INFO 結(jié)構(gòu)了:(pIpAddrTable AsPrivate Declare Function GetIpAddrTable Lib iphlpapi.dll MIB_IPADDRTABLE, pdwSize As Long, bOrder As Long) As Long參數(shù)說明:pIpAddrTable :輸出 指向一個接收網(wǎng)卡 IP 地址映射表的 針。MIB_IPADDR

47、TABLE 類型的指pdwSize: 輸入,輸出 輸入,指定 pIpAddrTable 參數(shù)指向緩存的大??;輸出,如果指定的 緩存大小不夠大,將設(shè)置此參數(shù)為必須的大小。bOrder:輸入 指定返回的映射表是否按照 IP 地址排列。 TRUE ,按順序排列。返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型:MIB_IPADDRTABLE 包含 IP 地址入口表Type MIB_IPADDRTABLEdwNumEntries As Long表明 table 字段數(shù)組中有多少 MIB_IPADDROW條目table() As MIB_IPADDRROW 指向 MIB_IPADDRROW

48、類型End TypeMIB_IPADDRROW 指定特殊 IP 地址的信息Type MIB_IPADDRROWdwAddr As Long接口的 IP 地址dwIndex As Long與 IP 地址關(guān)聯(lián)的接口之索引dwMask As Long子網(wǎng)掩碼dwBCastAddr As Long廣播地址dwReasmSize As Long 已收到的數(shù)據(jù)報重裝后的最大長度unused1 As Integer未使用unused2 As Integer未使用End Type3、使用到的常量:無4、主要代碼分析: 定義一個 MIB_IPADDRTABLE 類型的變量并獲 取此變量 的大小 ,然后 直接調(diào)

49、用 GetTcpTable:Dim IpAddrTable As MIB_IPADDRTABLEdwsize = Len(IpAddrTable)r = GetIpAddrTable(IpAddrTable, dwsize, order)調(diào)用 For Next 循環(huán),獲取每個網(wǎng)卡 IP 地址映射的信息:For i = 0 To IpAddrTable.dwNumEntries - 1Print dwAddr, IpAddrTable.table(i).dwAddrNext 將長整型格式的 ip 地址轉(zhuǎn)換為標(biāo)準(zhǔn) IP 地址格式( xxx.xxx.xxx.xxx 格式):Private Funct

50、ion inversaip(IPAddrLng As Long) As StringDim sos As StringDim i As LongDim IPadd As StringIPadd = Right(00000000 & Hex(IPAddrLng), 8) sos =For i = 1 To Len(IPadd) Step 2sos = CInt(&h & Mid(IPadd, i, 2) & . & sosNext iinversaip = Mid(sos, 1, Len(sos) - 1)End Function5、運行時截圖:第十節(jié) 獲取本機(jī)已探測的 IP 物理地址映射表1、

51、函數(shù):Private Declare Function GetIpNetTable Lib iphlpapi.dll (pIpNetTable As MIB_IPNETTABLE,pdwSize As Long, bOrder As Long) As Long參數(shù)說明:pIpNetTable:輸出指向一個返回 IP 至物理地址映射作為 MIB_IPNETTABLE 類型的緩存。pdwSize: 輸入,輸出 輸入,指定 pIpNetTable 參數(shù)指向緩存的大??;輸出,如果指定的 緩存大小不夠大,將設(shè)置此參數(shù)為必須的大小。bOrder:輸入 指定返回的映射表是否按照 IP 地址排列。 TRUE

52、,按序排列。返回值:成功,返回 0;失敗,返回錯誤代碼。2、使用到的類型:MIB_IPNETTABLE 包含地址解析協(xié)議 (ARP :Address Resolution Protocol )接口入口表。Type MIB_IPNETTABLEDwNumEntries As Long MIB_IPNETROW 類型的總數(shù)MIB_Table() As MIB_IPNETROW 針End Type當(dāng)前包含指向一個包含 MIB_IPNETROW 類型的指: Address Resolution Protocol )接口信息:(字節(jié) ) ,通常為 6字節(jié)數(shù)組,包含適配器的物理地址IP 地址ARP 接口的

53、類型,以下值之一:值說明1其他條目2無效條目3動態(tài)條目4靜態(tài)條目 MIB_IPNETROW 包含地址解析協(xié)議( ARPType MIB_IPNETROWdwIndex As Long指定適配器的索引dwPhysAddrLen As LongbPhysAddrs 字段包含的物理接口的長度bPhysAddr(MAXLEN_PHYSADDR) As Byte dwAddr As Long dwType As Long常量名稱MIB_IPNET_TYPE_OTHERMIB_IPNET_TYPE_INV ALIDMIB_IPNET_TYPE_DYNAMICMIB_IPNET_TYPE_STA TICEn

54、d Type3、使用到的常量:Const MAXLEN_PHYSADDR = 74、主要代碼分析: 定義一 個 MIB_IPNETTABLE 類型 的變量 并獲取此變量的大小,然后 直接調(diào) 用 GetIpNetTable :Dim ipNett As MIB_IPNETTABLEdwsize = Len(ipNett)r = GetIpNetTable(ipNett, dwsize, bOrder)調(diào)用 For Next 循環(huán),獲取每個網(wǎng)卡 IP 地址映射的信息:For i = 0 To ipNett.dwNumEntries - 1Print 類型, ipNett.MIB_Table(i).dwTypeNext 在中循環(huán)獲取物理地址:ByteToS = Byte

溫馨提示

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

評論

0/150

提交評論