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})
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")
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
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()
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")
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
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
def __start(): __edr.config() global con global cur con, cur = __edr.DBConnect()