手把手教你科學上網系列之四:更漂亮的智能PAC!–植物群

相信不少筒子們看過了咱寫的《手把手教你科學上網系列》已經能夠得心應手地游刃與高牆內外。但是你們有沒有發現我寫的里面有一個智能pac的東西?這個東西是有缺陷的(至少我這麼覺得呃),你們使用的這個東西來自於autoproxy2pac,它是一個精準記錄被牆網站的數據庫,由無數志願者維護,網站收集完全依靠網民的撞牆經驗,據說含3000多個網站,數量如此多,但被牆網站還是不可能都收集進去,當你上小眾網站的時候,仍舊有可能撞牆。當然這個時候你也可以手工來添加,若你使用Firefox、Chrome等,添加不是問題,如果用的是其他的瀏覽器,那可能就悲劇鳥。

所以,雖然一棒子打死是不對,不過我想天朝就是這麼做的,所以,Flora誕生了。如果你經常遊走於國外服務器的各種小網站,或許它才是你的菜,它使用 Python 開發,能自動抓取 apnic.net 的 IP 數據,找出所有國內的 IP 地址段,生成能讓瀏覽器自動判斷國內外 IP 地址的 pac 文件,讓代理用戶有等價於 VPN + chnroutes 的翻牆體驗。簡單地說,就是所有國外網站,搭橋;所有國內網站,直連。

Flora_Pac 使用十分簡單,兼容各種平台,所以不論是linux,還是lion,還是windows,統統可以。下面,咱們來說說使用方法。

#!/USR /斌/包膜蟒蛇
#
# Flora_Pac由@leaskh
# www.leaskh.com, i@leaskh.com
#
# 基於chnroutes項目 (通過Numb.Majority@gmail.com)
#

進口重
進口的urllib2
進口argparse
進口數學

高清generate_pac(代理):
結果= fetch_ip_data()
pacfile ='flora_pac.pac’
的RFile =開放(pacfile, “W”)
strLines = (
“// Flora_Pac由@leaskh”
“\ñ// www.leaskh.com, i@leaskh.com”
“\ñ”
“\nfunction FindProxyForURL(url, host)”
“\ñ{”
“\ñ”
“\ñVAR名單= [”
)
intLines = 0
對於IP,面具,_在結果:
如果intLines > 0:
strLines = strLines + “,’
intLines = intLines + 1
strLines = strLines + “\ñ ['%s'的, '%s'的]”%(IP, 面具)
strLines = strLines + (
“\ñ ];”
“\ñ”
“\ñVAR IP = dnsResolve(host);”
“\ñ”
“\N代表 (列表中的我變種) {”
“\ñ如果 (isInNet(IP, 名單[一世][0], 名單[一世][1])) {”
“\否返回“直接”;”
“\ñ }”
“\ñ }”
“\ñ”
“\否返回'%s'的;”
“\ñ”
“\ñ}”
“\ñ”%(代理)
)
rfile.write(strLines)
rfile.close()
打印 (“規則: %d個項目。 n”
“用法: 使用新創建%S作為Web瀏覽器的自動 ”
“代理配置 (.PAC) 文件。”%(intLines, pacfile))

高清fetch_ip_data():
#從獲取數據APNIC
打印 “從apnic.net讀取數據, 它可能需要幾分鐘的時間, 請稍候…”
URL = r'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest’
數據= urllib2.urlopen(url).讀()

cnregex = re.compile(r'apnic |cn\|ipv4\|[0-9\.]+\|[0-9]+\|[0-9]+\|一個。*',re.IGNORECASE)
cndata = cnregex.findall(數據)

結果=[]

在cndata項目:
unit_items = item.split(“|“)
starting_ip = unit_items[3]
num_ip = INT(unit_items[4])

IMASK = ^為0xffffffff(num_ip-1)
#轉換為字符串
IMASK =十六進制(IMASK)[2:]
面膜=[0]*4
面具[0]= IMASK[0:2]
面具[1]= IMASK[2:4]
面具[2]= IMASK[4:6]
面具[3]= IMASK[6:8]

#STR轉換為int
面膜=[ INT(一世,16 ) 在面膜我]
面膜=”%ð第%d。%d個。%d個”%元組(面具)

#掩蓋了* nix的格式
MASK2 = 32 INT(將Math.log(num_ip,2))

results.append((starting_ip,面具,MASK2))

返回結果

如果__name __ =='__ main__“:
解析器= argparse.ArgumentParser(說明=”生成代理自動配置規則。”)
parser.add_argument('-X', “–代理',
“代理”,
默認值='PROXY 127.0.0.1:8086“,
NARGS ='?“,
幫助= “代理服務器, 例子: ”
“SOCKS 127.0.0.1:8964; ”
“SOCKS5 127.0.0.1:8964; ”
“代理 127.0.0.1:8964”)

ARGS = parser.parse_args()

generate_pac(args.proxy)

將上面引用的部分複制下來寫到一個新的文本文檔裡,直接保存為 flora_pac.py
然後運行就好了,當然,如果你是windows用戶你可能需要去下載python運行庫什麼的XD
lion用戶可能也需要下載吧,我忘記我以前因為什麼反正是已經下載過了,所以,我直接點擊右鍵選擇打開方式,然後python啟動器就好了。
運行之後,會這個腳本旁邊生成一個全新的pac,這個就是我們將要使用的東西!哦,別心急,還得來設置設置。因為我們使用的是goagent,默認的端口與我們使用的不符,不過我已經預先改好了。
如果依舊不能用,請自行用文本模式打開這個pac,然把最後的

改為

如果你實在懶得改= =就請下載我剛剛生成的吧,時間差不多就是文章發布的日期了。
flora_pac.pac
(把這個 flora_pac.pac隨手替換為之前你使用的那個pac就可以了。。。。。。)
(另外,這個pac來自這裡,另外文章的部分內容還借鑒於這裡。感謝他們。)

本文由 落格博客 原創撰寫:落格博客 » 手把手教你科學上網系列之四:更漂亮的智能PAC!–植物群

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/142.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

註釋

發表評論

您的電子郵件地址不會被公開. 必填字段標 *