def get_result(domain_punycode, tld, whois_addr, func_name, data, flag): """ :param domain_punycode: punycode格式的域名 :param tld: 顶级域 :param whois_addr: whois服务器 :param func_name: 处理函数 :param data: 服务器返回数据 :param flag: 数据正确性标记位 :return: whois 信息字典 """ # 返回结果初始化 domain_whois = { "domain": str(domain_punycode), # 域名 "tld": tld, # 顶级域 "flag": flag, # 状态标记 "domain_status": "", # 域名状态 "sponsoring_registrar": "", # 注册商 "top_whois_server": whois_addr, # 顶级域名服务器 "sec_whois_server": "", # 二级域名服务器 "reg_name": "", # 注册姓名 "reg_phone": "", # 注册电话 "reg_email": "", # 注册email "org_name": "", # 注册公司名称 "creation_date": "", # 创建时间 "expiration_date": "", # 到期时间 "updated_date": "", # 更新时间 "details": data, # 细节 "name_server": "", # 域名服务器 } if domain_whois['flag'] < 0: # 错误数据直接返回 粗处理结果,不调用提取函数 return domain_whois # 处理原始whois数据 if func_name == 'com_manage': # 针对com,net 等具有二级服务器的域名进行特殊处理 # 1,处理含有 'xxx='的情况 whois_details_first = data if xxx_bool(whois_details_first): try: whois_details_first = GetWhoisInfo('=' + domain_punycode, whois_addr).get() except WhoisConnectException as connect_error: # 二级whois解析过程错误记录 domain_whois['flag'] = 0 - int(str(connect_error)) # 2,处理二级whois服务器 whois_details_sec = None try: whois_server_sec = get_sec_server(whois_details_first, domain_punycode) if whois_server_sec: # 如果获取到了二级whois地址,更新sec_whois并重新获取数据 domain_whois['sec_whois_server'] = whois_server_sec whois_details_sec = GetWhoisInfo(domain_punycode, whois_server_sec).get() if whois_details_sec is not None: domain_whois['details'] = whois_details_sec except WhoisConnectException as connect_error: # 二级whois解析过程错误记录 domain_whois['flag'] = -10 - int(str(connect_error)) try: # 处理 detail 项中的引号,用于SQL语句 删除多余的'/' domain_whois['details'] = domain_whois['details'].replace("\\", "") domain_whois['details'] = domain_whois['details'].replace("'", " \\'") domain_whois['details'] = domain_whois['details'].replace('"', ' \\"') # 使用提取函数处理whois获取字典 data = domain_whois['details'] domain_whois = eval( '{func}(data, domain_whois)'.format(func=func_name)) except Exception as e: log_func.error(domain_punycode + '->' + func_name + ' 提取函数处理失败 ' + str(e)) # 处理状态值 domain_whois['domain_status'] = get_status_value( domain_whois['domain_status']) return domain_whois
def get_result(domain_punycode, tld, whois_addr, func_name, data, flag): """ :param domain_punycode: punycode格式的域名 :param tld: 顶级域 :param whois_addr: whois服务器 :param func_name: 处理函数 :param data: 服务器返回数据 :param flag: 数据正确性标记位 :return: whois 信息字典 """ # 返回结果初始化 domain_whois = { "domain": str(domain_punycode), # 域名 "tld": tld, # 顶级域 "flag": flag, # 状态标记 "domain_status": "", # 域名状态 "sponsoring_registrar": "", # 注册商 "top_whois_server": whois_addr, # 顶级域名服务器 "sec_whois_server": "", # 二级域名服务器 "reg_name": "", # 注册姓名 "reg_phone": "", # 注册电话 "standard_phone": "", # 标准电话 "phone_country_code": "", # 电话国家 "phone_position_code": "", # 地话地域 "phone_number": "", # 纯电话 "phone_type": 0, # 电话长度 "reg_email": "", # 注册email "org_name": "", # 注册公司名称 "creation_date": "", # 创建时间 "expiration_date": "", # 到期时间 "updated_date": "", # 更新时间 "details": data, # 细节 "name_server": "", # 域名服务器 } if domain_whois['flag'] < 0: # ,错误数据直接返回 粗处理结果不调用提取函数 return domain_whois whois_details_first = data whois_details_sec = '' # 处理原始whois数据 if func_name == 'com_manage': # 针对com,net 等具有二级服务器的域名进行特殊处理 # 1,处理含有 'xxx='的情况 whois_details_first = data if xxx_bool(whois_details_first): whois_details_first = GetWhoisInfo('=' + domain_punycode, whois_addr).get() if whois_details_first.startswith('Socket Error'): domain_whois['flag'] = -1 # WHOIS服务器交互过程中出现异常 flag > -1 elif whois_details_first == '': domain_whois['flag'] = -5 # 获取到空数据,flag = -5 # 2,处理二级whois服务器 if domain_whois['flag'] < 0: # 错误数据直接返回 粗处理结果不调用提取函数 return domain_whois whois_server_sec = get_sec_server(whois_details_first, domain_punycode) if whois_server_sec: # 如果获取到了二级whois地址,更新sec_whois并重新获取数据 domain_whois['sec_whois_server'] = whois_server_sec whois_details_sec = GetWhoisInfo(domain_punycode, whois_server_sec).get() if whois_details_sec.startswith('Socket Error') or whois_details_sec.startswith('Your request') or \ whois_details_sec.startswith('WHOIS LIMIT EXCEEDED') or whois_details_sec.startswith('interval') or\ whois_details_sec.startswith('IP Address') or whois_details_sec.startswith('ERROR') or \ whois_details_sec.startswith('You') or whois_details_sec.startswith('The query') or \ whois_details_sec.startswith('The IP') or whois_details_sec.startswith('We are unable'): domain_whois['flag'] = -2 # 二级WHOIS服务器交互过程中出现异常 flag > -2 elif whois_details_sec == '': domain_whois['flag'] = -4 # 二级WHOIS服务器返回空数据,flag > -4 else: domain_whois['flag'] = -3 # 没有获取到二级WHOIS服务器 flag > -3 # 处理 detail 项中的引号,用于SQL语句 删除多余的 / ' " whois_details_first = whois_details_first.replace("\\", "").replace("'", " \\'").replace('"', ' \\"') domain_whois['details'] = whois_details_first if whois_details_sec: whois_details_sec = whois_details_sec.replace("\\", "").replace("'", " \\'").replace('"', ' \\"') domain_whois['details'] += "\n##############################\n\n" + \ whois_details_sec try: # 使用提取函数处理whois获取字典 依次解析一级/二级WHOIS数据 domain_whois = eval('{func}(whois_details_first, domain_whois)'.format(func=func_name)) if whois_details_sec: sec_domain_whois = copy.deepcopy(domain_whois) # 这里一定要是深复制,否则会改变原始的内容 sec_domain_whois = eval('{func}(whois_details_sec, sec_domain_whois)'.format(func=func_name)) # 合并字典 for k in sec_domain_whois.keys(): # 只更新部分字段 if k in ["sponsoring_registrar", "sec_whois_server", "reg_name", "reg_phone", "reg_email", "org_name", "creation_date", "expiration_date", "updated_date", "name_server"]: if sec_domain_whois[k].strip(): domain_whois[k] = sec_domain_whois[k] except Exception as e: log_func.error(domain_punycode + '->' + func_name + ' 提取函数处理失败 ' + str(e)) # 处理状态值、标准时间、电话 domain_whois['domain_status'] = get_status_value(domain_whois['domain_status']) domain_whois['creation_date'] = format_timestamp(domain_whois['creation_date']) domain_whois['expiration_date'] = format_timestamp(domain_whois['expiration_date']) domain_whois['updated_date'] = format_timestamp(domain_whois['updated_date']) return domain_whois
def get_result(domain_punycode, tld, whois_addr, func_name, data, flag): """ :param domain_punycode: punycode格式的域名 :param tld: 顶级域 :param whois_addr: whois服务器 :param func_name: 处理函数 :param data: 服务器返回数据 :param flag: 数据正确性标记位 :return: whois 信息字典 """ # 返回结果初始化 global whois_details_first domain_whois = { "domain": str(domain_punycode), # 域名 "tld": tld, # 顶级域 "flag": flag, # 状态标记 "domain_status": "", # 域名状态 "registrar": "", # 注册商 "top_whois_server": whois_addr, # 顶级域名服务器 "sec_whois_server": "", # 二级域名服务器 "reg_name": "", # 注册姓名 "reg_phone": "", # 注册电话 "reg_email": "", # 注册email "org_name": "", # 注册公司名称 "creation_date": "", # 创建时间 "expiration_date": "", # 到期时间 "updated_date": "", # 更新时间 "details": data, # 细节 "name_server": "", # 域名服务器 "reg_date": "", "expir_date": "", } if domain_whois['flag'] < 0: # 错误数据直接返回 粗处理结果不调用提取函数 return domain_whois whois_details_first = data whois_details_sec = None # 处理原始whois数据 if func_name == 'com_manage': # 针对com,net 等具有二级服务器的域名进行特殊处理 # 1,处理含有 'xxx='的情况 whois_details_first = data if xxx_bool(whois_details_first): try: whois_details_first = GetWhoisInfo('=' + domain_punycode, whois_addr).get() except WhoisConnectException as connect_error: domain_whois['flag'] = -1 # WHOIS一级服务器网络错误 # 2,处理二级whois服务器 whois_details_sec = None try: whois_server_sec = get_sec_server(whois_details_first, domain_punycode) if whois_server_sec: # 如果获取到了二级whois地址,更新sec_whois并重新获取数据 domain_whois['sec_whois_server'] = whois_server_sec whois_details_sec = GetWhoisInfo(domain_punycode, whois_server_sec).get() if whois_details_sec is not None: domain_whois['details'] = whois_details_first + \ "\n##############################\n\n" + \ whois_details_sec except WhoisConnectException as connect_error: # 二级whois解析过程错误记录 domain_whois['flag'] = -2 # 二级错误 try: # 使用提取函数处理whois获取字典 依次解析一级/二级WHOIS数据 domain_whois = eval( '{func}(whois_details_first, domain_whois)'.format(func=func_name)) if whois_details_sec: sec_domain_whois = copy.deepcopy( domain_whois) # 这里一定要是深复制,否则会改变原始的内容 sec_domain_whois = eval( '{func}(whois_details_sec, sec_domain_whois)'.format( func=func_name)) # 合并字典 for k in sec_domain_whois.keys(): # 只更新部分字段 if k in [ "sec_whois_server", "reg_name", "reg_phone", "reg_email", "org_name", "creation_date", "expiration_date", "updated_date", "name_server" ]: if sec_domain_whois[k].strip(): domain_whois[k] = sec_domain_whois[k] except Exception as e: log_func.error(domain_punycode + '->' + func_name + '提取函数处理失败 ' + str(e)) return {'domain': domain_punycode, 'error': '提取函数处理失败', 'flag': 0} # 标准化时间 domain_whois['creation_date'] = format_timestamp( domain_whois['creation_date']) domain_whois['expiration_date'] = format_timestamp( domain_whois['expiration_date']) domain_whois['updated_date'] = format_timestamp( domain_whois['updated_date']) # reg_date,expir_date domain_whois['reg_date'] = domain_whois['creation_date'] domain_whois.pop('creation_date') domain_whois['expir_date'] = domain_whois['expiration_date'] domain_whois.pop('expiration_date') # 处理NS,域名状态 domain_whois['domain_status'] = domain_whois['domain_status'].split(";") domain_whois['name_server'] = domain_whois['name_server'].split(";") return domain_whois
def get_result(domain_punycode, tld, whois_addr, func_name, data, flag): """ :param domain_punycode: punycode格式的域名 :param tld: 顶级域 :param whois_addr: whois服务器 :param func_name: 处理函数 :param data: 服务器返回数据 :param flag: 数据正确性标记位 :return: whois 信息字典 """ # 返回结果初始化 domain_whois = { "domain": str(domain_punycode), # 域名 "flag": flag, # 状态标记 "sponsoring_registrar": "", # 注册商 "sec_whois_server": "", # 二级域名服务器 "creation_date": "", # 创建时间 "expiration_date": "", # 到期时间 "updated_date": "", # 更新时间 "details": data, # 细节 "name_server": "", # 域名服务器 } if domain_whois['flag'] < 0: # 错误数据直接返回 粗处理结果,不调用提取函数 return domain_whois # 处理原始whois数据 if func_name == 'com_manage': # 针对com,net 等具有二级服务器的域名进行特殊处理 # 1,处理含有 'xxx='的情况 whois_details_first = data if xxx_bool(whois_details_first): try: whois_details_first = GetWhoisInfo('=' + domain_punycode, whois_addr).get() domain_whois["details"] = whois_details_first except WhoisConnectException as connect_error: # 二级whois解析过程错误记录 domain_whois['flag'] = 0 - int(str(connect_error)) # print data domain_whois["sec_whois_server"] = get_sec_server( domain_whois["details"], domain_whois["domain"]) # # 2,处理二级whois服务器 # whois_details_sec = None # try: # whois_server_sec = get_sec_server(whois_details_first, # domain_punycode) # if whois_server_sec: # 如果获取到了二级whois地址,更新sec_whois并重新获取数据 # domain_whois['sec_whois_server'] = whois_server_sec # whois_details_sec = GetWhoisInfo(domain_punycode, # whois_server_sec).get() # if whois_details_sec is not None: # domain_whois['details'] = whois_details_sec # except WhoisConnectException as connect_error: # 二级whois解析过程错误记录 # domain_whois['flag'] = -10 - int(str(connect_error)) try: # 使用提取函数处理whois获取字典 data = domain_whois['details'] domain_whois = eval( '{func}(data, domain_whois)'.format(func=func_name)) except Exception as e: log_func.error(domain_punycode + '->' + func_name + ' 提取函数处理失败 ' + str(e)) # 处理状态值 # domain_whois['domain_status'] = get_status_value(domain_whois['domain_status']) if domain_whois['creation_date'] != '': try: __creation_date = parse( domain_whois['creation_date']).strftime("%Y-%m-%d %H:%M:%S") domain_whois['creation_date'] = __creation_date except: domain_whois['creation_date'] = '' if domain_whois['expiration_date'] != '': try: __expiration = parse( domain_whois['expiration_date']).strftime("%Y-%m-%d %H:%M:%S") domain_whois['expiration_date'] = __expiration except: domain_whois['expiration_date'] = '' if domain_whois['updated_date'] != '': try: __updated_date = parse( domain_whois['updated_date']).strftime("%Y-%m-%d %H:%M:%S") domain_whois['updated_date'] = __updated_date except: domain_whois['updated_date'] = '' if domain_whois["details"] == '' or domain_whois["details"] is None: domain_whois['flag'] = -6 return domain_whois