phpsocks5——PHP空间做Socks5代理服务器

现在的使用PHP空间做代理服务器的程序有很多限制,最主要是不能完美支持HTTPS。

大多数自称完美支持HTTPS的使用PHP空间做代理服务器的程序(比如apjp)仍旧需要导入HTTPS的SSL证书才能让浏览器不提示证书错误,降低了HTTPS的安全性。其中还有部分程序需要PHP空间支持Mcrypt,大多数PHP空间都不支持Mcrypt。

还有少数程序(比如hyk-proxy中的PHP部分)可以完美支持HTTPS,无须导入HTTPS证书,但需要外网环境使用,或者在路由器中设置端口映射,或者需要开启路由器的UPnP。

本程序没有上述限制,完美支持HTTPS,无须PHP空间支持Mcrypt,无须外网环境使用,也无须在路由器上设置端口映射,也无须开启路由器的UPnP。

由于本程序是Socks5类型的代理,所以不仅可以代理HTTP和HTTPS协议,甚至可以代理SSH、POP3、FTP(被动模式)等协议。如果需要HTTP(S)类型的代理服务器,可以结合本程序使用Polipo等程序转换为HTTP(S)类型的代理服务器。

本程序相比其他使用PHP空间做代理服务器的程序唯一的要求是需要MySQL数据库的支持。

本代理程序的网络数据传输采用简单异或加密,但足以绕过机器审查。

本程序客户端需要Java运行环境支持。可以去 http://www.java.com/ 下载安装Java。

本程序提供的是socks5类型的代理服务器,请确保客户端软件设置和使用的是socks5类型的代理服务器,而不是http类型的代理服务器。如果需要http类型的代理服务器,请搭配polipo转换为http代理使用。

建议在调试成功后手动将php中的debuginfo参数设置为False,并删除服务器端的log文件。debuginfo参数的具体意义可以参考Wiki页中的parameter_list页。

使用方法:

0、0.5版本开始不用按照以下6个步骤使用了,只需要运行deploy按照向导操作即可。之后运行run_with_polipo或run_without_polipo。推荐自己配置polipo。

1、修改socks5.php前5行代码的数据库配置,修改为PHP虚拟主机提供的数据库配置。

2、修改socks5.php的第7行secretkey变量,修改为一个有大小写英文字母和数字的随机密钥,最好不要有符号,长度建议超过4096个字节。

3、将socks5.php随机改名(扩展名不要变),然后传到服务器上去。

