Board logo

标题: [原创] VBS统计网络流量 [打印本页]

作者: fastslz    时间: 2009-1-28 23:07     标题: VBS统计网络流量

如果你是包流量无线网卡,那这个脚本非常有用
  1. ' *==============================================================================*
  2. ' * 网络流量统计.vbs         By: FastSLZ 2009-1-28    首次发布与 bbs.bathome.cn  *
  3. ' *==============================================================================*
  4. '特别提醒:本脚本必须在Administrator账户,且必须通过杀毒软件授权下才能正常运行!
  5. Dim WH
  6. Set WH = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
  7. For Each aWH in WH
  8.      TW = Int(aWH.ScreenWidth/8)
  9. Next
  10. Set WH = Nothing
  11. If TW <= 0 Then :TW =128 :End If
  12. If (Lcase(Right(Wscript.FullName,11)) = "wscript.exe") Then
  13.    CreateObject("WScript.Shell").Run("%Comspec% /C " &Chr(34)&"mode con cols="& TW &"&Title 网络流量统计    By: FastSLZ                          bbs.bathome.cn     &&Cscript.exe //NoLogo  "&Chr(34)& Wscript.ScriptFullName &Chr(34)&Chr(34)),3:Wscript.Quit
  14. End If
  15. MsgBox "本脚本用于检测BT等下载工具后台偷偷上传、下载,及检测是否存在潜伏在系统里的后门程序"
  16. Showy=vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
  17. Input=InputBox(Showy &"请输入刷新间隔时间(单位秒)"& vbCrLf &"间隔时间越长统计数据越精确", "BY: fastslz","2")
  18. Input=Int(Input)
  19. If Len(Input) = 0 Then:Input = 1:End If
  20. If Len(Input) >= 2 Then:WScript.Quit:End If
  21. InputS = Input*1000
  22. Dim WMI,Name
  23. Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  24. Set colItems = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled='TRUE'")
  25. For Each objItem In colItems
  26.     Name =  Replace(objItem.Description,"/","_")
  27. Next
  28. Set colItems = Nothing
  29. WScript.Echo "活动连接:"&Name
  30. If (IsArray(Name)) = TRUE Then:MsgBox vbTab& "貌似无任何网络" :WScript.Quit:End If
  31. Call Network(Name)
  32. Function Network(Names)
  33. Do
  34. Dim A
  35. Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& Name &"'")
  36. For Each B In A
  37.     R1 = B.BytesReceivedPersec
  38.     S1 = B.BytesSentPersec
  39.     T1 = B.BytesTotalPersec
  40.     If T0 ="" Then :T0 = B.BytesTotalPersec :End If
  41. Next
  42. Set A = Nothing
  43. WScript.Sleep(InputS)
  44. Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& Name &"'")
  45. For Each B In A
  46.     R2 = B.BytesReceivedPersec
  47.     S2 = B.BytesSentPersec
  48.     T2 = B.BytesTotalPersec
  49. Next
  50. Set A = Nothing
  51. WScript.Echo "下载:" & CheckSize((R2-R1)/Input) &"/s" _
  52.       &vbTab&"上传:" & CheckSize((S2-S1)/Input) &"/s" _
  53.       &vbTab&"平均:" & CheckSize((T2-T1)/Input) &"/s" _
  54.       &vbTab&"小计:" & CheckSize(T1-T0) _
  55.       &vbTab&"累计:" & CheckSize(T1)
  56. Loop
  57. End Function
  58. Function CheckSize(SZ)
  59. On Error Resume Next
  60. If SZ => 1073741824 Then
  61.    SZ = FormatNumber(SZ/1073741824) & " GB"
  62.    ElseIf SZ => 1048576 Then
  63.    SZ = FormatNumber(SZ/1048576) & " MB"
  64.    ElseIf SZ => 1024 Then
  65.    SZ = FormatNumber(SZ/1024) & " KB"
  66. Else
  67.    SZ = SZ & " 字节"
  68. End If
  69. CheckSize=Right("      " & SZ,10)
  70. End Function
