Pages

Friday, 25 January 2013

多台电脑如何共享翻墙通道

 

什么是”代理”

“代理”好比是一个中转站,可以中转你的上网数据流量,以此来避开 GFW 这堵墙。
翻墙代理通常包括两部分:代理软件,代理服务器。代理软件安装在你的电脑上,代理服务器通常都位于墙外(也就是境外)。当你通过代理上网时,你的浏览器并不是直接连到目标网站。而是通过如下几个步骤:
1. 浏览器发送数据到代理软件
2. 代理软件把你的数据发送到墙外的代理服务器
3. 代理服务器发送数据到目标网站

什么是”监听端口”

代理软件要正常工作,通常都需要开启一个”监听端口”。浏览器通过这个”监听端口”来跟代理软件建立连接。只有建立了连接,浏览器才能把数据发送到代理软件上。

◇如何看本机开启的监听端口

对于 Windows 系统,在命令行窗口(先运行 cmd 就会出现命令行窗口)运行如下命令,可以看到本机开启的所有监听端口。
netstat -an | find “LISTEN”
刚才有读者在留言中提问,俺再补充一下。用 netstat 的 o 选项可以看到每个监听端口分别是哪个进程开启的。命令如下
netstat -ano | find “LISTEN”

◇什么是监听端口的”绑定地址”

以俺手头的虚拟机为例,执行刚才那个命令后,会显示如下
TCP  127.0.0.1:8118  0.0.0.0:0  LISTENING
其中的 127.0.0.1 表示这个监听端口绑定的网卡地址,而 8118 表示监听的端口号。所谓的”绑定地址”,意思就是说,这个监听端口只接受来自该网卡的连接。
因为 127.0.0.1 表示本机网卡地址;所以,绑定在 127.0.0.1 表示该监听端口只接受来自本机的连接。
如果要让某个监听端口接受任意连接(包括外部电脑的连接),可以把绑定地址设置为 0.0.0.0

◇小心防火墙的配置

在《用虚拟机隐匿公网IP》一文,俺就特别用红字,提醒大伙儿要小心防火墙的设置。结果还是有很多人因为防火墙的问题而中招,功亏一篑。
俺再啰嗦一下:
要特别小心操作系统中防火墙的设置。很多人是因为防火墙没设好,导致代理无法连通。

★如何共享翻墙的代理?


◇问题

大部分翻墙代理都会提供一个 HTTP 的代理端口(就是刚才说的”监听端口”)。问题在于:很多翻墙代理的代理端口都绑定在 127.0.0.1 上。也就是说,这个代理只能被本机的软件使用,外部电脑的软件无法连接到该端口。

◇解决方案之 “修改配置”

最简单的解决方案,就是修改翻墙软件的配置,让代理端口绑定到 0.0.0.0 上。
自由门
到它的设置界面,点”更多设置”,然后勾选”用自由门做服务器”,可以把监听端口绑定到 0.0.0.0(本机的浏览器设置的http代理依然为127.0.0.1:8058,而 外部电脑的浏览器设置的http代理则为本机在局域网中的IP:8058,比如:192.168.1.100:8058)
GoAgent
GoAgent 的配置信息存储在 proxy.ini 文件中。打开该文件找到 [listen] 字段,然后把该字段下面的 127.0.0.1 改为 0.0.0.0 即可。(本机的浏览器设置的http代理依然为127.0.0.1:8087,而 外部电脑的浏览器设置的http代理则为本机在局域网中的IP:8087,比如:192.168.1.100:8087. 不错,我测试成功)
可惜的是,很多翻墙软件都没有提供配置文件让你修改监听端口绑定的地址。所以,俺下面传授一个通用的招数,无需修改配置文件,可以搞定任何翻墙代理,让它的监听端口被外部电脑使用。

◇解决方案之 “端口转发”

所谓的”端口转发”,通俗地说就是让 A 监听端口的数据转发到 B 监听端口。
B 监听端口就是你的翻墙软件原先开启的端口
A 监听端口是新开的,而且绑定地址是 0.0.0.0
如此一来,外部电脑就可以用 A 端口作为代理的端口,数据都发给 A 端口,然后利用”端口转发”功能,把数据转向 B 端口(也就是翻墙工具自身的端口)

★如何搞端口转发?

端口转发是本文的重点,所以俺单独开一个章节详细说。
用来搞端口转发的工具有很多,如果你去 Google 一下 “TCP proxy” 或 “TCP redirection”,应该能找到一大堆软件和解决方案。考虑到很多读者是菜鸟,俺挑选两种最简单的办法。