4、打开浏览器,访问这个php页(比如 http://www.myhostingspace.com/abc.php ),如果出现Create tables successfully,说明php配置正确(第二次访问会出现Create table N error,是正常情况,因为数据表已经存在了)。

5、修改Java目录下的phpsocks5.properties,serverurl修改为上述浏览器访问的地址(比如 http://www.myhostingspace.com/abc.php ),secretkey修改为socks5.php中的secretkey变量中的内容。

6、在Java目录下运行java phpsocks5.PhpSocks5(1、编译PhpSocks5.java后运行。2、确保在Java目录下运行,比如Java文件所在的目录结构为D:\myprojects\phpsocks5\java\phpsocks5\PhpSocks5.java,那么需要在D:\myprojects\phpsocks5\java中运行java phpsocks5.PhpSocks5),之后本地127.0.0.1的10080端口就是socks5代理。

如果想参与本项目,请联系我,也就是本项目的Owner。现在还需做的工作有:Windows和Linux环境程序打包、命令行和图形界面的向导方式部署、宣传、代码优化等工作。

源代码下载可以在本页中的External Links中找到。

现 在可以在Downloads中下载到打包好的程序了。使用之前按照上述6步操作(打包好的程序省去了编译Java的过程,直接运行run.bat,然后按 照前5步操作即可)。不管是否能用希望大家多多反馈,可以在Issues中反馈,说明一下情况和环境(比如PHP是运行在Apache还是IIS上的,是 Windows服务器还是Linux服务器等情况)。有人提BUG我就会尽力去解决

更新:

2011年2月8日:项目启动。0.1版本。


2011 年2月22日:0.2版本。增加了服务器端log,增加了客户端log,修复了有可能锁数据库的bug。如果还无法使用,请将客户端和服务器端的log发 到Issues中,谢谢大家帮忙测试。服务器端log会在php文件的同目录中生成phpsocks5_log.log文件。


2011年3月2日:0.2.5版本。增加了更多的log。如果无法正常使用本程序,把客户端和服务器端的log都发到Issues中。客户端和服务器端的log要一起发上来,方便查找问题。


2011 年3月5日:0.4版本。修复了大部分提示下载、空白页面、图片显示不全等问题。欢迎测试并反馈问题。反馈问题请描述问题具体现象,同时请附上客户端和服 务器端的log文件。另外建议secretkey超过4096字节(下载后的压缩包中secretkey只有几百字节,太短),这样才能比较安全。感谢大 家一直以来的支持!


2011年3月10日:增加了一个wiki页面,搜集各个php虚拟主机空间运行phpsocks5的情况。大家可以将自己的情况写到wiki页面中的comments中,我会整理到wiki页面中。


2011 年3月12日:发现大多数不稳定为Firefox使用socks5类型的代理服务器时超时太短造成的,所以推荐使用的时候搭配polipo转换为 http(s)代理,推荐IE、Firefox和Chrome都使用polipo转换后的http(s)代理。发布0.4.2版和0.4.2p 版,0.4.2版不带polipo,使用时需要自己配置polipo,配置方法可以参考0.4.2p版;0.4.2p版自带polipo,使用时设置浏览 器的http(s)代理地址为127.0.0.1、端口10088。如果会自己配置polipo,推荐使用0.4.2版自己配置polipo。


2011年3月17日:增加了一个wiki页面,详细解释了客户端和服务器端常用和不常用的参数作用。高级用户可以参照此wiki页修改参数。


2011 年3月19日:0.4.3版本。有Polipo和无Polipo版本合二为一,需要Polipo的运行run_with_polipo.bat,不需要 Polipo或自己配置Polipo的运行run_without_polipo.bat。推荐自己配置Polipo。增加了php服务器端 debuginfo参数,设为False后服务器端不会显示任何调试信息,也不会输出任何log。调试正常后可将debuginfo设为False。增加 了更多的客户端log,如需反馈,可以使用此版本返回log。反馈时同时带上服务器端log。


2011 年3月25日:0.5版本。增加了首次部署程序,运行deploy后根据向导操作即可,会修改php中的配置也会生成客户端的配置文件。Linux用户运 行run_with_polipo.sh之前先确保已经安装了Polipo,zip包中的Polipo只能在Windows下使用,Linux用户请自行 安装。


2011年5月 3日:0.5.4版本。增加php服务器和Java客户端之间的gzip压缩功能,减少流量;由于某些广告空间会丢失数据,但content-type为 image时不会加入广告,也就不会丢失数据,所以php返回类型改为image/png;由于PHP会在多请求同时执行时会卡在 start_session()永远不会往下执行的BUG,所以无法将PHP的cookie PHPSESSID改回start_session(),不知有谁能帮助解决此问题;客户端改为模拟XP IE6 with .NET 2/3/3.5,如果防火墙过滤此类User-Agent也就过滤了大部分IE6用户访问国外网站了,如果真如此,也算为了kill IE6贡献一部分力量吧。


预告下次 版本更新内容:1、部署程序增加Content-Type、$sesscookiekey、Host和User-Agent的修改,能增加删除HTTP Request Property和HTTP Response Header;2、Java客户端支持通过HTTP/HTTPS/Socks代理服务器与PHP服务器端进行连接并支持代理服务器认证(普通用户名+口令 方式、NTLM认证方式等);3、图形化界面。


大家要多多反馈啊,看到 有很多下载,但不管是能否使用反馈的都不多,你的举手之劳能改善这个软件,并且软件改善之后也会使你受益。大家还是要多多反馈哦,我自己的可测试php空 间不多,很多时候就需要大家帮忙反馈了,而且现在能在wiki页面中反馈各个php虚拟主机运行phpsocks5的情况了。

项目地址http://code.google.com/p/phpsocks5/

下载地址http://code.google.com/p/phpsocks5/downloads/list

  1. AS
    2011年6月14日21:50

    New ver:
    https://code.google.com/p/phpsocks5/downloads/list
    “phpsocks5_0.6.zip 0.6版本 Featured 4 days ago 4 days ago 152 KB ”

    (phpsocks5——PHP空间做Socks5代理服务器)

    • iGFW
      2011年6月14日22:03

      感谢支持。。。。。。。。

  2. AS
    2011年5月22日13:26

    php_hosting_support_phpsocks5_list_detail – phpsocks5 – PHP空间做Socks5代理服务器 – Google Project Hosting
    https://code.google.com/p/phpsocks5/wiki/php_hosting_support_phpsocks5_list_detail
    “php_hosting_support_phpsocks5_list_detail

    Featured
    Updated Mar 10, 2011 by lehui99

    #汇总各个php虚拟主机空间运行phpsocks5的情况
    Introduction

    本页汇总了各个php虚拟主机空间运行phpsocks5的情况,包括是否能运行、什么限制导致不能运行、运行稳定性是否良好、https是否能访问等信息。
    Details

    php虚拟主机供应商 php空间产品型号 此型号的php虚拟主机空间产品注册网址 是否能使用phpsocks5 如不能使用是由于什么限制 是否比较稳定 是否能访问https 备注
    你好万维网 JAVA 型虚拟主机(包含PHP) http://www.nihao.cn/hosting/java.asp 是,能正常访问国内网站 NA 90分 是 此空间为国内php空间,只是测试能否正常使用phpsocks5,不做翻墙代理

    欢迎大家在本页中反馈自己的情况,反馈中的稳定程度可以填写0到100,100为最稳定,0为最不稳定。如果不能运行,可以在Issues中反馈服务器端和客户端的log文件,方便我查看是由于什么限制导致不能运行,之后我会把不能运行的原因写道这个wiki页面。”

    parameter_list – phpsocks5 – PHP空间做Socks5代理服务器 – Google Project Hosting
    https://code.google.com/p/phpsocks5/wiki/parameter_list

    “parameter_list

    Featured
    Updated Apr 3, 2011 by lehui99

    #Java客户端和PHP服务器端常用和非常用的参数列表
    本wiki页作用

    主要解释各个参数的具体作用。
    参数具体作用详细解释
    Java客户端

    serverurl:服务器端php的可访问网址。
    secretkey:加密用的密钥,服务器端和客户端需要一致,现在版本加密使用简单异或操作,所以密钥长度建议超过单个数据包4096字节长度。
    prefix:为了避免服务器端由于某些情况(比如强制插入广告、php的warning提示等)返回非php程序返回的数据,所以加入了prefix和postfix,每次php返回数据时都在数据两端加上prefix和postfix,客户端收到后只使用prefix和postfix之间的数据。服务器端和客户端的prefix和postfix要求一致。
    postfix:为了避免服务器端由于某些情况(比如强制插入广告、php的warning提示等)返回非php程序返回的数据,所以加入了prefix和postfix,每次php返回数据时都在数据两端加上prefix和postfix,客户端收到后只使用prefix和postfix之间的数据。服务器端和客户端的prefix和postfix要求一致。
    localport:Java客户端侦听的端口,此端口即是socks5代理端口。
    localhost:Java客户端绑定的IP,默认为127.0.0.1,只能本机使用。如果需要非本机使用,可以改成0.0.0.0。

    Polipo

    polipohost:Polipo绑定的IP,默认为127.0.0.1,只能本机使用。如果需要非本机使用,可以改成0.0.0.0。
    polipoport:Polipo侦听的端口,此端口即是http和https代理端口。

    PHP服务器端

    dbhost:MySQL数据库的地址。
    dbport:MySQL数据库的端口,默认为3306。
    dbuser:MySQL数据库的用户名。
    dbpass:MySQL数据库的口令。
    dbname:MySQL数据库的库名。
    secretkey:加密用的密钥,服务器端和客户端需要一致,现在版本加密使用简单异或操作,所以密钥长度建议超过单个数据包4096字节长度。
    debuginfo:为True时显示调试信息,打印log;为False时不显示调试信息,不打印log。调试信息现阶段包括首次使用浏览器访问此php时创建表是否成功,如果debuginfo为False则无论创建表是否成功都不会显示,防止防火墙侦测到特定的信息进而进行屏蔽,如需知道数据库表是否创建成功可以自己连接到MySQL数据库服务器上查看是否有此代理创建的3个表。不打印log则不会生成log文件,这样也就无法通过人肉探测到此代理的存在。人肉探测此代理的方法可以是尝试下载phpsocks5_log.log文件,如果能下载则有此代理,如果无此文件则无此代理。所以不生成log文件将无法通过此手段探测到此代理。不打印log还能节省服务器资源。
    prefix:为了避免服务器端由于某些情况(比如强制插入广告、php的warning提示等)返回非php程序返回的数据,所以加入了prefix和postfix,每次php返回数据时都在数据两端加上prefix和postfix,客户端收到后只使用prefix和postfix之间的数据。服务器端和客户端的prefix和postfix要求一致。
    postfix:为了避免服务器端由于某些情况(比如强制插入广告、php的warning提示等)返回非php程序返回的数据,所以加入了prefix和postfix,每次php返回数据时都在数据两端加上prefix和postfix,客户端收到后只使用prefix和postfix之间的数据。服务器端和客户端的prefix和postfix要求一致。
    dbprefix:作用有2:1、服务器端php程序建MySQL数据表和操作数据表时的表名前缀,默认为“phpsocks5_”,所以建的3个表和使用的时候都是“phpsocks5_”开头的。可以更改此前缀,更改后需要重新使用浏览器访问服务器端的php网址建表。2、此参数现在还用作log文件的前缀,更改此参数也会使log文件的前缀改变。
    invstep:由于socks5代理协议为数据包转发协议,所以php服务器端需要轮询(php的限制无法做到同时等待发送数据的到达和接收数据)数据包的发送和接收。所以需要控制轮询时间,不能太短也不能太长:太短服务器负担太重,太长客户端延迟太大。invstep控制在本次轮询时如果无数据发送和接收,那么下次轮询间隔时间增加多少;invmax控制轮询时间最大间隔多少,如果当前轮询的时间间隔超过了invmax,会把当前轮询的时间间隔设为invmax。
    invmax:由于socks5代理协议为数据包转发协议,所以php服务器端需要轮询(php的限制无法做到同时等待发送数据的到达和接收数据)数据包的发送和接收。所以需要控制轮询时间,不能太短也不能太长:太短服务器负担太重,太长客户端延迟太大。invstep控制在本次轮询时如果无数据发送和接收,那么下次轮询间隔时间增加多少;invmax控制轮询时间最大间隔多少,如果当前轮询的时间间隔超过了invmax,会把当前轮询的时间间隔设为invmax。
    version:协议版本号,请不要修改此参数。如果客户端和服务器端通讯的协议有变,那么会改变版本号,这样老客户端连接新服务器时将得到版本错误的提示。客户端的版本号直接写在了Java程序中,不可在客户端的配置文件中修改。服务器端和客户端的版本号一致才能正常使用phpsocks5。 “

  3. AS
    2011年5月15日20:59

    New ver.:phpsocks5_0.5.4.zip 0.5.4版本 Featured May 2 152 KB

    Downloads – phpsocks5 – PHP空间做Socks5代理服务器 – Google Project Hosting
    https://code.google.com/p/phpsocks5/downloads/list

    • iGFW
      2011年5月15日21:59

      感谢支持,这个我更新下原来的文章。