Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2023 14:12:44

Egor2003
Зарегистрирован: 2022-05-18
Сообщения: 8
Репутация: +  -1  -
Профиль   Адрес электронной почты  

DNS Сканирование

Здравствуйте когда я запускаю dns сканер из скрипта python то всё хорошо, но когда я запускаю его как файл exe то вылезает сообщение скриншот которого я прикрепил, скажите пожалуйста в чём причина ошибки и как её исправить? Если я сделал что-то не так или не так написал, заранее извиняюсь.

 import re
import socket
from ipaddress import ip_network, ip_address
import dns
from colorama import Fore
from colorama import init
from dns import resolver
from requests import get, exceptions
import pyfiglet
shrft = pyfiglet.figlet_format("DNS-Scan-blacklist")
print(shrft)
init()
# проверка адреса в диапазоне cloudflare
def ip_in_range(ip, addr):
    if ip_address(ip) in ip_network(addr):
        return True
    return False
# загрузка списка диапазонов адресов cloudflare
# запуск функции проверки ip-адреса
def cloudf_detect(ip):
    list_addr = ["104.16.0.0/12"]
    url = 'https://www.cloudflare.com/ips-v4'
    req = get(url=url)
    for adr in req.text.split("\n"):
        list_addr.append(adr)
    for addr in list_addr:
        detect = ip_in_range(ip, addr)
        if detect:
            return True
    return False
# получение внешнего ip-адреса компьютера
def public_ip():
    try:
        return get('https://api.ipify.org/').text
    except exceptions.ConnectionError:
        return '127.0.0.1'
# загрузка списка DNSBL, получение информации о наличии адреса в списках
def dns_bl_check(ip):
    print(Fore.YELLOW + '\n- Проверка черных списков\n')
    bad_dict = dict()
    req = get('https://raw.githubusercontent.com/evgenycc/DNSBL-list/main/DNSBL')
    read = req.text.splitlines()
    for serv in read:
        req = f"{'.'.join(reversed(ip.split('.')))}.{serv.strip()}"
        try:
            resolv = dns.resolver.Resolver()
            resolv.timeout = 5
            resolv.lifetime = 5
            resp = resolv.resolve(req, 'A')
            resp_txt = resolv.resolve(req, 'TXT')
            print(Fore.RED + f'{serv.strip():30}: [BAD]')
            pattern = '(?:https?:\/\/)?(?:[\w\.]+)\.(?:[a-z]{2,6}\.?)(?:\/[\w\.]*)*\/?'
            find = re.findall(pattern, str(resp_txt[0]))
            if len(find) == 0:
                find = ['No address']
            bad_dict.update({serv.strip(): f'{resp[0]} {find[0]}'})
        except dns.resolver.NXDOMAIN:
            print(Fore.GREEN + f'{serv.strip():30}: [OK]')
        except (dns.resolver.LifetimeTimeout, dns.resolver.NoAnswer):
            continue
    if len(bad_dict) > 0:
        len_str = len(f'IP-АДРЕС: "{ip.upper()}" ОБНАРУЖЕН В ЧЕРНЫХ СПИСКАХ')
        print(Fore.BLUE + f'\nIP-АДРЕС: {ip.upper()} ОБНАРУЖЕН В ЧЕРНЫХ СПИСКАХ\n{"*"*len_str}')
        for bad in bad_dict:
            print(f' - {Fore.YELLOW + bad:30} : {Fore.RESET +bad_dict[bad]}')
    else:
        print(Fore.GREEN + '\n[+] IP-адрес в черных списках не обнаружен')
# получение пользовательского ввода
# запуск проверки на принадлежность адреса к cloudflare
# запуск проверки адреса в DNSBL
def main():
    print(Fore.CYAN + f'\n- Ваш внешний IP-адрес: {public_ip()}')
    addr_input = input('- Введите IP-адрес или домен для проверки\n  Для выхода введите "x"\n  >>> ')
    if addr_input.lower() == "x":
        exit(0)
    ip = ''
    try:
        ip = socket.gethostbyname(addr_input)
    except socket.gaierror:
        print(Fore.RED + '\n - Не удалось получить IP-адрес')
        exit(0)
    if cloudf_detect(ip):
        print(Fore.RED + f'\n[!] ВНИМАНИЕ! Обнаружен адрес Cloudflare: {ip}')
    dns_bl_check(ip)
if __name__ == "__main__":
    main()

Отредактировано Egor2003 (Авг. 22, 2023 14:48:54)

Прикреплённый файлы:
attachment Снимок экрана 2023-08-21 144914.png (76,9 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version