◇1.利用 Windows 自带的 netsh搞端口转发

准备工作
对于 Vista 以及更新版本的 Windows (比如 Win7 Win8 …)可以直接使用该方案。
对于 Vista 之前的 Windows(比如 WinXP、Win2003),需要先安装 IPv6 协议栈。具体步骤如下:
1. 以管理员身份登录,进入”控制面板”下面的”网络连接”
2. 选中本地连接,点右键,在右键菜单选”属性”
3. 弹出”属性”对话框,点”安装”按钮
4. 弹出”选择网络组件类型”对话框,选”协议”,再点”添加”
5. 在弹出的对话框中选”IPv6″,点”确定”
命令详解
(以下命令需要管理员身份才能执行)
添加端口转发的命令
netsh interface portproxy add v4tov4 listenport=新开的监听端口 listenaddress=新开端口的绑定地址 connectaddress=要转发的地址 connectport=要转发的端口 protocol=tcp
删除端口转发的命令
netsh interface portproxy delete v4tov4 listenport=新开的监听端口 listenaddress=新开端口的绑定地址
命令举例
比方说,俺本地已经运行了 TOR,端口是 8118,绑定在 127.0.0.1
如果俺希望建立一个新的端口,端口号是 12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在 0.0.0.0
那么就执行如下命令。然后,发往 12345 端口的数据流就会被转发到 8118 端口。
netsh interface portproxy add v4tov4 listenport=12345 listenaddress=0.0.0.0 connectaddress=127.0.0.1 connectport=8118 protocol=tcp
为了保险起见,再用前面介绍的 netstat 命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行
TCP  0.0.0.0:12345  0.0.0.0:0  LISTENING
如果要删除该端口转发,就执行如下命令
netsh interface portproxy delete v4tov4 listenport=12345 listenaddress=0.0.0.0
删除之后,再用 netstat 命令查一下,这个 12345 的监听端口就看不到了
优点
无需安装任何第三方软件
一旦设置好就会持续有效——即使系统重新启动也没关系。
缺点
需要以管理员身份登录,才能执行上述命令。
该方法只能用于 Windows 系统。(此方法我试了,未成功)

◇2.利用 rinetd搞端口转发

获取软件
rinetd 是一个很小巧的、跨平台的、开源的工具,它能提供 TCP 端口转发的功能。它的官网在”这里“,上面提供了 Linux 平台和 Windows 平台的软件包。考虑到大多数同学用的是 Windows,俺针对 Windows 的使用介绍一下。
把那个 rinetd.zip 下载到本地,解压出来,里面有好几个文件(包括源代码)。你只需取出其中的 rinetd.exe 其它文件不需要。(下载地址: http://www.boutell.com/rinetd/http/rinetd.zip)
编写配置文件
rinetd 的配置文件很简单,就是一个普通的文本文件,每一行对应一条转发规则。每一条转发规则包含4个字段,分别如下,字段之间用空格分开。
绑定地址 监听端口 转发的地址 转发的端口
配置文件举例
比方说,俺本地已经运行了 TOR,端口是 8118,绑定在 127.0.0.1
如果俺希望通过 rinetd 建立一个新的端口,端口号是 12345(这个端口号是俺随手编的,你也可以用其它端口号),绑定在 0.0.0.0
那么,转发规则就这么写
0.0.0.0 12345 127.0.0.1 8118
运行
把刚才写好的配置文件保存成 config.txt(俺只是举例,你也可以用其它文件名),把该文件 放到rinetd.exe 所在的同一个目录。
运行 cmd 进入 Windows 的命令行窗口,然后进入 rinetd.exe 所在的目录,执行如下命令
rinetd.exe -c config.txt 外部电脑的浏览器设置的http代理为本机在局域网中的IP:12345,比如:192.168.1.100:12345,不错,我测试成功。)
为了保险起见,再用前面介绍的 netstat 命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行
TCP  0.0.0.0:12345  0.0.0.0:0  LISTENING
优点
该软件很小巧(整个下载包才 100 多 KB),而且是绿色软件。几乎不占用啥系统资源
无需管理员即可运行
跨平台
缺点
每次你关机或用户注销,rinetd 就退出了,下次要重新运行(为了方便,你可以把 rinetd 的启动命令加入 Windows 的启动项)

如何共享翻墙的VPN?



◇问题

