• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python通过ssh-powershell监控windows的方法

python通过ssh-powershell监控windows的方法

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python windows,python windows安装,windows python编辑器,python for windows,python windows下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了python通过ssh-powershell监控windows的方法。分享给大家供大家参考。具体分析如下:

对于服务器的监控来说,监控linux不管是自己动手写脚本还是用一些开源的工具比如nagios,zenoss什么的。但毕竟还是有些公司有windows做服务器的,相对linux来说,windows没有方便的shell,cmd下提供的命令对于监控来说远远没有linux方便。但是现在windows上如果安装了powershell(win7,2008自带),就比以前方便多了,linux上的命令基本都能在powershell里执行,比如查看进程还是ps.

自己封装了一个python通过ssh(通过pexpect模块)调用powershell的脚本,里面包快ps,netstat,ping检测,查看硬盘,cpu信息和负载,内存信息。通过创建ssh_win32类对象,然后调用它的方法,返回的都是解析好的python对象。

ssh_powershell.py:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import re
from pexpect import *
class ssh_win32:
  def __init__(self, user, host, password=None,systemroot='c',papath='',timeout=5,verbose=0):
    self.user = user#监控机器的username
    self.host = host#监控机器的ip
    self.verbose = verbose
    self.password = password#密码
    self.timeout=timeout#执行命令的timeout
    self.systemroot=systemroot#windows 所安装的盘符
    if not papath:#powershell.exe的路径
self.powershell_path=self.systemroot+':/WINDOWS/system32/WindowsPowerShell/v1.0/powershell.exe '
    self.key = [
      'authenticity',
      'assword:',
      '@@@@@@@@@@@@',
      'Command not found.',
      EOF,
      ]
    self.f = open('ssh.out','w')
  def ssh(self,command):
    cmd='ssh -l %s %s %s'%(self.user,self.host,command)
    print "cmd:",cmd
    con=spawn(cmd,timeout=self.timeout)
    seen=con.expect(self.key)
    if seen == 0:
      con.sendline('yes')
      seen = con.expect(self.key)
    if seen == 1:
  #    if not self.password:
  #      self.password = getpass.getpass('Remote password: ')
      con.sendline(self.password)
      try:
        res=con.read()
      except Exception ,e:
        res=con.before
#      print "res:",res
    return res
  def ssh_disk(self):
    cmd=self.powershell_path+"Get-WmiObject win32_logicaldisk"
    res=self.ssh(cmd)
    disk={}
    if res:
      res=res.split('No such file or directory')[-1].replace('\r','').split('\n')
      res=[c for c in res if c]
#      print 'res:',res
    predisk='C'
    for d in res:
#      print d
      key,value=d.split(':',1)
#      print d
#      print 'key:',key,'value:',value
      key=key.strip()
      value=value.strip()
      if key=='DeviceID' and value not in disk.keys():
        predisk=value
        disk[predisk]={}
        disk[predisk][key]=value
      else:
        if key in ['FreeSpace','Size']:
          if value:
            value=int(value)/1024/1024/1024
        disk[predisk][key]=value
    for d in disk.keys():
      if disk[d]['DriveType']!='3':
        disk.pop(d)
#    print 'disk:',disk
    return disk
  def ssh_cpu(self): 
    cmd=self.powershell_path+'gwmi -computername localhost win32_Processor'
    res=self.ssh(cmd)
    res=res.split('No such file or directory')[-1].replace('\r','').split('\n')
    res=[r for r in res if r]
#    print res
    cpu={}
    for i in res:
#      print '='*10
#      print i
      i=i.split(':')
    #  print i
      if len(i)==2:
        key,value=i
      else:
        continue
      key=key.strip()
      value=value.strip()
