Exemple #1
0
    def parseHead(self, data):
        global GMPORT
        if len(data) >= 14:
            head = unpack('<HLHHL', data[:14])
            if head[0] + 2 <= len(data):
                mdata = data[ : head[0] + 2]
                data = data[head[0] + 2 : ]
                if head[1] == 0xABDE:
                    if head[3] == 0x9003:
                        self.msg.ParseFromString(mdata[14:])
                        log.uuidLog.debug('%s\t%s'%(self.msg.uuid, '%s:%s'%self.socket.getsockname()))
                        if self.msg.code == 0x230d and (not self.msg.arenaEnded.error):
                            log.LOG.info('Arena End info : %s'%self.msg)
                            sleep(DELAYKILL)
                            killProcess('War3.exe')
                            killProcess('StarCraft.exe')
                            log.LOG.debug('cmd kill games process')
                        elif self.msg.code == 0x2107 and self.msg.userStatusUpdate.user.status == 'browsing':
                            log.LOG.info('User Mode Change info : %s'%self.msg)
                            killProcess('War3.exe')
                            killProcess('StarCraft.exe')
                            log.LOG.debug('cmd kill games process')
                    elif head[3] == 0x9002:
                        self.login = not self.login
                        if self.login:
                            #os.popen('start /B gmclient_watcher.exe %s'%GMPORT)
                            log.LOG.info('Virtual User logined !')
                        else:
                            killProcess('gmclient_watcher.exe')
                            log.LOG.info('Virtual User logouted !')
                elif head[1] == 0xAAAC:
                    if head[3] == 0xffff:
                        log.LOG.info('received head from Service : [%d, %2x]' % (head[0],
                                                                             head[3]))
                        log.LOG.debug('received package from Service : ', mdata)
                        self.listen_message()
                        if not self.stepList:
                            self.send()
                    elif head[3] == 0x0006:
                        self.socket.sendall(mdata)
#                        log.LOG.debug('received heart %s!'%unpack('<L', mdata[-4:]))
                        if self.stepList:
                            self.operation()
                            if not self.stepList:
                                self.send()
                        if not self.login:
                            self.chkGMClient()
                    else:
                        log.LOG.info('received handler from Service : [%d, %2x]' % (head[0],
                                                                                head[3]))
                        log.LOG.debug('received package from Service : ', mdata)
                        self.r_pack.append([head[0], head[3], mdata])
                else:
                    log.LOG.error('receive FIFA package from %s : ' % SERVER, mdata)
                    self.close()
                data = self.parseHead(data)
        return data
