Пример #1
0
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
Пример #3
0
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
Пример #4
0
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