From b76610576a94420663321ec05e790012240d3d47 Mon Sep 17 00:00:00 2001 From: OttoMao Date: Tue, 5 Apr 2016 22:09:07 +0800 Subject: [PATCH] optimized tips for global proxy --- README.md | 3 +- bin.js | 4 +-- lib/{proxyManager.js => systemProxyMgr.js} | 6 ++-- proxy.js | 32 ++++++++++++---------- 4 files changed, 24 insertions(+), 21 deletions(-) rename lib/{proxyManager.js => systemProxyMgr.js} (96%) diff --git a/README.md b/README.md index 3c247ba..fe914cf 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Https features ---------------- After configuring rootCA, AnyProxy could help to decrypt https requests, whose approach is also called Man-In-The-Middle(MITM). -A guide about configuring https features is here : [https://github.com/alibaba/anyproxy/wiki/How-to-config-https-proxy](https://github.com/alibaba/anyproxy/wiki/How-to-config-https-proxy) +A guide about configuring https features is here : [https://github.com/alibaba/anyproxy/wiki/How-to-config-https-proxy](https://github.com/alibaba/anyproxy/wiki/How-to-config-https-proxy) HTTPS配置中文教程 : [https://github.com/alibaba/anyproxy/wiki/HTTPS%E7%9B%B8%E5%85%B3%E6%95%99%E7%A8%8B](https://github.com/alibaba/anyproxy/wiki/HTTPS%E7%9B%B8%E5%85%B3%E6%95%99%E7%A8%8B) @@ -120,6 +120,7 @@ var options = { socketPort : 8003, // optional, internal port for web socket, replace this when it is conflict with your own service throttle : 10, // optional, speed limit in kb/s disableWebInterface : false, //optional, set it when you don't want to use the web interface + setAsGlobalProxy : false, //set anyproxy as your system proxy silent : false //optional, do not print anything into terminal. do not set it when you are still debugging. }; new proxy.proxyServer(options); diff --git a/bin.js b/bin.js index d79aaac..df8c747 100755 --- a/bin.js +++ b/bin.js @@ -22,7 +22,7 @@ program .option('-i, --intercept', 'intercept(decrypt) https requests when root CA exists') .option('-s, --silent', 'do not print anything into terminal') .option('-c, --clear', 'clear all the tmp certificates') - .option('-o, --global', 'set as global proxy') + .option('-o, --global', 'set as global proxy for system') .option('install', '[alpha] install node modules') .parse(process.argv); @@ -92,7 +92,7 @@ if(program.clear){ webPort : program.web, rule : ruleModule, disableWebInterface : false, - globalProxy : program.global, + setAsGlobalProxy : program.global, interceptHttps : program.intercept, silent : program.silent }); diff --git a/lib/proxyManager.js b/lib/systemProxyMgr.js similarity index 96% rename from lib/proxyManager.js rename to lib/systemProxyMgr.js index a7766f7..f593680 100644 --- a/lib/proxyManager.js +++ b/lib/systemProxyMgr.js @@ -18,7 +18,6 @@ function execSync(cmd) { }; } - /** * proxy for CentOs * ------------------------------------------------------------------------ @@ -72,7 +71,7 @@ macProxyManager.getNetworkType = function() { macProxyManager.enableGlobalProxy = function(ip, port, proxyType) { if (!ip || !port) { - console.log('proxy server\'s ip and port are required'); + console.log('failed to set global proxy server.\n ip and port are required.'); return; }; @@ -137,12 +136,11 @@ var winProxyManager = {}; winProxyManager.enableGlobalProxy = function(ip, port) { if (!ip && !port) { - console.log('proxy server\'s ip and port are required'); + console.log('failed to set global proxy server.\n ip and port are required.'); return; }; return execSync( - // set proxy 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d ${ip}:${port} /f & ' .replace("${ip}", ip) diff --git a/proxy.js b/proxy.js index a407c22..93d995f 100644 --- a/proxy.js +++ b/proxy.js @@ -16,6 +16,7 @@ var http = require('http'), logUtil = require("./lib/log"), wsServer = require("./lib/wsServer"), webInterface = require("./lib/webInterface"), + SystemProxyMgr = require('./lib/systemProxyMgr'), inherits = require("util").inherits, util = require("./lib/util"), path = require("path"), @@ -69,8 +70,6 @@ function proxyServer(option){ logUtil.setPrintStatus(false); } - - if(!!option.interceptHttps){ default_rule.setInterceptFlag(true); @@ -158,37 +157,42 @@ function proxyServer(option){ callback(null); }, - + //set global proxy function(callback) { - - if (option.globalProxy) { - var result = require('./lib/proxyManager').enableGlobalProxy(ip.address(), proxyPort, proxyType == T_TYPE_HTTP ? "Http" : "Https"); - + if (option.setAsGlobalProxy) { + console.log('setting global proxy for you...'); + if(!/^win/.test(process.platform) && !process.env.SUDO_UID){ + console.log('sudo password may be required.'); + } + var result = SystemProxyMgr.enableGlobalProxy(ip.address(), proxyPort, proxyType == T_TYPE_HTTP ? "Http" : "Https"); if (result.status) { callback(result.stdout); } else { + if(/^win/.test(process.platform)){ + console.log('AnyProxy is now the default proxy for your system. It may take up to 1min to take effect.'); + } else{ + console.log('AnyProxy is now the default proxy for your system.'); + } callback(null); } - } else { callback(null); } - - }, //server status manager function(callback){ - process.on("exit",function(code){ logUtil.printLog('AnyProxy is about to exit with code: ' + code, logUtil.T_ERR); - if (option.globalProxy) { - var result = require('./lib/proxyManager').disableGlobalProxy(proxyType == T_TYPE_HTTP ? "Http" : "Https"); + if (option.setAsGlobalProxy) { + console.log('resigning global proxy...'); + var result = SystemProxyMgr.disableGlobalProxy(proxyType == T_TYPE_HTTP ? "Http" : "Https"); - //error occur if (result.status) { console.log(color.red(result.stdout)); + } else{ + console.log('global proxy resigned.'); } }