Если вы в очередной раз словили себя на том, что уже два часа времени провели впустую, читая новости и твиттер, совсем забыв про работу, то самое время поставить Focus.py.
Focus.py — это маленький DNS-сервер, который ставится на localhost и пропускает через себя все DNS-запросы. Но при этом у него есть удобные API, так что можно быстро написать пару строчек в конфигурацию — и заблокировать определённый сайт в определённое время.
Самое замечательное, что каждое правило выражается в виде функции Python. Например, вот пример функции для блокирования Reddit.
def domain_reddit_com(dt): return dt.hour == 21 # allow from 9-10pm
Другая интересная особенность Focus.py: он уменьшает TTL для каждого DNS-запроса, чтобы браузер не кэшировал пары «домен / IP-адрес», поэтому фильтрация будет более эффективной.
Вот другие правила фильтрации доменов, каждому домену — своя функция.
import re def domain_ycombinator_com(dt): # return dt.hour % 2 # every other hour return False def domain_reddit_com(dt): # return dt.hour in (12, 21) # at noon-1pm, or from 9-10pm return False def domain_facebook_com(dt): return False def default(domain, dt): # do something with regular expressions here? return True
Для запуска Focus нужно прописать его первым DNS-сервером в /etc/resolv.conf
:
nameserver 127.0.0.1
После этого запустить непосредственно саму программу.
sudo python focus.py &
Чтобы остановить Focus, нужно найти соответствующий процесс в списке:
sudo netstat --inet -anpu | grep :53
Найдя процесс на 53-м порту, его можно убить, указав идентификатор процесса.