【更新】python写的sogou代理全网加速器,特别适合于教育网(稍改动)
来源:互联网 发布:算法交易和量化交易 编辑:程序博客网 时间:2024/04/30 02:09
源代码出处:http://xiaoxia.org/2011/11/14/update-sogou-proxy-program-with-https-support/
给力的小虾后来又更新了,解决了https问题,实在是膜拜啊…
有人借此用C语言写了一个运行于Windows下的小exe,也非常厉害!地址:
http://hi.baidu.com/yxleimeng/blog/item/364a53fb7ef96579034f5613.html
遗憾的是没有Linux和Mac OS X版本。所以咱还是果断只能稍微修改下,把python的版本CUI界面弄得人性化一点,然后放在自己的Windows、Ubuntu和Mac OS X下自动启动。配合Google Chrome的Proxy SwitchySharp实在是太爽了。
#!usr/bin/env python# -*- coding:gb2312 -*-print "sogou代理全网加速器"printprint "源代码来自:xiaoxia.org"printfrom threading import Thread, Lockfrom struct import unpackfrom BaseHTTPServer import BaseHTTPRequestHandler, HTTPServerfrom httplib import HTTPResponsefrom SocketServer import ThreadingMixIn import socket, os, selectimport time, sys, randomimport threading# Minimize Memory Usagethreading.stack_size(128*1024) x_sogou_auth = "9CD285F1E7ADB0BD403C22AD1D545F40/30/853edc6d49ba4e27"proxy_host = "h0.edu.bj.ie.sogou.com"proxy_port = 80BufferSize = 8192RemoteTimeout = 15local_ip = socket.gethostbyname(socket.gethostname())#获得本地iplocal_port = 8083 #设定本地代理地址def calc_sogou_hash(t, host): s = (t + host + 'SogouExplorerProxy').encode('ascii') code = len(s) dwords = int(len(s)/4) rest = len(s) % 4 v = unpack(str(dwords) + 'i'+str(rest)+'s', s) for vv in v: if(type(vv)==type('i')): break a = (vv & 0xFFFF) b = (vv >> 16) code += a code = code ^ (((code<<5)^b) << 0xb) # To avoid overflows code &= 0xffffffff code += code >> 0xb if rest == 3: code += ord(s[len(s)-2]) * 256 + ord(s[len(s)-3]) code = code ^ ((code ^ (ord(s[len(s)-1])*4)) << 0x10) code &= 0xffffffff code += code >> 0xb elif rest == 2: code += ord(s[len(s)-1]) * 256 + ord(s[len(s)-2]) code ^= code << 0xb code &= 0xffffffff code += code >> 0x11 elif rest == 1: code += ord(s[len(s)-1]) code ^= code << 0xa code &= 0xffffffff code += code >> 0x1 code ^= code * 8 code &= 0xffffffff code += code >> 5 code ^= code << 4 code = code & 0xffffffff code += code >> 0x11 code ^= code << 0x19 code = code & 0xffffffff code += code >> 6 code = code & 0xffffffff return hex(code)[2:].rstrip('L').zfill(8)class Handler(BaseHTTPRequestHandler): remote = None # Ignore Connection Failure def handle(self): try: BaseHTTPRequestHandler.handle(self) except socket.error: pass def finish(self): try: BaseHTTPRequestHandler.finish(self) except socket.error: pass # CONNECT Data Transfer def transfer(self, a, b): fdset = [a, b] while True: r,w,e = select.select(fdset, [], []) if a in r: data = a.recv(BufferSize) if not data: break b.sendall(data) if b in r: data = b.recv(BufferSize) if not data: break a.sendall(data) def sogouProxy(self): if self.remote is None or self.lastHost != self.headers["Host"]: self.remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.remote.settimeout(RemoteTimeout) self.remote.connect((proxy_host, proxy_port)) self.remote.sendall(self.requestline.encode('ascii') + b"\r\n") # Add Sogou Verification Tags self.headers["X-Sogou-Auth"] = x_sogou_auth t = hex(int(time.time()))[2:].rstrip('L').zfill(8) self.headers["X-Sogou-Tag"] = calc_sogou_hash(t, self.headers['Host']) self.headers["X-Sogou-Timestamp"] = t headerstr = str(self.headers).replace("\r\n", "\n").replace("\n", "\r\n") self.remote.sendall(headerstr.encode('ascii') + b"\r\n") # Send Post data if self.command == 'POST': self.remote.sendall(self.rfile.read(int(self.headers['Content-Length']))) response = HTTPResponse(self.remote, method=self.command) response.begin() # Reply to the browser status = "HTTP/1.1 " + str(response.status) + " " + response.reason self.wfile.write(status.encode('ascii') + b'\r\n') hlist = [] for line in response.msg.headers: # Fixed multiple values of a same name if 'TRANSFER-ENCODING' not in line.upper(): hlist.append(line) self.wfile.write("".join(hlist) + b'\r\n') if self.command == "CONNECT" and response.status == 200: return self.transfer(self.remote, self.connection) else: while True: response_data = response.read(BufferSize) if not response_data: break self.wfile.write(response_data) do_POST = do_GET = do_CONNECT = sogouProxy class ThreadingHTTPServer(ThreadingMixIn, HTTPServer): address_family = socket.AF_INET6server_address = ("", local_port)server = ThreadingHTTPServer(server_address, Handler)print("请选择您的当下网络环境:\n\ 1. CERNET 教育网\n\ 2. CTCNET 电信\n\ 3. CNCNET 联通\n\ 4. DXT 电信通\n\ 输入数字,如果直接回车则默认选择教育网: \n\n")i = raw_input()if i == 1: proxy_host = 'h' + str(random.randint(0,5)) + '.edu.bj.ie.sogou.com'elif i == 2: proxy_host = 'h' + str(random.randint(0,3)) + '.ctc.bj.ie.sogou.com'elif i == 3: proxy_host = 'h' + str(random.randint(0,3)) + '.cnc.bj.ie.sogou.com'elif i == 4: proxy_host = 'h' + str(random.randint(0,10)) + '.dxt.bj.ie.sogou.com'elif len(i) == 0: proxy_host = 'h' + str(random.randint(0,5)) + '.edu.bj.ie.sogou.com'print("正通过" + proxy_host + "进行代理,请设置代理地址为:")print local_ipprint "若是本机,则可设置为\n127.0.0.1"print "端口为:"print local_porttry: server.serve_forever()except: os._exit(1)
- 【更新】python写的sogou代理全网加速器,特别适合于教育网(稍改动)
- python写的sogou代理全网加速器,特别适合于教育网(稍改动)
- python写的sogou代理全网加速器两个注意的
- Android 7.0 的改动(持续更新)
- JAVA——动态代理(在别人的基础上稍作改动)
- 分享一个写python特别好的个人的博客
- 全排列next_permutation的用法(稍微有点改动)
- 反写更新代理
- -- 教育网高速出国代理
- 070112 教育网出国代理
- Csharp的委托兼用适合于初学者更新到4._0
- Cglib生成动态代理(有改动)
- 新人写博客~~~ 关于精灵的改动
- 重载,覆盖,隐藏 (写的特别清楚)
- Dijkstra算法 (转)写的特别好~
- 在sogou-upd我们是如何使用python的(1)
- 简单加速器功能介绍——教育网篇
- 搜狗sogou收录更新规律
- linux kernel漫漫升级路
- gcc编译过程模型
- MFC程序中各个函数的执行流程
- 设置、获取、删除cookie
- Python模拟Web Fetion登录解析
- 【更新】python写的sogou代理全网加速器,特别适合于教育网(稍改动)
- 解决XP 系统 .Net Framework 4安装时出现严重错误 (0x80070643)
- 开发人员为何应该使用 Mac OS X 兼 OS X 小史---强烈转帖,写的实在太赞
- HTTP协议详解
- 禅医睡觉5戒律赶走春困
- 调度监控代码
- Linux iftop 监控流量
- Eclipse反编译工具Jad及插件JadClipse配置
- 精品IT网站