Example #1
0
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}")
Example #2
0
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))
Example #3
0
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}")
Example #4
0
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))
Example #5
0
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
Example #6
0
        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:
Example #7
0
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
Example #8
0
        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:
Example #9
0
    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 = []