#      print 'key:',key
#      print 'value:',value
      cpu[key]=value
    return cpu
  def ssh_memory(self):
    totalmem=self.powershell_path+'Get-WmiObject win32_OperatingSystem TotalVisibleMemorySize'
    freemem=self.powershell_path+'Get-WmiObject win32_OperatingSystem FreePhysicalMemory'
    memory={}
    for cmd in [totalmem,freemem]:
      res=self.ssh(cmd)
      if 'Win32_OperatingSystem' in res:
        res=res=res.replace('\r','').split('\n')
        res=[m for m in res if m][-1]
        print 'res:',res
        key,value=res.split(':')
        key=key.strip()
        value=value.strip()
        memory[key]=value
      else:
        print "not return data"
        return None
    return memory
  def ssh_ping(self,host):
    cmd='ping -n 1 %s'%host
    patt=r'.+?(\d*)% loss.*'
    res=self.ssh(cmd).replace('\r','').replace('\n','')
    print res
    m=re.match(patt,res)
    if m:
      lost_percent=m.group(1)
      print 'lost_percent:',lost_percent
      return int(lost_percent)
    else:
      return None
  def ssh_ps(self):
    cmd=self.powershell_path+'ps'
    res=self.ssh(cmd)
    ps=[]
    if '-- -----------' in res:
      res=res.replace('\r','').split('-- -----------')[-1].split('\n')
      res=[d for d in res if d.strip()]
      for p in res:
        process={}
        row=[para for para in p.split(' ') if para.strip()]
        process['handles']=row[0]
        process['npm']=row[1]
        process['pm']=row[2]
        process['ws']=row[3]
        process['vm']=row[4]
        process['cpu']=row[5]
        process['id']=row[6]
        process['process_name']=row[-1]
        ps.append(process)
#      print ps
      return ps
    else:
      return None
  def ssh_netstat(self):
    cmd='netstat -ao'
    res=self.ssh(cmd)
    netstat=[]
    if 'PID' in res:
      res=res.replace('\r','').split('PID')[-1].split('\n')
      res=[d for d in res if d.strip()]
      for p in res:
        process={}
        row=[para for para in p.split(' ') if para.strip()]
        process['proto']=row[0]
        process['local_address']=row[1]
        process['foreign_address']=row[2]
        process['state']=row[3]
        process['pid']=row[-1]
        netstat.append(process)
#      print netstat
      return netstat
    else:
      return None
if __name__ == "__main__":
cmd="c:/WINDOWS/system32/WindowsPowerShell/v1.0/powershell.exe ps"
  user='admin'
  host='192.168.123.105'
  password='123456'
  ssh=ssh_win32(user,host,password,systemroot='c',timeout=5)
#  print ssh.ssh_cpu()
#  print "\n\n\n\n"
#  print ssh.ssh_disk()
#  print "\n\n\n\n"
#  print ssh.ssh_memory()
#  print ssh.ssh_ping(host)
#  print ssh.ssh_ps()
#  print ssh.ssh_netstat()
</div>

希望本文所述对大家的Python程序设计有所帮助。

</div>

您可能想查找下面的文章:

  • Windows和Linux下Python输出彩色文字的方法教程
  • Windows和Linux下Python输出彩色文字的方法教程
  • Python制作Windows系统服务
  • windows系统下Python环境搭建教程
  • Python制作Windows系统服务
  • 用python写一个windows下的定时关机脚本(推荐)
  • python解决方案:WindowsError: [Error 2]
  • Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
  • Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
  • Windows下搭建python开发环境详细步骤

相关文章

  • Django中的“惰性翻译”方法的相关使用
  • Python中使用Beautiful Soup库的超详细教程
  • 在Python的gevent框架下执行异步的Solr查询的教程
  • 跟老齐学Python之大话题小函数(2)
  • python模拟登录百度贴吧(百度贴吧登录)实例
  • python线程锁(thread)学习示例
  • Python打包文件夹的方法小结(zip,tar,tar.gz等)
  • Python正则表达式教程之一:基础篇
  • python采集博客中上传的QQ截图文件
  • go和python调用其它程序并得到程序输出

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python引用模块和查找模块路径
    • Python作用域用法实例详解
    • Python类的动态修改的实例方法
    • Python开发常用的一些开源Package分享
    • 《Python之禅》中对于Python编程过程中的一些建议
    • Python中利用函数装饰器实现备忘功能
    • python通过ElementTree操作XML获取结点读取属性美化XML
    • python编码总结(编码类型、格式、转码)
    • Python Socket编程入门教程
    • Python的净值数据接口调用示例分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有