python soscket监控系统

简介:
自己写的监控服务,想监控windows ,所以用python写了一个服务,用于执行系统命令
用python 3写的,2的话需要修改。
 
server端,也就是被监控端
 
import socket 
import sys,os 


host = '0.0.0.0' 
port = int(sys.argv[1]) 
#这里写入可以连接的客户端地址
trust = '127.0.0.1,192.168.1.31' 
s = None 
def conn(): 
  for res in socket.getaddrinfo(host,port,socket.AF_UNSPEC,socket.SOCK_STREAM,0,socket.AI_PASSIVE): 
    af,socktype,proto,canonname,sa = res 
    try: 
      s = socket.socket(af,socktype,proto) 
    except OSError as msg: 
      s = None 
      continue 
    try: 
      s.bind(sa) 
      s.listen(1) 
    except OSError as msg: 
      s.close() 
      s = None 
      continue 
    break 
  if s is None: 
    print('could not open socket') 
    sys.exit(1) 

  conn,addr = s.accept() 
  error = 'ok' 
  if str(addr[0]) not in str(trust): 
    error = 'error' 
  print('Connected by',addr) 

  while True: 
    conn.settimeout(5) 
    if error != 'error': 
      data = conn.recv(102400) 
      if not data:break 
      data = data.decode(encoding='utf-8',errors='strict') 
      comm = str(data)+' '+'2>&1' 
      content = os.popen(comm).read() 
      content = content.encode(encoding='utf-8',errors='strict') 
      conn.send(content) 
    else: 
      conn.send(b'not trust address') 
      break 
  conn.close() 

while True: 
  conn() 

客户端,也就是监控服务器使用的
import socket 
import sys 
host=sys.argv[1] 
port = sys.argv[2] 
s = None 
o = len(sys.argv) 
comm = [] 
for i in range(3,o): 
        comm.append(sys.argv[i]) 
         
for res in socket.getaddrinfo(host,port,socket.AF_UNSPEC,socket.SOCK_STREAM): 
        af,socktype,proto,canonname,sa = res 
        try: 
                s = socket.socket(af,socktype,proto) 
        except OSError as msg: 
                s = None 
                continue 
        try: 
                s.connect(sa) 
        except OSError as msg: 
                s.close() 
                s = None 
                continue 
        break 
if s is None: 
        print("could not opensocket") 
        sys.exit(1) 

comm = ''.join(comm) 
comm = comm.replace('[]',' ') 
comm = comm.encode(encoding='utf-8',errors='strict') 

s.sendall(comm) 
data = s.recv(102400) 
print(repr(data)) 
s.close() 
sys.exit(0) 
 
使用方法:
服务端启动服务
python server.pyw 8765
#启动服务,监听8765端口
 
客户端,也就是监控服务器使用的脚本
python client.pyw  127.0.0.1 8765 ipcofing
连接127.0.0.1的8765端口,执行ipconfig命令,
 
python client.pyw  127.0.0.1 8765 ipcofing[]/all
如果带参数的话,空格使用[]代替


本文转自zhaoyun00 51CTO博客,原文链接:http://blog.51cto.com/zhaoyun/1133373
相关文章
|
监控 Python
Python编程:watchdog模块监控系统文件变化
Python编程:watchdog模块监控系统文件变化
180 0
|
监控 Python
Python编程:watchdog模块监控系统文件变化
Python编程:watchdog模块监控系统文件变化
160 0
|
监控 Windows Python
Python WMI获取Windows系统信息 监控系统
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 #http://www.cnblogs.com/liu-ke/ 4 import wmi 5 import os 6 import sys 7 import...
1322 0
|
19天前
|
存储 人工智能 数据处理
Python:编程的艺术与科学的完美交融
Python:编程的艺术与科学的完美交融
19 1
|
5天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
【5月更文挑战第9天】`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
24 5
|
8天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
11 0
|
9天前
|
测试技术 Python
Python模块化方式编程实践
【5月更文挑战第5天】Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
37 2
|
14天前
|
测试技术 调度 索引
python编程中常见的问题
【4月更文挑战第23天】
32 2
|
15天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
15天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。