用 VPN 翻墙,虽然可以让本机的所有网络软件自动通过 VPN 服务器中转。但是其它电脑的软件无法使用本机的 VPN 网络。

◇解决方案之 “Privoxy”

VPN 翻墙” 跟 “代理翻墙” 的技术原理不同——VPN 软件本身是不开启监听端口的。所以刚才介绍的端口转发,对于 VPN 软件是无效滴

不过没关系,咱们可以在本机运行一款SOCKS 代理工具,把监听端口绑定到 0.0.0.0,就可以让局域网中的其它电脑的软件通过本机的 VPN 翻墙。考虑到大部分人翻墙都是为了浏览网页,俺重点介绍一下 Privoxy 这个工具。
获取软件
Privoxy 是一个老牌的、跨平台的,开源的 Web 代理软件,官网在”这里“。
在官网上有 exe 安装包,也有 zip 的压缩包(免安装)。下哪个看你自己的喜好(俺喜欢免安装的,比较绿色)。
修改配置文件
Privoxy 默认的监听端口是8118,绑定在 127.0.0.1 上。为了让其它电脑能连上来,需要修改绑定的地址。
Privoxy 的配置文件是 config.txt 。打开它,搜索 listen-address 会看到如下一行
listen-address  127.0.0.1:8118
修改为
listen-address  0.0.0.0:8118
即可。
运行
直接双击 Privoxy.exe

(注:在这里,在privoxy的配置文件config.txt里,不要启用父代理:
forward-socks5   /               127.0.0.1:1080 .  这一行,即需要注释掉这行。)


为了保险起见,再用前面介绍的 netstat 命令,看一下本机开启的端口。如果正常的话,你就可以看到如下一行
TCP  0.0.0.0:8118  0.0.0.0:0  LISTENING

★如何共享虚拟机中的翻墙软件

(还不了解虚拟机的同学,可以先看俺写的《扫盲操作系统虚拟机》系列教程)
有些网友(包括俺)会单独开一个虚拟机(Guest OS),专门用来安装翻墙工具。在这个虚拟机上,除了翻墙工具,不放其它任何东西。这样做的好处之一是:即使某些翻墙工具有后门,也不会威胁到真实系统(Host OS)的安全。
那么,如何把虚拟机中的翻墙工具共享给其它电脑(Host OS 之外的系统)用捏?

◇步骤1

首先,你还是需要参照前面介绍的方法:
如果用代理翻墙,就搞端口转发;
如果用 VPN 翻墙,就新开一个 Web 代理。

◇步骤2

配置虚拟机的网卡模式,可以有两种搞法。
对于 NAT 模式的网卡
你需要添加端口映射。主流的虚拟机软件(包括 VMware 和 VirtualBox)都有此功能。
该功能类似于刚才提到的端口转发,其原理是:把 Host OS 上的某个端口映射到某个虚拟机的 NAT 网卡上的另一个端口。
该方法配置稍嫌麻烦,VirtualBox 甚至没图形界面,还要敲一串命令。如果你对网络和虚拟机不太熟悉,俺不推荐用这种搞法。建议改用 Bridge 模式。
对于 Bridge 模式的网卡
如果网卡是 Bridge 模式,那就简单了,无需任何额外设置
因为这种模式的虚拟网卡,对于 Host OS 之外的网络是可见的。也就是说,(Host OS 之外的)其它电脑可以直接访问到此网卡——因此其它电脑的软件就能直接连上虚拟机中的代理端口。

★结尾

