def run(self): while True: try: try: cpuload = ServerInfo.getCPUUsage() except: self.writeLog("ServerMonitorInfo.cpuload:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1])) cpuload = '999' mem = ServerInfo.getPhyMem() memload = int(mem[1]) try: disk = ServerInfo.getDiskWarning() except: disk = "GetdiskstatusError." try: send = MyUtil.SendMsgToDB() send.send(_3ds.Encrypt('agentHeart;' + computerId)) send.sock.recv(sockSize) send.send(_3ds.Encrypt("ServerMonitorInfo;" + str(computerId) + ";" + str(cpuload) + ";" + str(memload) + ";" + str(disk) + ";" + str(CmdServerIP))) send.sock.recv(sockSize) send.send(_3ds.Encrypt('end')) except: print "ServerMonitorInfo.run.send.error:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1]) writeLog("ServerMonitorInfo.run.send.error:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1])) finally: send.closeSock() time.sleep(60) except: print "ServerMonitorInfo.run error:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1]) writeLog("ServerMonitorInfo.run error:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1])) time.sleep(60)
def do_GET(self): timestamp = int(round(time.time())) server_id = 1 # TODO: get server id # get server status server_status = ServerInfo.getServerInfo() # cgminer call api_data = api.call() devs = api.getDevsArray(api_data) http_code = 200 # is the api response valid ? if not api.isValidReponse(api_data): print "Could not get valid api result!" res = {CommonKeys.REQUEST_STATUS : ErrorCodes.BAD_CGMINER} http_code = 500 # check if config has the same number of gpu as cginer reports elif len(devs) != len(ServerInfo.getGpus()): print "Config is not sane !" res = {CommonKeys.REQUEST_STATUS : ErrorCodes.CONFIG_ERROR} http_code = 500 else: when = api.getServerTime(api_data) gpu_statuses = GpuInfo.processDevs(devs, when) res = { CommonKeys.REQUEST_STATUS : ErrorCodes.OK, CommonKeys.TIMESTAMP : timestamp, CommonKeys.SERVER_ID : server_id, CommonKeys.SERVER_STATUS : server_status, CommonKeys.GPUS_STATUS : gpu_statuses } # send response self.send_response(http_code) self.send_header("Content-type", "application/json") self.end_headers() self.wfile.write(json.dumps(res))
def __init__(self): self.long = 18 self.sets = ServerConfig.Sets() self.name = ServerInfo.Info('name').get_info() self.ver = ServerInfo.Info('ver').get_info() self.form = ServerInfo.Info('about').get_info() self.auth = ServerInfo.Info('by').get_info() self.mail = ServerInfo.Info('mail').get_info() self.noyes = [ru('No'), ru('Yes')] self.version = [ru('Default'), ru('HTTP/1.0'), ru('HTTP/1.1')] self.method = [ru('HEAD'), ru('GET'), ru('POST'), ru('DELETE'), ru('CONNECT'), ru('OPTIONS'), ru('TRACE'), ru('PUT')] self.line = [ru('\\r\\n'), ru('\\n')] self.split = [ru('Default'), ru('%s' % (self.line[self.sets.ILINE] * self.sets.ILINE)), ru('%s' % (self.line[self.sets.ILINE] * self.sets.ILINE)), ru('%s' % (self.line[self.sets.ILINE] * self.sets.ILINE)), ru('%s' % (self.line[self.sets.ILINE] * self.sets.ILINE)), ru('%s' % (self.line[self.sets.ILINE] * self.sets.ILINE))]
def IsExec(): newname = sys.stdout.write("+++ This is %s on %s Version %s +++\r\n\r\n" % (ServerInfo.Info('name').get_info().replace(' ', ''), platform.system(), ServerInfo.Info('ver').get_info()[:4]) ) toclose = sys.stdout.write("Press Ctrl+C to exit -- rewritten by %s\r\n\r\n" % ServerInfo.Info('mail').get_info()) stdtime = sys.stdout.write("%s Server started at - %s:%s \r\n\r\n" % (time.asctime(), sets.LHOST, sets.LPORT)) ihost = sys.stdout.write("Using Injection Host %s \r\n" %sets.IQUERY) spacer = sys.stdout.write("\r\n") if sets.LOGS == 0: LogWindow(flag = False) print "Quiet Mode, Logging Disabled\r\n" elif sets.LOGS == 1: LogWindow(flag = True) print "Logging enabled\r\n" elif sets.LOGS == 2: print "Logging to file: session.log\r\n"
def scenario_spoof_mail(): # This scenario shows how to send a spoof-mail, i.e. we create and send an email with a forged sender address # First, we specify sender the e-mail should show from_addr = "*****@*****.**" from_name = "Darth Vader" # Here we specify the receiver, please change this as you would like to see the outcome to_addr = "*****@*****.**" # Then we specify our server information # With the server info comes the real sender, while the email will look like it is from darth vader, # it will actually be from the user specified in ServerInfo class. server_info = ServerInfo.ServerInfo() # Using the specified server information we create a session mailer = Mailer.Mailer(server_info) mailer.connect_to_server() mailer.login_to_server() # We use the mail_creator class to generate Vaders' message mail_creator = MailCreator.MailCreator(from_name, from_addr) vaders_message = mail_creator.create_mail_darthvader(to_addr) # And finally send it. After that we shutdown the mail server again. mailer.send_mail(vaders_message) mailer.shutdown_server()
def scenario_phishing_simulation(): # This scenario shows how to run a phishing simulation, like commonly applied in course of security awareness # campaigns. # It starts again with defining sender and server information. In this scenario actual and apparent sender match. server_info = ServerInfo.ServerInfo() from_addr = server_info.username from_name = "Basil Sattler" # Using the specified server information we create a session mailer = Mailer.Mailer(server_info) mailer.connect_to_server() mailer.login_to_server() # We load the target adresses from the file stored in the data directory. Please note that the file should have # the format it has in the example file adress_manager = AddressManager.AdressManager("../data/examples.xls") # We instantiate an object of the MailCreator class mail_creator = MailCreator.MailCreator(from_name, from_addr) # Typically phishing mails point to some external resources where the actual phishing happens. Such a link can be # embedded into the mail while creation. This can be used, for example, to track whether the recipient has # clicked on the link. link = "https://daten-analysieren.de/" # We iterate over the adresses the adress_manager provides, create dynamically a e-mail and send it. for to_adr in adress_manager.get_adresses(): bequest_message = mail_creator.create_html_mail_bequest(to_adr, link) mailer.send_mail(bequest_message) # And finally shut down the server. mailer.shutdown_server()
def setLocalIP(): #强写本地IP地址到配置文件中去 cf1 = ConfigParser.ConfigParser() cf1.read(MyUtil.cur_file_dir() + "/auto.ini") ipMac = ServerInfo.GetinnerIPMac() innerIP = str(ipMac[0]) cf1.set("Configuration", "localIP", innerIP) cf1.write(open(MyUtil.cur_file_dir() + "/auto.ini", "w"))
def getComputerId(): """获取本机的唯一标识,如果从未安装过,则自动从UUID和MAC计算一个新ID出来 取19位长,并保存在操作系统目录下windows/system32/agentid """ try: if os.path.isfile(ServerInfo.sysDir()+"/agentid"): f = getProperties(ServerInfo.sysDir()+"/agentid") return f['agentid'] else: uid = str(uuid.uuid1()) mac = str(ServerInfo.GetinnerIPMac()[1]) tempid = base64.b64encode(uid+'_'+mac) tempid = tempid[:18] f = open(ServerInfo.sysDir()+"/agentid","w") #加上一个回车符,否则会取agentid错误 f.write('agentid='+tempid+'\n') f.close() return tempid except: return "getDiskId_error"
def extract(self, filename, path): if not filename.endswith('/') or not filename.endswith('\\'): f = os.path.join(path, filename) dir = os.path.dirname(f) if not os.path.exists(dir): os.makedirs(dir) file(f, 'wb').write(self.zfile.read(filename)) sys = ServerInfo.getSYSTEM() if sys == "Windows": return 'extract file: '+filename+" to "+"\\"+path+"\\ \n" else: return 'extract file: '+filename+" to "+"/"+path+"/ \n"
def do_CONNECT(self): if sets.RHTTPS: self.get_urlcheck() self.get_headercheck() self.get_recv_headers() self.get_proxy() query = QueryHandler(self.command, self.path, self.headers, self.https, self.phost, self.pport) self.path, self.headers, self.uahdr, self.host, self.port, self.advhost = query.get_query( ) self.get_newline() self.get_requestline() self.get_injectline() self.get_send_inject() self.get_send_headers() soc = self.proxy_sock() try: if self.connect_to(soc, self.host, self.port, self.advhost): data = '%s 200 Connection Established\r\nProxy-Agent: %s/%s' % ( self.request_version, ServerInfo.Info('name').get_info().replace( ' ', ''), ServerInfo.Info('ver').get_info()[:3]) self.send_response_data('%s\r\n' % data) self.send_response_data('\r\n') self.get_response_header(data) self.get_response_data(soc) self.send_connection_close(soc) self.del_garbage() except socket.error as msg: self.send_connection_error(msg) self.send_connection_close(soc) return except: return else: self.send_connection_error((501, 'method not allowed')) self.connection.close() return
def get_response_header(self, data): if not self.https: index = self.find_double_newline(data) if index >= 0: data = str(data[:index].split('\r\n\r\n')[0]) if self.get_data_splitter(data): self.send_connection_logger(Y+'++++++++++++ RESPONSE ++++++++++++\r\n' % data) self.send_connection_logger('\r\n') elif self.get_data_splitter(data): self.send_connection_logger(Y+'++++++++++++ RESPONSE ++++++++++++\r\n') self.send_connection_logger(B+'[+] %s\r\n' % data) self.send_connection_logger(G+'Client Connected! : %s/%s\r\n' % (ServerInfo.Info('name').get_info(), ServerInfo.Info('ver').get_info()[:3])) self.send_connection_logger('\r\n')
def reload(self): """ 重新加载已经部署服务 """ for namespace in os.listdir(self.server_root): for application in os.listdir( os.path.join(self.server_root, namespace)): for service in os.listdir( os.path.join(self.server_root, namespace, application)): server_info = ServerInfo.ServerInfo(namespace, \ application, \ service) self.deploy(server_info) self.cmpAndChange(server_info, self.STAT_DEPLOY, self.STAT_STOP)
def processDev(self, dev, time): dev_json = {} dev_json[CommonKeys.GPU_ID] = ServerInfo.getGPUGlobalId(dev[MinerKeys.GPU_ID]) dev_json[CommonKeys.TEMPERATURE] = dev[MinerKeys.TEMPERATURE] dev_json[CommonKeys.GPU_VOLTAGE] = dev[MinerKeys.GPU_VOLTAGE] dev_json[CommonKeys.GPU_CLOCK] = dev[MinerKeys.GPU_CLOCK] dev_json[CommonKeys.MEM_CLOCK] = dev[MinerKeys.MEM_CLOCK] dev_json[CommonKeys.FAN_RPM] = dev[MinerKeys.FAN_RPM] dev_json[CommonKeys.HW_ERRORS] = dev[MinerKeys.HW_ERRORS] dev_json[CommonKeys.REJECTED] = dev[MinerKeys.REJECTED] dev_json[CommonKeys.ACCEPTED] = dev[MinerKeys.ACCEPTED] dev_json[CommonKeys.CURRENT_HASH_RATE] = int(dev[MinerKeys.CURRENT_HASH_RATE] * 1000) dev_json[CommonKeys.INTENSITY] = int(dev[MinerKeys.INTENSITY]) dev_json[CommonKeys.TIME_SINCE_LAST_WORK] = time - dev[MinerKeys.LAST_WORK_TIME] dev_json[CommonKeys.TIME_SINCE_LAST_VALID_WORK] = time - dev[MinerKeys.LAST_VALID_WORK_TIME] return dev_json
def SecretKey(): """定义secret_key加密字串 """ global secret_key sys = ServerInfo.getSYSTEM() if sys == "Windows": IFS = "\\" else: IFS = "/" try: cf = ConfigParser.ConfigParser() cf.read(cur_file_dir()+IFS+"key.ini") key = cf.get("main", "key") secret_key = binascii.b2a_base64(key) #如果读不到KEY,则强制指定一个KEY,但必须所有程序的配置 都一样,否则会出错无法通讯 if secret_key == None: secret_key = 'UHV0WW91cktleUludG9UaGlzU3RyaW5n' except: secret_key = 'UHV0WW91cktleUludG9UaGlzU3RyaW5n'
def build_root_servers_info_objects(servers_info_file_path): """ builds ServerInfo objects for each root server :param servers_info: {list} the servers data parameters :returns: {list} list of server names for each root server """ servers_info = get_master_root_servers() root_servers_names = set() for server_csv_data in servers_info.values: server_data = list() for i in range(len(server_csv_data)): if i in LIST_TYPE_ARGS: server_data.append(list()) server_data[i].append(server_csv_data[i]) else: server_data.append(server_csv_data[i]) server_data.append("Root Domain") name_to_server_info_dict[server_data[SI.HOST_INDEX]] = SI.ServerInfo( server_data) root_servers_names.add(server_data[SI.HOST_INDEX]) return root_servers_names
def get_NS_for_domain(server, domain_to_check): """ queries this server for NS in the given domain :param server: {ServerInfo} server to make dns query from :param domain_to_check: {string} the domain to query :returns: {list} names of servers known to server """ server_data_dict = dict( ) # dictionary in the form of { server's name -> server's data } known_servers_names = set() # a set of server names response = None resolver = dns.resolver.Resolver() # clears the default servers the resolver queries # [local COMM/dns and 8.8.8.8 (google)] resolver.nameservers.clear() server_name = None # adds the server's addresses to the servers queried # by resolver for address in name_to_server_info_dict[server][SI.HOST_ADDRESS]: resolver.nameservers.append(address) try: # queries the name server for the given domain query = dns.message.make_query(domain_to_check, dns.rdatatype.NS) response = dns.query.udp(query, str(address), timeout=UDP_QUERY_TIME_OUT) except dns.resolver.NXDOMAIN: print("No such Domain" + domain_to_check) except dns.resolver.Timeout: print( str(server) + " was queried for the domain " + domain_to_check + " and request timeout") return None except dns.exception.DNSException: print("Unhandled DNS exception") except Exception as e: print(e.__cause__) if response is None: return None # analyses respone and creates data lists if len(response.authority) > 0: for rr in response.authority[0].items: server_name = str( rr.mname) if rr.rdtype == dns.rdatatype.SOA else str(rr.target) known_servers_names.add(server_name) if server_name not in name_to_server_info_dict: server_data_dict[server_name] = create_new_server_data_list( server_name) server_data_dict[server_name].append( "Name server for domain " + '"' + str(domain_to_check) + '"') server_data_dict[server_name].append(str(domain_to_check)) add_server_data_from_query_response( server_data_dict[server_name], rr) else: name_to_server_info_dict[server_name].add_rr_data(rr) if len(response.answer) > 0: for rr in response.answer[0].items: server_name = str(rr.target) known_servers_names.add(server_name) if server_name not in name_to_server_info_dict: server_data_dict[server_name] = create_new_server_data_list( server_name) server_data_dict[server_name].append( "Name server for domain " + '"' + str(domain_to_check) + '"') server_data_dict[server_name].append(str(domain_to_check)) add_server_data_from_query_response( server_data_dict[server_name], rr) else: name_to_server_info_dict[server_name].add_rr_data(rr) for rr in response.additional: server_name = str(rr.name) known_servers_names.add(server_name) if server_name not in name_to_server_info_dict: server_data_dict[server_name] = create_new_server_data_list( server_name) server_data_dict[server_name].append("Name server for domain " + '"' + str(domain_to_check) + '"') server_data_dict[server_name].append(str(domain_to_check)) add_server_data_from_query_response(server_data_dict[server_name], rr) else: name_to_server_info_dict[server_name].add_rr_data(rr) # builds a ServerInfo object for each server data list for server_data in server_data_dict.values(): name_to_server_info_dict[server_data[SI.HOST_INDEX]] = SI.ServerInfo( server_data) known_servers_names.add(server_data[SI.HOST_INDEX]) # builds a ServerInfo object for each server data list return known_servers_names
import ServerInfo as serverInfo from db import DatabaseManager import UserDocumentResource as userDoc import NoEndpointResource as noDoc from RateLimiter import RateLimiter # api = falcon.API(middleware=[RateLimiter(limit=2)]) api = falcon.API() database_manager = DatabaseManager.DatabaseManager() database = database_manager.get_db() user_manager = UserManager.UserManager(database) api.add_route('/', serverInfo.ServerInfoHTML()) api.add_route('/server-info', serverInfo.ServerInfo()) api.add_route('/{endpoint_type}/{table}/docs/delete', userDoc.UserDocumentResource(database, user_manager)) api.add_route('/{endpoint_type}/{table}/docs/delete/{doc_id}', userDoc.UserDocumentResource(database, user_manager)) api.add_route('/{endpoint_type}/{table}/docs', userDoc.UserDocumentResource(database, user_manager)) api.add_route('/{endpoint_type}/{table}/docs/{doc_id}', userDoc.UserDocumentResource(database, user_manager)) api.add_route('/{endpoint_type}/{table}/docs/count', userDoc.UserDocumentResource(database, user_manager)) api.add_route('/{endpoint_type}/{table}/docs/delete_all', userDoc.UserDocumentResource(database, user_manager))
def run(self): '''首次读入定时调度配置,确认当前时间,设定离下一分钟的秒数,分析定时调度''' self.writeLog('Agent4Linux start.') while True: try: nowTime = string.split(time.strftime( '%w,%m,%d,%H,%M,%S', time.localtime(time.time())), sep=',') timesWait = 60 - int(nowTime[5]) #读入定时作业用的配置文件 listcount = self.readCron(MyUtil.cur_file_dir() + '/crontab.ini') cf = ConfigParser.ConfigParser() cf.read(MyUtil.cur_file_dir() + "/agent.ini") MonitorProcess = cf.get( "main", "MonitorProcess").encode("utf-8").split(',') allProcess = [] _allPro = [] _allProcess = [] _allProcess = ServerInfo.getAllProcessNameId() for ProcessList in _allProcess: allProcess.append(ProcessList[0]) _allPro = ServerInfo.getAllProcessInfo() insertTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) #循环需要定时守护的进程数 for i in range(1, int(listcount)): #如果当前进程中不存在守护的进程,调用定时守护启动程序,并发送重启信息给DB if not str(AExe[i]).upper() in allProcess: self.Cronjob(i, nowTime) send = MyUtil.SendMsgToDB() send.send( _3ds.Encrypt('processRestart;' + str(innerIP) + ";" + str(AExe[i]) + ";" + str(ACmd[i]) + ";" + str(insertTime))) send.sock.recv(socksize) send.send(_3ds.Encrypt('end')) send.closeSock() else: pass #如果当前进程中存在要监控的进程,循环找出该进程的相关信息发送至DB服务器 for MProcess in MonitorProcess: ProcessStatus = 'NOTRUN' for MPro in _allPro: #如果进程在所有进程中找到一个相同的就发进程状态消息 if str(MProcess).upper() == str(MPro[0]).upper(): send = MyUtil.SendMsgToDB() #发现psutil取出的进程CPU使用率,需要除CPU个数,否则不准 send.send( _3ds.Encrypt('insertProLog;' + innerIP + ";" + str(MPro[0]) + ";" + str(MPro[1]) + ";" + str(MPro[2]) + ";" + str(MPro[3]) + ";" + str(int(MPro[4]) / CPUCores) + ";" + str(insertTime))) send.sock.recv(socksize) send.send(_3ds.Encrypt('end')) send.closeSock() ProcessStatus = 'running' break else: ProcessStatus = 'NOTRUN' #如果全部检查后进程状态为未运行,发送进程未启动信息 if ProcessStatus == 'NOTRUN': try: send = MyUtil.SendMsgToDB() send.send( _3ds.Encrypt('NotRUNProess;' + innerIP + ";" + str(MProcess).upper() + ";" + str(insertTime))) send.sock.recv(socksize) send.send(_3ds.Encrypt('end')) except: self.writeLog("runCron.send.Error:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1])) finally: send.closeSock() time.sleep(timesWait) except: self.writeLog("runCron Error:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1])) time.sleep(timesWait)
import os import ServerInfo ru = lambda text: text.decode('utf-8', 'ignore') ur = lambda text: text.encode('utf-8', 'ignore') name = '%s.conf' % ServerInfo.Info('name').get_info().replace(' ', '') path = '/' conf = '%s%s%s' % (os.getcwd(), path, name) class Sets: def __init__(self): self.LHOST = '127.0.0.1' self.LPORT = 8080 self.FQUERY = '' self.MQUERY = '' self.BQUERY = '' self.RQUERY = '' self.CQUERY = '' self.IQUERY = '' self.ADBLOCKER = 0 self.IMETHOD = 1 self.ILINE = 0 self.ISPLIT = 5 self.RPORT = 0 self.RPATH = 0 self.ADMODE = 0 self.CUSHDR0 = '' self.VALHDR0 = '' self.CUSHDR1 = '' self.VALHDR1 = '' self.CUSHDR2 = ''
def updateSelf(cmd, cmdStr): """2011-01-13 update self """ try: #print "updateself step 1" path = MyUtil.cur_file_dir() cmdStr = "cmd=downloads,file=update.zip,updateself=updateself,path=" + path cmd = MyUtil.splitCmd(cmdStr) reStr = downloads(cmd, cmdStr) if reStr[0] == int('-1'): return reStr[1] rs = "" #print "updateself step 2 ", reStr if reStr[0] == int('2'): """解压update.zip至当前目录下的update.tmp中""" zipout = MyUtil.UnZIP("update.zip", "update.tmp") #print "updateself step 3 unzip. zipout = ",zipout[0] if zipout[0] == '1': rs += zipout[1] '''检验update.tmp/config.ini是否存在''' if os.path.isfile("update.tmp/config.ini"): #print "updateself step 4 check config.ini" '''读取config.ini的配置''' cf = ConfigParser.ConfigParser() cf.read("update.tmp\\config.ini") md5Files = cf.get("filemd5", "md5Files") uAgent = cf.get("main", "updateAgentService") uCMDServer = cf.get("main", "updateCMDServer") uRunPro = cf.get("main", "RunPrograms") uremove = cf.get("main", "removeFiles") '''对需要的文件做MD5验证,通过则下一步''' md5FilePath = (MyUtil.cur_file_dir() + "\\update.tmp\\") _md5Files = md5Files.split(',') MD5Flag = False if _md5Files != None and md5FilePath != None and _md5Files != '' and md5FilePath != '': for filemd5 in _md5Files: '''循环比对指定文件的MD5码值''' fileName, rightMD5 = filemd5.split(":") filePath = md5FilePath + fileName ret = string.split(md5sum(filePath)) if ret[0] == "-1" or ret[0] == "-2": MD5Flag = False elif ret[1] == rightMD5: MD5Flag = True #print "updateself step 5 check MD5, MD5Flag =",MD5Flag if MD5Flag: '''根据配置运行''' #print "updateself step 6 update AgentService =",uAgent.upper() if uAgent.upper() == "YES": '''如果要更新Agentservices,则先杀掉进程,卸载服务,然后复制文件''' '''再安装服务,运行服务。''' p = os.popen(ServerInfo.sysDir() + '\\taskkill /IM AgentService.exe /F') str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(ServerInfo.sysDir() + '\\sc delete AgentService 2>&1') str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() try: shutil.copy2( md5FilePath + "AgentService.exe", os.path.join(MyUtil.cur_file_dir() + "\\AgentService.exe")) except: #print "AgentService copy Error.",sys.exc_info()[0],sys.exc_info()[1] pass try: shutil.copy2( md5FilePath + "w9xpopen.exe", os.path.join(MyUtil.cur_file_dir() + "\\w9xpopen.exe")) except: pass try: shutil.copy2( md5FilePath + "MSVCR71.dll", os.path.join(MyUtil.cur_file_dir() + "\\MSVCR71.dll")) except: pass try: shutil.copy2( md5FilePath + "setCfg.exe", os.path.join(MyUtil.cur_file_dir() + "\\setCfg.exe")) except: pass p = os.popen("setCfg.exe 2>&1") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(MyUtil.cur_file_dir() + "\\AgentService.exe -install 2>&1") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen( ServerInfo.sysDir() + "\\sc config AgentService start= auto") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(ServerInfo.sysDir() + "\\sc start AgentService") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() #print "updateself step 7, RunProcess= ",uRunPro.upper() if uRunPro.upper() <> "NO": """如果不是NO,则把要运行的程序绝对路径和执行名放在参数中,以逗号隔开 """ try: Pros = uRunPro.split(",") for Pro in Pros: p = os.popen(Pro) str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() except: pass #print "updateself step 8, RemoveFile= ",uremove.upper() """如果不是NO,则把要删除的文件绝对路径放在参数中,以逗号隔开 """ if uremove.upper() <> "NO": try: removefiles = uremove.split(",") for rfile in removefiles: shutil.rmtree(rfile) except: pass #print "updateself step 9, Update CMDServer = ",uCMDServer.upper() if uCMDServer.upper() == "YES": '''如果需要更新CMDServer,则将tmp下的EXE复制到当前目录下加_后缀,''' '''然后调用updateself.exe杀掉自身,让agentservice去定时启动CMDServer''' try: shutil.copy2( md5FilePath + "CMDServer.exe", os.path.join(MyUtil.cur_file_dir() + "\\CMDServer.exe_")) except: pass try: shutil.copy2( md5FilePath + "w9xpopen.exe", os.path.join(MyUtil.cur_file_dir() + "\\w9xpopen.exe")) except: pass try: shutil.copy2( md5FilePath + "MSVCR71.dll", os.path.join(MyUtil.cur_file_dir() + "\\MSVCR71.dll")) except: pass try: shutil.copy2( md5FilePath + "updateself.exe", os.path.join(MyUtil.cur_file_dir() + "\\updateself.exe")) except: pass updateselflog('CMDServer更新完成.' + MyUtil.cur_file_dir()) #print "updateself step 10, run updateself.exe..." try: time.sleep(3) p = subprocess.Popen('updateself.exe') rs += "updateself.exe run over.\n" except: #print "updateself step X" pass #print "updateself step 11, remove update.tmp." if os.path.isdir(md5FilePath): '''全部运行完毕,删除tmp文件目录''' shutil.rmtree(md5FilePath) #return "1",rs return rs else: #return "-1","MD5 check failed!文件MD5码验证与配置不一致!" return "MD5 check failed!文件MD5码验证与配置不一致!" else: #return "-1","config.ini md5Files is null.配置文件中没有需要比对的文件." return "config.ini md5Files is null.配置文件中没有需要比对的文件." else: #return "-1","config.ini not found.更新配置文件未找到." return "config.ini not found.更新配置文件未找到." else: return reStr except: updateselflog("Client.updateSelf:" + str(sys.exc_info()[0]) + str(sys.exc_info()[1])) #print sys.exc_info()[0],sys.exc_info()[1] finally: if os.path.isdir(md5FilePath): '''删除tmp文件目录''' shutil.rmtree(md5FilePath)
def updateSelf(cmd,cmdStr): """2011-01-13 update self """ try: print "updateself step 1" path = MyUtil.cur_file_dir() cmdStr = "cmd=downloads,file=update4Linux.zip,updateself=updateself,path="+path cmd = MyUtil.splitCmd(cmdStr) reStr = downloads(cmd, cmdStr) if reStr[0] == int('-1'): return reStr[1] rs ="" print "updateself step 2 ", reStr if reStr[0] == int('2'): """解压update.zip至当前目录下的update.tmp中""" zipout = MyUtil.UnZIP("update4Linux.zip", "update.tmp") print "updateself step 3 unzip. zipout = ",zipout[0] if zipout[0] == '1': rs += zipout[1] '''检验update.tmp/config.ini是否存在''' if os.path.isfile("update.tmp/config.ini"): print "updateself step 4 check config.ini" '''读取config.ini的配置''' cf = ConfigParser.ConfigParser() cf.read("update.tmp/config.ini") md5Files = cf.get("filemd5","md5Files") uAgent = cf.get("main", "updateAgentService") uCMDServer = cf.get("main", "updateCMDServer") uRunPro = cf.get("main", "RunPrograms") uremove = cf.get("main", "removeFiles") '''对需要的文件做MD5验证,通过则下一步''' md5FilePath = (MyUtil.cur_file_dir()+"/update.tmp/") _md5Files = md5Files.split(',') MD5Flag = False if _md5Files != None and md5FilePath != None and _md5Files != '' and md5FilePath != '': for filemd5 in _md5Files: '''循环比对指定文件的MD5码值''' fileName,rightMD5 = filemd5.split(":") filePath = md5FilePath + fileName ret = string.split(md5sum(filePath)) if ret[0] == "-1" or ret[0] == "-2": MD5Flag = False elif ret[1] == rightMD5: MD5Flag = True print "updateself step 5 check MD5, MD5Flag =",MD5Flag if MD5Flag: '''根据配置运行''' print "updateself step 6 update Agent4Linux =",uAgent.upper() if uAgent.upper() == "YES": '''如果要更新Agent,则先杀掉进程,调用自更新脚本复制文件和启动服务''' _allpronameid = ServerInfo.getAllProcessNameId() for _name,_id in _allpronameid: if _name.upper() == "Agent4Linux".upper(): p = ServerInfo.Kill_Process_pid(_id) str1 = "find process "+str(_name)+", pid = "+str(_id)+", kill it!\n" rs += str1 try: os.chmod(MyUtil.cur_file_dir()+"/updateself.sh",0755) p = os.popen(MyUtil.cur_file_dir()+"/updateself.sh") str1 = p.readlines() for s in str1: rs += s p.close() except: print "updateAgent4LinuxError:"+str(sys.exc_info()[0]) + str(sys.exc_info()[1]) pass print "updateself step 7, RunProcess= ",uRunPro.upper() if uRunPro.upper() <> "NO" : """如果不是NO,则把要运行的程序绝对路径和执行名放在参数中,以逗号隔开 """ try: Pros = uRunPro.split(",") for Pro in Pros: p = os.popen(Pro) str1 = p.readlines() for s in str1: rs += s p.close() except: pass print "updateself step 8, RemoveFile= ",uremove.upper() """如果不是NO,则把要删除的文件绝对路径放在参数中,以逗号隔开 """ if uremove.upper() <> "NO": try: removefiles = uremove.split(",") for rfile in removefiles: shutil.rmtree(rfile) except: pass print "updateself step 9, Update CMDServer4Linux = ",uCMDServer.upper() if uCMDServer.upper() == "YES": '''如果需要更新CMDServer4Linux,调用updateCMDServer.sh完成更新''' # _allpronameid = getAllProcessNameId() # for _name,_id in _allpronameid: # if _name.upper() == "CMDServer4Linux".upper(): # p = Kill_Process_pid(_id) # str1 = "find process "+str(_name)+", pid = "+str(_id)+", kill it!\n" # rs += str1 try: os.chmod(MyUtil.cur_file_dir()+"/updateCMDServer.sh",0755) p = os.popen(MyUtil.cur_file_dir()+"/updateCMDServer.sh") str1 = p.readlines() for s in str1: rs += s p.close() except: print "updateCMDServerError:"+str(sys.exc_info()[0]) + str(sys.exc_info()[1]) pass print "updateself step 10, remove update.tmp." if os.path.isdir(md5FilePath): '''全部运行完毕,删除tmp文件目录''' shutil.rmtree(md5FilePath) #return "1",rs return rs else: #return "-1","MD5 check failed!文件MD5码验证与配置不一致!" return "MD5 check failed!文件MD5码验证与配置不一致!" else: #return "-1","config.ini md5Files is null.配置文件中没有需要比对的文件." return "config.ini md5Files is null.配置文件中没有需要比对的文件." else: #return "-1","config.ini not found.更新配置文件未找到." return "config.ini not found.更新配置文件未找到." else: return reStr except: updateselflog("Client.updateSelf:"+str(sys.exc_info()[0])+str(sys.exc_info()[1])) print sys.exc_info()[0],sys.exc_info()[1] finally: if os.path.isdir(md5FilePath): '''删除tmp文件目录''' shutil.rmtree(md5FilePath)
def run(self): '''首次读入定时调度配置,确认当前时间,设定离下一分钟的秒数,分析定时调度''' self.writeLog('Agent4Linux start.') while True: try: nowTime=string.split(time.strftime('%w,%m,%d,%H,%M,%S',time.localtime(time.time())), sep=',') timesWait=60-int(nowTime[5]) #读入定时作业用的配置文件 listcount=self.readCron(MyUtil.cur_file_dir()+'/crontab.ini') cf = ConfigParser.ConfigParser() cf.read(MyUtil.cur_file_dir()+"/agent.ini") MonitorProcess = cf.get("main", "MonitorProcess").encode("utf-8").split(',') allProcess = [] _allPro = [] _allProcess = [] _allProcess = ServerInfo.getAllProcessNameId() for ProcessList in _allProcess: allProcess.append(ProcessList[0]) _allPro = ServerInfo.getAllProcessInfo() insertTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) #循环需要定时守护的进程数 for i in range(1,int(listcount)): #如果当前进程中不存在守护的进程,调用定时守护启动程序,并发送重启信息给DB if not str(AExe[i]).upper() in allProcess: self.Cronjob(i,nowTime) send = MyUtil.SendMsgToDB() send.send(_3ds.Encrypt('processRestart;'+str(innerIP)+";"+str(AExe[i])+";"+str(ACmd[i])+";"+str(insertTime))) send.sock.recv(socksize) send.send(_3ds.Encrypt('end')) send.closeSock() else: pass #如果当前进程中存在要监控的进程,循环找出该进程的相关信息发送至DB服务器 for MProcess in MonitorProcess: ProcessStatus = 'NOTRUN' for MPro in _allPro: #如果进程在所有进程中找到一个相同的就发进程状态消息 if str(MProcess).upper() == str(MPro[0]).upper(): send = MyUtil.SendMsgToDB() #发现psutil取出的进程CPU使用率,需要除CPU个数,否则不准 send.send(_3ds.Encrypt('insertProLog;'+innerIP+";"+str(MPro[0])+";"+str(MPro[1])+";"+str(MPro[2])+";"+str(MPro[3])+";"+str(int(MPro[4])/CPUCores)+";"+str(insertTime))) send.sock.recv(socksize) send.send(_3ds.Encrypt('end')) send.closeSock() ProcessStatus = 'running' break else: ProcessStatus = 'NOTRUN' #如果全部检查后进程状态为未运行,发送进程未启动信息 if ProcessStatus == 'NOTRUN': try: send = MyUtil.SendMsgToDB() send.send(_3ds.Encrypt('NotRUNProess;'+innerIP+";"+str(MProcess).upper()+";"+str(insertTime))) send.sock.recv(socksize) send.send(_3ds.Encrypt('end')) except: self.writeLog("runCron.send.Error:"+str(sys.exc_info()[0])+str(sys.exc_info()[1])) finally: send.closeSock() time.sleep(timesWait) except: self.writeLog("runCron Error:"+str(sys.exc_info()[0])+str(sys.exc_info()[1])) time.sleep(timesWait)
cf1.set("Configuration", "OuterIP", setWAIIP) cf1.set("Configuration", "OS", setOS) cf1.set("Configuration", "CodeSet", setCodeSet) cf1.set("Configuration", "CPUCores", setCPUCores) cf1.set("Configuration", "hostname", setHostname) cf1.set("Configuration", "Platform", setPlatform) cf1.set("Configuration", "CPUInfo", setCPUInfo) cf1.set("Configuration", "SystemDirectory", setSysDir) cf1.set("Configuration", "Physicalmemory", setPHMEM) cf1.write(open(MyUtil.cur_file_dir() + "/auto.ini", "w")) if __name__ == '__main__': try: #配置文件获取 ipMac = ServerInfo.GetinnerIPMac() waiIP = ServerInfo.getWaiIP() innerIP = str(ipMac[0]) innerMAC = str(ipMac[1]) swaiIP = waiIP[0] setOS = ServerInfo.getOS() CodeSet = ServerInfo.codeset() Cores = ServerInfo.getCPUCores() sHostname = ServerInfo.hostname() sPlatform = ServerInfo.getSYSTEM() sCPUInfo = ServerInfo.cpuInfo() sSysDir = ServerInfo.sysDir() sPHMEM = str(ServerInfo.getPhyMem()[0]) writeCfgfile(innerIP, innerMAC, swaiIP, setOS, CodeSet, Cores, sHostname, sPlatform, sSysDir, sCPUInfo, sPHMEM) print "CheckOK.检查配置文件完成".decode('utf-8')
from ServerInfo import * server = ServerInfo('92.119.148.19') print(server.get_player_info()) #print(server.ping())
cf1.set("Configuration","OS",setOS) cf1.set("Configuration","CodeSet",setCodeSet) cf1.set("Configuration","CPUCores",setCPUCores) cf1.set("Configuration","hostname",setHostname) cf1.set("Configuration","Platform",setPlatform) cf1.set("Configuration","CPUInfo",setCPUInfo) cf1.set("Configuration","SystemDirectory",setSysDir) cf1.set("Configuration","Physicalmemory",setPHMEM) cf1.write(open(MyUtil.cur_file_dir()+"/auto.ini", "w")) if __name__ == '__main__': try: #配置文件获取 ipMac = ServerInfo.GetinnerIPMac() waiIP = ServerInfo.getWaiIP() innerIP = str(ipMac[0]) innerMAC = str(ipMac[1]) swaiIP = waiIP[0] setOS = ServerInfo.getOS() CodeSet = ServerInfo.codeset() Cores = ServerInfo.getCPUCores() sHostname = ServerInfo.hostname() sPlatform = ServerInfo.getSYSTEM() sCPUInfo = ServerInfo.cpuInfo() sSysDir = ServerInfo.sysDir() sPHMEM = str(ServerInfo.getPhyMem()[0]) writeCfgfile(innerIP,innerMAC,swaiIP,setOS,CodeSet,Cores,sHostname,sPlatform,sSysDir,sCPUInfo,sPHMEM) print "CheckOK.检查配置文件完成".decode('utf-8') except: print "RunError.运行错误".decode('utf-8')
"taunt": "Are you feeling okay, {0.author.mention}?", "thank": "Don't flatter yourself, {0.author.mention}", "respect": "I would, but the chat is too full of your ego for me to send a message right now, {0.author.mention}", "forbiddenName": "No" } voiceLineCommands = [ "taunt", "xx3", "x8", "respect", "xx1", "x0", "thank", "x5", "xx6", "c4", "cc3", "ccc4" ] recognizedServers = { "bigChiv": ServerInfo.ServerInfo("query.aspx?id=24", "Moorland Skirmishers | Gracious Welcome", "66.151.138.224:3170", "Chivalry: Medieval Warfare"), "smallChiv": ServerInfo.ServerInfo("query.aspx?id=25", "Moorland Skirmishers | Map Testing", "66.151.138.224:3175", "Chivalry: Medieval Warfare"), "bigMord": ServerInfo.ServerInfo("query.aspx?id=28", "Moorland Skirmishers ❊ The Moor Wild West", "66.151.138.224:13301", "Mordhau"), "smallMord": ServerInfo.ServerInfo("query.aspx?id=33", "Moorland Skirmishers ❊ Gracious Welcome", "66.151.138.224:13306", "Mordhau") }
def updateSelf(cmd,cmdStr): """2011-01-13 update self """ try: #print "updateself step 1" path = MyUtil.cur_file_dir() cmdStr = "cmd=downloads,file=update.zip,updateself=updateself,path="+path cmd = MyUtil.splitCmd(cmdStr) reStr = downloads(cmd, cmdStr) if reStr[0] == int('-1'): return reStr[1] rs ="" #print "updateself step 2 ", reStr if reStr[0] == int('2'): """解压update.zip至当前目录下的update.tmp中""" zipout = MyUtil.UnZIP("update.zip", "update.tmp") #print "updateself step 3 unzip. zipout = ",zipout[0] if zipout[0] == '1': rs += zipout[1] '''检验update.tmp/config.ini是否存在''' if os.path.isfile("update.tmp/config.ini"): #print "updateself step 4 check config.ini" '''读取config.ini的配置''' cf = ConfigParser.ConfigParser() cf.read("update.tmp\\config.ini") md5Files = cf.get("filemd5","md5Files") uAgent = cf.get("main", "updateAgentService") uCMDServer = cf.get("main", "updateCMDServer") uRunPro = cf.get("main", "RunPrograms") uremove = cf.get("main", "removeFiles") '''对需要的文件做MD5验证,通过则下一步''' md5FilePath = (MyUtil.cur_file_dir()+"\\update.tmp\\") _md5Files = md5Files.split(',') MD5Flag = False if _md5Files != None and md5FilePath != None and _md5Files != '' and md5FilePath != '': for filemd5 in _md5Files: '''循环比对指定文件的MD5码值''' fileName,rightMD5 = filemd5.split(":") filePath = md5FilePath + fileName ret = string.split(md5sum(filePath)) if ret[0] == "-1" or ret[0] == "-2": MD5Flag = False elif ret[1] == rightMD5: MD5Flag = True #print "updateself step 5 check MD5, MD5Flag =",MD5Flag if MD5Flag: '''根据配置运行''' #print "updateself step 6 update AgentService =",uAgent.upper() if uAgent.upper() == "YES": '''如果要更新Agentservices,则先杀掉进程,卸载服务,然后复制文件''' '''再安装服务,运行服务。''' p = os.popen(ServerInfo.sysDir()+'\\taskkill /IM AgentService.exe /F') str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(ServerInfo.sysDir()+'\\sc delete AgentService 2>&1') str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() try: shutil.copy2(md5FilePath+"AgentService.exe", os.path.join(MyUtil.cur_file_dir()+"\\AgentService.exe")) except: #print "AgentService copy Error.",sys.exc_info()[0],sys.exc_info()[1] pass try: shutil.copy2(md5FilePath+"w9xpopen.exe", os.path.join(MyUtil.cur_file_dir()+"\\w9xpopen.exe")) except: pass try: shutil.copy2(md5FilePath+"MSVCR71.dll", os.path.join(MyUtil.cur_file_dir()+"\\MSVCR71.dll")) except: pass try: shutil.copy2(md5FilePath+"setCfg.exe", os.path.join(MyUtil.cur_file_dir()+"\\setCfg.exe")) except: pass p = os.popen("setCfg.exe 2>&1") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(MyUtil.cur_file_dir()+"\\AgentService.exe -install 2>&1") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(ServerInfo.sysDir()+"\\sc config AgentService start= auto") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() p = os.popen(ServerInfo.sysDir()+"\\sc start AgentService") str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() #print "updateself step 7, RunProcess= ",uRunPro.upper() if uRunPro.upper() <> "NO" : """如果不是NO,则把要运行的程序绝对路径和执行名放在参数中,以逗号隔开 """ try: Pros = uRunPro.split(",") for Pro in Pros: p = os.popen(Pro) str1 = p.readlines() for s in str1: rs += s.decode('gbk').encode("utf-8") p.close() except: pass #print "updateself step 8, RemoveFile= ",uremove.upper() """如果不是NO,则把要删除的文件绝对路径放在参数中,以逗号隔开 """ if uremove.upper() <> "NO": try: removefiles = uremove.split(",") for rfile in removefiles: shutil.rmtree(rfile) except: pass #print "updateself step 9, Update CMDServer = ",uCMDServer.upper() if uCMDServer.upper() == "YES": '''如果需要更新CMDServer,则将tmp下的EXE复制到当前目录下加_后缀,''' '''然后调用updateself.exe杀掉自身,让agentservice去定时启动CMDServer''' try: shutil.copy2(md5FilePath+"CMDServer.exe", os.path.join(MyUtil.cur_file_dir()+"\\CMDServer.exe_")) except: pass try: shutil.copy2(md5FilePath+"w9xpopen.exe", os.path.join(MyUtil.cur_file_dir()+"\\w9xpopen.exe")) except: pass try: shutil.copy2(md5FilePath+"MSVCR71.dll", os.path.join(MyUtil.cur_file_dir()+"\\MSVCR71.dll")) except: pass try: shutil.copy2(md5FilePath+"updateself.exe", os.path.join(MyUtil.cur_file_dir()+"\\updateself.exe")) except: pass updateselflog('CMDServer更新完成.'+MyUtil.cur_file_dir()) #print "updateself step 10, run updateself.exe..." try: time.sleep(3) p = subprocess.Popen('updateself.exe') rs += "updateself.exe run over.\n" except: #print "updateself step X" pass #print "updateself step 11, remove update.tmp." if os.path.isdir(md5FilePath): '''全部运行完毕,删除tmp文件目录''' shutil.rmtree(md5FilePath) #return "1",rs return rs else: #return "-1","MD5 check failed!文件MD5码验证与配置不一致!" return "MD5 check failed!文件MD5码验证与配置不一致!" else: #return "-1","config.ini md5Files is null.配置文件中没有需要比对的文件." return "config.ini md5Files is null.配置文件中没有需要比对的文件." else: #return "-1","config.ini not found.更新配置文件未找到." return "config.ini not found.更新配置文件未找到." else: return reStr except: updateselflog("Client.updateSelf:"+str(sys.exc_info()[0])+str(sys.exc_info()[1])) #print sys.exc_info()[0],sys.exc_info()[1] finally: if os.path.isdir(md5FilePath): '''删除tmp文件目录''' shutil.rmtree(md5FilePath)