复制代码

作者: BBCC    时间: 2009-1-28 23:25

伟大的wmi!
作者: fastslz    时间: 2011-4-30 20:59

2011-4-30 更新
小计:(脚本开始合计流量)
累计:(本次连接后的合计流量)

作者: kmcc123    时间: 2011-5-5 22:42

u = "http://www.baidu.com"
set objh = Createobject("MSXML2.XMLHTTP")
objh.open "GET",u,false
objh.send()
if objh.statustext = "OK" then  msgbox "通" else msgbox "断"
作者: kmcc123    时间: 2011-5-5 22:45

想把上面的带码改成
代理服务器10.0.0.172 80的
如果通就是拨上WAP网
反之NET网
作者: lxzzr    时间: 2012-3-13 13:00

两个类得到的网络设备名称不一定一致,所以,对“Name =  Replace(objItem.Description,"/","_")”这句觉得有点不妥....
作者: fastslz    时间: 2012-3-23 23:28

两个类得到的网络设备名称不一定一致,所以,对“Name =  Replace(objItem.Description,"/","_")”这句觉得 ...
lxzzr 发表于 2012-3-13 13:00


原本没有这句的,加上确实觉得不妥,不加怕菜鸟级不知道如何选择,我也不知道如何取得一致的网络设备名,所以先只能这样了。
xzzr兄有什么办法吗?
作者: lxzzr    时间: 2012-3-25 20:13

回复 7# fastslz
我也没有好的办法,我选择的是流量最大的网卡,不过,你那个是流量统计,我觉得应该是所有网卡的流量和
作者: wodesitanfu    时间: 2012-8-3 15:33

请问,这种方法能计算到走UPD的流量吗
作者: wodesitanfu    时间: 2012-8-3 15:34

UDP,打错了
作者: yu2n    时间: 2013-7-14 21:04

