autoproxy.pac解密
加密后浏览网站效率可能会降低一些.Opera不被支持
Google Code项目地址 点击进入
附上代码 自由发挥
<?php
/*
* This is a php implementation of autoproxy2pac
*/
function reg_encode($str) {
$tmp_str=$str;
$tmp_str=str_replace('/', "\\/", $tmp_str);
$tmp_str=str_replace('.', "\\.", $tmp_str);
$tmp_str=str_replace(':', "\\:", $tmp_str);
$tmp_str=str_replace('%', "\\%", $tmp_str);
$tmp_str=str_replace('*', ".*", $tmp_str);
$tmp_str=str_replace('-', "\\-", $tmp_str);
$tmp_str=str_replace('&', "\\&", $tmp_str);
$tmp_str=str_replace('?', "\\?", $tmp_str);
$tmp_str=str_replace('+', "\\+", $tmp_str);
return $tmp_str;
}
function get_pac($proxy_type, $proxy_host, $proxy_port, $proxy_google) {
$gfwlist_url='http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt';
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $gfwlist_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$gfwlist_raw=curl_exec($ch);
curl_close($ch);
if(isset($_GET['raw']))
{
header('Content-Type: text/plain');
echo $gfwlist_raw;
exit(0);
}
$rulelist=base64_decode($gfwlist_raw);
$gfwlist=explode("\n", $rulelist);
//echo $proxy_google;
if($proxy_google=="true") {
$gfwlist[]='.google.com';
}
$pac_content='//Generated by ptp gfwlist2pac'."\n";
$find_function_content.='function FindProxyForURL(url, host){var PROXY = "'.$proxy_type.' '.$proxy_host.':'.$proxy_port.'";var DEFAULT = "DIRECT";';
foreach($gfwlist as $index=>$rule){
if(empty($rule))
continue;
else if(substr($rule,0,1)=='!' || substr($rule,0,1)=='[')
continue;
$return_proxy='PROXY';
if(substr($rule,0,2)=='@@')
{
$rule=substr($rule,2);
$return_proxy="DEFAULT";
}
if(substr($rule,0,2)=='||')
{
$rule_reg = "^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?".reg_encode(substr($rule,2));
}
else if(substr($rule,0,1)=='|')
{
$rule_reg = "^".reg_encode(substr($rule,1));
}
else if(substr($rule,0,1)=='/'&&substr($rule,-1)=='/')
{
$rule_reg = substr($rule,1,strlen($rule)-2);
}
else
{
$rule_reg=reg_encode($rule);
}
if(eregi("\|$", $rule_reg))
{
$rule_reg=substr($rule_reg,0,strlen($rule_reg)-1)."$";
}
//echo '//'.$rule_reg."\n\t";
$find_function_content.= 'if(/'.$rule_reg.'/i.test(url)) return '.$return_proxy.';';
}
$find_function_content.='return DEFAULT;'."}";
$pac_content.='eval(decode64("'.base64_encode($find_function_content).'"));';
//$pac_content.=$find_function_content;
$pac_content.="\n";
$pac_content.='function decode64(_1){var _2="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var _3="";var _4,_5,_6;var _7,_8,_9,_a;var i=0;_1=_1.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{_7=_2.indexOf(_1.charAt(i++));_8=_2.indexOf(_1.charAt(i++));_9=_2.indexOf(_1.charAt(i++));_a=_2.indexOf(_1.charAt(i++));_4=(_7<<2)|(_8>>4);_5=((_8&15)<<4)|(_9>>2);_6=((_9&3)<<6)|_a;_3=_3+String.fromCharCode(_4);if(_9!=64){_3=_3+String.fromCharCode(_5);}if(_a!=64){_3=_3+String.fromCharCode(_6);}}while(i<_1.length);return _3;}';
return $pac_content;
}
function main() {
if($_GET['proxy_name']=='free-gate') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='8580';
}else if($_GET['proxy_name']=='tor') {
$proxy_type='SOCKS5';
$proxy_host='127.0.0.1';
$proxy_port='9050';
}else if($_GET['proxy_name']=='ssh-d') {
$proxy_type='SOCKS5';
$proxy_host='127.0.0.1';
$proxy_port='7070';
}else if($_GET['proxy_name']=='gappproxy') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='8000';
}else if($_GET['proxy_name']=='jap') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='4001';
}else if($_GET['proxy_name']=='your-freedom') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='8080';
}else if($_GET['proxy_name']=='puff') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='1984';
}else if($_GET['proxy_name']=='privoxy') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='8118';
}else if($_GET['proxy_name']=='wu-jie') {
$proxy_type='PROXY';
$proxy_host='127.0.0.1';
$proxy_port='9666';
} else {
if($_GET['proxy_type']=='http')
$prroxy_type='PROXY';
else if ($_GET['proxy_type']=='socks')
$proxy_type='SOCKS5';
else
$proxy_type=$_GET['proxy_type'];
$proxy_host=$_GET['proxy_host'];
$proxy_port=$_GET['proxy_port'];
}
$proxy_google = $_GET['proxy_google'];
$pac = get_pac($proxy_type, $proxy_host, $proxy_port, $proxy_google);
header('Content-Type: text/plain');
header('Content-Length: '.strlen($pac));
echo $pac;
}
main();
?>
|
原文:http://blog.xiaohai.co/archives/autoproxy-pac%E8%A7%A3%E5%AF%86/

我现在最需要的是’http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt’这个清单里面的东西,有可能把它明文读出来不?
文中的方法貌似就可以。
弱弱地问一下,应该怎么用呢?是上传到自己的PHP主机么?
应该是,大概是这样,在http://code.google.com/p/phptunnelproxy/downloads/list下载ptpremote-1.0.109.tar.bz2文件,解压把里面的pac.php上传到你的php空间访问pac.php网址看看。
谢谢,可以用啦 (这东西真坑爹,项目主页没有说明,我访问了index.php和remote.php,就是没想到访问pac.php 囧)
这个项目主要是用php空间做代理翻墙的,这个功能只是它附加的。
它只是base64编码了而已。找个在线base64解码的就可以了。
这个明白的