源代码出处: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代理全网加速器"
print
print "源代码来自:xiaoxia.org"
printfrom threading import Thread, Lock
from struct import unpack
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from httplib import HTTPResponse
from SocketServer import ThreadingMixIn
import socket, os, select
import time, sys, random
import threading# Minimize Memory Usage
threading.stack_size(128*1024)x_sogou_auth = "9CD285F1E7ADB0BD403C22AD1D545F40/30/853edc6d49ba4e27"
proxy_host = "h0.edu.bj.ie.sogou.com"
proxy_port = 80
BufferSize = 8192
RemoteTimeout = 15
local_ip = socket.gethostbyname(socket.gethostname())#获得本地ip
local_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) % 4v = unpack(str(dwords) + 'i'+str(rest)+'s', s)for vv in v:if(type(vv)==type('i')):breaka = (vv & 0xFFFF)b = (vv >> 16)code += acode = code ^ (((code<<5)^b) << 0xb)# To avoid overflowscode &= 0xffffffffcode += 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 &= 0xffffffffcode += code >> 0xbelif rest == 2:code += ord(s[len(s)-1]) * 256 + ord(s[len(s)-2])code ^= code << 0xbcode &= 0xffffffffcode += code >> 0x11elif rest == 1:code += ord(s[len(s)-1])code ^= code << 0xacode &= 0xffffffffcode += code >> 0x1code ^= code * 8code &= 0xffffffffcode += code >> 5code ^= code << 4code = code & 0xffffffffcode += code >> 0x11code ^= code << 0x19code = code & 0xffffffffcode += code >> 6code = code & 0xffffffffreturn hex(code)[2:].rstrip('L').zfill(8)class Handler(BaseHTTPRequestHandler):remote = None# Ignore Connection Failuredef handle(self):try:  BaseHTTPRequestHandler.handle(self)except socket.error: passdef finish(self):try:BaseHTTPRequestHandler.finish(self)except socket.error: pass# CONNECT Data Transferdef 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: breakb.sendall(data)if b in r:data = b.recv(BufferSize)if not data: breaka.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 Tagsself.headers["X-Sogou-Auth"] = x_sogou_autht = 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"] = theaderstr = str(self.headers).replace("\r\n", "\n").replace("\n", "\r\n")self.remote.sendall(headerstr.encode('ascii') + b"\r\n")# Send Post dataif 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 browserstatus = "HTTP/1.1 " + str(response.status) + " " + response.reasonself.wfile.write(status.encode('ascii') + b'\r\n')hlist = []for line in response.msg.headers: # Fixed multiple values of a same nameif '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: breakself.wfile.write(response_data)do_POST = do_GET = do_CONNECT = sogouProxyclass 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_ip
print "若是本机,则可设置为\n127.0.0.1"
print "端口为:"
print local_porttry:server.serve_forever()
except: os._exit(1)

【更新】python写的sogou代理全网加速器,特别适合于教育网(稍改动)相关推荐

  1. 代理IP的背后原理简单介绍与python写一个获取代理IP的爬虫

    title: 代理IP的那些事 copyright: true top: 0 date: 2019-11-13 14:20:39 tags: 代理IP categories: 爬虫笔记 permali ...

  2. python小游戏编程实例-10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目

    另外要注意:光理论是不够的.这里顺便总大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交 ...

  3. python 写的一个按键精灵工具 特别方便 喜欢拿去

    程序可以每隔固定周期时间自动进行操作鼠标.键盘.输入文本等. 屏幕坐标我是用FastStoneCapture软件的"屏幕十字线"功能取的,很方便,其实方法很多,屏幕截图用画图软件也 ...

  4. 用python写网络爬虫 第2版 pd_用Python写网络爬虫(第2版)

    用Python写网络爬虫(第2版)电子书 畅销的Python网络爬虫发实战图书全新升级版,上一版年销量近40000册. 针对Python 3.6版本编写. 提供示例完整源码和实例网站搭建源码,确保用户 ...

  5. 用python写了一个简易的记账软件,后期有可能更新

    用python写了一个简易的记账软件,后期有可能更新 记账程序由来 程序介绍 模块 数据写入 gui图形化界面 关于输入空值 新建工作簿 完整代码 记账程序由来 曾经在iOS14的快截指令中写了一个快 ...

  6. 用python写了一个简易的记账软件,后期有可能更新!

    记账程序由来 曾经在iOS14的快截指令中写了一个快捷指令用来记账,但是由于快捷指令的限制,只能把数据记录到备忘录或者numbers,数据的迁移性很差.所以最后干脆用python写了一个程序 程序介绍 ...

  7. python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...

  8. python写一个通讯录V2.0

    python写一个通讯录step by step V2.0 引用知识 list + dict用于临时存储用户数据信息 cPickle用于格式化文件存取 依旧使用file来进行文件的存储 解决问题 1. ...

  9. python写了代码_Python写代码的用法建议

    1.Mutable and immutable types Python有两种内置或用户定义的类型 可变类型是允许就地修改内容的类型.典型的可变列表是列表和词典:所有列表都有变异方法,如 list.a ...

最新文章

  1. POJ 2430 状压DP
  2. “以史为鉴”-企业信息化的梳理-前言
  3. 用OpenJTAG烧写程序到Flash—— 韦东山嵌入式Linux视频学习笔记03
  4. GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html...
  5. (五十五)iOS多线程之GCD
  6. 中如何拉取git代码_git使用教程4pycharm拉取git仓库项目代码
  7. Python实现二叉树
  8. win8文件共享服务器搭建,Win8系统开启公用文件夹共享的方法【图文】
  9. 电子统计台账:垂直流水账格式数据的导入
  10. 信息安全技术第五章应用安全(完整详细笔记)
  11. 从零开始学51单片机
  12. 银河麒麟服务器操作系统常用问题及解决方案
  13. thinkpadt410接口介绍_thinkpad T410的扩展插口!
  14. Python 爬虫 爬取 煎蛋网 图片
  15. 有意思的互联网创业公司(Timehop/Redbeacon )
  16. 全球主要语言缩写对照
  17. MIUI“息屏听剧”功能实现调研
  18. Excel?最强国产开源在线表格 Luckysheet 走红GitHub!
  19. 解释一下什么是servlet?
  20. 【Redis核心知识 八】Redis集群之Cluster模式及集群搭建

热门文章

  1. 网安基础入门篇(二)
  2. python音乐可视化效果_我的音悦台——音乐可视化的Python实现
  3. 一键刷机助手 比较强大的
  4. windows11远程连接Ubuntu桌面
  5. jQuery的slideToggle
  6. Photoshop开门十件事。
  7. csv转成Excel
  8. datadashboard下载_Data Dashboard for LabVIEW
  9. Modbus通信协议详解
  10. flarum论坛如何html,Flarum从入门安装到基本设置