Windows系统监控
一、 应用框架的选取与介绍
该监控系统使用J-Interop开源框架调用WMI来实现。Windows管理规范(WMI)是微软对来自分布式管理任务组(DMTF)基于Web的企业管理(WBEM)和通用信息模型(CIM)标准的实现。WMI用于访问Windows系统,应用,网络,设备等组件,并管理他们,可以实现对本地或远程操作系统的监控,比较流行的Java调用WMI开源框架有J-Interop,JACOB-Project和J-Integra,而J-Interop是完全免费开源的API,并且它提供了没有任何依赖的纯DCOM桥,完全使用Java编写的没有任何的JNI代码。
二、 环境准备
1. Windows要开启Remote Registry,Remote Procedure Call(RPC)和Windows Management Instrumentation服务,如下图:
图:开启服务
2. 修改安全策略
通过cmd命令行键入secpol.msc来开启本地安全策略,本地安全策略-->安全选项找到网络访问:本地账户的共享和安全模型,将它的安全设置更改为经典。如下图:
图:修改本地安全策略
3. 禁用防火墙
4. WindowsServer 2008和高版本的系统需注册表越狱
找到注册表HKEY_CLASSES_ROOT\CLSID\下面的注册表并更改管理员完全控制
{76A64158-CB41-11D1-8B02-00600806D9B6}的控制权。Windows Server 2008不再给Administrators完全控制权。只能通过SetACL.exe来更改。
a)下载SetACL.exe,下载地址:
https://files.helgeklein.com/downloads/SetACL/current/SetACL%20(executable%20version).zip
b)解压安装,cmd命令行cd到SetACL.exe目录之下,以管理员的身份运行如下代码:
图:注册表越狱
修改成功后管理员的权限显示如下图:
图:修改管理员权限
三、 程序代码
程序代码地址:https://xxsrd.f3322.org/svn/HDZX/Android/DOC/Server
创建WmiService类,如下图
图:创建WmiService类
建立和服务器的连接获取IJIDispatch对像
图:获取IJIDispatch对像
查询部分:
图:查询代码
四、 运行结果
1. cpu使用的情况:
a) WmiService.query("select * fromWin32_PerfFormattedData_PerfOS_Processor");查
询结果如下图:
b) WmiService.query("select * fromWin32_ Processor");(Windows server 2003服务器不适用)
2. 逻辑磁盘可用空间:WmiService.query("select * from Win32_LogicalDisk");
3. 系统服务:WmiService.query("select * from Win32_Service");
4.
物理内存:WmiService.query("select *from Win32_ PhysicalMemory");
5. 可用物理内存:WmiService.query("select * from Win32_OperatingSystem");
6. 网卡信息:WmiService.query("select * from Win32_NetworkAdapter");
7. 进程信息:WmiService.query("select * from Win32_Process");
8. 网络流量:
WmiService.query("select * from Win32_ PerfRawData_Tcpip_NetworkInterface");
五、 注意事项
1. 使用Windows2008 R2,Server 2012 R1和R2及Windows7时需要对注册表进行越狱操作。
2. Windows2003服务器对select * from Win32_Processor查询不支持,可替换为:
select * from Win32_PerfFormattedData_PerfOS_Processor
3. Windows7上启动远程注册表访问
默认情况下,即使启动了远程注册表服务,Windows7任将拒绝远程注册表。解决办法,在计算机上以管理员的身份运行powershell执行Enable-PSRenoting,重启计算机。
4. 防火墙必须允许开启TCP和UDP的端口号
1) TCP端口135(DEC、RPC定位器服务)
2) TCP端口139(NetBIOS会话服务)
3) TCP端口445(Windows共享)
4) C:\WINDOWS\System32\dllhost.exe(随机端口)
5) C:\WINDOWS\System32\javaw.exe(随机端口)
六、 常见错误
1. 错误码:0xC0000034
启动控制面板,打开"管理工具",打开"服务"。在列表中找到Remote Registry(远程注册表服务),启动此项服务。
2.
错误码: 0x8001FFFF
1)关闭防火墙
2)修改编辑注册表HEKY_LOCAL_MACHINE\System\CurrentControlSet\COntrol\Lsa找到或创建注册表LMCompatibilityLevel的值为2,关闭注册表重启计算机。
3)服务器版本过低,对有些查询语句不支持。
3.
错误码:0xC000006D
1)禁用防火墙
2)当端口139(NetBIOS会话服务)和445(Windows共享)不可用会出现该错
3)启动控制面板,进入“管理工具”,然后点击“本地安全策略”。这将打开
“本地安全设置”窗,转到“本地策略”->“安全选项”->“网络访问:本地
账户的共享和安全模型”。更改为“经典”。
4. 错误码:0x00000005
1) 禁用防火墙
2) 更改注册表HEKY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Pollices\System,创建或修改32位DWORD:LocalAccountTokenFilterPolicy的值为1。
3)
Windows2008 R2,Server 2012R1,Win7,Win8,修改默认注册表的权限,请参考本文环境准备中的第四项。
5. 错误码:0x800706BA
1) 关闭防火墙
2) 启动Remote Procedure Call(RCP)服务。