cardinalis
v3.2.4
Published
A socks and http proxy by nodejs for you to over GWF
Downloads
44
Maintainers
Readme
cardinal
A shadowsocks client by nodejs, include socks proxy and http proxy
why another
@clowwindy was asked to delete all the shadowsocks code,and shadowsocks-R's cribbing, and lantern start charging a fee. Because of that, I made it.
- shadowsocks-nodejs stop update
- shadowsocks-js no http proxy,and no high availability
- shadowsocks-windows can't auto config and can't meet me
- surport Windows(win7+),MacOS
model
dependent
achieve
use GeoIp to pac file not use gfwlist
encrypt type filter by shadowsocks and node surport
|method | size and length| |-------|----------------| |aes-128-ctr | [16, 16] | |aes-192-ctr | [24, 16] | |aes-192-ctr | [24, 16] | |aes-256-ctr | [32, 16] | |aes-128-cfb | [16, 16] | |aes-192-cfb | [24, 16] | |aes-256-cfb | [32, 16] | |bf-cfb | [16, 8] | |camellia-128-cfb | [16, 16]| |camellia-192-cfb | [24, 16]| |camellia-256-cfb | [32, 16]| |cast5-cfb | [16, 8] | |des-cfb | [8, 8] | |idea-cfb | [16, 8] | |rc2-cfb | [16, 8] | |salsa20 | [32, 8] | |seed-cfb | [16, 16] |
install
npm install -g cardinalis
CLI
Use cardinal to start in CLI
options
- upip
- sc
examples
default start
$ cardinal
start with update GeoIp-CN(IPs in china)
$ cardinal ip
configs
normal
- config/GeoIP-CN ------ IPs in china
- config/local.json ------ host and port config
- host
- proxyPortCeil ---- socks port min
- httpPort
- pacPort
- allowDelay ---- optimal timeout
- config/pac.js ------ pac file functions
- config/server.json ------ shadowsocks server and password,types
spider rules
In spider/source.js, all shadowsocks server nodes item list.You can add/edit/delete them.cardinal use this to make tunnel.if you have a shadowsocks server,you can use sc start option.
- url spider webpage url.
- deXml DOM analyse function, param is a buffer,return a array/null.
example like this:
{
url: 'https://freessr.xyz/',
deXml: function (body) {
try {
let $ = cheerio.load(body);
let list = $('.col-md-6.text-center');
let arr = [];
for (let i = 0; i < list.length - 1; i++) {
if (ciphers[$(list[i]).find('h4').eq('3').html().split(':')[1]]) {
arr.push({
"host": $(list[i]).find('h4').eq('0').html().split(':')[1],
"port": $(list[i]).find('h4').eq('1').html().split(':')[1],
"password": $(list[i]).find('h4').eq('2').html().split(':')[1],
"method": $(list[i]).find('h4').eq('3').html().split(':')[1],
"remarks": "frss",
"auth": false
});
}
}
return arr;
} catch (e) {
return null;
}
}
}