不要访问某些网站的办法

黄杰, 2012-07-25
root[a]linuxsand.info

蛋疼,强迫症。

某些网站真是没有常去的必要。在那里,我既不生产内容,也不消费内容,浪费时间和感情。

那么,在 hosts 文件中将这些网址映射到 localhost,block 之:block_url.py

url = raw_input('url that you want to block: ')
hosts = r'C:\Windows\System32\drivers\etc\hosts'

def write_hosts(url):
    with open(hosts, 'a') as f:
        c = f.writelines(['\n127.0.0.1 %s' % url])

if not url in ''.join(open(hosts, 'r').readlines()[22:]): write_hosts(url)

import os
os.system('ipconfig /flushdns')

这在功能上已经足够。

但我还需要加点提示文字。那就在 localhost 80 端口跑一个 server,返回提示信息。用 bottle.py 几行代码就搞定:localhost.py

# c:\\python27\\python.exe
# coding: utf-8
import ctypes
from bottle import route, run, redirect

@route('/')
def index():
    return u'<h1 style="color: red; text-align: center;">不是说好的嘛,近期不访问该网站!</h1>'

@route('/<:re:\S+>')
def back():
    redirect('/')

ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
run(host='localhost', port=80, reloader=True)

其中 ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0) 是使得 cmd (python)窗口不可见(来自 proxy.py from goagent loal part),否则太干扰人了。特别是我还想开机启动(把 localhost.py 丢到 C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup),时刻在后台运行的。

这个办法真的有效,虽然你可以手工去掉 hosts 文件中对应的行,但是即便接着 ipconfig /flushdns 一下,也不是马上可以访问的。如此你便失去了访问该网站的兴趣,耶,目的达到!