shadowsocks over websocket explain
1.0.0
Herokuでshadowsocksを無料で展開します
説明
「バージョン」:「1.0.0」
githubソース
英語
Shadowsocksの実装が少ない - ローカルとサーバー
しかし、今回は、狩りの心が痛むのを見ました - それは非常に美しく書かれているようです
server.js
local.js
Protocol Main Code-TCPrelay
他の
server.js
コード1-6
const TCPRelay = require ( './tcprelay' ) . TCPRelay ;
// 协议主内容,后续
const server = require ( 'commander' ) ; // 命令解析
const constants = require ( './constants' ) ; // 版本
const throng = require ( 'throng' ) ;
// 集群化Node.js应用程序的简单工作管理器
const log4js = require ( 'log4js' ) ; // 日志记录
// log4js 包含 node 与 browser, 而这个
// 去掉了浏览器部分,只专注-node
const logger = log4js . getLogger ( 'server' ) ;
// 新建-server-示例 const VERSION = '0.1.8' ;
module . exports . VERSION = VERSION ;コード8-16
server
. version ( constants . VERSION )
. option ( '-m --method <method>' , 'encryption method, default: aes-256-cfb' )
. option ( '-k --password <password>' , 'password' )
. option ( '-s --server-address <address>' , 'server address' )
. option ( '-p --server-port <port>' , 'server port, default: 8388' )
. option ( '--log-level <level>' , 'log level(debug|info|warn|error|fatal)' , / ^(debug|info|warn|error|fatal)$ / i , 'info' )
. option ( '--log-file <file>' , 'log file' )
. parse ( process . argv ) ;構成オプション-commander> put --server-address > server.serverAddress
method >パスワード暗号化方法
password >パスワード
serverPort >サーバーポート「Herokuのポート転送 - > 80」
serverAddress > server url "xxx.herokuapp.com"
logLevel > logレベル
logFile > logファイル
throng複数のプロセスを操作できます
コード18-22
throng ( {
workers : process . env . WEB_CONCURRENCY || 1 ,
master : startMaster ,
start : startWorker
} ) ; workers >プロセス数
startMaster >メインプロセス
function startMaster ( ) {
logger . info ( 'started master' ) ;
}startWorker > Child Processes function startWorker ( id ) {
logger . info ( `started worker ${ id } ` ) ;
var relay = new TCPRelay ( {
serverAddress : process . env [ 'SERVER_ADDRESS' ] || server . serverAddress || '127.0.0.1' ,
serverPort : process . env [ 'PORT' ] || server . serverPort || 8388 ,
password : process . env [ 'PASSWORD' ] || server . password || 'shadowsocks-over-websocket' ,
method : process . env [ 'METHOD' ] || server . method || 'aes-256-cfb'
} , false ) ;
relay . setLogLevel ( server . logLevel ) ;
relay . setLogFile ( server . logFile ) ;
relay . setServerName ( 'server-' + id ) ;
relay . bootstrap ( ) ;
}TCPRelay > socks-protocol local.js
コード1-15
const TCPRelay = require ( './tcprelay' ) . TCPRelay ;
const local = require ( 'commander' ) ; // 命令解析
const constants = require ( './constants' ) ; // 版本
local
. version ( constants . VERSION )
. option ( '-m --method <method>' , 'encryption method, default: aes-256-cfb' )
. option ( '-k --password <password>' , 'password' )
. option ( '-s --server-address <address>' , 'server address' )
. option ( '-p --server-port <port>' , 'server port, default: 8388' )
. option ( '-b --local-address <address>' , 'local binding address, default: 127.0.0.1' )
. option ( '-l --local-port <port>' , 'local port, default: 1080' )
. option ( '--log-level <level>' , 'log level(debug|info|warn|error|fatal)' , / ^(debug|info|warn|error|fatal)$ / i , 'info' )
. option ( '--log-file <file>' , 'log file' )
. parse ( process . argv ) ; method >パスワード暗号化方法
password >パスワード
serverPort >サーバーポート「Herokuのポート転送 - > 80」
serverAddress > server url "xxx.herokuapp.com"
logLevel > logレベル
logFile > logファイル
localAddress >ローカルURL 127.0.0.1
localPort >ローカルポート
コード17-27
var relay = new TCPRelay ( {
localAddress : local . localAddress || '127.0.0.1' ,
localPort : local . localPort || 1080 ,
serverAddress : local . serverAddress || '127.0.0.1' ,
serverPort : local . serverPort || 8388 ,
password : local . password || 'shadowsocks-over-websocket' ,
method : local . method || 'aes-256-cfb'
} , true ) ;
relay . setLogLevel ( local . logLevel ) ;
relay . setLogFile ( local . logFile ) ;
relay . bootstrap ( ) ;TCPRelay > socks-protocol 群衆のマルチプロセスのスタート
log4jsロギング