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
old mode 100644
new mode 100755
index 6130849..df8c747
--- 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 for system')
     .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,
+        setAsGlobalProxy    : program.global,
         interceptHttps      : program.intercept,
         silent              : program.silent
     });
diff --git a/lib/systemProxyMgr.js b/lib/systemProxyMgr.js
new file mode 100644
index 0000000..f593680
--- /dev/null
+++ b/lib/systemProxyMgr.js
@@ -0,0 +1,166 @@
+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
+   };
+}
+
+/**
+ * proxy for CentOs
+ * ------------------------------------------------------------------------
+ *
+ * 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
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * 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
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * ------------------------------------------------------------------------
+ * mac proxy manager
+ * ------------------------------------------------------------------------
+ */
+
+var macProxyManager = {};
+
+macProxyManager.getNetworkType = function() {
+
+   for (var i = 0; i < networkTypes.length; i++) {
+
+      var
+         type = networkTypes[i],
+         result = execSync('networksetup -getwebproxy ' + type);
+
+      if (result.status === 0) {
+         macProxyManager.networkType = type;
+         return type;
+      }
+   }
+
+   throw new Error('Unknown network type');
+};
+
+macProxyManager.enableGlobalProxy = function(ip, port, proxyType) {
+
+   if (!ip || !port) {
+      console.log('failed to set global proxy server.\n ip and port are required.');
+      return;
+   };
+
+   proxyType = proxyType || 'http';
+
+   var networkType = macProxyManager.networkType || macProxyManager.getNetworkType();
+
+   return /^http$/i.test(proxyType) ?
+
+      // set http proxy
+      execSync(
+         'networksetup -setwebproxy ${networkType} ${ip} ${port}'
+            .replace("${networkType}", networkType)
+            .replace("${ip}", ip)
+            .replace("${port}", port)) :
+
+      // set https proxy
+      execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port}'
+        .replace("${networkType}", networkType)
+        .replace("${ip}", ip)
+        .replace("${port}", port));
+
+};
+
+macProxyManager.disableGlobalProxy = function(proxyType) {
+   proxyType = proxyType || 'http';
+
+   var networkType = macProxyManager.networkType || macProxyManager.getNetworkType();
+
+   return /^http$/i.test(proxyType) ?
+
+      // set http proxy
+      execSync(
+         'networksetup -setwebproxystate ${networkType} off'
+            .replace("${networkType}", networkType)) :
+
+      // set https proxy
+      execSync(
+         'networksetup -setsecurewebproxystate ${networkType} off'
+            .replace("${networkType}", networkType));
+};
+
+macProxyManager.getProxyState = function() {
+   var networkType = macProxyManager.networkType || macProxyManager.getNetworkType();
+   var result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType));
+
+   return result;
+};
+
+
+
+/**
+ * ------------------------------------------------------------------------
+ * windows proxy manager
+ *
+ * netsh does not alter the settings for IE
+ * ------------------------------------------------------------------------
+ */
+
+var winProxyManager = {};
+
+winProxyManager.enableGlobalProxy = function(ip, port) {
+
+   if (!ip && !port) {
+     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)
+            .replace("${port}", port) +
+
+         // 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');
+};
+
+winProxyManager.getProxyState = function() {
+   return '';
+};
+
+winProxyManager.getNetworkType = function() {
+   return '';
+};
+
+module.exports = /^win/.test(process.platform) ? winProxyManager : macProxyManager;
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": {
diff --git a/proxy.js b/proxy.js
index bfcdace..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,11 +157,50 @@ function proxyServer(option){
                 callback(null);
             },
 
+            //set global proxy
+            function(callback) {
+                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.setAsGlobalProxy) {
+                        console.log('resigning global proxy...');
+                        var result = SystemProxyMgr.disableGlobalProxy(proxyType == T_TYPE_HTTP ? "Http" : "Https");
+
+                        if (result.status) {
+                            console.log(color.red(result.stdout));
+                        } else{
+                            console.log('global proxy resigned.');
+                        }
+                    }
+
+                    process.exit();
+                });
+
+                //exit cause ctrl+c
+                process.on("SIGINT", function() {
                     process.exit();
                 });