版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、在vb中使用Iphlpapi.dll獲取網(wǎng)絡(luò)信息第一章 前言Windows 98以上的操作系統(tǒng)在系統(tǒng)目錄下都帶有iphlpapi.dll這個(gè)動態(tài)鏈接庫文件,它可以幫助程序員方便地獲取計(jì)算機(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ù)。編程時(shí),我們可以調(diào)用這些函數(shù)迅速獲得本機(jī)大部分網(wǎng)絡(luò)信息。第一節(jié) 獲取本
2、機(jī)網(wǎng)絡(luò)適配器的信息1、函數(shù):Private Declare Function GetAdaptersInfo Lib "iphlpapi.dll" ( IpAdapterInfo As Any, pOutBufLen As Long) As Long參數(shù)說明:pAdapterInfo:輸出 指向一個(gè)IP_ADAPTER_INFO類型的連接表;pOutBufLen:輸入 指定pAdapterInfo參數(shù)的大小,如果指定大小不足,GetAdaptersInfo將此參數(shù)置為所需大小, 并返回一個(gè)ERROR_BUFFER_OVERFLOW錯誤代碼。返回值:成功,返回0;失敗,返回錯
3、誤代碼。備注:此函數(shù)不能獲得回環(huán)(Loopback)適配器的信息2、使用到的類型:IP_ADAPTER_INFO類型:包含本機(jī)網(wǎng)絡(luò)適配器信息。Type IP_ADAPTER_INFONext As Long 在適配器列表中指向下一個(gè)適配器ComboIndex As Long 保留未用AdapterName As String * MAX_ADAPTER_NAME_LENGTH 適配器名Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH 對網(wǎng)卡的描述,實(shí)際上好象是驅(qū)動程序的名字AddressLength As Long 適配器物理地址的長
4、度 Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte 物理地址,每個(gè)字節(jié)存放一個(gè)十六進(jìn)制的數(shù)值Index As Long 適配器索引號Type As Long 適配器類型,包含以下類型的適配器(見下表): 常量名稱 值 說明 MIB_IF_TYPE_ETHERNET 6 以太網(wǎng)適配器 MIB_IF_TYPE_TOKENRING 9 令牌環(huán)適配器 MIB_IF_TYPE_FDDI 15 光纖接口適配器 MIB_IF_TYPE_PPP 23 點(diǎn)到點(diǎn)協(xié)議適配器 MIB_IF_TYPE_LOOPBACK 24 回環(huán)(Loopback)適配器 MIB_IF_
5、TYPE_SLIP 28 串行適配器 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_STRING DHCP服務(wù)器地址,DhcpEnabled=TRUE時(shí)有效HaveWins As Byte 是否啟用WINS(W
6、indows Internet Name Service)PrimaryWinsServer As IP_ADDR_STRING 主WINS地址SecondaryWinsServer As IP_ADDR_STRING 輔WINS地址LeaseObtained As Long 向DHCP服務(wù)器租用IP地址的時(shí)間,DhcpEnabled=TRUE時(shí)有效LeaseExpires As Long 向DHCP服務(wù)器租用IP地址到期時(shí)間,DhcpEnabled=TRUE時(shí)有效End Type IP_ADDR_STRING描述IP 地址鏈表的節(jié)點(diǎn)。Type IP_ADDR_STRINGNext As Lo
7、ng 指向列表中下一個(gè)IP_ADDR_STRING類型。為空,則是最后一個(gè)地址IpAddress As String * 16 點(diǎn)式十進(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_LENGTH = 8 /適配器物理地址長度Const MAX_ADAPTER_DESC
8、RIPTION_LENGTH = 132 /適配器描述長度4、主要代碼分析:調(diào)用函數(shù)GetAdaptersInfo,以及在調(diào)用中應(yīng)該注意的問題:對函數(shù)GetAdaptersInfo進(jìn)行兩次調(diào)用,第一次調(diào)用獲得參數(shù)pOutBufLen的實(shí)際大??;第二次調(diào)用獲取IpAdapterInfo的數(shù)據(jù)。代碼如下:pOutBufLen = 0error = GetAdaptersInfo(ByVal 0&, pOutBufLen) ReDim AdapterInfoBuffer(pOutBufLen - 1)error = GetAdaptersInfo(AdapterInfoBuffer(0),
9、pOutBufLen) IpAdapterInfo中可能包含多個(gè)IP_ADAPTER_INFO類型,因此下一步使用copymemory函數(shù)將數(shù)據(jù)拷貝到IP_ADAPTER_INFO類型:CopyMemory AdapterInfo, AdapterInfoBuffer(0), pOutBufLen獲得了首個(gè)IP_ADAPTER_INFO類型后,根據(jù)IP_ADAPTER_INFO類型中的Next成員并調(diào)用循環(huán)語句(DoLoop Until)來獲得所有IP_ADAPTER_INFO類型:DopAdapt = AdapterInfo.NextIf pAdapt <> 0 ThenCopy
10、Memory AdapterInfo, ByVal pAdapt, AdapterInfoSizeEnd IfLoop Until pAdapt = 0 由每次獲得的IP_ADAPTER_INFO類型來獲取網(wǎng)絡(luò)適配器物理地址: PhysicalAddress = "" For i = 0 To AdapterInfo.AddressLength - 1 PhysicalAddress = PhysicalAddress & Hex(AdapterInfo.Address(i) If i < AdapterInfo.AddressLength - 1 Then
11、PhysicalAddress = PhysicalAddress & "-" End IfNext 對于屬于IP_ADDR_STRING類型的IpAddressList、GatewayList、DhcpServer、PrimaryWinsServer、SecondaryWinsServer,同樣要注意IP_ADDR_STRING中Next成員的使用: Do CopyMemory IP_ADDR_STRING, AdapterInfo.IpAddressList, LenB(IP_ADDR_STRING) Print "IP Address: "
12、 & IP_ADDR_STRING.IpAddress Print "Subnet Mask: " & IP_ADDR_STRING.IpMask pAddrStr = IP_ADDR_STRING.Next If pAddrStr <> 0 Then CopyMemory IP_ADDR_STRING.IpAddressList, ByVal pAddrStr, _ LenB(IP_ADDR_STRING.IpAddressList) End If Loop Until pAddrStr = 0 5、運(yùn)行時(shí)截圖:第二節(jié) 獲取MIB-II 接口表
13、1、函數(shù):Private Declare Function GetIfTable Lib "iphlpapi.dll" (ByRef pIfTable As MIB_IFTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long參數(shù)說明:pIfTable:輸入成功的話指向一個(gè)MIB_IFTABLE類型的緩沖區(qū)。PdwSize:輸入,輸出指定pIfTable參數(shù)所占緩沖區(qū)的大小,如果緩沖區(qū)不是足夠大返回接口表,函數(shù)設(shè)置這個(gè)參數(shù)等于所必須的緩沖區(qū)大小。bOrder:輸入指定返回的接口表是否按接口序號按上升順序排列。如果
14、參數(shù)為TRUE那么按上升順序排列。返回值:成功,返回0;失敗,返回錯誤代碼。2、使用到的類型:MIB_IFTABLE 包含接口表Private Type MIB_IFTABLE dwNumEntries As Long '當(dāng)前網(wǎng)絡(luò)接口的總數(shù) MIB_Table(9) As MIB_IFROW '指向一個(gè)包含MIB_IFROW類型的指針End TypeMIB_IFROW 保存接口信息Private Type MIB_IFROW wszName(0 To 511) As Byte '接口名稱的Unicode字符串,必須為512字節(jié) dwIndex As Long '
15、接口編號 dwType As Long '接口類型,參看IP_ADAPTER_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),以下值之一:常量名稱 值 說明 MIB_IF_OPER_STATUS_NON
16、_OPERATIONAL 0 網(wǎng)絡(luò)適配器被禁止,例如:地址沖突 MIB_IF_OPER_STATUS_UNREACHABLE 1 沒有連接 MIB_IF_OPER_STATUS_DISCONNECTED 2 局域網(wǎng):電纜未連接;廣域網(wǎng):無載波信號 MIB_IF_OPER_STATUS_CONNECTING 3 廣域網(wǎng)適配器連接中 MIB_IF_OPER_STATUS_CONNECTED 4 廣域網(wǎng)適配器連接上遠(yuǎn)程對等點(diǎn) MIB_IF_OPER_STATUS_OPERATIONAL 5 局域網(wǎng)適配器默認(rèn)狀態(tài) dwLastChange As Long '操作狀態(tài)最后改變的時(shí)間 dwInOc
17、tets As Long '總共收到(字節(jié)) dwInUcastPkts As Long '總共收到(unicast包) dwInNUcastPkts As Long '總共收到(non-unicast包),包括廣播包和多點(diǎn)傳送包 dwInDiscards As Long '收到后丟棄包總數(shù)(即使沒有錯誤) dwInErrors As Long '收到出錯包總數(shù) dwInUnknownProtos As Long '收到后因協(xié)議不明而丟棄的包總數(shù) dwOutOctets As Long '總共發(fā)送(字節(jié)) dwOutUcastPkts A
18、s Long '總共發(fā)送(unicast包) dwOutNUcastPkts As Long '總共發(fā)送(non-unicast包),包括廣播包和多點(diǎn)傳送包 dwOutDiscards As Long '發(fā)送丟棄包總數(shù)(即使沒有錯誤) dwOutErrors As Long '發(fā)送出錯包總數(shù) dwOutQLen As Long '發(fā)送隊(duì)列長度 dwDescrLen As Long ' bDescr部分有效長度 bDescr(0 To 255) As Byte '接口描述End Type 3、使用到的常量:無 4、主要代碼分析:分配足夠大的
19、緩存空間,然后直接調(diào)用GetIfTable獲得接口信息:Dim ifT As MIB_IFTABLELenIfT = Len(ifT)RValue = GetIfTable(ifT, LenIfT, True)由ifT.dwNumEntries獲得接口數(shù)量,然后用fornext循環(huán)獲取每個(gè)接口信息:For i = 0 To ifT.dwNumEntries - 1Print "接口編號:" & ifT.MIB_Table(i).dwIndex Print "接口速度:" & ifT.MIB_Table(i).dwSpeedNext物理地址
20、的獲得: PhysAddr = Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(0), 2) For j = 1 To 5 PhysAddr = PhysAddr & "-" & Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(j), 2) NextPrint "物理地址:" & PhysAddr5、運(yùn)行時(shí)截圖:第三節(jié) 獲取本機(jī)TCP 信息列表1、函數(shù):Private Declare Functi
21、on GetTcpStatistics Lib "iphlpapi.dll" (ByRef pTcpStats As MIB_TCPSTATS) As Long參數(shù)說明:pStats :輸出指向一個(gè)接收本機(jī)TCP統(tǒng)計(jì)表的MIB_TCPSTATS類型返回值:成功,返回0;失敗,返回錯誤代碼。 2、使用到的類型:MIB_TCPSTATS 包含本機(jī)上正運(yùn)行的TCP協(xié)議的統(tǒng)計(jì)表Type MIB_TCPSTATSdwRtoAlgorithm As Long 指定重傳輸(RTO:retransmission time-out)算法 dwRtoMin As Long 重傳輸超時(shí)的最小值,
22、毫秒 dwRtoMax As Long 重傳輸超時(shí)的最大值,毫秒 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è)的次數(shù) dwCurrEstab As Long 目前已建立的連接 dwInSegs As Long 收到分段數(shù)據(jù)報(bào)的數(shù)目 dwOut
23、Segs As Long 傳輸?shù)姆侄螖?shù)據(jù)報(bào)數(shù)目,不包括轉(zhuǎn)發(fā)的數(shù)據(jù)包 dwRetransSegs As Long 轉(zhuǎn)發(fā)的分段數(shù)據(jù)報(bào)數(shù)目 dwInErrs As Long 收到錯誤的數(shù)目 dwOutRsts As Long 重設(shè)標(biāo)志設(shè)定后傳輸分段數(shù)據(jù)報(bào)數(shù)目 dwNumConns As Long 累計(jì)連接的總數(shù)End Type 3、使用到的常量:無 4、主要代碼分析: 定義一個(gè)MIB_TCPSTATS類型變量,然后直接調(diào)用GetTcpStatistics:Dim mTcpS As MIB_TCPSTATSRValue = GetTcpStatistics(mTcpS) 5、運(yùn)行時(shí)截圖: 第四節(jié) 獲取
24、當(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:輸入指定連接表是否按照類型排列。TRUE,那么就按以
25、下類型順序排列: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備注:實(shí)際使用中可以定義:TCP_Table(120) As MIB_TCPROW ' 預(yù)留足夠緩存 MIB_TCPROW
26、 類型包含了TCP連接信息。Type MIB_TCPROWdwState As Long ' TCP連接狀態(tài),為以下值之一: 常量名稱 值 說明 MIB_TCP_STATE_CLOSED 1 關(guān)閉 MIB_TCP_STATE_LISTEN 2 正在監(jiān)聽 MIB_TCP_STATE_SYN_SENT 3 同步發(fā)送 MIB_TCP_STATE_SYN_RCVD 4 同步接收 MIB_TCP_STATE_ESTAB 5 已建立 MIB_TCP_STATE_FIN_WAIT1 6 FINWAIT 1 MIB_TCP_STATE_FIN_WAIT2 7 FINWAIT 2 MIB_TCP_STA
27、TE_CLOSE_WAIT 8 關(guān)閉等待 MIB_TCP_STATE_CLOSING 9 正在關(guān)閉 MIB_TCP_STATE_LAST_ACK 10 最后一次確認(rèn) MIB_TCP_STATE_TIME_WAIT 11 時(shí)間等待 MIB_TCP_STATE_DELETE_TCB 12 刪除連接 dwLocalAddr As Long '本地IPdwLocalPort As Long '本地端口dwRemoteAddr As Long '遠(yuǎn)程機(jī)器IPdwRemotePort As Long '遠(yuǎn)程機(jī)器端口End Type 3、使用到的常量:無 4、主要代碼分析:定
28、義一個(gè)MIB_TCPTABLE類型的變量,因?yàn)槲覀冊诙xMIB_TCPTABLE類型的時(shí)候預(yù)留了足夠的緩存( TCP_Table(120) As MIB_TCPROW ),因此獲得定義變量的大小后直接調(diào)用GetTcpTable,但是要注意的是,實(shí)際獲得的TCP連接的總數(shù)應(yīng)為dwNum_Of_Entries的值,一般小于我們的定義(120):Dim mtcp As MIB_TCPTABLEmtcplen = Len(mtcp)rvalue = GetTcpTable(mtcp, mtcplen, True)使用ForNext循環(huán)遍歷各個(gè)Tcp連接的信息:For i = 0 To mtcp.dwN
29、um_Of_Entries - 1Print mtcp.TCP_Table(i).dwLocalAddr & "->" & mtcp.TCP_Table(i).dwRemoteAddrNext因?yàn)镸IB_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) +
30、"." + CStr(Ip_Buf(3) + "." + CStr(Ip_Buf(4) 因?yàn)镸IB_TCPROW 類型中dwLocalPort、dwRemotePort均為一長整型數(shù),因此要通過轉(zhuǎn)換來獲得端口:GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 256 5、運(yùn)行時(shí)截圖:第五節(jié) 獲取本機(jī)UDP信息列表1、函數(shù):Private Declare Function GetUdpStatistics Lib "iphlpapi.dll" (pStats As MIB_UDPS
31、TATS) As Long參數(shù)說明:pStats:輸出指向一個(gè)接收到本機(jī)UDP統(tǒng)計(jì)表的MIB_UDPSTATS類型返回值:成功,返回0;失敗,返回錯誤代碼。 2、使用到的類型:MIB_UDPSTATS 包含UDP (User Datagram Protocol) 運(yùn)行信息Type MIB_UDPSTATS dwInDatagrams As Long '已收到數(shù)據(jù)報(bào)數(shù)目 dwNoPorts As Long '因?yàn)槎丝谔栍姓`而丟棄的數(shù)據(jù)報(bào)數(shù)目 dwInErrors As Long '已收到多少錯誤數(shù)據(jù)報(bào),不包括dwNoPorts中統(tǒng)計(jì)的數(shù)目 dwOutDatagrams A
32、s Long '已傳輸數(shù)據(jù)報(bào)數(shù)目 dwNumAddrs As Long 'UDP監(jiān)聽者表中接口數(shù)目End Type3、使用到的常量:無 4、主要代碼分析:定義一個(gè)MIB_UDPSTATS類型的變量,然后直接使用GetUdpStatistics函數(shù)即可:Dim Mudp As MIB_UDPSTATSr = GetUdpStatistics(Mudp) 5、運(yùn)行時(shí)截圖:第六節(jié) 獲取當(dāng)前UDP連接情況1、函數(shù):Private Declare Function GetUdpTable Lib "iphlpapi.dll" (ByRef pTcpTable As M
33、IB_UDPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long參數(shù)說明:pUdpTable:輸出指向一個(gè)緩存作為MIB_UDPTABLE類型用來接收UDP監(jiān)聽表。pdwSize:輸入或輸出輸入,指定pUdpTable參數(shù)所占緩存大??;輸出,如果指定的緩存大小不足,將設(shè)置為所須的大小。bOrder:輸入指定返回的表是否按分類排列。如果為TRUE,按以下分類排列:1、IP地址;2、端口。返回值:成功,返回0;失敗,返回錯誤代碼。 2、使用到的類型:MIB_UDPTABLE 包含MIB_UDPROW類型Type MIB_UDPTAB
34、LE dwNum_Of_Entries As Long '當(dāng)前 UDP連接的總數(shù) UDP_Table() As MIB_UDPROW '指向包含MIB_UDPROW類型的指針End Type備注:實(shí)際使用中可以定義:UDP_Table(120) As MIB_UDPROW ' 預(yù)留足夠緩存 MIB_UDPROW包含發(fā)送和接收UDP數(shù)據(jù)包的地址信息。它的格式如下:Type MIB_UDPROW dwLocalAddr As Long '本地IP dwLocalPort As Long '本地端口End Type 3、使用到的常量:無 4、主要代碼分析:定義
35、一個(gè)MIB_TCPTABLE類型的變量,因?yàn)槲覀冊诙xMIB_TCPTABLE類型的時(shí)候預(yù)留了足夠的緩存( TCP_Table(120) As MIB_TCPROW ),因此獲得定義變量的大小后直接調(diào)用GetTcpTable。但是要注意的是,實(shí)際獲得的UDP連接的總數(shù)應(yīng)為dwNum_Of_Entries的值,一般小于我們的定義(120):Dim Mudp As MIB_UDPTABLEmudplen = Len(Mudp)rvalue = GetUdpTable(Mudp, mudplen, True)使用ForNext循環(huán)遍歷各個(gè)Tcp連接的信息:For i = 0 To Mudp.dwNu
36、m_Of_Entries - 1 Print Mudp.UDP_Table(i).dwLocalAddr & ":" & Mudp.UDP_Table(i).dwLocalPortNext因?yàn)镸IB_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) + "." + C
37、Str(Ip_Buf(3) + "." + CStr(Ip_Buf(4) 因?yàn)镸IB_UDPTABLE類型中dwLocalPort為一長整型數(shù),因此要通過轉(zhuǎn)換來獲得端口:GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 256 5、運(yùn)行時(shí)截圖:第七節(jié) 獲取本機(jī)網(wǎng)間控制報(bào)文協(xié)議(ICMP:Internet Control Message Protocol)信息1、函數(shù):Private Declare Function GetIcmpStatistics Lib "iphlpapi.dll" (pSta
38、ts As MIB_ICMP) As Long參數(shù)說明:pStats:輸出 指向一個(gè)本機(jī)收到ICMP 統(tǒng)計(jì)表的MIB_ICMP類型。返回值:成功,返回0;失敗,返回錯誤代碼。 2、使用到的類型:MIB_ICMP 為特殊適配器包含網(wǎng)間控制報(bào)文協(xié)議(ICMP:Internet Control Message Protocol)統(tǒng)計(jì)表。Public Type MIB_ICMP stats As MIBICMPINFO '指定MIBICMPINFO類型包含了電腦ICMP統(tǒng)計(jì)信息表End Type MIBICMPINFO通過MIBICMPSTATS結(jié)構(gòu)存儲的接收或發(fā)出的ICMP信息。Public
39、 Type MIBICMPINFO icmpInStats As MIBICMPSTATS '指向MIBICMPSTATS類型,包含接收數(shù)據(jù) icmpOutStats As MIBICMPSTATS '指向MIBICMPSTATS類型,包含發(fā)出數(shù)據(jù)End Type MIBICMPSTATS包含ICMP (Internet Control Message Protocol)接收或發(fā)出的統(tǒng)計(jì)信息。Public Type MIBICMPSTATS dwMsgs As Long '已收發(fā)多少消息 dwErrors As Long '已收發(fā)多少錯誤 dwDestUnrea
40、chs As Long '已收發(fā)多少"目標(biāo)不可抵達(dá)"消息 dwTimeExcds As Long '已收發(fā)多少生存期已過消息 dwParmProbs As Long '已收發(fā)多少表明數(shù)據(jù)報(bào)內(nèi)有錯誤IP信息的消息 dwSrcQuenchs As Long '已收發(fā)多少源結(jié)束消息 dwRedirects As Long '已收發(fā)多少重定向消息 dwEchos As Long '已收發(fā)多少ICMP響應(yīng)請求 dwEchoReps As Long '已收發(fā)多少ICMP響應(yīng)應(yīng)答 dwTimestamps As Long '
41、已收發(fā)多少時(shí)間戳請求 dwTimestampReps As Long '已收發(fā)多少時(shí)間戳響應(yīng) dwAddrMasks As Long '已收發(fā)多少地址掩碼 dwAddrMaskReps As Long '已收發(fā)多少地址掩碼響應(yīng)End Type 3、使用到的常量:無 4、主要代碼分析:定義一個(gè)MIB_ICMP類型的變量,然后直接調(diào)用GetIcmpStatistics:Dim Micmp As MIB_ICMPr = GetIcmpStatistics(Micmp)使用Micmp.stats.icmpInStats成員獲取收到的數(shù)據(jù)信息;使用Micmp.stats.icmp
42、OutStats成員獲取發(fā)送的數(shù)據(jù)信息。 5、運(yùn)行時(shí)截圖:第八節(jié) 獲取本機(jī)網(wǎng)絡(luò)參數(shù)1、函數(shù):Private Declare Function GetNetworkParams Lib "IPHlpApi.dll" (FixedInfo As Any, pOutBufLen As Long) As Long參數(shù)說明:pFixedInfo:輸出指向一個(gè)接收本機(jī)網(wǎng)絡(luò)參數(shù)的數(shù)據(jù)塊。pOutBufLen:輸入,輸出指向一個(gè)ULONG變量,改變量指定了FixedInfo參數(shù)的大小。如果指定的大小不夠大,將設(shè)置為須要的大小并返回ERROR_BUFFER_OVERFLOW錯誤。返回值:成功
43、,返回0;失敗,返回錯誤代碼。 2、使用到的類型:IP_ADDR_STRING描述IP 地址鏈表的節(jié)點(diǎn)。見 第二章 第一節(jié) 2 FIXED_INFO包含電腦網(wǎng)絡(luò)參數(shù)信息Type FIXED_INFOHostName As String * MAX_HOSTNAME_LEN 本機(jī)名DomainName As String * MAX_DOMAIN_NAME_LEN 本機(jī)DNS域CurrentDnsServer As Long 保留,使用DnsServerList獲取DNS服務(wù)器的IP地址DnsServerList As IP_ADDR_STRING 本機(jī)采用的DNS服務(wù)器鏈表NodeType A
44、s Long 節(jié)點(diǎn)類型,以下值: 1 BROADCAST_NODETYPE IP廣播,b節(jié)點(diǎn)NetBIOS名字解析法 2 PEER_TO_PEER_NODETYPE 點(diǎn)到點(diǎn)通信,p節(jié)點(diǎn)名字解析 4 MIXED_NODETYPE Mixed,m節(jié)點(diǎn)NetBIOS名字解析法 8 HYBRID_NODETYPE Hybrid,h節(jié)點(diǎn)NetBIOS名字解析法Else 未知節(jié)點(diǎn)類型ScopeId As String * MAX_SCOPE_ID_LEN DHCP范圍名字EnableRouting As Long 本機(jī)能否路由EnableProxy As Long 本機(jī)能否作為地址解析協(xié)議(ARP)代理E
45、nableDns As Long 本機(jī)能否DNS查詢End Type備注:此類型在vb中和c中的定義有所不同,詳情請參看MSDN。 3、使用到的常量:Const MAX_HOSTNAME_LEN = 132Const MAX_DOMAIN_NAME_LEN = 132Const MAX_SCOPE_ID_LEN = 260 4、主要代碼分析:由于IP_ADDR_STRING的實(shí)際大小未知,我們不能直接獲取其大小,所以首先對函數(shù)GetNetworkParams進(jìn)行兩次調(diào)用,第一次調(diào)用獲得參數(shù)pOutBufLen的實(shí)際大??;第二次調(diào)用獲取FixedInfoBuffer(0)的數(shù)據(jù)。代碼如下: Di
46、m FixedInfoBuffer() As ByteFixedInfoSize = 0rvalue = GetNetworkParams(ByVal 0, FixedInfoSize)ReDim FixedInfoBuffer(FixedInfoSize - 1)rvalue = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)使用copymemory函數(shù)將數(shù)據(jù)拷貝到FixedInfo中,然后就可以使用FIXED_INFO結(jié)構(gòu)了:CopyMemory FixedInfo, FixedInfoBuffer(0), FixedInfoSize
47、Print "Host Name", FixedInfo.HostName采用Do循環(huán)來獲取所有DNS服務(wù)器地址:Do While pAddrStr <> 0 CopyMemory IPAS, ByVal pAddrStr, LenB(IPAS) Print "DNSServer IP", IPAS.IpAddress pAddrStr = IPAS.NextLoop 5、運(yùn)行時(shí)截圖:第九節(jié) 獲取網(wǎng)卡IP地址映射表1、函數(shù):Private Declare Function GetIpAddrTable Lib "iphlpapi.d
48、ll" (pIpAddrTable As MIB_IPADDRTABLE, pdwSize As Long, bOrder As Long) As Long參數(shù)說明:pIpAddrTable:輸出 指向一個(gè)接收網(wǎng)卡IP地址映射表的 MIB_IPADDRTABLE類型的指針。pdwSize:輸入,輸出輸入,指定pIpAddrTable 參數(shù)指向緩存的大??;輸出,如果指定的緩存大小不夠大,將設(shè)置此參數(shù)為必須的大小。bOrder:輸入 指定返回的映射表是否按照IP地址排列。TRUE,按順序排列。 返回值:成功,返回0;失敗,返回錯誤代碼。 2、使用到的類型:MIB_IPADDRTABLE
49、包含IP地址入口表Type MIB_IPADDRTABLE dwNumEntries As Long '表明table字段數(shù)組中有多少M(fèi)IB_IPADDROW條目 table() As MIB_IPADDRROW '指向MIB_IPADDRROW類型End TypeMIB_IPADDRROW 指定特殊IP地址的信息Type MIB_IPADDRROW dwAddr As Long '接口的IP地址 dwIndex As Long '與IP地址關(guān)聯(lián)的接口之索引 dwMask As Long '子網(wǎng)掩碼 dwBCastAddr As Long 廣播地址 dwReasmSize As Long '已收到的數(shù)據(jù)報(bào)重裝后
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版團(tuán)購工業(yè)地產(chǎn)協(xié)議書3篇
- 2024職業(yè)技能拓展訓(xùn)練合同
- 二零二五年度臨時(shí)道路建設(shè)臨建工程合同范本2篇
- 2025年度珠寶品牌授權(quán)與連鎖經(jīng)營合同范本2篇
- 二零二五版房地產(chǎn)項(xiàng)目市場調(diào)研與策劃咨詢服務(wù)合同范本3篇
- 二零二五年度農(nóng)副產(chǎn)品電商平臺數(shù)據(jù)分析與應(yīng)用合同
- 2025年度智能穿戴設(shè)備代生產(chǎn)加工合同范本4篇
- 2024政府機(jī)關(guān)信息化系統(tǒng)運(yùn)維服務(wù)詢價(jià)采購合同3篇
- 個(gè)體餐飲店合伙人股權(quán)回購協(xié)議模板版B版
- 二零二五年度住宅樓屋頂綠化工程合同3篇
- 【地理】地圖的選擇和應(yīng)用(分層練) 2024-2025學(xué)年七年級地理上冊同步備課系列(人教版)
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- JBT 14588-2023 激光加工鏡頭 (正式版)
- 2024年四川省成都市樹德實(shí)驗(yàn)中學(xué)物理八年級下冊期末質(zhì)量檢測試題含解析
- 九型人格與領(lǐng)導(dǎo)力講義
- 廉潔應(yīng)征承諾書
- 2023年四川省成都市中考物理試卷真題(含答案)
- 泵車述職報(bào)告
- 2024年山西文旅集團(tuán)招聘筆試參考題庫含答案解析
- 恢復(fù)中華人民共和國國籍申請表
- 管理期貨的趨勢跟蹤策略 尋找危機(jī)阿爾法
評論
0/150
提交評論