示例#1
0
def gen_request(**kwargs):
    __start()
    try:
        openssl = __edr.config('Dirs')['openssl_path']
        if not openssl:
            return
    except KeyError:
        return
    con, cur = __edr.DBConnect()
    request_date = datetime.strftime(datetime.now(), "%Y-%m-%dT%H:%M:%S%z")
    # else:
    #     request_date = "2012-01-01T01:01:01.000+06:00"
    cur.close()
    con.close()
    request_text = """<?xml version="1.0" encoding="windows-1251"?>
<request>
        <requestTime>%s</requestTime>
        <operatorName>Общество с ограниченной ответственностью «ВиЭйчДжи»</operatorName>
        <inn>7202217753</inn>
        <ogrn>1117232016076</ogrn>
<email>[email protected]</email>
</request>
""" % request_date
    # datetime.strftime(datetime.now() - timedelta(days=7), "%Y-%m-%dT%H:%M:%S%z")
    request_path = __edr.config('Dirs')['xml_file_name']
    request_sig_path = __edr.config('Dirs')['sig_file_name']
    pem_file = __edr.config('Dirs')['pem_file_name']
    request_file = open(request_path, 'w')
    request_file.write(request_text)
    request_file.close()
    os.system("%(openssl)s smime -sign -in %(zapros)s -out %(zapros_sig)s -binary -signer %(pem)s -outform DER -nodetach" %
              {"zapros": request_path, "zapros_sig": request_sig_path, "pem": pem_file, 'openssl': openssl})
示例#2
0
def __gen_ipfile():
    if __edr.str2bool(__edr.config('Main')['export_ip_file']):
        white_list = __edr.config('Main')['white_list'].split(';')
        con, cur = __edr.DBConnect()
        ipfile = open(__edr.config('Dirs')['path_ip_file'] + ".tmp", 'w')
        __edr.printt("Write ip's to file")
        __edr.LogWrite("Write ip's to file")
        if __edr.str2bool(__edr.config('Main')['export_clear_ip']):
            cur.execute(
                "SELECT ip FROM edrdata WHERE disabled=0 and domain='ip' GROUP BY ip;"
            )
            data = cur.fetchall()
            cur.execute(
                'SELECT ip FROM edrdata WHERE disabled=0 and domain rlike "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$" GROUP BY ip;'
            )
            data += cur.fetchall()
        else:
            cur.execute("SELECT ip FROM edrdata WHERE disabled=0 GROUP BY ip;")
            data = cur.fetchall()
        cur.close()
        con.close()
        __edr.printt(data)
        for ip in data:
            for i in literal_eval(ip[0]):
                if i not in white_list:
                    ipfile.write("%s\n" % i)
        for ip in blacklist():
            ipfile.write("%s\n" % ip)
        ipfile.close()
        copyfile(
            __edr.config('Dirs')['path_ip_file'] + ".tmp",
            __edr.config('Dirs')['path_ip_file'])
        __edr.LogWrite("Write ip's to file done")
示例#3
0
def get_last_dump_date():
    __start()
    con, cur = __edr.DBConnect()
    cur.execute('SELECT max(time) FROM requests;')
    data = cur.fetchall()
    if data[0][0]:
        last_dump_date_epoch = int(data[0][0].strftime('%s'))*1000
    else:
        last_dump_date_epoch = 0
    return last_dump_date_epoch
示例#4
0
def request2db(data, **kwargs):
    __start()
    con, cur = __edr.DBConnect()
    __edr.printt("INSERT requests SET time=%(time)s, data=%(data)s, code=%(code)s;" %
                {'time': datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S%z"),
                 'data': data, 'code': kwargs.get('code', "")})
    cur.execute("INSERT requests SET time=%(time)s, data=%(data)s, code=%(code)s;",
                {'time': datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S%z"),
                 'data': data, 'code': kwargs.get('code', "")})
    con.commit()
    cur.close()
    con.close()
示例#5
0
def __genereate(**kwargs):
    """
    Создаём файл настроек для nginx
    :return:
    """
    con, cur = __edr.DBConnect()
    __edr.LogWrite("Genereate nginx file")
    cur.execute("SELECT url FROM edrdata WHERE disabled=0 GROUP BY domain;")
    data = cur.fetchall()
    domains = sorted(
        set([__edr.idnaconv(urlparse(url[0]).netloc) for url in data]))
    con.close()
    # pool = ThreadPool(int(__edr.config('Main')['threads']))
    # result = pool.map(__domainparse, domains)
    result = map(__domainparse, domains)
    write_to_file("\n".join(result))
    nginx_conf_file_path = __edr.config('Dirs')['nginx_conf_file']
    copyfile(nginx_conf_file_path + ".tmp", nginx_conf_file_path)
    __edr.LogWrite("Genereate nginx file done")
