*--效果等同於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