暂且写到这里。如果列位看官针对此话题有啥疑问,或者在实践过程中碰到啥困难,可以到本文留言,俺会尽量解答。

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
http://program-think.blogspot.com/2013/01/cross-host-use-gfw-tool.html   
---------------------------------------------
(我补充:用polipo也可达到把SOCKS代理转化为HTTP代理目的:

1. 下载 Polipo,请至其官网

软件名称 Polipo
授权 / 价格 开源软件 / 免费
系统平台 所有
运行环境 所有
网址 官方网站
注意:Polipo 为开放源代码,因此为跨平台移植带来了便利性。官网中已经提供了其他平台移植版本地址,请在 “Contributed binaries and BSD ports” 部分查找。

2. 配置 Polipo

(1). 将 Polipo  解压到任意目录。
(2). 将 config.sample 文件复制为 config 文件,无扩展名。
(3). 编辑 config 文件。
首先找到代理服务器地址及端口部分:
# proxyAddress = “0.0.0.0″ # IPv4 only
proxyAddress = "127.0.0.1"
将proxyAddress = "127.0.0.1" 注释掉,在其下添加如下所示部分:
proxyAddress = "0.0.0.0"
proxyPort = 8123 (8123为polipo.exe的默认端口,无需修改)
然后再查找访问控制部分:
# allowedClients = “127.0.0.1, 134.157.168.0/24″
将其改为或直接在其下添加:
#allowedClients = 127.0.0.1
allowedPorts = 1-65535
本文的目的是所有的客户端电脑均可使用该代理服务器,因此允许的客户端地址为 不限制,开放端口为所有。
最后查找代理转发部分:
# socksParentProxy = "127.0.0.1:1080"
# socksProxyType = socks5
上面2行如果已启用,需把他们注释掉,即注释掉父代理。
至此,配置部分就完成了,(然后复制c:\windows\system32\cmd.exe文件到c: \program files\polipo目录,双击cmd.exe,在cmd.exe中的提示符后面输入polipo.exe -c config 然后回车,会出现如图:http://i3.6.cn/cvbnm/b9/b8/75 /7844bbf7c742405a77c331caffe22402.jpg所示的内容,共4行内容,这些内容是正常的。也可能只出现一行内容:
DNS: couldn't open /etc/resolv.conf: No such file or directory.这也是正常的。
不要直接打开polipo.exe,直接打开polipo.exe是没用的。你也可以在polipo目录中,用记事本新建一个bat文件,内容为:。
polipo.exe -c config
命名为比如start polipo.bat,以后双击这个bat文件,就把polipo程序启动了,无需在cmd.exe中的提示符后面输入命令,这样做比较方便。 到此设置就完成了))

用3proxy的情形:
3proxy.cfg的内容设为:
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
users "linfeng:CL:iloveu"
internal 0.0.0.0
auth iponly
allow * 
#parent 1000 socks5+ 127.0.0.1 1080
proxy -n -a -p3128
以上把parent那行注释掉,注释掉父代理。加上一行 internal 0.0.0.0 即可。


(共享翻墙的VPN方案,无论是通过privoxy还是polipo还是3proxy,我都测试成功。)

至 于安卓手机中,能设置http proxy的浏览器建议使用opera mobile,具体参见http://briteming.blogspot.kr/2013/02/androidhttp-opera- mobile.html,注意:要把http server栏设置为你的pc在无线局域网中的ip地址,我的为192.168.1.100,端口号则设为8118或8123,依你在pc上是使用 privoxy还是polipo来定。https server栏无需填写。至于如何获悉你的pc在无线局域网中的ip地址,请参见http://briteming.blogspot.kr/2013/04/ip.html))

相关帖子: http://briteming.blogspot.com/2012/12/rinetd.html
---------------------------