示例#6
0
def __gen_ipfile():
    ipfile = open(__edr.config('Dirs')['path_ip_file'] + "_full.tmp", 'w')
    con, cur = __edr.DBConnect()
    white_list = __edr.config('Main')['white_list'].split(';')
    if __edr.str2bool(__edr.config('Main')['export_ip_file']):
        __edr.printt("Write ip's to file")
        __edr.LogWrite("Write ip's to file")
        cur.execute("SELECT ip FROM edrdata GROUP BY ip;")
        data = cur.fetchall()
        for ip in data:
            for ip in literal_eval(ip[0]):
                if ip not in white_list:
                    ipfile.write("%s\n" % ip)
                    __edr.printt('Writed ip: {} db\n'.format(ip))
    if __edr.str2bool(__edr.config('Main')['export_dns2ip_file']):
        __edr.printt("Write domain names to file")
        __edr.LogWrite("Write domain names to file")
        cur.execute("SELECT domain FROM edrdata GROUP BY domain;")
        data = cur.fetchall()
        domains = sorted(
            set([
                __edr.idnaconv(__clean_domain_name(domain[0]))
                for domain in data
            ]))
        ips = zapret_ipfile.blacklist()
        for domain in domains:
            ip = __domain2ip(domain)
            if ip:
                ips = ips.union(ip)
        for ip in ips:
            if ip not in white_list:
                ipfile.write("%s\n" % ip)
                __edr.printt('Writed ip: {}\n'.format(ip))
    ipfile.close()
    copyfile(
        __edr.config('Dirs')['path_ip_file'] + "_full.tmp",
        __edr.config('Dirs')['path_ip_file'] + "_full")
    con.close
示例#7
0
def __domainparse(edr_domain):
    # Формируем секцию server
    if '\\' in edr_domain:
        edr_domain = edr_domain.split('\\')[0]
    white_list = __edr.config('Main')['white_list'].split(';')
    if edr_domain in white_list:
        return ""
    con, cur = __edr.DBConnect()
    cur.execute("SELECT url FROM edrdata WHERE disabled=0 and url like %s;",
                ('%://' + edr_domain + '/%', ))
    edr_urls = cur.fetchall()
    cur.execute("SELECT url FROM edrdata WHERE disabled=0 and url like %s;",
                ('%://' + edr_domain, ))
    edr_urls += cur.fetchall()
    # try:
    #     cur.execute("SELECT url FROM edrdata WHERE disabled=0 and url like %s;",
    #                 ('%://' + __edr.idnaconv(edr_domain, True) + '/%',))
    #     edr_urls += cur.fetchall()
    #     cur.execute("SELECT url FROM edrdata WHERE disabled=0 and url like %s;",
    #                 ('%://' + __edr.idnaconv(edr_domain, True),))
    #     edr_urls += cur.fetchall()
    # except UnicodeDecodeError as e:
    #     print("Cannot parse %s with error %s" % (edr_domain, e))
    # except UnicodeEncodeError as e:
    #     print("Cannot parse %s with error %s" % (edr_domain, e))
    edr_ports = sorted(
        set([urlparse(i[0].strip()).scheme for i in edr_urls if i[0]]))
    conf_ports = ''
    for edr_port in edr_ports:
        if "all" in edr_ports and edr_port != "all":
            continue
        if edr_port == "https":
            port = '443'
        elif edr_port == "http":
            port = '80'
        else:
            port = "80;\n\tlisten 443"
        conf_ports += "\tlisten %(port)s;\n" % {'port': port}
    conf_server = """server {
        server_name %(domain)s;
    """ % {
        'domain': __edr.idnaconv(edr_domain)
    }
    conf_server += conf_ports
    # Формирует location
    conf_location = ""
    domain_block = 0
    # query = """SELECT url FROM edrdata WHERE disabled=0 and url like \'%s\';""" % \
    #         ('%://' + edr_domain + '/%')
    # cur.execute(query)
    # edr_urls = cur.fetchall()
    # query = """SELECT url FROM edrdata WHERE disabled=0 and url like \'%s\';""" % \
    #         ('%://' + edr_domain)
    # cur.execute(query)
    # edr_urls += cur.fetchall()
    urls_to_write = set()
    for edr_url_temp in sorted(edr_urls):
        edr_url = urlparse(edr_url_temp[0].strip())
        if (not edr_url.path.strip()) or (edr_url.path == '/'):
            urls_to_write.add('/')
            domain_block = 1
            break
        try:
            path = edr_url.path.strip()
        except UnicodeError:
            path = quote(edr_url.path.strip())
        if max(x in ['"', '\\', ' '] for x in edr_url.path.strip()):
            path = quote(edr_url.path.strip())
        urls_to_write.add(path)
    for url_string in sorted(urls_to_write):
        conf_location += """    location "%s" {
        proxy_pass %s;
                }
    """ % (url_string.strip(), __edr.config('URLS')['nginx_stop_url'])
    if not domain_block:
        conf_location += """    location / {
            proxy_pass http://$host;
                }
    """
    # Закрываем настройки сервера
    conf_end = """    resolver %(dns_serv)s;
            }
    """ % {
        'dns_serv': __edr.config('Main')['dns_serv']
    }
    try:
        __edr.printt("%s\n%s\n%s" % (conf_server, conf_location, conf_end))
    except UnicodeEncodeError as e:
        __edr.printt(e)
    try:
        con.close()
        return "%s\n%s\n%s" % (conf_server, conf_location, conf_end)
    except UnicodeEncodeError as e:
        __edr.printt(e)
        raise
示例#8
0
def __start():
    __edr.config()
    global con
    global cur
    con, cur = __edr.DBConnect()