def domains_check(domain_check_list: list, checker_name: str, n_threads=n_threads, regexp=regexp, timeout=timeout, verbose=verbose): ''' Запускает проверку списка сайтов и следит, чтобы не было lock ''' opend=[] total_num_sites = len(domain_check_list) log.info(f"[O] Количество {checker_name} для проверки: {str(total_num_sites)}") if total_num_sites == 0: log.critical("Nothing to do") input("Нажмите Enter чтобы выйти...") exit(0) url_list_lock = Lock() workerthreadlist=[] for x in range(0,n_threads-1): newthread = WorkerThread(domain_check_list,url_list_lock,regexp,timeout,verbose,total_num_sites) workerthreadlist.append(newthread) newthread.start() while len(workerthreadlist) > 0: try: workerthreadlist = [t.join(1) for t in workerthreadlist if t is not None and t.isAlive()] except KeyboardInterrupt: log.warning("\nCtrl-c! Остановка всех потоков...") for t in workerthreadlist: t.kill_received = True exit(0) print() perc = len(opend)*100/total_num_sites print(colored("[f]",'cyan'), end="") if perc else print(colored("[ok]",'cyan'),end="") print (colored(f" Процент открывшихся {checker_name}: {str(perc)}%", 'cyan')) if perc: log.warning(f"[f] Открывшиеся {checker_name}:") for url in opend: log.warning(f"\t[f] {url}")
def test_dpi(): log.info("[O] Тестируем обход DPI") dpiresults = [] for dpisite in dpi_list: site = dpi_list[dpisite] dpi_built_tests = _dpi_build_tests(site['host'], site['urn'], site['ip'], site['lookfor']) for testname in dpi_built_tests: test = dpi_built_tests[testname] log.info( colored(f"\tПробуем способ \"{testname}\" на {dpisite}", "white")) try: result = _dpi_send(test.get('ip'), 80, test.get('data'), test.get('fragment_size'), test.get('fragment_count')) except Exception as e: log.info(f"[ok] Ошибка: {repr(e)}") else: if result.split("\n")[0].find('200 ') != -1 and result.find( test['lookfor']) != -1: log.warning("[f] Сайт открывается") dpiresults.append(testname) elif result.split("\n")[0].find('200 ') == -1 and result.find( test['lookfor']) != -1: log.warning( "[!] Сайт не открывается, обнаружен пассивный DPI!") dpiresults.append('Passive DPI') else: log.info("[ok] Сайт не открывается") return list(set(dpiresults))
def domains_check(domain_check_list: list, checker_name: str, n_threads=n_threads, regexp=regexp, timeout=timeout, verbose=verbose): ''' Запускает проверку списка сайтов и следит, чтобы не было lock ''' opend = [] total_num_sites = len(domain_check_list) log.info( f"[O] Количество {checker_name} для проверки: {str(total_num_sites)}") if total_num_sites == 0: log.critical("Nothing to do") input("Нажмите Enter чтобы выйти...") exit(0) url_list_lock = Lock() workerthreadlist = [] for x in range(0, n_threads - 1): newthread = WorkerThread(domain_check_list, url_list_lock, regexp, timeout, verbose, total_num_sites) workerthreadlist.append(newthread) newthread.start() while len(workerthreadlist) > 0: try: workerthreadlist = [ t.join(1) for t in workerthreadlist if t is not None and t.isAlive() ] except KeyboardInterrupt: log.warning("\nCtrl-c! Остановка всех потоков...") for t in workerthreadlist: t.kill_received = True exit(0) print() perc = len(opend) * 100 / total_num_sites print(colored("[f]", 'cyan'), end="") if perc else print( colored("[ok]", 'cyan'), end="") print(colored(f" Процент открывшихся {checker_name}: {str(perc)}%", 'cyan')) if perc: log.warning(f"[f] Открывшиеся {checker_name}:") for url in opend: log.warning(f"\t[f] {url}")
def test_dpi(): log.info("[O] Тестируем обход DPI") dpiresults = [] for dpisite in dpi_list: site = dpi_list[dpisite] dpi_built_tests = _dpi_build_tests(site['host'], site['urn'], site['ip'], site['lookfor']) for testname in dpi_built_tests: test = dpi_built_tests[testname] log.info(colored(f"\tПробуем способ \"{testname}\" на {dpisite}", "white")) try: result = _dpi_send(test.get('ip'), 80, test.get('data'), test.get('fragment_size'), test.get('fragment_count')) except Exception as e: log.info(f"[ok] Ошибка: {repr(e)}") else: if result.split("\n")[0].find('200 ') != -1 and result.find(test['lookfor']) != -1: log.warning("[f] Сайт открывается") dpiresults.append(testname) elif result.split("\n")[0].find('200 ') == -1 and result.find(test['lookfor']) != -1: log.warning("[!] Сайт не открывается, обнаружен пассивный DPI!") dpiresults.append('Passive DPI') else: log.info("[ok] Сайт не открывается") return list(set(dpiresults))
def test_dns(): sites = dns_records_list sites_list = list(sites.keys()) log.info("[O] Тестируем DNS") log.info("[O] Получаем эталонные DNS с сервера") try: remote_dns = urllib.request.urlopen("http://tac.rdp.ru/pub/getdns.php", timeout=10).read() remote_dns = sorted(_decode_bytes(remote_dns).split()) log.info(f"\tЭталонные адреса:\t\t {str(remote_dns)}") except: remote_dns = None log.warning( "[f] Не удалось получить DNS с сервера, результаты могут быть неточными" ) resolved_default_dns = _get_a_records(sites_list, timeout) if resolved_default_dns != 'False': log.info( f"\tАдреса через системные DNS:\t {str(resolved_default_dns)}") else: log.warning("\tНе удалось подключиться к системному DNS") resolved_google_dns = _get_a_records(sites_list, timeout, google_dns) if resolved_google_dns != 'False': log.info(f"\tАдреса через Google DNS:\t {str(resolved_google_dns)}") else: loggint.warning("\tНе удалось подключиться к Google DNS") if resolved_google_dns == 'False' or resolved_default_dns == 'False': log.critical( "Проблема с разрешением DNS на системном, либо google сервере") input("Нажмите Enter чтобы выйти...") exit(1) if (remote_dns): # Если получили IP с сервера, используем их dns_records = remote_dns else: dns_records = sorted( [item for sublist in sites.values() for item in sublist]) if resolved_default_dns == resolved_google_dns: if resolved_default_dns == dns_records: log.info("[ok] DNS-записи не подменяются") return 0 else: log.warning("[f] DNS-записи подменяются") return 2 log.warning("[?] Способ блокировки DNS определить не удалось") return 3
for line in f: url = line.strip() if not urlregex.match(url): log.warning(f'wrong url: {url}') input("Нажмите Enter чтобы выйти...") exit(4) proto = getproto(url) if not proto in ['http', 'https', 'newcamd525', 'mgcamd525']: log.warning(f"Ошибка определения протокола: {url}") input("Нажмите Enter чтобы выйти...") exit(5) urldomain, port = getdomain(url, proto) url_list.append([proto] + [url] + [True]) f.close() else: log.info(f"[ok] Начали разбирать dump.xml") log.info(f'[start] dump parse {datetime.datetime.now()}') dump_parse('dump.xml') log.info(f'[finish] dump parse {datetime.datetime.now()} ') log.info(f"[ok] Получаем subdomains...") log.info(f'[start] subdomains {datetime.datetime.now()} ') subdomains = [] import ctfr_script while len(subdomains) == 0: for d in range(0, len(domain_mask_list) - 1): if d == 7: break else: try:
def test_dns(): sites = dns_records_list sites_list = list(sites.keys()) log.info("[O] Тестируем DNS") log.info("[O] Получаем эталонные DNS с сервера") try: remote_dns = urllib.request.urlopen("http://tac.rdp.ru/pub/getdns.php", timeout=10).read() remote_dns = sorted(_decode_bytes(remote_dns).split()) log.info(f"\tЭталонные адреса:\t\t {str(remote_dns)}") except: remote_dns = None log.warning("[f] Не удалось получить DNS с сервера, результаты могут быть неточными") resolved_default_dns = _get_a_records(sites_list, timeout) if resolved_default_dns != 'False': log.info(f"\tАдреса через системные DNS:\t {str(resolved_default_dns)}") else: log.warning("\tНе удалось подключиться к системному DNS") resolved_google_dns = _get_a_records(sites_list, timeout, google_dns) if resolved_google_dns != 'False': log.info(f"\tАдреса через Google DNS:\t {str(resolved_google_dns)}") else: loggint.warning("\tНе удалось подключиться к Google DNS") if resolved_google_dns == 'False' or resolved_default_dns == 'False': log.critical("Проблема с разрешением DNS на системном, либо google сервере") input("Нажмите Enter чтобы выйти...") exit(1) if (remote_dns): # Если получили IP с сервера, используем их dns_records = remote_dns else: dns_records = sorted([item for sublist in sites.values() for item in sublist]) if resolved_default_dns == resolved_google_dns: if resolved_default_dns == dns_records: log.info("[ok] DNS-записи не подменяются") return 0 else: log.warning("[f] DNS-записи подменяются") return 2 log.warning("[?] Способ блокировки DNS определить не удалось") return 3
for line in f: url = line.strip() if not urlregex.match(url): log.warning(f'wrong url: {url}') input("Нажмите Enter чтобы выйти...") exit(4) proto = getproto(url) if not proto in ['http','https','newcamd525','mgcamd525']: log.warning(f"Ошибка определения протокола: {url}") input("Нажмите Enter чтобы выйти...") exit(5) urldomain, port = getdomain(url,proto) url_list.append([proto]+[url]+[True]) f.close() else: log.info(f"[ok] Начали разбирать dump.xml") log.info(f'[start] dump parse {datetime.datetime.now()}') dump_parse('dump.xml') log.info(f'[finish] dump parse {datetime.datetime.now()} ') log.info(f"[ok] Получаем subdomains...") log.info(f'[start] subdomains {datetime.datetime.now()} ') subdomains = [] import ctfr_script while len( subdomains) == 0: for d in range(0, len(domain_mask_list)-1): if d == 7: break else: try:
for line in f: url = line.strip() if not urlregex.match(url): log.warning(f'wrong url: {url}') input("Нажмите Enter чтобы выйти...") exit(4) proto = getproto(url) if not proto in ['http', 'https', 'newcamd525', 'mgcamd525']: log.warning(f"Ошибка определения протокола: {url}") input("Нажмите Enter чтобы выйти...") exit(5) urldomain, port = getdomain(url, proto) url_list.append([proto] + [url] + [True]) f.close() else: log.info("[ok] Начали разбирать dump.xml") dump = ET.parse('dump.xml') root = dump.getroot() for content in root: # if content.attrib['id']!=str(530007): # continue subs_c = ips_c = domains = urls = urldomain = port = proto = founded_type_ip = None ips = [] ips_c = content.findall('ip') subs_c = content.findall('ipSubnet') founded_type_ip = content.findall("[@blockType='ip']") #searching only type_ip tag if founded_type_ip: for content in founded_type_ip: ips_from_ipS = [] ips_from_ip = []