獲取機器信息(待測試)python
# -*- coding: UTF-8 -*- import psutil import json import os import socket import struct import time import sys # 當前時間函數 def now_time(): now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) return now_time # 獲取硬盤信息函數 def disk_info(): disk_dict = {} disk_name = [] disk_parttions = psutil.disk_partitions() for i in range(len(disk_parttions)): parttions_name = disk_parttions[i].device mountpoint = disk_parttions[i].mountpoint mountfstype = disk_parttions[i].fstype disk_info = psutil.disk_usage(mountpoint) total = disk_info.total used = disk_info.used free = disk_info.free disk_io = psutil.disk_io_counters(perdisk=True) disk_name.append(str(parttions_name.split('/', parttions_name.count('/'))[-1])) for key1 in disk_name: tmp_disk_list = [] for key2 in disk_io.keys(): tmp_disk_list.append(key2) if key1 in tmp_disk_list: disk_dict[parttions_name] = { "read_bytes": disk_io[key1].read_bytes, "write_bytes": disk_io[key1].write_bytes, "read_count": disk_io[key1].read_count, "write_count": disk_io[key1].write_count, "mountpoint": mountpoint, "mountfstype": mountfstype, "total": total, "used": used, "free": free } else: pass return disk_dict # 獲取內存信息函數 def mem_info(): mem_dict_list = psutil.virtual_memory() mem_total = mem_dict_list.total mem_used = mem_dict_list.used mem_free = mem_dict_list.free cpu_use = psutil.cpu_percent(interval=True) host_runtime = psutil.boot_time() mem_list_info = { "mem_total": mem_total, "mem_used": mem_used, "mem_free": mem_free, "cpu_used": cpu_use, "host_run": host_runtime } return mem_list_info # 獲取CPU信息函數 def cpu_info(): cpu_use = psutil.cpu_percent(interval=True) cpu_usage = { "cpu_used": cpu_use } return cpu_usage # 獲取網卡信息函數 def net_info(): net_dict_list = {} net_dev = psutil.net_io_counters(pernic=True) for dev_name in net_dev.keys(): net_dict_list[dev_name] = { "RX_b": net_dev[dev_name].bytes_recv, "TX_b": net_dev[dev_name].bytes_sent, "Dropout": net_dev[dev_name].dropout, "Dropint": net_dev[dev_name].dropin } return net_dict_list # 獲取用戶信息函數 def user_info(): user_dict_list = [] user_dict = psutil.users() for i in range(len(user_dict)): user_dict_tmp = {} user_dict_tmp[user_dict[i].name] = { "terminal": user_dict[i].terminal, "host": user_dict[i].host, "start_time": user_dict[i].started } user_dict_list.append(user_dict_tmp) return user_dict_list # 獲取內存消耗前10的進程函數 def process_info(): process_dict_list_tmp = [] pid_dict = psutil.pids() for i in pid_dict: pid = psutil.Process(i) pid_tuple = (i, pid.name(), pid.memory_percent(), pid.create_time(), pid.status(), pid.cwd(), pid.exe()) process_dict_list_tmp.append(pid_tuple) process_dict_list_tmp.sort(key=lambda mem1: mem1[2], reverse=True) process_dict_list = process_dict_list_tmp[0:10] return process_dict_list # 獲取開機時間函數 def runtime_info(): host_runtime = psutil.boot_time() host_run_time = { "host_runtime": host_runtime } return host_run_time # 沒用的函數 def get_info(): host_info = { 'disk_info': disk_info(), 'mem_info': mem_info(), 'cpu_info': cpu_info(), 'net_info': net_info(), 'process_info': process_info(), 'user_info': user_info(), 'runtime_info': runtime_info() } return repr(host_info) # socket數據發送函數 def socket_send(socket_server=None, socket_port=None, cammds=None, type=None, PackName=None): if type == 'regs': s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((socket_server, socket_port)) s.sendall(cammds) request = str(s.recv(18)) s.close() return request elif type == 'data': s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((socket_server, socket_port)) s.sendall(cammds) request = str(s.recv(128)) if request == 'OK': Rtime = now_time() PackSize = sys.getsizeof(cammds) print(" '%s' : transfer TCP Package '%s' Size '%s' sucessful ") % (Rtime, PackName, PackSize) s.close() # 構架TCP格式數據包函數 def trans_pack(commands=None, type=None): Net_type = 4 # package versions Mem_type = 1 Cpu_type = 2 Disk_type = 3 Runtime_type = 5 if type == 'Mem': machine_number = json_conf()["machine_number"] # 獲取機器碼 body = json.dumps(dict(commands)) # 生成JSON格式包體 header = [Mem_type, body.__len__(), machine_number] # 組成包頭格式爲:版本,包體長度,機器碼 headPack = struct.pack("!3I", *header) # 生成包頭 sendPack = headPack + body.encode() # 構建TCP數據包 return sendPack elif type == 'Net': machine_number = json_conf()["machine_number"] # 獲取機器碼 body = json.dumps(dict(commands)) # 生成JSON格式包體 header = [Net_type, body.__len__(), machine_number] # 組成包頭格式爲:版本,包體長度,機器碼 headPack = struct.pack("!3I", *header) # 生成包頭 sendPack = headPack + body.encode() # 構建TCP數據包 return sendPack elif type == 'Cpu': machine_number = json_conf()["machine_number"] # 獲取機器碼 body = json.dumps(dict(commands)) # 生成JSON格式包體 header = [Cpu_type, body.__len__(), machine_number] # 組成包頭格式爲:版本,包體長度,機器碼 headPack = struct.pack("!3I", *header) # 生成包頭 sendPack = headPack + body.encode() # 構建TCP數據包 return sendPack elif type == 'Disk': machine_number = json_conf()["machine_number"] # 獲取機器碼 body = json.dumps(dict(commands)) # 生成JSON格式包體 header = [Disk_type, body.__len__(), machine_number] # 組成包頭格式爲:版本,包體長度,機器碼 headPack = struct.pack("!3I", *header) # 生成包頭 sendPack = headPack + body.encode() # 構建TCP數據包 return sendPack elif type == 'Run': machine_number = json_conf()["machine_number"] # 獲取機器碼 body = json.dumps(dict(commands)) # 生成JSON格式包體 header = [Runtime_type, body.__len__(), machine_number] # 組成包頭格式爲:版本,包體長度,機器碼 headPack = struct.pack("!3I", *header) # 生成包頭 sendPack = headPack + body.encode() # 構建TCP數據包 return sendPack # 讀取JSON配置函數 def json_conf(): a = os.getcwd() # os.chdir("%s/client/conf" % a) # 改變工做目錄爲JSON文件目錄 json_list = file("%s/client/conf/client_conf.json" % a) # 讀取JSON配置文件 m = json_list.read() json_list.seek(0) json_conf = json.loads(json_list.read()) # 取出JSON配置文件 json_list.close() return json_conf def json_write(command=None): a = os.getcwd() os.chdir("%s/client/conf" % a) print(command) b = type(command) m = open("client_conf.json", 'w') # agent第一次註冊函數 def client_regs(): host_info = json.dumps({'ip': str(json_conf()['local_adder']), 'mac': str(json_conf()['local_mac'])}) regs_addr = json_conf()['send_server'] regs_port = json_conf()['server_regs_port'] server_request = str(socket_send(socket_server=regs_addr, socket_port=regs_port, cammds=host_info, type='regs')) conf = json_conf() conf['machine_number'] = server_request conf = json.dumps(conf) json_write(command=conf) # 數據包發送函數 def send_data(): DiskPack = trans_pack(commands=disk_info(), type='Disk') # 生成TCP數據包 MemPack = trans_pack(commands=mem_info(), type='Mem') NetPack = trans_pack(commands=net_info(), type='Net') regs_addr = json_conf()['send_server'] # 獲取服務器地址 regs_port = json_conf()['send_port'] # 獲取服務器端口 socket_send(socket_server=regs_addr, socket_port=regs_port, cammds=DiskPack, type='data', PackName='DiskPack') # 向服務器發送數據包 socket_send(socket_server=regs_addr, socket_port=regs_port, cammds=MemPack, type='data', PackName='MemPack') socket_send(socket_server=regs_addr, socket_port=regs_port, cammds=NetPack, type='data', PackName='NetPack') time.sleep(json_conf()['sendoff_time']) # 等待延時 def check_client(): print('start get client info....') machine_number = json_conf()['machine_number'] if machine_number: print(machine_number) print(11111) else: print(machine_number) print(22222) if __name__ == '__main__': while True: send_data()