共享你的翻墙代理给局域网里的其他人&使用代理连接翻墙软件 
共享你的翻墙代理给局域网(就是通过路由器共享上网的情况)里的其他人,让他们不用安装软件也不用复杂设置只需设置代理即可翻墙,方便翻墙帐号一号多用,如果是无线路由器也方便手机、平板之类的移动设置翻墙。
使用代理连接翻墙软件有两个意义:一是对于公司内网用户(需要设置代理服务器才能连接外网),他们翻墙就需要使用代理连接翻墙软件;二是可以使用国外代理连接翻墙软件的方法使被墙的翻墙软件复活。
VPN翻墙
PPTP、L2TP/IPsec类型的VPN不能使用代理连接;
OpenVPN可以使用代理连接(需要代理支持CONNECT方法),运行软件右键选“Proxy Settings”在打开的界面里选“Manual Configuration”就可以设置代理了(http代理只能代理tcp连接的、socks代理可能也能代理udp连接的)。另外在其配置文 件.ovpn里也可以配置代理,比如记事本打开.ovpn文件在最后添加
http-proxy-retry
http-proxy 165.193.102.220 80
(其中165.193.102.220换成你使用的代理地址,80是其端口)然后保存设置即可。
其他vpn看看它软件有没有代理服务器的设置吧。
共享你的VPN给局域网里的其他人可以通过本地开代理的方法实现
比如你可以使用3proxy来实现,修改它们的配置如下
nserver 8.8.8.8
nserver 8.8.4.4
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
daemon
#service
#external ip
internal 0.0.0.0
proxy -n -a -p3128
#pidfile pid.log
修改配置后运行软件,如果防火墙提示请允许放行,然后局域网里的其他电脑就可以设置浏览器代理地址为你的内网IP比如192.168.0.3之类,端口3128(可以自行在配置文件里修改),就可以翻墙了(在其官网下载,3proxy还可以开socks代理和加代理认证等高级设置,使用ccproxy可以参考这里)。
SSH翻墙
MyEntunnel/putty、Tunnelier使用代理连接可以参考http://igfw.net/archives/925和http://igfw.net/archives/1380 。
Tunnelier共享代理给局域网里的其他人可以参考http://igfw.net/archives/1310 (提供的是socks类型代理)
MyEntunnel/plink、Tunnelier如果不是使用动态端口转发而是转发本地端口到远程主机地址的端口转发,可以设置通道,MyEntunnel在配置文件里加入
ExecArguments=-N -ssh -2 -L 0.0.0.0:1984:localhost:3128
plink在参数里加入-L 0.0.0.0:1984:localhost:3128
Tunnelier把C2S Fwding里的改为Listen Interface里的127.0.0.1改为0.0.0.0(具体的转发设置参考http://igfw.net/archives/2483)
(其中3128为你ssh服务器上本地代理的监听端口,1984是你想设置的本地代理端口,提供的是http类型代理)
如果这些都不适合(有些ssh帐号禁止Tunnelier共享代理的设置),可以通过本地开代理的方法实现,以3proxy为例,修改配置
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
daemon
#service
auth iponly
allow *
parent 1000 socks5+ 127.0.0.1 2012
proxy -n -a -p3128
#pidfile pid.log
(其中2012为你本机ssh代理端口,3128为你想开的代理端口)修改配置后运行软件,如果防火墙提示请允许放行,然后局域网里的其他电脑就可以设置浏览器 http/https代理地址为你的内网IP比如192.168.0.3之类,端口3128即可翻墙。
Stunnel翻墙
设置代理连接,配置文件修改为
client = yes
[https]
accept = 127.0.0.1:本机代理端口
connect=代理服务器地址:端口
protocol=connect
protocolHost=远程stunnel服务器地址:端口
共享代理只需把配置文件里的127.0.0.1改成0.0.0.0
GAE、PHP、ASP翻墙
GAppProxy、GoAgent、hyk-proxy、APJP、webpage-tunnel、phpsocks、ASProxyWing
共享代理 配置文件里有127.0.0.1的改成0.0.0.0即可
设置代理连接:
GAppProxy    local_proxy = user:passwd@host:port
GoAgent    proxy = http://username:password@10.204.159.31:80
hyk-proxy 设置里有,图形界面我就不细说了
APJP  APJP.properties文件最下面有APJP_HTTP_PROXY_SERVER和APJP_HTTPS_PROXY_SERVER配置
webpage-tunnel  图形界面,高级设置里有配置
ASProxyWing  图形界面,设置里有配置
phpsocks  没有代理设置的可以使用FreeCap和Proxifier PE软件强制其通过代理,方法参考http://igfw.net/archives/743和http://igfw.net/archives/175 (Java程序需代理javaw进程)
Tor、自由门、逍遥游、无界、puff等
tor使用代理参考http://igfw.net/archives/3450,自由门的F3通道可以使用代理,puff免费版使用代理参考http://igfw.net/archives/666。
自由门、逍遥游共享代理可以参考http://igfw.net/archives/1945,tor只需把torrc里的SocksListenAddress 127.0.0.1或把polipo.conf里的proxyAddress = “127.0.0.1″里的127.0.0.1改成0.0.0.0
无界、puff可以考虑开代理以3proxy为例,修改配置文件
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
daemon
#service
auth iponly
allow *
parent 1000 http 127.0.0.1 1984
proxy -n -a -p3128
#pidfile pid.log
(其中1984为你本机http翻墙代理的端口,3128为你想开的代理端口)修改配置后运行软件,如果防火墙提示请允许放行,然后局域网里的其他电脑就可以设置浏览器 http/https代理地址为你的内网IP比如192.168.0.3之类,端口3128即可翻墙。
总结下,就是使用代理连接先看看其软件里有没有设置方法,如果没有就考虑借助FreeCap和 Proxifier PE等第三方软件实现;共享代理给局域网里(非局域网勿试)的其他人就是把原来监听的127.0.0.1改为监听0.0.0.0,如果配置文件里没有就考 虑使用第三方软件Privoxy、Polipo、3proxy、ccproxy之类的代理软件开代理实现(局域网里的其他电脑就可以设置浏览器代理地址为 你的内网IP比如192.168.0.3之类,端口根据配置文件而定;不过要注意安全,必要时设置代理认证)。

在终端输入 ssh -N -D 7070 -p 22 -g username@yourserver.com
ssh 加上 -g 可使局域网内其它机器使用我的机器做代理. 以我的情况为例:我在一个局域网内的 ip 为 192.168.1.16 , 当我联上服务器之后,我就可以使用 localhost:7070 做代理,同时我的局域网内的其它 ip 为 192.168.1.* 的机器,就可以用代理 192.168.1.16:7070 来穿墙啦。
这个是Linux下的办法,不知道mac下行不行。
GOAGENT由于其GAE本身问题不能真正解决https证书问题,电脑上也是通过导入伪造证书来解决的,如果你IPHONE浏览器也能导入其证书可能也能解决证书问题。
GOAGENT默认好像没有配置代理认证,不过我记得以前wallproxy可以认证。
c、实现共享上网。
例如某单位以如下方式上网:为员工分配一个IP和一个代理服务器的用户名密码,只有当IP与用户名密码匹配,员工才能通过指定的代理服务器上网。某办公室有3名员工,却只分配了1个IP和账号,当其中一名员工使用该IP和账号时,另外两人必须等待。
1、其实第一个人使用WallProxy如下配置,另两个人将代理设为分配的IP则可实现都能上网。
LISTEN_ADDR = (”, 8086)
# 假设代理服务器是192.168.0.254:8080,分配的用户名是11111,密码是22222
DIRECT_PROXY = [{'http':'11111:22222@192.168.0.254:8080'}]
def FindProxyForURL(remote, url, method, headers):
return DIRECT_PROXY[0]
2、不过隔壁办公室的人居然在偷偷使用这个代理,能否为代理加上密码呢?当然可以,修改一下即可:
LISTEN_ADDR = (”, 8086)
# 设置用户名密码为123456、123456
USER_PWD = ['123456:123456']
import base64
USER_PWD = ['Basic '+base64.b64encode(i) for i in USER_PWD]
del base64
DIRECT_PROXY = [{'http':'11111:22222@192.168.0.254:8080'}]
def FindProxyForURL(remote, url, method, headers):
# 对非本机开启密码
if remote != ’127.0.0.1′:
auth = headers.get(‘proxy-authorization’)
if auth != USER_PWD[0]:
return (407, None, ‘Proxy-Authenticate: Basic Realm=”WallProxy Authenticate”\r\n\r\n’)
return DIRECT_PROXY[0]
3、只有一个密码啊,能不能像单位分配的账号那样一个IP对应一个用户名密码呢?当然可以,再修改一下:
LISTEN_ADDR = (”, 8086)
# 设置三个账号
USER_PWD = ['123456:123456', '223456:654322', '32548:54554']
import base64
USER_PWD = ['Basic '+base64.b64encode(i) for i in USER_PWD]
del base64
DIRECT_PROXY = [{'http':'11111:22222@192.168.0.254:8080'}]
def FindProxyForURL(remote, url, method, headers):
# 对非本机开启密码
if remote != ’127.0.0.1′:
auth = headers.get(‘proxy-authorization’)
bAuth = False
# 192.168.1.1使用第一个账号,192.168.1.2使用第二个账号……
if (remote==’192.168.1.1′ and auth==USER_PWD[0]) or\
(remote==’192.168.1.2′ and auth==USER_PWD[1]) or\
(remote==’192.168.1.3′ and auth==USER_PWD[2]):
bAuth = True
if not bAuth:
return (407, None, ‘Proxy-Authenticate: Basic Realm=”WallProxy Authenticate”\r\n\r\n’)
return DIRECT_PROXY[0]
4、用密码太麻烦了,能不能直接搞个IP黑名单或白名单呢?因为Python的灵活,当然可以:
LISTEN_ADDR = (”, 8086)
# 设置IP白名单
ALLOW_IP = (’127.0.0.1′, ’192.168.1.1′, ’192.168.1.2′, ’192.168.1.3′)
DIRECT_PROXY = [{'http':'11111:22222@192.168.0.254:8080'}]
def FindProxyForURL(remote, url, method, headers):
# 如果IP不在白名单中,就拒绝代理
if remote not in ALLOW_IP:
return (403,)
return DIRECT_PROXY[0]
另外使用3proxy可以代理认证,可以使用IP和端口认证,也可以使用用户名和密码认证,具体你可以搜索下.