Example #1
0
    def handle_request(self, tar_dict, client_body):
        '''
            serviceid == 0:
            local process. Generate the session and return; 
            just header and no body

            serviceid == ***:
            decrypt and just transfer this package to backend
        '''
        res_dict = {}
        res_dict['errcode'] = -1
        try:
            mylist = []
            #post_dict=ast.literal_eval(tar_dict.strip())
            #b_dict=ast.literal_eval(client_body.strip())
            h_str = re.findall('({.*}).*', tar_dict)[0]
            b_str = re.findall('({.*}).*', client_body)[0]
            post_dict = json.loads(h_str)
            b_dict = json.loads(b_str)
            if len(post_dict) != 14:
                AgentModule.AgentRepSum(2912, 1)
                return json.dumps(res_dict)
            if len(b_dict) != 3:
                AgentModule.AgentRepSum(2912, 1)
                return json.dumps(res_dict)
            for k, v in post_dict.items():
                post_dict[k] = MySQLdb.escape_string(v)
            for k, v in b_dict.items():
                b_dict[k] = MySQLdb.escape_string(v)

            device_id = post_dict['1']
            os_version = post_dict['2']
            xinghao = post_dict['3']
            zhizaoshang = post_dict['4']
            language = post_dict['5']
            country = post_dict['6']
            soft_version = post_dict['7']
            mac_addr = post_dict['8']
            ip_addr = post_dict['9']
            qudao = post_dict['10']
            yunyingshang = post_dict['11']
            fenbianlv = post_dict['12']
            soft_id = post_dict['13']
            service_id = post_dict['14']

            datet = b_dict['1']
            email = b_dict['2']
            content = b_dict['3']
            sql = 'insert into `feedback` values(\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")' % (
                email, os_version, xinghao, device_id, soft_id, content,
                language, country, zhizaoshang, datet, soft_version, mac_addr,
                ip_addr, qudao, yunyingshang, fenbianlv, service_id)
            self.cursor.execute(sql)
            res_dict['errcode'] = 0
            logger_d.info("get request and insert to sql")
            return json.dumps(res_dict)
        except:
            logger_e.error(format_exc())
            AgentModule.AgentRepSum(2913, 1)
            return json.dumps(res_dict)
    def _parse_request(self, data):
        '''
            packet = dwTotalLen + dwInnerHeaderLen + wType + InnerHeader + dwBodyTotalLen + wType + Info
        '''
        try:
            h = data[0:4]
            total_len = struct.unpack("!I", h)[0]

            h = data[4:]

            cur_len = 0
            inner_header_len, w_type = struct.unpack("!IH",
                                                     h[cur_len:cur_len + 6])
            cur_len += 6

            inner_header_buf = h[cur_len:cur_len + inner_header_len]
            cur_len += inner_header_len

            tmp_len, tmp_type = struct.unpack("!IH", h[cur_len:cur_len + 6])
            cur_len += 6

            body_info = h[cur_len:]

            return inner_header_buf, body_info
        except:
            logger_e.error("recv&parse packet failed: %s" %
                           traceback.format_exc())
            return None, None
 def _handle_packet_from_global_collector(self, info_buf):
     try:
         scan_result = scan_result_pb2.ScanResult()
         scan_result.ParseFromString(info_buf)
         logger.info("get global collector packet, md5: %s" %
                     (scan_result.md5))
         #从cache中删除这个md5
         self._del_md5_in_redis(scan_result.md5)
     except:
         logger_e.error("handle packet from global collector failed: %s" %
                        traceback.format_exc())
         return
    def __call__(self, data, address):
        try:
            #recv and parse request
            inner_header_buf, info_buf = self._parse_request(data)
            if inner_header_buf == None or info_buf == None:
                return

            inner_header = inner_header_pb2.InnerHeader()
            inner_header.ParseFromString(inner_header_buf)

            if inner_header.cmd == 171:  #只处理从global collector转过来的包
                self._handle_packet_from_global_collector(info_buf)
        except:
            logger_e.error("process error: %s" % traceback.format_exc())
