From 5b52859900906269d8a25161f1a99821e1f406b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E8=BE=B0?= Date: Sun, 3 Apr 2016 02:04:27 +0800 Subject: [PATCH 1/7] add global proxy --- bin.js | 4 +- lib/proxyManager.js | 137 ++++++++++++++++++++++++++++++++++++++++++++ proxy.js | 19 ++++++ 3 files changed, 159 insertions(+), 1 deletion(-) mode change 100644 => 100755 bin.js create mode 100644 lib/proxyManager.js diff --git a/bin.js b/bin.js old mode 100644 new mode 100755 index 6130849..d79aaac --- a/bin.js +++ b/bin.js @@ -22,6 +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('install', '[alpha] install node modules') .parse(process.argv); @@ -67,7 +68,7 @@ if(program.clear){ logUtil.printLog("failed to load rule file :" + e.toString(), logUtil.T_ERR); } }else{ - //a feature for donghua.yan + //a feature for donghua.yan //read rule file from a specific position (function(){ try{ @@ -91,6 +92,7 @@ if(program.clear){ webPort : program.web, rule : ruleModule, disableWebInterface : false, + globalProxy : program.global, interceptHttps : program.intercept, silent : program.silent }); diff --git a/lib/proxyManager.js b/lib/proxyManager.js new file mode 100644 index 0000000..18c6937 --- /dev/null +++ b/lib/proxyManager.js @@ -0,0 +1,137 @@ +var child_process = require('child_process'); + +var networkTypes = ['Ethernet', 'Thunderbolt Ethernet', 'Wi-Fi']; + +function execSync(cmd) { + var stdout, status = 0; + + try { + stdout = child_process.execSync(cmd); + } catch (err) { + stdout = err.stdout; + status = err.status; + } + + return { + stdout: stdout.toString(), + status: status + }; +} + + +/** + * ------------------------------------------------------------------------ + * linux like system proxy manager + * ------------------------------------------------------------------------ + */ + +var unixLikeSysProxyManager = {}; + +unixLikeSysProxyManager.getNetworkType = function() { + + for (var i = 0; i < networkTypes.length; i++) { + + var + type = networkTypes[i], + result = execSync('networksetup -getwebproxy ' + type); + + if (result.status === 0) { + unixLikeSysProxyManager.networkType = type; + return type; + } + } + + throw new Error('Unknown network type'); +}; + +unixLikeSysProxyManager.enableGlobalProxy = function(ip, port) { + + if (!ip && !port) { + console.log('proxy server\'s ip and port is required'); + return; + }; + + var networkType = unixLikeSysProxyManager.networkType || unixLikeSysProxyManager.getNetworkType(); + + var result = execSync( + + // set http proxy + 'sudo networksetup -setwebproxy ${networkType} ${ip} ${port}; ' + .replace("${networkType}", networkType) + .replace("${ip}", ip) + .replace("${port}", port) + + + // set https proxy + 'sudo networksetup -setsecurewebproxy ${networkType} ${ip} ${port}' + .replace("${networkType}", networkType) + .replace("${ip}", ip) + .replace("${port}", port)); + + return result; +}; + +unixLikeSysProxyManager.disableGlobalProxy = function() { + var networkType = unixLikeSysProxyManager.networkType || unixLikeSysProxyManager.getNetworkType(); + + var result = execSync( + + // disable http proxy + 'networksetup -setwebproxystate ${networkType} off; ' + .replace(/\$\{networkType\}/g, networkType) + + + // disable https proxy + 'networksetup -setsecurewebproxystate ${networkType} off' + .replace(/\$\{networkType\}/g, networkType)); + + return result; +}; + +unixLikeSysProxyManager.getProxyState = function() { + var networkType = unixLikeSysProxyManager.networkType || unixLikeSysProxyManager.getNetworkType(); + var result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType)); + + return result; +}; + + + +/** + * ------------------------------------------------------------------------ + * windows proxy manager + * ------------------------------------------------------------------------ + */ + +var winSysProxyManager = {}; + +winSysProxyManager.enableGlobalProxy = function(ip, port) { + + if (!ip && !port) { + console.log('proxy server\'s ip and port is 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) + .replace("${port}", port) + + + // enable proxy + 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f'); + +}; + +winSysProxyManager.disableGlobalProxy = function() { + return execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f'); +}; + +winSysProxyManager.getProxyState = function() { + return ''; +}; + +winSysProxyManager.getNetworkType = function() { + return ''; +}; + +module.exports = /^win/.test(process.platform) ? winSysProxyManager : unixLikeSysProxyManager; diff --git a/proxy.js b/proxy.js index bfcdace..1634625 100644 --- a/proxy.js +++ b/proxy.js @@ -158,11 +158,30 @@ function proxyServer(option){ callback(null); }, + + function(callback) { + + if (option.globalProxy) { + var result = require('./lib/proxyManager').enableGlobalProxy(ip.address(), proxyPort); + + if (result.status) { + console.log(color.red(result.stdout)); + } + } + + }, + //server status manager function(callback){ process.on("exit",function(code){ logUtil.printLog('AnyProxy is about to exit with code: ' + code, logUtil.T_ERR); + var result = require('./lib/proxyManager').disableGlobalProxy(); + + if (result.status) { + console.log(color.red(result.stdout)); + } + process.exit(); }); From a467f23ab00877da28adeb510c9042005a95caba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E8=BE=B0?= Date: Sun, 3 Apr 2016 02:10:48 +0800 Subject: [PATCH 2/7] disable global proxy when user exit anyproxy by pressing ctrl/cmd + c --- lib/proxyManager.js | 4 ++-- proxy.js | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/proxyManager.js b/lib/proxyManager.js index 18c6937..7ddeacb 100644 --- a/lib/proxyManager.js +++ b/lib/proxyManager.js @@ -76,11 +76,11 @@ unixLikeSysProxyManager.disableGlobalProxy = function() { var result = execSync( // disable http proxy - 'networksetup -setwebproxystate ${networkType} off; ' + 'sudo networksetup -setwebproxystate ${networkType} off; ' .replace(/\$\{networkType\}/g, networkType) + // disable https proxy - 'networksetup -setsecurewebproxystate ${networkType} off' + 'sudo networksetup -setsecurewebproxystate ${networkType} off' .replace(/\$\{networkType\}/g, networkType)); return result; diff --git a/proxy.js b/proxy.js index 1634625..89896e5 100644 --- a/proxy.js +++ b/proxy.js @@ -165,10 +165,16 @@ function proxyServer(option){ var result = require('./lib/proxyManager').enableGlobalProxy(ip.address(), proxyPort); if (result.status) { - console.log(color.red(result.stdout)); + callback(result.stdout); + } else { + callback(null); } + + } else { + callback(null); } + }, //server status manager @@ -185,6 +191,11 @@ function proxyServer(option){ process.exit(); }); + //exit cause ctrl+c + process.on("SIGINT", function() { + process.exit(); + }); + process.on("uncaughtException",function(err){ logUtil.printLog('Caught exception: ' + (err.stack || err), logUtil.T_ERR); process.exit(); From 052a75f1208b9ed72fb26e4c062fcd19d06ba77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E8=BE=B0?= Date: Mon, 4 Apr 2016 22:42:20 +0800 Subject: [PATCH 3/7] update comments --- lib/proxyManager.js | 57 ++++++++++++++++++++++++++++++++------------- proxy.js | 10 +++++--- 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/lib/proxyManager.js b/lib/proxyManager.js index 7ddeacb..e3a3f62 100644 --- a/lib/proxyManager.js +++ b/lib/proxyManager.js @@ -20,14 +20,39 @@ function execSync(cmd) { /** + * proxy for Centos * ------------------------------------------------------------------------ - * linux like system proxy manager + * + * file: ~/.bash_profile + * + * http_proxy=http://proxy_server_address:port + * export no_proxy=localhost,127.0.0.1,192.168.0.34 + * export http_proxy * ------------------------------------------------------------------------ */ -var unixLikeSysProxyManager = {}; +/** + * proxy for Ubuntu + * ------------------------------------------------------------------------ + * + * file: /etc/environment + * more info: http://askubuntu.com/questions/150210/how-do-i-set-systemwide-proxy-servers-in-xubuntu-lubuntu-or-ubuntu-studio + * + * http_proxy=http://proxy_server_address:port + * export no_proxy=localhost,127.0.0.1,192.168.0.34 + * export http_proxy + * ------------------------------------------------------------------------ + */ -unixLikeSysProxyManager.getNetworkType = function() { +/** + * ------------------------------------------------------------------------ + * mac proxy manager + * ------------------------------------------------------------------------ + */ + +var macProxyManager = {}; + +macProxyManager.getNetworkType = function() { for (var i = 0; i < networkTypes.length; i++) { @@ -36,7 +61,7 @@ unixLikeSysProxyManager.getNetworkType = function() { result = execSync('networksetup -getwebproxy ' + type); if (result.status === 0) { - unixLikeSysProxyManager.networkType = type; + macProxyManager.networkType = type; return type; } } @@ -44,14 +69,14 @@ unixLikeSysProxyManager.getNetworkType = function() { throw new Error('Unknown network type'); }; -unixLikeSysProxyManager.enableGlobalProxy = function(ip, port) { +macProxyManager.enableGlobalProxy = function(ip, port) { if (!ip && !port) { console.log('proxy server\'s ip and port is required'); return; }; - var networkType = unixLikeSysProxyManager.networkType || unixLikeSysProxyManager.getNetworkType(); + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); var result = execSync( @@ -70,8 +95,8 @@ unixLikeSysProxyManager.enableGlobalProxy = function(ip, port) { return result; }; -unixLikeSysProxyManager.disableGlobalProxy = function() { - var networkType = unixLikeSysProxyManager.networkType || unixLikeSysProxyManager.getNetworkType(); +macProxyManager.disableGlobalProxy = function() { + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); var result = execSync( @@ -86,8 +111,8 @@ unixLikeSysProxyManager.disableGlobalProxy = function() { return result; }; -unixLikeSysProxyManager.getProxyState = function() { - var networkType = unixLikeSysProxyManager.networkType || unixLikeSysProxyManager.getNetworkType(); +macProxyManager.getProxyState = function() { + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); var result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType)); return result; @@ -101,9 +126,9 @@ unixLikeSysProxyManager.getProxyState = function() { * ------------------------------------------------------------------------ */ -var winSysProxyManager = {}; +var winProxyManager = {}; -winSysProxyManager.enableGlobalProxy = function(ip, port) { +winProxyManager.enableGlobalProxy = function(ip, port) { if (!ip && !port) { console.log('proxy server\'s ip and port is required'); @@ -122,16 +147,16 @@ winSysProxyManager.enableGlobalProxy = function(ip, port) { }; -winSysProxyManager.disableGlobalProxy = function() { +winProxyManager.disableGlobalProxy = function() { return execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f'); }; -winSysProxyManager.getProxyState = function() { +winProxyManager.getProxyState = function() { return ''; }; -winSysProxyManager.getNetworkType = function() { +winProxyManager.getNetworkType = function() { return ''; }; -module.exports = /^win/.test(process.platform) ? winSysProxyManager : unixLikeSysProxyManager; +module.exports = /^win/.test(process.platform) ? winProxyManager : macProxyManager; diff --git a/proxy.js b/proxy.js index 89896e5..a80da8c 100644 --- a/proxy.js +++ b/proxy.js @@ -182,10 +182,14 @@ function proxyServer(option){ process.on("exit",function(code){ logUtil.printLog('AnyProxy is about to exit with code: ' + code, logUtil.T_ERR); - var result = require('./lib/proxyManager').disableGlobalProxy(); - if (result.status) { - console.log(color.red(result.stdout)); + if (option.globalProxy) { + var result = require('./lib/proxyManager').disableGlobalProxy(); + + //error occur + if (result.status) { + console.log(color.red(result.stdout)); + } } process.exit(); From bdca110890496a474fd4a663ff75c366dd51bf49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E8=BE=B0?= Date: Mon, 4 Apr 2016 22:52:31 +0800 Subject: [PATCH 4/7] tweak --- lib/proxyManager.js | 130 ++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 64 deletions(-) diff --git a/lib/proxyManager.js b/lib/proxyManager.js index e3a3f62..5e8b02c 100644 --- a/lib/proxyManager.js +++ b/lib/proxyManager.js @@ -3,19 +3,19 @@ var child_process = require('child_process'); var networkTypes = ['Ethernet', 'Thunderbolt Ethernet', 'Wi-Fi']; function execSync(cmd) { - var stdout, status = 0; + var stdout, status = 0; - try { - stdout = child_process.execSync(cmd); - } catch (err) { - stdout = err.stdout; - status = err.status; - } + try { + stdout = child_process.execSync(cmd); + } catch (err) { + stdout = err.stdout; + status = err.status; + } - return { - stdout: stdout.toString(), - status: status - }; + return { + stdout: stdout.toString(), + status: status + }; } @@ -54,68 +54,68 @@ var macProxyManager = {}; macProxyManager.getNetworkType = function() { - for (var i = 0; i < networkTypes.length; i++) { + for (var i = 0; i < networkTypes.length; i++) { - var - type = networkTypes[i], - result = execSync('networksetup -getwebproxy ' + type); + var + type = networkTypes[i], + result = execSync('networksetup -getwebproxy ' + type); - if (result.status === 0) { - macProxyManager.networkType = type; - return type; - } - } + if (result.status === 0) { + macProxyManager.networkType = type; + return type; + } + } - throw new Error('Unknown network type'); + throw new Error('Unknown network type'); }; macProxyManager.enableGlobalProxy = function(ip, port) { - if (!ip && !port) { - console.log('proxy server\'s ip and port is required'); - return; - }; + if (!ip && !port) { + console.log('proxy server\'s ip and port is required'); + return; + }; - var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); - var result = execSync( + var result = execSync( - // set http proxy - 'sudo networksetup -setwebproxy ${networkType} ${ip} ${port}; ' - .replace("${networkType}", networkType) - .replace("${ip}", ip) - .replace("${port}", port) + + // set http proxy + 'sudo networksetup -setwebproxy ${networkType} ${ip} ${port}; ' + .replace("${networkType}", networkType) + .replace("${ip}", ip) + .replace("${port}", port) + - // set https proxy - 'sudo networksetup -setsecurewebproxy ${networkType} ${ip} ${port}' - .replace("${networkType}", networkType) - .replace("${ip}", ip) - .replace("${port}", port)); + // set https proxy + 'sudo networksetup -setsecurewebproxy ${networkType} ${ip} ${port}' + .replace("${networkType}", networkType) + .replace("${ip}", ip) + .replace("${port}", port)); - return result; + return result; }; macProxyManager.disableGlobalProxy = function() { - var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); - var result = execSync( + var result = execSync( - // disable http proxy - 'sudo networksetup -setwebproxystate ${networkType} off; ' - .replace(/\$\{networkType\}/g, networkType) + + // disable http proxy + 'sudo networksetup -setwebproxystate ${networkType} off; ' + .replace(/\$\{networkType\}/g, networkType) + - // disable https proxy - 'sudo networksetup -setsecurewebproxystate ${networkType} off' - .replace(/\$\{networkType\}/g, networkType)); + // disable https proxy + 'sudo networksetup -setsecurewebproxystate ${networkType} off' + .replace(/\$\{networkType\}/g, networkType)); - return result; + return result; }; macProxyManager.getProxyState = function() { - var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); - var result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType)); + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); + var result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType)); - return result; + return result; }; @@ -123,6 +123,8 @@ macProxyManager.getProxyState = function() { /** * ------------------------------------------------------------------------ * windows proxy manager + * + * netsh does not alter the settings for IE * ------------------------------------------------------------------------ */ @@ -130,33 +132,33 @@ var winProxyManager = {}; winProxyManager.enableGlobalProxy = function(ip, port) { - if (!ip && !port) { - console.log('proxy server\'s ip and port is required'); - return; - }; + if (!ip && !port) { + console.log('proxy server\'s ip and port is required'); + return; + }; - return execSync( + 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) - .replace("${port}", port) + + // set proxy + 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyServer /t REG_SZ /d ${ip}:${port} /f & ' + .replace("${ip}", ip) + .replace("${port}", port) + - // enable proxy - 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f'); + // enable proxy + 'reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f'); }; winProxyManager.disableGlobalProxy = function() { - return execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f'); + return execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f'); }; winProxyManager.getProxyState = function() { - return ''; + return ''; }; winProxyManager.getNetworkType = function() { - return ''; + return ''; }; module.exports = /^win/.test(process.platform) ? winProxyManager : macProxyManager; From c3e67ebcb1ac8808a4399f4045ca183fb4e0d960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E8=BE=B0?= Date: Tue, 5 Apr 2016 20:04:11 +0800 Subject: [PATCH 5/7] enable global proxy depends on options.type --- lib/proxyManager.js | 54 ++++++++++++++++++++++++--------------------- proxy.js | 4 ++-- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/lib/proxyManager.js b/lib/proxyManager.js index 5e8b02c..a7766f7 100644 --- a/lib/proxyManager.js +++ b/lib/proxyManager.js @@ -20,7 +20,7 @@ function execSync(cmd) { /** - * proxy for Centos + * proxy for CentOs * ------------------------------------------------------------------------ * * file: ~/.bash_profile @@ -69,46 +69,50 @@ macProxyManager.getNetworkType = function() { throw new Error('Unknown network type'); }; -macProxyManager.enableGlobalProxy = function(ip, port) { +macProxyManager.enableGlobalProxy = function(ip, port, proxyType) { - if (!ip && !port) { - console.log('proxy server\'s ip and port is required'); + if (!ip || !port) { + console.log('proxy server\'s ip and port are required'); return; }; + proxyType = proxyType || 'http'; + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); - var result = execSync( + return /^http$/i.test(proxyType) ? // set http proxy - 'sudo networksetup -setwebproxy ${networkType} ${ip} ${port}; ' - .replace("${networkType}", networkType) - .replace("${ip}", ip) - .replace("${port}", port) + + execSync( + 'networksetup -setwebproxy ${networkType} ${ip} ${port}' + .replace("${networkType}", networkType) + .replace("${ip}", ip) + .replace("${port}", port)) : // set https proxy - 'sudo networksetup -setsecurewebproxy ${networkType} ${ip} ${port}' - .replace("${networkType}", networkType) - .replace("${ip}", ip) - .replace("${port}", port)); + execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port}' + .replace("${networkType}", networkType) + .replace("${ip}", ip) + .replace("${port}", port)); - return result; }; -macProxyManager.disableGlobalProxy = function() { +macProxyManager.disableGlobalProxy = function(proxyType) { + proxyType = proxyType || 'http'; + var networkType = macProxyManager.networkType || macProxyManager.getNetworkType(); - var result = execSync( + return /^http$/i.test(proxyType) ? - // disable http proxy - 'sudo networksetup -setwebproxystate ${networkType} off; ' - .replace(/\$\{networkType\}/g, networkType) + + // set http proxy + execSync( + 'networksetup -setwebproxystate ${networkType} off' + .replace("${networkType}", networkType)) : - // disable https proxy - 'sudo networksetup -setsecurewebproxystate ${networkType} off' - .replace(/\$\{networkType\}/g, networkType)); - - return result; + // set https proxy + execSync( + 'networksetup -setsecurewebproxystate ${networkType} off' + .replace("${networkType}", networkType)); }; macProxyManager.getProxyState = function() { @@ -133,7 +137,7 @@ var winProxyManager = {}; winProxyManager.enableGlobalProxy = function(ip, port) { if (!ip && !port) { - console.log('proxy server\'s ip and port is required'); + console.log('proxy server\'s ip and port are required'); return; }; diff --git a/proxy.js b/proxy.js index a80da8c..a407c22 100644 --- a/proxy.js +++ b/proxy.js @@ -162,7 +162,7 @@ function proxyServer(option){ function(callback) { if (option.globalProxy) { - var result = require('./lib/proxyManager').enableGlobalProxy(ip.address(), proxyPort); + var result = require('./lib/proxyManager').enableGlobalProxy(ip.address(), proxyPort, proxyType == T_TYPE_HTTP ? "Http" : "Https"); if (result.status) { callback(result.stdout); @@ -184,7 +184,7 @@ function proxyServer(option){ logUtil.printLog('AnyProxy is about to exit with code: ' + code, logUtil.T_ERR); if (option.globalProxy) { - var result = require('./lib/proxyManager').disableGlobalProxy(); + var result = require('./lib/proxyManager').disableGlobalProxy(proxyType == T_TYPE_HTTP ? "Http" : "Https"); //error occur if (result.status) { From b76610576a94420663321ec05e790012240d3d47 Mon Sep 17 00:00:00 2001 From: OttoMao Date: Tue, 5 Apr 2016 22:09:07 +0800 Subject: [PATCH 6/7] 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.'); } } From 0452cb0794a901e341e0a7fd6e22001f11a8b701 Mon Sep 17 00:00:00 2001 From: OttoMao Date: Tue, 5 Apr 2016 22:11:27 +0800 Subject: [PATCH 7/7] ready to release 3.9.0Beta --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ba7793..429f9f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "anyproxy", - "version": "3.8.1", + "version": "3.9.0beta1", "description": "A fully configurable proxy in NodeJS, which can handle HTTPS requests perfectly.", "main": "proxy.js", "bin": {