wssagent
Version:
transform websocket encrypt proxy into normal local proxy, support CDN. 将远端的加密websocket代理转成本地普通代理,支持CDN中转
102 lines (83 loc) • 3.49 kB
JavaScript
const readline = require('readline-sync');
const path = require('path');
const dotenv = require('dotenv');
const ipv4 = require('@leichtgewicht/ip-codec').v4;
//wss url like wss://site.domain/url
var wssurl = '';
//wssagent listening port,also proxy port in firefox settings
var proxyport = 0 ;
//proxy servr ip address
var wssip = '';
//share proxy in local network
var shareproxy = false;
//DOH(DNS Over Https) server domain
var dohServer = '';
//connect Domain will replace domain in wssurl when connecting to proxy
var connectDomain = '';
const envpath = path.resolve(process.cwd(), 'wss.env');
dotenv.config({path: envpath});
if(process.argv[2]){
wssurl = process.argv[2];
if(!wssurl.toLowerCase().startsWith('wss://')) return console.log('invalid wssurl');
let i=3;
if(process.argv[i] && (!isNaN(process.argv[i]))) {
proxyport = process.argv[i];
i++;
}
else if(process.env.PROXY_PORT) proxyport = process.env.PROXY_PORT;
if(process.argv[i] && (process.argv[i].toLowerCase()=='-s')) {
shareproxy = true;
i++;
}
else if(process.env.SHARE_PROXY) shareproxy = true;
if(process.argv[i] && !ipv4.isFormat(process.argv[i].trim().split(',')[0])) {
dohServer = process.argv[i].trim();
i++;
}
else if(process.env.DOH_SERVER) dohServer = process.env.DOH_SERVER;
if(process.argv[i] && ipv4.isFormat(process.argv[i].trim().split(',')[0])) {
wssip = process.argv[i].trim();
i++;
}
else if(process.env.WSSIP) wssip = process.env.WSSIP;
if(process.argv[i]) connectDomain = process.argv[i];
else if(process.env.CONNECT_DOMAIN) connectDomain = process.env.CONNECT_DOMAIN;
} else if(process.env.WSSURL) {
wssurl = process.env.WSSURL;
if(!wssurl.toLowerCase().startsWith('wss://')) return console.log('invalid wssurl');
if(process.env.PROXY_PORT) proxyport = process.env.PROXY_PORT;
if(process.env.SHARE_PROXY) shareproxy = true;
if(process.env.WSSIP) wssip = process.env.WSSIP;
if(process.env.DOH_SERVER) dohServer = process.env.DOH_SERVER;
if(process.env.CONNECT_DOMAIN) connectDomain = process.env.CONNECT_DOMAIN;
console.log('\r\n Run as .env settings');
} else {
wssurl = readline.question('\r\nInput websocket wss url: ');
if((!wssurl) || (!wssurl.toLowerCase().startsWith('wss://'))) return readline.question('\r\nivalid websocket wss url[ok]');
if(process.env.PROXY_PORT) proxyport = process.env.PROXY_PORT;
else{
let inport = readline.question('\r\nInput proxy port [Random]: ');
if(inport && (!isNaN(inport))) proxyport = inport;
}
if(process.env.SHARE_PROXY) shareproxy = true;
else {
let inshare = readline.question('\r\nShare proxy with others? [No]: ');
if(inshare && (inshare.toLowerCase().startsWith('y'))) shareproxy = true;
}
if(process.env.WSSIP) wssip = process.env.WSSIP;
else{
let inip = readline.question('\r\nInput proxy server ip address (WSSIP) [Skip]: ');
if(inip && ipv4.isFormat(inip.trim())) wssip = inip.trim();
else if(inip) wssip = inip.trim();
}
if(process.env.DOH_SERVER) dohServer = process.env.DOH_SERVER;
else if(!wssip){
let indoh = readline.question('\r\nInput DOH (DNS over Https) server domain [Skip]: ');
if(indoh) dohServer = indoh.trim();
}
if(process.env.CONNECT_DOMAIN) connectDomain = process.env.CONNECT_DOMAIN;
}
const configs = {wssurl, proxyport, shareproxy, wssip, connectDomain, dohServer};
require('./src/wssagent.js').run(configs);