Могу ли я сделать блокировщик сайтов без использования файла «Hosts» и его изменения?
Можно ли создать код на Python без использования и изменения файла "Hosts" с помощью кода. Уже получилось конечно сделать это с помощью этого, но мне нужно чтобы я мог в дальнейшем реализовать код на других устройствах, и, очень проблематично каждый раз открывать доступ или запускать код с правами админа. И вообще, работает через раз, не понимаю в чём проблема. Код выглядит вот так: Чтение файла происходит и всо.
Как это сделать без этого дрючного "hosts" и сделать так чтоб всё работало стабильно?
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()
Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой </> Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
Поднять свой как-бы DNS сервер на машине, прописать этот DNS сервер как основной и единственный для данной машины, предыдущие прописанные сервера сохранить. Админские права на этом этапе понадобятся.
При поступлении запроса проверять запрашиваемое имя. Если не в чёрном списке - перенаправлять запрос на сохранённый DNS, полученный ответ отдать самому.
Грубо и не всегда надёжно (есть DNS over HTTPS, например, который так не перехватишь), но в базовом варианте сработает.