多网卡流量统计实现:yu2n 2013-07-14
  1. ' 多网卡流量统计实现:yu2n 2013-07-14
  2. ' VBS统计网络流量 - fastslz 2009-1-28 23:07
  3. ' 如果你是包流量无线网卡,那这个脚本非常有用
  4. ' http://www.bathome.net/thread-3198-1-1.html
  5. ' *==============================================================================*
  6. ' * 网络流量统计.vbs         By: FastSLZ 2009-1-28    首次发布与 bbs.bathome.cn  *
  7. ' *==============================================================================*
  8. '特别提醒:本脚本必须在Administrator账户,且必须通过杀毒软件授权下才能正常运行!
  9. ' 以命令提示符环境运行
  10. Dim WH
  11. Set WH = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
  12. For Each aWH in WH
  13.     TW = Int(aWH.ScreenWidth/8)
  14. Next
  15. Set WH = Nothing
  16. If TW <= 0 Then
  17.     TW =128
  18. End If
  19. If (Lcase(Right(Wscript.FullName,11)) = "wscript.exe") Then
  20.     CreateObject("WScript.Shell").Run( _
  21.         "%Comspec% /C " & Chr(34) & "mode con cols=" & TW & "&Title 网络流量统计    By: FastSLZ                          bbs.bathome.cn     &&Cscript.exe //NoLogo  " & _
  22.         Chr(34) & Wscript.ScriptFullName & Chr(34) & Chr(34) ),3
  23.         Wscript.Quit
  24. End If
  25. ' 提示信息
  26. Dim sTip
  27. sTip = "网络流量统计.vbs         By: FastSLZ 2009-1-28    首次发布与 bbs.bathome.cn" & VbCrLf & _
  28.         "小计:(脚本开始合计流量)" & VbCrLf & _
  29.         "累计:(本次连接后的合计流量)" & VbCrLf
  30. WScript.Echo sTip
  31. ' 获取输入的检测间隔时间
  32. Showy= "本脚本用于检测BT等下载工具后台偷偷上传、下载,及检测是否存在潜伏在系统里的后门程序" & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
  33. Input=InputBox(Showy & "请输入刷新间隔时间(单位秒)" & vbCrLf & "间隔时间越长统计数据越精确", "BY: fastslz", "2")
  34. Input=Int(Input)
  35. If Len(Input) = 0 Then:Input = 1:End If
  36. If Len(Input) >= 2 Then:WScript.Quit:End If
  37. InputS = Input*1000
  38. ' 循环检测多块网卡
  39. Dim WMI,Name
  40. Dim objDict ' 字典(保存网卡的使用流量小记,多块网卡)
  41. Set objDict = CreateObject("Scripting.Dictionary")
  42. Do
  43.     ' 取得活动的网卡名
  44.     Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  45.     Set colItems = WMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled='TRUE'")
  46.     If colItems.Count = 0 Then
  47.         MsgBox vbTab & "无网络连接!"
  48.         Exit Do
  49.     End If
  50.     For Each objItem In colItems
  51.         ' 读取网卡名
  52.         Name = Replace(objItem.Description, "/", "_")
  53.         
  54.         ' 读取字典中保存的流量数据(脚本开启后使用的流量总计),即字典中保存的Name字段(网卡名)的值
  55.         If objDict.Exists(Name) Then
  56.             T0 = objDict.Item(Name)
  57.         Else
  58.             objDict.Add Name, T0
  59.         End If
  60.         
  61.         ' 检测当前网络信息
  62.         WScript.Echo "活动连接:" & Name
  63.         Call Network(Name, T0)
  64.         
  65.         ' 更新流量小记(脚本开启后使用的流量总计)
  66.         objDict.Item(Name) = T0
  67.     Next
  68.     Set colItems = Nothing
  69.    
  70.     WScript.Echo VbCrLf
  71.     WScript.Sleep(InputS)
  72. Loop
  73. ' 检测当前网络信息
  74. Function Network(ByVal Names, ByRef T0)
  75.    
  76.         Dim A
  77.         Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& Name &"'")
  78.         For Each B In A
  79.             R1 = B.BytesReceivedPersec
  80.             S1 = B.BytesSentPersec
  81.             T1 = B.BytesTotalPersec
  82.             If T0 ="" Then :T0 = B.BytesTotalPersec :End If
  83.         Next
  84.         Set A = Nothing
  85.         
  86.         WScript.Sleep(InputS)
  87.         
  88.         Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '"& Name &"'")
  89.         For Each B In A
  90.             R2 = B.BytesReceivedPersec
  91.             S2 = B.BytesSentPersec
  92.             T2 = B.BytesTotalPersec
  93.         Next
  94.         Set A = Nothing
  95.         WScript.Echo "下载:" & CheckSize((R2-R1)/Input) &"/s" _
  96.               &vbTab&"上传:" & CheckSize((S2-S1)/Input) &"/s" _
  97.               &vbTab&"平均:" & CheckSize((T2-T1)/Input) &"/s" _
  98.               &vbTab&"小计:" & CheckSize(T1-T0) _
  99.               &vbTab&"累计:" & CheckSize(T1)
  100.    
  101. End Function
  102. ' 人性化网络流量单位格式
  103. Function CheckSize(ByVal SZ)
  104.     On Error Resume Next
  105.     If SZ => 1073741824 Then
  106.        SZ = FormatNumber(SZ/1073741824) & " GB"
  107.        ElseIf SZ => 1048576 Then
  108.        SZ = FormatNumber(SZ/1048576) & " MB"
  109.        ElseIf SZ => 1024 Then
  110.        SZ = FormatNumber(SZ/1024) & " KB"
  111.     Else
  112.        SZ = SZ & " 字节"
  113.     End If
  114.     CheckSize=Right("      " & SZ,10)
  115. End Function
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2