Example #5
0
    def start_process(self, environ, start_response):
        ##set HTTP response header
        status = '200 OK'
        response_headers = [('Content-type', 'text/html'),
                            ('Connection', 'Keep-Alive')]
        ##send response
        start_response(status, response_headers)

        try:
            err_code = errcode.E_OK

            #client ip
            #str_cip = environ.get("REMOTE_ADDR", '0.0.0.0')
            str_cip = environ.get("HTTP_X_REAL_IP", '0.0.0.0')
            client_ip = struct.unpack("I", socket.inet_aton(str_cip))[0]

            ##get query parameters
            request_method = environ.get("REQUEST_METHOD")
            content_type = environ.get('CONTENT_TYPE')
            AgentModule.AgentRepSum(2922, 1)

            if request_method == None or content_type == None:
                AgentModule.AgentRepSum(2924, 1)
                return [self.get_response(errcode.E_FAIL)]

            if request_method == "POST":  # process post request
                # data report
                params = self.get_upload_params(environ)

                if params == None:
                    AgentModule.AgentRepSum(2926, 1)
                    return [self.get_response(errcode.E_OK)]

                err_code = self.handle_request(params, client_ip)
            else:
                logger_e.error("unknown request type: %s:%s from %s" %
                               (request_method, content_type, str_cip))
                return [self.get_response(errcode.E_FAIL)]

            #build response package
            #response = self.get_response(err_code)

            #return [response]
            AgentModule.AgentRepSum(2923, 1)
            return [err_code]
        except:
            logger_e.error(
                "Service response unknown exception from clientip %s %s environ=== %s"
                % (str_cip, format_exc(), environ))
            return [self.get_response(errcode.E_FAIL)]
Example #6
0
    def parse_request(self, data):
        try:
            h = data
            total_len, w_save = struct.unpack("!IH", h[0:6])
            cur_len = 6
            (inner_header_len, ) = struct.unpack("!I", h[cur_len:cur_len + 4])
            cur_len += 4

            inner_header_buf = h[cur_len:cur_len + inner_header_len]
            cur_len += inner_header_len

            (tmp_len, ) = struct.unpack("!I", h[cur_len:cur_len + 4])
            cur_len += 4

            body_info = h[cur_len:]

            #return inner_header_buf, body_info
            return total_len, tmp_len
        except:
            logger_e.error("recv&parse packet failed: %s" % format_exc())
            return None, None
Example #7
0
    def handle_request(self, tar_dict, client_ip):
        '''
            serviceid == 0:
            local process. Generate the session and return; 
            just header and no body

            serviceid == ***:
            decrypt and just transfer this package to backend
        '''
        res_dict = {}
        res_dict['errcode'] = -1
        try:
            self.conn.lpush('taskq', tar_dict)
            #addr_r=('10.205.27.53',9812)
            #real_s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            #real_s.sendto(tar_dict,addr_r)
            res_dict['errcode'] = 0
            return json.dumps(res_dict)
            logger_d.info("get dataupload and write to queue")
        except:
            logger_e.error(format_exc())
            AgentModule.AgentRepSum(2925, 1)
            return json.dumps(res_dict)
Example #8
0
    def parse_request(self, data):
        try:
            if len(data) < 6:
                return None, None
            h = data
            total_len, w_save = struct.unpack("!IH", h[0:6])
            cur_len = 6
            (inner_header_len, ) = struct.unpack("!I", h[cur_len:cur_len + 4])
            cur_len += 4

            inner_header_buf = h[cur_len:cur_len + inner_header_len]
            cur_len += inner_header_len

            (tmp_len, ) = struct.unpack("!I", h[cur_len:cur_len + 4])
            cur_len += 4

            body_info = h[cur_len:]

            return inner_header_buf, body_info
        except:
            logger_e.error("recv&parse packet failed: %s" % format_exc())
            AgentModule.AgentRepSum(2910, 1)
            return None, None
Example #9
0
 def get_upload_params(self, environ):
     """
         get POST Upload  parameters from request,
         return a dict "params" back.
     """
     fieldstorage = cgi.FieldStorage(fp=environ['wsgi.input'],
                                     environ=environ,
                                     keep_blank_values=True)
     field = fieldstorage.value
     try:
         ih, ib = self.parse_request(field)
         if ih == None or ib == None:
             return None, None
         key = '58DAC89AA392C630'
         IV = 'PKCS5Padding'
         mode = AES.MODE_ECB
         decryptor = AES.new(key, mode, IV=IV)
         plain = decryptor.decrypt(ih)
         n_body = decryptor.decrypt(ib)
         return plain, n_body
     except:
         logger_e.error("jiemi packet failed: %s" % format_exc())
         AgentModule.AgentRepSum(2911, 1)
         return None, None