WIN API-VFP獲取網絡信息、流量等

*--VFP調用API:使用Iphlpapi.dll獲取網絡信息、網絡流量(即發送字節和接收字節)等。
*--效果等同於DOS命令netstat -e

Clear
#Define
ERROR_INSUFFICIENT_BUFFER 122
Declare Integer GetIfTable In iphlpapi String @pIfTable,Long @pdwSize,Long
Border
Declare String
inet_ntoa In wsock32 Long
inn
m.pIfTable=''
m.pdwSize=0
m.iResult=GetIfTable(@m.pIfTable,@m.pdwSize,1)
If
(m.iResult<>ERROR_INSUFFICIENT_BUFFER)
    ?'錯誤,Windows 錯誤代碼:',m.iResult
   
Return
Endif
m.pIfTable=Replicate(Chr
(0),m.pdwSize)
m.iResult=GetIfTable(@m.pIfTable,@m.pdwSize,1)
If
(m.iResult<>0)
    ?'錯誤,Windows 錯誤代碼:',m.iResult
   
Return
Endif
lnCount=CToBin(Left(m.pIfTable,4),'rs')    
&&網絡連接總數
m.pIfTable=Substr
(m.pIfTable,5)
lnReceived=0
lnSent=0
For I=1 To
lnCount
    lcMIB_IFROW=
Substr(m.pIfTable
,(I-1)*860+1,860)
   
*lcWszName=LEFT(lcMIB_IFROW,512)
    lnIndex=CToBin(Substr
(lcMIB_IFROW,513,4),'rs')
    lcType=MyGetType(
CToBin(Substr
(lcMIB_IFROW,517,4),'rs'))
    lnMtu=
CToBin(Substr
(lcMIB_IFROW,521,4),'rs')
    lnSpeed=
CToBin(Substr
(lcMIB_IFROW,525,4),'rs')
    lnPhysAddrLen=
CToBin(Substr
(lcMIB_IFROW,529,4),'rs')
    lcPhysAddr=
Substr
(lcMIB_IFROW,533,8)
    lcMacAddr = ''
   
For ii=1 To
lnPhysAddrLen
        lcMacAddr=lcMacAddr+
Iif(ii>1,'-','')+Right(Transform(Asc(Substr
(lcPhysAddr,ii,1)),'@0'),2)
   
Endfor
   
lnAdminStatus=CToBin(Substr
(lcMIB_IFROW,541,4),'rs')
    lnOperStatus=MyGetState(
CToBin(Substr
(lcMIB_IFROW,545,4),'rs'))
    lnLastChange=
CToBin(Substr
(lcMIB_IFROW,549,4),'rs')
    lnInOctets=
CToBin(Substr
(lcMIB_IFROW,553,4),'rs')
    lnInUcastPkts=
CToBin(Substr
(lcMIB_IFROW,557,4),'rs')
    lnInNUcastPkts=
CToBin(Substr
(lcMIB_IFROW,561,4),'rs')
    lnInDiscards=
CToBin(Substr
(lcMIB_IFROW,565,4),'rs')
    lnInErrors=
CToBin(Substr
(lcMIB_IFROW,569,4),'rs')
    lnInUnknownProtos=
CToBin(Substr
(lcMIB_IFROW,573,4),'rs')
    lnOutOctets=
CToBin(Substr
(lcMIB_IFROW,577,4),'rs')
    lnOutUcastPkts=
CToBin(Substr
(lcMIB_IFROW,581,4),'rs')
    lnOutNUcastPkts=
CToBin(Substr
(lcMIB_IFROW,585,4),'rs')
    lnOutDiscards=
CToBin(Substr
(lcMIB_IFROW,589,4),'rs')
    lnOutErrors=
CToBin(Substr
(lcMIB_IFROW,593,4),'rs')
    lnOutQLen=
CToBin(Substr
(lcMIB_IFROW,597,4),'rs')
    lnDescrLen=
CToBin(Substr
(lcMIB_IFROW,601,4),'rs')
    lnDescr=
Substr
(lcMIB_IFROW,605,256)
    lnReceived=lnReceived+lnInOctets
    lnSent=lnSent+lnOutOctets
    ?'lnIndex',lnIndex                    
&&接口編號
   
?'lcType',lcType                      
&&接口類型
   
?'lnMtu',lnMtu
                        &&最大傳輸單元
   
?'lnSpeed',lnSpeed                    
&&接口速度(字節)
   
?'lnPhysAddrLen',lnPhysAddrLen
        &&由bPhysAddr獲得的物理地址有效長度
   
?'lcMacAddr',lcMacAddr                
&&物理地址
   
?'lnAdminStatus',lnAdminStatus
        &&接口管理狀態
   
?'lnOperStatus',lnOperStatus          
&&操作狀態
   
?'lnLastChange',lnLastChange
          &&操作狀態最後改變的時間
   
?'lnInOctets',lnInOctets
              &&總共收到(字節)
   
?'lnInUcastPkts',lnInUcastPkts        
&&總共收到(unicast包)
   
?'lnInNUcastPkts',lnInNUcastPkts
      &&總共收到(non-unicast包),包括廣播包和多點傳送包
   
?'lnInDiscards',lnInDiscards
          &&收到後丟棄包總數(即使沒有錯誤)
   
?'lnInErrors',lnInErrors              
&&收到出錯包總數
   
?'lnInUnknownProtos',lnInUnknownProtos
&&收到後因協議不明而丟棄的包總數
   
?'lnOutOctets',lnOutOctets            
&&總共發送(字節)
   
?'lnOutUcastPkts',lnOutUcastPkts      
&&總共發送(unicast包)
   
?'lnOutNUcastPkts',lnOutNUcastPkts
    &&總共發送(non-unicast包),包括廣播包和多點傳送包
   
?'lnOutDiscards',lnOutDiscards
        &&發送丟棄包總數(即使沒有錯誤)
   
?'lnOutErrors',lnOutErrors            
&&發送出錯包總數
   
?'lnOutQLen',lnOutQLen
                &&發送隊列長度
   
?'lnDescrLen',lnDescrLen
              &&bDescr部分有效長度
   
?'lnDescr',lnDescr                    
&&接口描述
Endfor
?'-------------------------'
?'Received:'+
Transform
(lnReceived)
?' Sent:'+
Transform
(lnSent)
?'-------------------------'
Clear Dlls


Function
MyGetType     &&“接口類型”定義函數
    Parameters
tnType
   
Do Case
        Case
tnType=1
            lcType="Other"
       
Case
tnType=6
            lcType="Ethernet"
       
Case
tnType=9
            lcType="Tokenring"
       
Case
tnType=15
            lcType="FDDI"
       
Case
tnType=23
            lcType="PPP"
       
Case
tnType=24
            lcType="Loopback"
       
Case
tnType=28
            lcType="Loopback"
       
Otherwise
       
    lcType="UNKNOW"
   
Endcase
    Return
lcType
Endfunc


Function
MyGetState     &&“操作狀態”定義函數
    Parameters
tnState
   
Do Case
        Case
tnState=0
            lcState="Not operational"
       
Case
tnState=1
            lcState="Operational"
        Case
tnState=2
            lcState="Disconnected"
       
Case
tnState=3
            lcState="Connecting"
        Case
tnState=4
            lcState="Connected"
       
Case
tnState=5
            lcState="Unreachable"
       
Otherwise
           
lcState="UNKNOW"
   
Endcase
    Return
lcState
Endfunc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章