mirror of
https://github.com/alibaba/anyproxy.git
synced 2025-04-20 12:14:21 +00:00
153 lines
4.4 KiB
JavaScript
153 lines
4.4 KiB
JavaScript
'use strict'
|
|
|
|
const child_process = require('child_process');
|
|
|
|
const networkTypes = ['Ethernet', 'Thunderbolt Ethernet', 'Wi-Fi'];
|
|
|
|
function execSync(cmd) {
|
|
let stdout,
|
|
status = 0;
|
|
try {
|
|
stdout = child_process.execSync(cmd);
|
|
} catch (err) {
|
|
stdout = err.stdout;
|
|
status = err.status;
|
|
}
|
|
|
|
return {
|
|
stdout: stdout.toString(),
|
|
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
|
|
* ------------------------------------------------------------------------
|
|
*/
|
|
|
|
const macProxyManager = {};
|
|
|
|
macProxyManager.getNetworkType = () => {
|
|
for (let i = 0; i < networkTypes.length; i++) {
|
|
const 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 = (ip, port, proxyType) => {
|
|
if (!ip || !port) {
|
|
console.log('failed to set global proxy server.\n ip and port are required.');
|
|
return;
|
|
}
|
|
|
|
proxyType = proxyType || 'http';
|
|
|
|
const networkType = macProxyManager.networkType || macProxyManager.getNetworkType();
|
|
|
|
return /^http$/i.test(proxyType) ?
|
|
|
|
// set http proxy
|
|
execSync(
|
|
'networksetup -setwebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost'
|
|
.replace(/\${networkType}/g, networkType)
|
|
.replace('${ip}', ip)
|
|
.replace('${port}', port)) :
|
|
|
|
// set https proxy
|
|
execSync('networksetup -setsecurewebproxy ${networkType} ${ip} ${port} && networksetup -setproxybypassdomains ${networkType} 127.0.0.1 localhost'
|
|
.replace(/\${networkType}/g, networkType)
|
|
.replace('${ip}', ip)
|
|
.replace('${port}', port));
|
|
};
|
|
|
|
macProxyManager.disableGlobalProxy = (proxyType) => {
|
|
proxyType = proxyType || 'http';
|
|
const 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 = () => {
|
|
const networkType = macProxyManager.networkType || macProxyManager.getNetworkType();
|
|
const result = execSync('networksetup -getwebproxy ${networkType}'.replace('${networkType}', networkType));
|
|
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------
|
|
* windows proxy manager
|
|
*
|
|
* netsh does not alter the settings for IE
|
|
* ------------------------------------------------------------------------
|
|
*/
|
|
|
|
const winProxyManager = {};
|
|
|
|
winProxyManager.enableGlobalProxy = (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 = () => execSync('reg add "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f');
|
|
|
|
winProxyManager.getProxyState = () => ''
|
|
|
|
winProxyManager.getNetworkType = () => ''
|
|
|
|
module.exports = /^win/.test(process.platform) ? winProxyManager : macProxyManager;
|