@CAMIFKR

Могу ли я сделать блокировщик сайтов без использования файла «Hosts» и его изменения?

Можно ли создать код на Python без использования и изменения файла "Hosts" с помощью кода. Уже получилось конечно сделать это с помощью этого, но мне нужно чтобы я мог в дальнейшем реализовать код на других устройствах, и, очень проблематично каждый раз открывать доступ или запускать код с правами админа. И вообще, работает через раз, не понимаю в чём проблема. Код выглядит вот так: Чтение файла происходит и всо.
Как это сделать без этого дрючного "hosts" и сделать так чтоб всё работало стабильно?

import platform

if platform.system() == 'Windows':
path_to_hosts = r'C:\Windows\System32\drivers\etc\hosts'
elif platform.system() == 'Linux':
path_to_hosts = r'/etc/hosts'

redirect = '127.0.0.1'
websites = []

def block():
while True:
site = input('Введите сайт для блокировки: ')
if site == 'exit':
break
websites.append(site)
print(f'Ссылка {site} добавлена!')
print('Если Вы заблокировали все нужные сайты, для выхода отправьте "exit"')

with open(path_to_hosts, 'r+') as file:
content = file.read()
for site in websites:
if site in content:
pass
else:
file.write(f'{redirect} {site}\n')

def unblock():
while True:
site = input('Введите сайт для разблокировки: ')
if site == 'exit':
break
websites.append(site)
print(f'Ссылка {site} добавлена!')
print('Если Вы разблокировали все нужные сайты, для выхода отправьте "exit"')

with open(path_to_hosts, 'r+') as file:
content = file.readlines()
file.seek(0)
for line in content:
if not any(site in line for site in websites):
file.write(line)
file.truncate()

while True:
choosing_action = input('1 - Заблокировать сайт/ы \n2 - Разблокировать сайт/ы\n')
if choosing_action == '1' or choosing_action == '2':
break
print('Выберите вариант ответа!')

if choosing_action == '1':
block()
else:
unblock()
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Поднять свой как-бы DNS сервер на машине, прописать этот DNS сервер как основной и единственный для данной машины, предыдущие прописанные сервера сохранить. Админские права на этом этапе понадобятся.
При поступлении запроса проверять запрашиваемое имя. Если не в чёрном списке - перенаправлять запрос на сохранённый DNS, полученный ответ отдать самому.
Грубо и не всегда надёжно (есть DNS over HTTPS, например, который так не перехватишь), но в базовом варианте сработает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы