代理的远程部分
既然要,肯定要有一台墙外主机。为了配合加密,以及 HTTP/HTTPS 协议代理,需要编译有 mcrypt 和 curl 的 PHP;在如今我估计这应该都属于web主机标配环境.
如果是文本数据,就加密后返回;如果非文本数据,就不加密了。返回给本地代理以第一个字符是"0" or "1"来指示接下来的数据是否经过加密。
$PASSWORD = "yourpasswordhere";
$pw_md5 = md5($PASSWORD, true);
$key = substr($pw_md5, 0, 8);
$iv = substr($pw_md5, 8, 8);
$input = file_get_contents("php://input");
$td = mcrypt_module_open('des', '', 'cbc', '');
mcrypt_generic_init($td, $key, $iv);
if (strlen($input) > 0 && $input % 8 == 0) {
$input = strip_pkcs7("des", "cbc", mdecrypt_generic($td, $input));
$req = explode("\r\n\r\n", $input, 3);
$rawreqline = explode(" ", $req[0]);
$url = parse_url($rawreqline[1]);
$_headers = explode("\r\n", trim($req[1]));
//$_headers[count($_headers)] = "X-Forwarded-For: ".$_SERVER['REMOTE_ADDR'];
if ($url["scheme"] == "http" || $url["scheme"] == "https") {
$ch = curl_init($rawreqline[1]);
/* avoid HTTP/1.1 Transfer-Encoding: chunked */
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $_headers);
curl_setopt($ch, CURLOPT_HEADER, 1);
if ($url["scheme"] == "https") {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($rawreqline[0] == "POST" && count($req) == 3) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req[2]);
}
$data = curl_exec($ch);
curl_close($ch);
}
$text_mode = "0";
$res = explode("\r\n\r\n", $data, 2);
$header = explode("\r\n", $res[0], 2); // STATUS HEADER
$headers = explode("\r\n", $header[1]);
foreach ($headers as $hline) {
$h = explode(":", $hline, 2);
$k = strtolower(trim($h[0]));
if ($k == "content-type" && strpos(strtolower(trim($h[1])), "text/") === 0) {
$text_mode = "1";
break;
}
}
if ($text_mode == "1") {
mcrypt_generic_deinit($td);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, padding_pkcs7("des", "cbc", $data));
}
$data = $text_mode . $data;
}
?>=$data?>
建议继续学习:
- 让安卓手机通过代理翻墙的方法 (阅读:7157)
- 关于 SOCKS 代理的远端 DNS 解析 (阅读:6420)
- 代理的加密部分 (阅读:4514)
- HTTP 正向代理与反向代理 (阅读:3901)
- 关于不得不在python中使用代理访问网络的方法 (阅读:3750)
- 将远程共享文件夹挂载到linux本地目录 (阅读:3607)
- nginx.conf控制指定的代理ip和ip访问的设置手记 (阅读:3490)
- 关于http代理 (阅读:3321)
- 使用 Perl 实现 HTTP 代理 (阅读:2895)
- socks5代理服务器的配置 (阅读:2895)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:qyb 来源: BT的花 blogs
- 标签: 代理 远程
- 发布时间:2010-04-01 08:56:51
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] android 开发入门
- [53] 图书馆的世界纪录
- [52] Go Reflect 性能
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [49] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