Exemple #2
0
 def operation(self):
     try:
         while len(self.stepList):
             #================上传Log=================
             if self.stepList[0] == 'up':
                 if self.data[self.stepList[0]][0] == '!':
                     notNullWildcard = [uploadFileName for uploadFileName in re.split('\|', self.data[self.stepList[0]][1:]) if uploadFileName]
                     print notNullWildcard
                     self.copyLog(self.localpath, notNullWildcard)
                 else:
                     notNullWildcard = [uploadFileName for uploadFileName in re.split('\|', self.data[self.stepList[0]]) if uploadFileName]
                     self.copyLog(self.localpath, notNullWildcard, isfull = True)
                 if self.copyLogNames:
                     self.stepList[0] = 'chkCopyLog'
                 else:
                     del(self.stepList[0])
                 continue
             #================上传Log=================
             #================下载文件=================
             elif self.stepList[0] == 'down':
                 chkPath('%shistory' % self.localpath)
                 for flag in re.split('\|', self.data[self.stepList[0]]):
                     tcmd = '%shistory\\%s' % (self.localpath, flag)
                     runCMD('del /q /f "%s(5)"' % tcmd)
                     runCMD('ren "%s(4)" "%s(5)"' % (tcmd, flag))
                     runCMD('ren "%s(3)" "%s(4)"' % (tcmd, flag))
                     runCMD('ren "%s(2)" "%s(3)"' % (tcmd, flag))
                     runCMD('ren "%s(1)" "%s(2)"' % (tcmd, flag))
                     runCMD('copy /y "%s%s" "%s(1)"' % (self.localpath, flag, tcmd))
                     runCMD('del /q /f "%s%s"' % (self.localpath, flag))
                     log.LOG.info('成功下载文件%s' % flag)
                     self.result.append('成功下载文件%s\n'%flag)
                 log.LOG.debug(mylib.rar.decompression('down', self.localpath)) #异步解压文件
                 self.stepList[0] = 'chkDecompression'
                 continue
             elif self.stepList[0] == 'chkCopyLog':
                     for n in self.copyLogNames:
                         try:
                             tempfile = open(r'.\temp\%s'%n, 'r')
                             tempfile.close()
                         except:
                             return
                     os.popen('start msg %username% "log已收集,请继续测试!"')
                     log.LOG.debug(mylib.rar.compression('up', '.\\temp\\', self.copyLogNames))
                     self.stepList[0] = 'chkCompression'
                     continue
             elif self.stepList[0] == 'chkCompression':
                 if 'Rar.exe' in os.popen('tasklist /FI "IMAGENAME eq rar.exe"').read():
                     return
                 else:
                     try:
                         tempfile = open(r'.\temp\up.rar', 'r')
                         tempfile.close()
                         if self.login:
                             package = mylib.package.pack4('%s_%s'%(USER, self.returnIP))
                         else:
                             package = mylib.package.pack4(self.returnIP)
                         self.result.append('成功压缩文件')
                         self.s_pack.append(package)
                     except:
                         self.result.append('压缩失败!')
                         log.LOG.error('压缩失败')
                     del(self.stepList[0])
                     continue
             elif self.stepList[0] == 'chkDecompression':
                 if 'Rar.exe' in os.popen('tasklist /FI "IMAGENAME eq rar.exe"').read():
                     return
                 else:
                     for fileName in re.split('\|', self.data['down']):
                         if os.path.exists('%s%s'%(self.localpath, fileName)):
                             log.LOG.info('%s成功解压到%s' % (fileName, self.localpath))
                             self.result.append('%s成功解压到%s\n' % (fileName, self.localpath))
                         else:
                             self.result.append('%s文件下载失败\n'%fileName)
                             log.LOG.info('%s文件下载失败\n'%fileName)
                     del(self.stepList[0])
                     continue
             #================下载文件=================
             for flag in re.split('\|', self.data[self.stepList[0]]):
                 #================杀进程=================
                 if self.stepList[0] == 'kill':
                     self.result.append(killProcess(flag))
                 #================杀进程=================
                 #================开进程=================
                 elif self.stepList[0] == 'open':
                     runCMD('start "" /d "%s" "%s"' % (self.localpath, flag))
                     log.LOG.info('运行文件%s'%flag)
                     self.result.append('运行文件%s'%flag)
                 #================开进程=================
                 #================CMD命令=================
                 elif self.stepList[0] == 'cmd':
                     self.result.append('%s\n'%runCMD(flag))
                 #================CMD命令=================
                 #================修改config文件=================
                 elif self.stepList[0] == 'conf':
                     para = re.split('-', self.data[self.stepList[0]])
                     CONF.save(para[0], para[1], para[2])
                     fileRestart = open('restart.bat', 'w')
                     cmds = r'''
                             taskkill /f /im client.exe
                             taskkill /f /im gmclient_watcher.exe
                             start.vbs
                             del /q /f restart.bat
                             exit
                             '''
                     fileRestart.write(cmds)
                     fileRestart.close()
                     self.socket.close()
                     os.system('restart.bat')
                 #================修改config文件=================
                 #================自我更新=================
                 elif self.stepList[0] == 'update':
                     chkPath(r'.\update')
                     os.popen(r'del /q /f .\update\*.*')
                     log.LOG.debug(mylib.rar.decompression('down', '.\\update\\', False)) #解压update文件
                     fileUpdate = open('update.bat', 'w')
                     cmds = r'''
                             taskkill /f /im client.exe
                             taskkill /f /im gmclient_watcher.exe
                             ping -n 2 127.0.0.1
                             copy /y ".\update\*.*" ".\"
                             start.vbs
                             del /q /f update.bat
                             exit
                             '''
                     fileUpdate.write(cmds)
                     fileUpdate.close()
                     self.socket.close()
                     os.system('update.bat')
                 #================自我更新=================
                 #================删除文件=================
                 elif self.stepList[0] == 'delete':
                     delReturn = runCMD('del /q /f "%s%s"' % (self.localpath, flag))
                     if delReturn:
                         self.result.append('%s%s'%(flag, delReturn))
                     else:
                         self.result.append('成功删除%s\n'%flag)
                 #================删除文件=================
             del(self.stepList[0])
     except :
         self.stepList = []
         self.result = [self.returnIP, ' error : ', format_exc(), '\n', self.localpath, '\n'] + self.result
         log.LOG.error(''.join(self.result))
Exemple #3
0
                      0x9001,
                      0,
                      msg_data)
        self.socket.sendall(string)

if __name__ == '__main__':
    log.run_log()
    log.uuid_log()
    runCMD('title test_manage')
    PORT = CONF.getPort()
    GMPORT = CONF.getGMPort()
    SERVER = CONF.getServer()
    PATH = CONF.getCltPath()
    USER = CONF.getUser()
    PASSWD = CONF.getPasswd()
    DELAYKILL = CONF.getDelayKill()
    IP = _getIP()
    killProcess('heartTest_clt.exe')
    os.system('start /B heartTest_clt.exe')
    while 1:
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.connect((SERVER, PORT))
            log.LOG.info('connecting ...')
            sock.settimeout(HEARTTIMEOUT)
            ManageClient(sock)
        except:
            killProcess('gmclient_watcher.exe')
            log.LOG.error(format_exc())
        sleep(30)