| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758 |
- <?php
- //Thanks to http://blog.csdn.net/jollyjumper/article/details/9823047
- namespace App\Controllers;
- use App\Models\Link;
- use App\Models\User;
- use App\Models\Node;
- use App\Models\Relay;
- use App\Models\Smartline;
- use App\Utils\Tools;
- use App\Utils\URL;
- use App\Services\Config;
- /**
- * HomeController
- */
- class LinkController extends BaseController
- {
- public function __construct()
- {
- }
- public static function GenerateRandomLink()
- {
- $i =0;
- for ($i = 0; $i < 10; $i++) {
- $token = Tools::genRandomChar(16);
- $Elink = Link::where("token", "=", $token)->first();
- if ($Elink == null) {
- return $token;
- }
- }
- return "couldn't alloc token";
- }
- public static function GenerateCode($type, $address, $port, $ios, $userid)
- {
- $Elink = Link::where("type", "=", $type)->where("address", "=", $address)->where("port", "=", $port)->where("ios", "=", $ios)->where("userid", "=", $userid)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = $type;
- $NLink->address = $address;
- $NLink->port = $port;
- $NLink->ios = $ios;
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GenerateApnCode($isp, $address, $port, $userid)
- {
- $Elink = Link::where("type", "=", 6)->where("address", "=", $address)->where("port", "=", $port)->where("userid", "=", $userid)->where("isp", "=", $isp)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = 6;
- $NLink->address = $address;
- $NLink->port = $port;
- $NLink->ios = 1;
- $NLink->isp = $isp;
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GenerateSurgeCode($address, $port, $userid, $geo, $method)
- {
- $Elink = Link::where("type", "=", 0)->where("address", "=", $address)->where("port", "=", $port)->where("userid", "=", $userid)->where("geo", "=", $geo)->where("method", "=", $method)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = 0;
- $NLink->address = $address;
- $NLink->port = $port;
- $NLink->ios = 1;
- $NLink->geo = $geo;
- $NLink->method = $method;
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GenerateIosCode($address, $port, $userid, $geo, $method)
- {
- $Elink = Link::where("type", "=", -1)->where("address", "=", $address)->where("port", "=", $port)->where("userid", "=", $userid)->where("geo", "=", $geo)->where("method", "=", $method)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = -1;
- $NLink->address = $address;
- $NLink->port = $port;
- $NLink->ios = 1;
- $NLink->geo = $geo;
- $NLink->method = $method;
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GenerateAclCode($address, $port, $userid, $geo, $method)
- {
- $Elink = Link::where("type", "=", 9)->where("address", "=", $address)->where("port", "=", $port)->where("userid", "=", $userid)->where("geo", "=", $geo)->where("method", "=", $method)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = 9;
- $NLink->address = $address;
- $NLink->port = $port;
- $NLink->ios = 0;
- $NLink->geo = $geo;
- $NLink->method = $method;
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GenerateRouterCode($userid, $without_mu)
- {
- $Elink = Link::where("type", "=", 10)->where("userid", "=", $userid)->where("geo", $without_mu)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = 10;
- $NLink->address = "";
- $NLink->port = 0;
- $NLink->ios = 0;
- $NLink->geo = $without_mu;
- $NLink->method = "";
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GenerateSSRSubCode($userid, $without_mu)
- {
- $Elink = Link::where("type", "=", 11)->where("userid", "=", $userid)->where("geo", $without_mu)->first();
- if ($Elink != null) {
- return $Elink->token;
- }
- $NLink = new Link();
- $NLink->type = 11;
- $NLink->address = "";
- $NLink->port = 0;
- $NLink->ios = 0;
- $NLink->geo = $without_mu;
- $NLink->method = "";
- $NLink->userid = $userid;
- $NLink->token = LinkController::GenerateRandomLink();
- $NLink->save();
- return $NLink->token;
- }
- public static function GetContent($request, $response, $args)
- {
- $token = $args['token'];
- //$builder->getPhrase();
- $Elink = Link::where("token", "=", $token)->first();
- if ($Elink == null) {
- return null;
- }
- switch ($Elink->type) {
- case -1:
- $user=User::where("id", $Elink->userid)->first();
- if ($user == null) {
- return null;
- }
- $is_ss = 1;
- if (isset($request->getQueryParams()["is_ss"])) {
- $is_ss = $request->getQueryParams()["is_ss"];
- }
- $is_mu = 0;
- if (isset($request->getQueryParams()["is_mu"])) {
- $is_mu = $request->getQueryParams()["is_mu"];
- }
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename=allinone.conf');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetIosConf($user, $is_mu, $is_ss));
- return $newResponse;
- case 3:
- $type = "PROXY";
- break;
- case 7:
- $type = "PROXY";
- break;
- case 6:
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename='.$token.'.mobileconfig');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetApn($Elink->isp, $Elink->address, $Elink->port, User::where("id", "=", $Elink->userid)->first()->pac));
- return $newResponse;
- case 0:
- if ($Elink->geo==0) {
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename='.$token.'.conf');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetSurge(User::where("id", "=", $Elink->userid)->first()->passwd, $Elink->method, $Elink->address, $Elink->port, User::where("id", "=", $Elink->userid)->first()->pac));
- return $newResponse;
- } else {
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename='.$token.'.conf');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetSurgeGeo(User::where("id", "=", $Elink->userid)->first()->passwd, $Elink->method, $Elink->address, $Elink->port));
- return $newResponse;
- }
- case 8:
- if ($Elink->ios==0) {
- $type = "SOCKS5";
- } else {
- $type = "SOCKS";
- }
- break;
- case 9:
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename='.$token.'.acl');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetAcl(User::where("id", "=", $Elink->userid)->first()));
- return $newResponse;
- case 10:
- $user=User::where("id", $Elink->userid)->first();
- if ($user == null) {
- return null;
- }
- $is_ss = 0;
- if (isset($request->getQueryParams()["is_ss"])) {
- $is_ss = $request->getQueryParams()["is_ss"];
- }
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename='.$token.'.sh');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetRouter(User::where("id", "=", $Elink->userid)->first(), $Elink->geo, $is_ss));
- return $newResponse;
- case 11:
- $user=User::where("id", $Elink->userid)->first();
- if ($user == null) {
- return null;
- }
- $max = 0;
- if (isset($request->getQueryParams()["max"])) {
- $max = (int)$request->getQueryParams()["max"];
- }
- $mu = 0;
- if (isset($request->getQueryParams()["mu"])) {
- $mu = (int)$request->getQueryParams()["mu"];
- }
- $newResponse = $response->withHeader('Content-type', ' application/octet-stream; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename='.$token.'.txt');
- $newResponse->getBody()->write(LinkController::GetSSRSub(User::where("id", "=", $Elink->userid)->first(), $mu, $max));
- return $newResponse;
- default:
- break;
- }
- $newResponse = $response->withHeader('Content-type', ' application/x-ns-proxy-autoconfig; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate');//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetPac($type, $Elink->address, $Elink->port, User::where("id", "=", $Elink->userid)->first()->pac));
- return $newResponse;
- }
- public static function GetGfwlistJs($request, $response, $args)
- {
- $newResponse = $response->withHeader('Content-type', ' application/x-ns-proxy-autoconfig; charset=utf-8')->withHeader('Cache-Control', 'no-store, no-cache, must-revalidate')->withHeader('Content-Disposition', ' attachment; filename=gfwlist.js');
- ;//->getBody()->write($builder->output());
- $newResponse->getBody()->write(LinkController::GetMacPac());
- return $newResponse;
- }
- public static function GetPcConf($user, $is_mu = 0, $is_ss = 0)
- {
- $string='
- {
- "index" : 0,
- "random" : false,
- "sysProxyMode" : 0,
- "shareOverLan" : false,
- "bypassWhiteList" : false,
- "localPort" : 1080,
- "localAuthPassword" : "'.Tools::genRandomChar(26).'",
- "dns_server" : "",
- "reconnectTimes" : 4,
- "randomAlgorithm" : 0,
- "TTL" : 60,
- "connect_timeout" : 5,
- "proxyRuleMode" : 1,
- "proxyEnable" : false,
- "pacDirectGoProxy" : false,
- "proxyType" : 0,
- "proxyHost" : "",
- "proxyPort" : 0,
- "proxyAuthUser" : "",
- "proxyAuthPass" : "",
- "proxyUserAgent" : "",
- "authUser" : "",
- "authPass" : "",
- "autoBan" : false,
- "sameHostForSameTarget" : true,
- "keepVisitTime" : 180,
- "isHideTips" : true,
- "token" : {
- },
- "portMap" : {
- }
- }
- ';
- $json=json_decode($string, true);
- $temparray=array();
- $items = URL::getAllItems($user, $is_mu, $is_ss);
- foreach($items as $item) {
- array_push($temparray, array("remarks"=>$item['remark'],
- "server"=>$item['address'],
- "server_port"=>$item['port'],
- "method"=>$item['method'],
- "obfs"=>$item['obfs'],
- "obfsparam"=>$item['obfs_param'],
- "remarks_base64"=>base64_encode($item['remark']),
- "password"=>$item['passwd'],
- "tcp_over_udp"=>false,
- "udp_over_tcp"=>false,
- "group"=>$item['group'],
- "protocol"=>$item['protocol'],
- "protoparam"=>$item['protocol_param'],
- "obfs_udp"=>false,
- "enable"=>true));
- }
- $json["configs"]=$temparray;
- return json_encode($json, JSON_PRETTY_PRINT);
- }
- public static function GetIosConf($user, $is_mu = 0, $is_ss = 0)
- {
- $proxy_name="";
- $proxy_group="";
- $items = URL::getAllItems($user, $is_mu, $is_ss);
- foreach($items as $item) {
- $proxy_group .= $item['remark'].' = custom,'.$item['address'].','.$item['port'].','.$item['method'].','.$item['passwd'].','.Config::get('baseUrl').'/downloads/SSEncrypt.module'.URL::getSurgeObfs($item)."\n";
- $proxy_name .= ",".$item['remark'];
- }
- return '
- [General]
- skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local
- bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
- dns-server = 119.29.29.29, 223.5.5.5, 114.114.114.114
- loglevel = notify
- [Proxy]
- DIRECT = direct
- '.$proxy_group.'
- [Proxy Group]
- Proxy = select,DIRECT'.$proxy_name.'
- [Rule]
- DOMAIN-KEYWORD,adsmogo,REJECT
- DOMAIN-SUFFIX,acs86.com,REJECT
- DOMAIN-SUFFIX,adcome.cn,REJECT
- DOMAIN-SUFFIX,adinfuse.com,REJECT
- DOMAIN-SUFFIX,admaster.com.cn,REJECT
- DOMAIN-SUFFIX,admob.com,REJECT
- DOMAIN-SUFFIX,adsage.cn,REJECT
- DOMAIN-SUFFIX,adsage.com,REJECT
- DOMAIN-SUFFIX,adsmogo.org,REJECT
- DOMAIN-SUFFIX,ads.mobclix.com,REJECT
- DOMAIN-SUFFIX,adview.cn,REJECT
- DOMAIN-SUFFIX,adwhirl.com,REJECT
- DOMAIN-SUFFIX,adwo.com,REJECT
- DOMAIN-SUFFIX,appads.com,REJECT
- DOMAIN-SUFFIX,domob.cn,REJECT
- DOMAIN-SUFFIX,domob.com.cn,REJECT
- DOMAIN-SUFFIX,domob.org,REJECT
- DOMAIN-SUFFIX,doubleclick.net,REJECT
- DOMAIN-SUFFIX,duomeng.cn,REJECT
- DOMAIN-SUFFIX,duomeng.net,REJECT
- DOMAIN-SUFFIX,duomeng.org,REJECT
- DOMAIN-SUFFIX,googeadsserving.cn,REJECT
- DOMAIN-SUFFIX,guomob.com,REJECT
- DOMAIN-SUFFIX,immob.cn,REJECT
- DOMAIN-SUFFIX,inmobi.com,REJECT
- DOMAIN-SUFFIX,mobads.baidu.com,REJECT
- DOMAIN-SUFFIX,mobads-logs.baidu.com,REJECT
- DOMAIN-SUFFIX,smartadserver.com,REJECT
- DOMAIN-SUFFIX,tapjoyads.com,REJECT
- DOMAIN-SUFFIX,umeng.co,REJECT
- DOMAIN-SUFFIX,umeng.com,REJECT
- DOMAIN-SUFFIX,umtrack.com,REJECT
- DOMAIN-SUFFIX,uyunad.com,REJECT
- DOMAIN-SUFFIX,youmi.net,REJECT
- GEOIP,AD,Proxy
- GEOIP,AE,Proxy
- GEOIP,AF,Proxy
- GEOIP,AG,Proxy
- GEOIP,AI,Proxy
- GEOIP,AL,Proxy
- GEOIP,AM,Proxy
- GEOIP,AO,Proxy
- GEOIP,AQ,Proxy
- GEOIP,AR,Proxy
- GEOIP,AS,Proxy
- GEOIP,AS,Proxy
- GEOIP,AS,Proxy
- GEOIP,AS,Proxy
- GEOIP,AT,Proxy
- GEOIP,AU,Proxy
- GEOIP,AW,Proxy
- GEOIP,AX,Proxy
- GEOIP,AZ,Proxy
- GEOIP,BA,Proxy
- GEOIP,BD,Proxy
- GEOIP,BE,Proxy
- GEOIP,BF,Proxy
- GEOIP,BG,Proxy
- GEOIP,BH,Proxy
- GEOIP,BI,Proxy
- GEOIP,BJ,Proxy
- GEOIP,BL,Proxy
- GEOIP,BM,Proxy
- GEOIP,BN,Proxy
- GEOIP,BO,Proxy
- GEOIP,BQ,Proxy
- GEOIP,BR,Proxy
- GEOIP,BS,Proxy
- GEOIP,BT,Proxy
- GEOIP,BW,Proxy
- GEOIP,BY,Proxy
- GEOIP,BZ,Proxy
- GEOIP,CA,Proxy
- GEOIP,CC,Proxy
- GEOIP,CD,Proxy
- GEOIP,CF,Proxy
- GEOIP,CG,Proxy
- GEOIP,CH,Proxy
- GEOIP,CI,Proxy
- GEOIP,CK,Proxy
- GEOIP,CL,Proxy
- GEOIP,CM,Proxy
- GEOIP,CO,Proxy
- GEOIP,CR,Proxy
- GEOIP,CU,Proxy
- GEOIP,CV,Proxy
- GEOIP,CW,Proxy
- GEOIP,CX,Proxy
- GEOIP,CY,Proxy
- GEOIP,CZ,Proxy
- GEOIP,DE,Proxy
- GEOIP,DJ,Proxy
- GEOIP,DK,Proxy
- GEOIP,DM,Proxy
- GEOIP,DO,Proxy
- GEOIP,DZ,Proxy
- GEOIP,EC,Proxy
- GEOIP,EE,Proxy
- GEOIP,EG,Proxy
- GEOIP,EG,Proxy
- GEOIP,EH,Proxy
- GEOIP,ER,Proxy
- GEOIP,ES,Proxy
- GEOIP,ET,Proxy
- GEOIP,FI,Proxy
- GEOIP,FJ,Proxy
- GEOIP,FK,Proxy
- GEOIP,FM,Proxy
- GEOIP,FO,Proxy
- GEOIP,FR,Proxy
- GEOIP,GA,Proxy
- GEOIP,GB,Proxy
- GEOIP,GD,Proxy
- GEOIP,GE,Proxy
- GEOIP,GF,Proxy
- GEOIP,GG,Proxy
- GEOIP,GH,Proxy
- GEOIP,GI,Proxy
- GEOIP,GL,Proxy
- GEOIP,GM,Proxy
- GEOIP,GN,Proxy
- GEOIP,GP,Proxy
- GEOIP,GQ,Proxy
- GEOIP,GR,Proxy
- GEOIP,GS,Proxy
- GEOIP,GT,Proxy
- GEOIP,GU,Proxy
- GEOIP,GW,Proxy
- GEOIP,GY,Proxy
- GEOIP,HK,Proxy
- GEOIP,HM,Proxy
- GEOIP,HN,Proxy
- GEOIP,HR,Proxy
- GEOIP,HT,Proxy
- GEOIP,HU,Proxy
- GEOIP,ID,Proxy
- GEOIP,IE,Proxy
- GEOIP,IL,Proxy
- GEOIP,IM,Proxy
- GEOIP,IN,Proxy
- GEOIP,IO,Proxy
- GEOIP,IQ,Proxy
- GEOIP,IR,Proxy
- GEOIP,IS,Proxy
- GEOIP,IT,Proxy
- GEOIP,JE,Proxy
- GEOIP,JM,Proxy
- GEOIP,JO,Proxy
- GEOIP,JP,Proxy
- GEOIP,KE,Proxy
- GEOIP,KG,Proxy
- GEOIP,KH,Proxy
- GEOIP,KI,Proxy
- GEOIP,KM,Proxy
- GEOIP,KN,Proxy
- GEOIP,KP,Proxy
- GEOIP,KR,Proxy
- GEOIP,KW,Proxy
- GEOIP,KY,Proxy
- GEOIP,KZ,Proxy
- GEOIP,LA,Proxy
- GEOIP,LB,Proxy
- GEOIP,LC,Proxy
- GEOIP,LI,Proxy
- GEOIP,LK,Proxy
- GEOIP,LR,Proxy
- GEOIP,LS,Proxy
- GEOIP,LT,Proxy
- GEOIP,LU,Proxy
- GEOIP,LV,Proxy
- GEOIP,LY,Proxy
- GEOIP,MA,Proxy
- GEOIP,MC,Proxy
- GEOIP,MD,Proxy
- GEOIP,ME,Proxy
- GEOIP,MF,Proxy
- GEOIP,MG,Proxy
- GEOIP,MH,Proxy
- GEOIP,MK,Proxy
- GEOIP,ML,Proxy
- GEOIP,MM,Proxy
- GEOIP,MN,Proxy
- GEOIP,MO,Proxy
- GEOIP,MP,Proxy
- GEOIP,MQ,Proxy
- GEOIP,MR,Proxy
- GEOIP,MS,Proxy
- GEOIP,MT,Proxy
- GEOIP,MU,Proxy
- GEOIP,MV,Proxy
- GEOIP,MW,Proxy
- GEOIP,MX,Proxy
- GEOIP,MY,Proxy
- GEOIP,MZ,Proxy
- GEOIP,NA,Proxy
- GEOIP,NC,Proxy
- GEOIP,NE,Proxy
- GEOIP,NF,Proxy
- GEOIP,NG,Proxy
- GEOIP,NI,Proxy
- GEOIP,NL,Proxy
- GEOIP,NO,Proxy
- GEOIP,NP,Proxy
- GEOIP,NR,Proxy
- GEOIP,NU,Proxy
- GEOIP,NZ,Proxy
- GEOIP,OM,Proxy
- GEOIP,PA,Proxy
- GEOIP,PE,Proxy
- GEOIP,PF,Proxy
- GEOIP,PG,Proxy
- GEOIP,PH,Proxy
- GEOIP,PK,Proxy
- GEOIP,PL,Proxy
- GEOIP,PM,Proxy
- GEOIP,PN,Proxy
- GEOIP,PR,Proxy
- GEOIP,PS,Proxy
- GEOIP,PT,Proxy
- GEOIP,PW,Proxy
- GEOIP,PY,Proxy
- GEOIP,QA,Proxy
- GEOIP,RE,Proxy
- GEOIP,RO,Proxy
- GEOIP,RS,Proxy
- GEOIP,RU,Proxy
- GEOIP,RW,Proxy
- GEOIP,SA,Proxy
- GEOIP,SB,Proxy
- GEOIP,SC,Proxy
- GEOIP,SD,Proxy
- GEOIP,SE,Proxy
- GEOIP,SG,Proxy
- GEOIP,SH,Proxy
- GEOIP,SI,Proxy
- GEOIP,SJ,Proxy
- GEOIP,SK,Proxy
- GEOIP,SL,Proxy
- GEOIP,SM,Proxy
- GEOIP,SN,Proxy
- GEOIP,SO,Proxy
- GEOIP,SR,Proxy
- GEOIP,SS,Proxy
- GEOIP,ST,Proxy
- GEOIP,SV,Proxy
- GEOIP,SX,Proxy
- GEOIP,SY,Proxy
- GEOIP,SZ,Proxy
- GEOIP,TC,Proxy
- GEOIP,TD,Proxy
- GEOIP,TF,Proxy
- GEOIP,TG,Proxy
- GEOIP,TH,Proxy
- GEOIP,TJ,Proxy
- GEOIP,TK,Proxy
- GEOIP,TL,Proxy
- GEOIP,TM,Proxy
- GEOIP,TN,Proxy
- GEOIP,TO,Proxy
- GEOIP,TR,Proxy
- GEOIP,TT,Proxy
- GEOIP,TV,Proxy
- GEOIP,TW,Proxy
- GEOIP,TZ,Proxy
- GEOIP,UA,Proxy
- GEOIP,UG,Proxy
- GEOIP,UM,Proxy
- GEOIP,US,Proxy
- GEOIP,UY,Proxy
- GEOIP,UZ,Proxy
- GEOIP,VA,Proxy
- GEOIP,VC,Proxy
- GEOIP,VE,Proxy
- GEOIP,VG,Proxy
- GEOIP,VI,Proxy
- GEOIP,VN,Proxy
- GEOIP,VU,Proxy
- GEOIP,WF,Proxy
- GEOIP,WS,Proxy
- GEOIP,YE,Proxy
- GEOIP,YT,Proxy
- GEOIP,ZA,Proxy
- GEOIP,ZM,Proxy
- GEOIP,ZW,Proxy
- IP-CIDR,91.108.4.0/22,Proxy,no-resolve
- IP-CIDR,91.108.56.0/22,Proxy,no-resolve
- IP-CIDR,109.239.140.0/24,Proxy,no-resolve
- IP-CIDR,149.154.160.0/20,Proxy,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- GEOIP,CN,DIRECT
- FINAL,Proxy';
- }
- private static function GetSurge($passwd, $method, $server, $port, $defined)
- {
- $rulelist = base64_decode(file_get_contents("https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"))."\n".$defined;
- $gfwlist = explode("\n", $rulelist);
- $count = 0;
- $pac_content = '';
- $find_function_content = '
- [General]
- skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local
- bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
- dns-server = 119.29.29.29, 223.5.5.5, 114.114.114.114
- loglevel = notify
- [Proxy]
- Proxy = custom,'.$server.','.$port.','.$method.','.$passwd.','.Config::get('baseUrl').'/downloads/SSEncrypt.module
- [Rule]
- DOMAIN-KEYWORD,adsmogo,REJECT
- DOMAIN-SUFFIX,acs86.com,REJECT
- DOMAIN-SUFFIX,adcome.cn,REJECT
- DOMAIN-SUFFIX,adinfuse.com,REJECT
- DOMAIN-SUFFIX,admaster.com.cn,REJECT
- DOMAIN-SUFFIX,admob.com,REJECT
- DOMAIN-SUFFIX,adsage.cn,REJECT
- DOMAIN-SUFFIX,adsage.com,REJECT
- DOMAIN-SUFFIX,adsmogo.org,REJECT
- DOMAIN-SUFFIX,ads.mobclix.com,REJECT
- DOMAIN-SUFFIX,adview.cn,REJECT
- DOMAIN-SUFFIX,adwhirl.com,REJECT
- DOMAIN-SUFFIX,adwo.com,REJECT
- DOMAIN-SUFFIX,appads.com,REJECT
- DOMAIN-SUFFIX,domob.cn,REJECT
- DOMAIN-SUFFIX,domob.com.cn,REJECT
- DOMAIN-SUFFIX,domob.org,REJECT
- DOMAIN-SUFFIX,doubleclick.net,REJECT
- DOMAIN-SUFFIX,duomeng.cn,REJECT
- DOMAIN-SUFFIX,duomeng.net,REJECT
- DOMAIN-SUFFIX,duomeng.org,REJECT
- DOMAIN-SUFFIX,googeadsserving.cn,REJECT
- DOMAIN-SUFFIX,guomob.com,REJECT
- DOMAIN-SUFFIX,immob.cn,REJECT
- DOMAIN-SUFFIX,inmobi.com,REJECT
- DOMAIN-SUFFIX,mobads.baidu.com,REJECT
- DOMAIN-SUFFIX,mobads-logs.baidu.com,REJECT
- DOMAIN-SUFFIX,smartadserver.com,REJECT
- DOMAIN-SUFFIX,tapjoyads.com,REJECT
- DOMAIN-SUFFIX,umeng.co,REJECT
- DOMAIN-SUFFIX,umeng.com,REJECT
- DOMAIN-SUFFIX,umtrack.com,REJECT
- DOMAIN-SUFFIX,uyunad.com,REJECT
- DOMAIN-SUFFIX,youmi.net,REJECT'."\n";
- $isget=array();
- foreach ($gfwlist as $index=>$rule) {
- if (empty($rule)) {
- continue;
- } elseif (substr($rule, 0, 1) == '!' || substr($rule, 0, 1) == '[') {
- continue;
- }
- if (substr($rule, 0, 2) == '@@') {
- // ||开头表示前面还有路径
- if (substr($rule, 2, 2) =='||') {
- //$rule_reg = preg_match("/^((http|https):\/\/)?([^\/]+)/i",substr($rule, 2), $matches);
- $host = substr($rule, 4);
- //preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN,".$host.",DIRECT,force-remote-dns\n";
- continue;
- // !开头相当于正则表达式^
- } elseif (substr($rule, 2, 1) == '|') {
- preg_match("/(\d{1,3}\.){3}\d{1,3}/", substr($rule, 3), $matches);
- if (!isset($matches[0])) {
- continue;
- }
- $host = $matches[0];
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="IP-CIDR,".$host."/32,DIRECT,no-resolve \n";
- continue;
- } else {
- preg_match_all("~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~i", substr($rule, 3), $matches);
- if (!isset($matches[4][0])) {
- continue;
- }
- $host = $matches[4][0];
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN-SUFFIX,".$host.",DIRECT,force-remote-dns\n";
- continue;
- }
- }
- } elseif (substr($rule, 2, 1) == '.') {
- $host = substr($rule, 3);
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN-SUFFIX,".$host.",DIRECT,force-remote-dns \n";
- continue;
- }
- }
- }
- // ||开头表示前面还有路径
- if (substr($rule, 0, 2) =='||') {
- //$rule_reg = preg_match("/^((http|https):\/\/)?([^\/]+)/i",substr($rule, 2), $matches);
- $host = substr($rule, 2);
- //preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
- if (strpos($host, "*")!==false) {
- $host = substr($host, strpos($host, "*")+1);
- if (strpos($host, ".")!==false) {
- $host = substr($host, strpos($host, ".")+1);
- }
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN-KEYWORD,".$host.",Proxy,force-remote-dns\n";
- continue;
- }
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN,".$host.",Proxy,force-remote-dns\n";
- // !开头相当于正则表达式^
- } elseif (substr($rule, 0, 1) == '|') {
- preg_match("/(\d{1,3}\.){3}\d{1,3}/", substr($rule, 1), $matches);
- if (!isset($matches[0])) {
- continue;
- }
- $host = $matches[0];
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="IP-CIDR,".$host."/32,Proxy,no-resolve \n";
- continue;
- } else {
- preg_match_all("~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~i", substr($rule, 1), $matches);
- if (!isset($matches[4][0])) {
- continue;
- }
- $host = $matches[4][0];
- if (strpos($host, "*")!==false) {
- $host = substr($host, strpos($host, "*")+1);
- if (strpos($host, ".")!==false) {
- $host = substr($host, strpos($host, ".")+1);
- }
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN-KEYWORD,".$host.",Proxy,force-remote-dns\n";
- continue;
- }
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN-SUFFIX,".$host.",Proxy,force-remote-dns\n";
- continue;
- }
- }
- } else {
- $host = substr($rule, 0);
- if (strpos($host, "/")!==false) {
- $host = substr($host, 0, strpos($host, "/"));
- }
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- $find_function_content.="DOMAIN-KEYWORD,".$host.",PROXY,force-remote-dns \n";
- continue;
- }
- }
- $count = $count + 1;
- }
- $find_function_content.='
- DOMAIN-KEYWORD,google,Proxy,force-remote-dns
- IP-CIDR,91.108.4.0/22,Proxy,no-resolve
- IP-CIDR,91.108.56.0/22,Proxy,no-resolve
- IP-CIDR,109.239.140.0/24,Proxy,no-resolve
- IP-CIDR,149.154.160.0/20,Proxy,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- GEOIP,CN,DIRECT
- FINAL,DIRECT
- ';
- $pac_content.=$find_function_content;
- return $pac_content;
- }
- private static function GetSurgeGeo($passwd, $method, $server, $port)
- {
- return '
- [General]
- skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local
- bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
- dns-server = 119.29.29.29, 223.5.5.5, 114.114.114.114
- loglevel = notify
- [Proxy]
- Proxy = custom,'.$server.','.$port.','.$method.','.$passwd.','.Config::get('baseUrl').'/downloads/SSEncrypt.module
- [Rule]
- DOMAIN-KEYWORD,adsmogo,REJECT
- DOMAIN-SUFFIX,acs86.com,REJECT
- DOMAIN-SUFFIX,adcome.cn,REJECT
- DOMAIN-SUFFIX,adinfuse.com,REJECT
- DOMAIN-SUFFIX,admaster.com.cn,REJECT
- DOMAIN-SUFFIX,admob.com,REJECT
- DOMAIN-SUFFIX,adsage.cn,REJECT
- DOMAIN-SUFFIX,adsage.com,REJECT
- DOMAIN-SUFFIX,adsmogo.org,REJECT
- DOMAIN-SUFFIX,ads.mobclix.com,REJECT
- DOMAIN-SUFFIX,adview.cn,REJECT
- DOMAIN-SUFFIX,adwhirl.com,REJECT
- DOMAIN-SUFFIX,adwo.com,REJECT
- DOMAIN-SUFFIX,appads.com,REJECT
- DOMAIN-SUFFIX,domob.cn,REJECT
- DOMAIN-SUFFIX,domob.com.cn,REJECT
- DOMAIN-SUFFIX,domob.org,REJECT
- DOMAIN-SUFFIX,doubleclick.net,REJECT
- DOMAIN-SUFFIX,duomeng.cn,REJECT
- DOMAIN-SUFFIX,duomeng.net,REJECT
- DOMAIN-SUFFIX,duomeng.org,REJECT
- DOMAIN-SUFFIX,googeadsserving.cn,REJECT
- DOMAIN-SUFFIX,guomob.com,REJECT
- DOMAIN-SUFFIX,immob.cn,REJECT
- DOMAIN-SUFFIX,inmobi.com,REJECT
- DOMAIN-SUFFIX,mobads.baidu.com,REJECT
- DOMAIN-SUFFIX,mobads-logs.baidu.com,REJECT
- DOMAIN-SUFFIX,smartadserver.com,REJECT
- DOMAIN-SUFFIX,tapjoyads.com,REJECT
- DOMAIN-SUFFIX,umeng.co,REJECT
- DOMAIN-SUFFIX,umeng.com,REJECT
- DOMAIN-SUFFIX,umtrack.com,REJECT
- DOMAIN-SUFFIX,uyunad.com,REJECT
- DOMAIN-SUFFIX,youmi.net,REJECT
- GEOIP,AD,Proxy
- GEOIP,AE,Proxy
- GEOIP,AF,Proxy
- GEOIP,AG,Proxy
- GEOIP,AI,Proxy
- GEOIP,AL,Proxy
- GEOIP,AM,Proxy
- GEOIP,AO,Proxy
- GEOIP,AQ,Proxy
- GEOIP,AR,Proxy
- GEOIP,AS,Proxy
- GEOIP,AS,Proxy
- GEOIP,AS,Proxy
- GEOIP,AS,Proxy
- GEOIP,AT,Proxy
- GEOIP,AU,Proxy
- GEOIP,AW,Proxy
- GEOIP,AX,Proxy
- GEOIP,AZ,Proxy
- GEOIP,BA,Proxy
- GEOIP,BD,Proxy
- GEOIP,BE,Proxy
- GEOIP,BF,Proxy
- GEOIP,BG,Proxy
- GEOIP,BH,Proxy
- GEOIP,BI,Proxy
- GEOIP,BJ,Proxy
- GEOIP,BL,Proxy
- GEOIP,BM,Proxy
- GEOIP,BN,Proxy
- GEOIP,BO,Proxy
- GEOIP,BQ,Proxy
- GEOIP,BR,Proxy
- GEOIP,BS,Proxy
- GEOIP,BT,Proxy
- GEOIP,BW,Proxy
- GEOIP,BY,Proxy
- GEOIP,BZ,Proxy
- GEOIP,CA,Proxy
- GEOIP,CC,Proxy
- GEOIP,CD,Proxy
- GEOIP,CF,Proxy
- GEOIP,CG,Proxy
- GEOIP,CH,Proxy
- GEOIP,CI,Proxy
- GEOIP,CK,Proxy
- GEOIP,CL,Proxy
- GEOIP,CM,Proxy
- GEOIP,CO,Proxy
- GEOIP,CR,Proxy
- GEOIP,CU,Proxy
- GEOIP,CV,Proxy
- GEOIP,CW,Proxy
- GEOIP,CX,Proxy
- GEOIP,CY,Proxy
- GEOIP,CZ,Proxy
- GEOIP,DE,Proxy
- GEOIP,DJ,Proxy
- GEOIP,DK,Proxy
- GEOIP,DM,Proxy
- GEOIP,DO,Proxy
- GEOIP,DZ,Proxy
- GEOIP,EC,Proxy
- GEOIP,EE,Proxy
- GEOIP,EG,Proxy
- GEOIP,EG,Proxy
- GEOIP,EH,Proxy
- GEOIP,ER,Proxy
- GEOIP,ES,Proxy
- GEOIP,ET,Proxy
- GEOIP,FI,Proxy
- GEOIP,FJ,Proxy
- GEOIP,FK,Proxy
- GEOIP,FM,Proxy
- GEOIP,FO,Proxy
- GEOIP,FR,Proxy
- GEOIP,GA,Proxy
- GEOIP,GB,Proxy
- GEOIP,GD,Proxy
- GEOIP,GE,Proxy
- GEOIP,GF,Proxy
- GEOIP,GG,Proxy
- GEOIP,GH,Proxy
- GEOIP,GI,Proxy
- GEOIP,GL,Proxy
- GEOIP,GM,Proxy
- GEOIP,GN,Proxy
- GEOIP,GP,Proxy
- GEOIP,GQ,Proxy
- GEOIP,GR,Proxy
- GEOIP,GS,Proxy
- GEOIP,GT,Proxy
- GEOIP,GU,Proxy
- GEOIP,GW,Proxy
- GEOIP,GY,Proxy
- GEOIP,HK,Proxy
- GEOIP,HM,Proxy
- GEOIP,HN,Proxy
- GEOIP,HR,Proxy
- GEOIP,HT,Proxy
- GEOIP,HU,Proxy
- GEOIP,ID,Proxy
- GEOIP,IE,Proxy
- GEOIP,IL,Proxy
- GEOIP,IM,Proxy
- GEOIP,IN,Proxy
- GEOIP,IO,Proxy
- GEOIP,IQ,Proxy
- GEOIP,IR,Proxy
- GEOIP,IS,Proxy
- GEOIP,IT,Proxy
- GEOIP,JE,Proxy
- GEOIP,JM,Proxy
- GEOIP,JO,Proxy
- GEOIP,JP,Proxy
- GEOIP,KE,Proxy
- GEOIP,KG,Proxy
- GEOIP,KH,Proxy
- GEOIP,KI,Proxy
- GEOIP,KM,Proxy
- GEOIP,KN,Proxy
- GEOIP,KP,Proxy
- GEOIP,KR,Proxy
- GEOIP,KW,Proxy
- GEOIP,KY,Proxy
- GEOIP,KZ,Proxy
- GEOIP,LA,Proxy
- GEOIP,LB,Proxy
- GEOIP,LC,Proxy
- GEOIP,LI,Proxy
- GEOIP,LK,Proxy
- GEOIP,LR,Proxy
- GEOIP,LS,Proxy
- GEOIP,LT,Proxy
- GEOIP,LU,Proxy
- GEOIP,LV,Proxy
- GEOIP,LY,Proxy
- GEOIP,MA,Proxy
- GEOIP,MC,Proxy
- GEOIP,MD,Proxy
- GEOIP,ME,Proxy
- GEOIP,MF,Proxy
- GEOIP,MG,Proxy
- GEOIP,MH,Proxy
- GEOIP,MK,Proxy
- GEOIP,ML,Proxy
- GEOIP,MM,Proxy
- GEOIP,MN,Proxy
- GEOIP,MO,Proxy
- GEOIP,MP,Proxy
- GEOIP,MQ,Proxy
- GEOIP,MR,Proxy
- GEOIP,MS,Proxy
- GEOIP,MT,Proxy
- GEOIP,MU,Proxy
- GEOIP,MV,Proxy
- GEOIP,MW,Proxy
- GEOIP,MX,Proxy
- GEOIP,MY,Proxy
- GEOIP,MZ,Proxy
- GEOIP,NA,Proxy
- GEOIP,NC,Proxy
- GEOIP,NE,Proxy
- GEOIP,NF,Proxy
- GEOIP,NG,Proxy
- GEOIP,NI,Proxy
- GEOIP,NL,Proxy
- GEOIP,NO,Proxy
- GEOIP,NP,Proxy
- GEOIP,NR,Proxy
- GEOIP,NU,Proxy
- GEOIP,NZ,Proxy
- GEOIP,OM,Proxy
- GEOIP,PA,Proxy
- GEOIP,PE,Proxy
- GEOIP,PF,Proxy
- GEOIP,PG,Proxy
- GEOIP,PH,Proxy
- GEOIP,PK,Proxy
- GEOIP,PL,Proxy
- GEOIP,PM,Proxy
- GEOIP,PN,Proxy
- GEOIP,PR,Proxy
- GEOIP,PS,Proxy
- GEOIP,PT,Proxy
- GEOIP,PW,Proxy
- GEOIP,PY,Proxy
- GEOIP,QA,Proxy
- GEOIP,RE,Proxy
- GEOIP,RO,Proxy
- GEOIP,RS,Proxy
- GEOIP,RU,Proxy
- GEOIP,RW,Proxy
- GEOIP,SA,Proxy
- GEOIP,SB,Proxy
- GEOIP,SC,Proxy
- GEOIP,SD,Proxy
- GEOIP,SE,Proxy
- GEOIP,SG,Proxy
- GEOIP,SH,Proxy
- GEOIP,SI,Proxy
- GEOIP,SJ,Proxy
- GEOIP,SK,Proxy
- GEOIP,SL,Proxy
- GEOIP,SM,Proxy
- GEOIP,SN,Proxy
- GEOIP,SO,Proxy
- GEOIP,SR,Proxy
- GEOIP,SS,Proxy
- GEOIP,ST,Proxy
- GEOIP,SV,Proxy
- GEOIP,SX,Proxy
- GEOIP,SY,Proxy
- GEOIP,SZ,Proxy
- GEOIP,TC,Proxy
- GEOIP,TD,Proxy
- GEOIP,TF,Proxy
- GEOIP,TG,Proxy
- GEOIP,TH,Proxy
- GEOIP,TJ,Proxy
- GEOIP,TK,Proxy
- GEOIP,TL,Proxy
- GEOIP,TM,Proxy
- GEOIP,TN,Proxy
- GEOIP,TO,Proxy
- GEOIP,TR,Proxy
- GEOIP,TT,Proxy
- GEOIP,TV,Proxy
- GEOIP,TW,Proxy
- GEOIP,TZ,Proxy
- GEOIP,UA,Proxy
- GEOIP,UG,Proxy
- GEOIP,UM,Proxy
- GEOIP,US,Proxy
- GEOIP,UY,Proxy
- GEOIP,UZ,Proxy
- GEOIP,VA,Proxy
- GEOIP,VC,Proxy
- GEOIP,VE,Proxy
- GEOIP,VG,Proxy
- GEOIP,VI,Proxy
- GEOIP,VN,Proxy
- GEOIP,VU,Proxy
- GEOIP,WF,Proxy
- GEOIP,WS,Proxy
- GEOIP,YE,Proxy
- GEOIP,YT,Proxy
- GEOIP,ZA,Proxy
- GEOIP,ZM,Proxy
- GEOIP,ZW,Proxy
- IP-CIDR,91.108.4.0/22,Proxy,no-resolve
- IP-CIDR,91.108.56.0/22,Proxy,no-resolve
- IP-CIDR,109.239.140.0/24,Proxy,no-resolve
- IP-CIDR,149.154.160.0/20,Proxy,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- GEOIP,CN,DIRECT
- FINAL,Proxy';
- }
- private static function GetApn($apn, $server, $port)
- {
- return '
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>PayloadContent</key>
- <array>
- <dict>
- <key>PayloadContent</key>
- <array>
- <dict>
- <key>DefaultsData</key>
- <dict>
- <key>apns</key>
- <array>
- <dict>
- <key>apn</key>
- <string>'.$apn.'</string>
- <key>proxy</key>
- <string>'.$server.'</string>
- <key>proxyPort</key>
- <integer>'.$port.'</integer>
- </dict>
- </array>
- </dict>
- <key>DefaultsDomainName</key>
- <string>com.apple.managedCarrier</string>
- </dict>
- </array>
- <key>PayloadDescription</key>
- <string>提供对营运商“接入点名称”的自定义。</string>
- <key>PayloadDisplayName</key>
- <string>APN</string>
- <key>PayloadIdentifier</key>
- <string>com.tony.APNUNI'.$server.'.</string>
- <key>PayloadOrganization</key>
- <string>Tony</string>
- <key>PayloadType</key>
- <string>com.apple.apn.managed</string>
- <key>PayloadUUID</key>
- <string>7AC1FC00-7670-41CA-9EE1-4A5882DBD'.rand(100, 999).'D</string>
- <key>PayloadVersion</key>
- <integer>1</integer>
- </dict>
- </array>
- <key>PayloadDescription</key>
- <string>APN配置文件</string>
- <key>PayloadDisplayName</key>
- <string>APN快速配置 - '.$server.' ('.$apn.')</string>
- <key>PayloadIdentifier</key>
- <string>com.tony.APNUNI'.$server.'</string>
- <key>PayloadOrganization</key>
- <string>Tony</string>
- <key>PayloadRemovalDisallowed</key>
- <false/>
- <key>PayloadType</key>
- <string>Configuration</string>
- <key>PayloadUUID</key>
- <string>4C355D66-E72E-4DC8-864F-62C416015'.rand(100, 999).'D</string>
- <key>PayloadVersion</key>
- <integer>1</integer>
- </dict>
- </plist>
- ';
- }
- private static function GetPac($type, $address, $port, $defined)
- {
- header('Content-type: application/x-ns-proxy-autoconfig; charset=utf-8');
- return LinkController::get_pac($type, $address, $port, true, $defined);
- }
- private static function GetMacPac()
- {
- header('Content-type: application/x-ns-proxy-autoconfig; charset=utf-8');
- return LinkController::get_mac_pac();
- }
- private static function GetAcl($user)
- {
- $rulelist = base64_decode(file_get_contents("https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"))."\n".$user->pac;
- $gfwlist = explode("\n", $rulelist);
- $count = 0;
- $acl_content = '';
- $find_function_content = '
- #Generated by sspanel-glzjin-mod v3
- #Time:'.date('Y-m-d H:i:s').'
- [bypass_all]
- ';
- $proxy_list = '[proxy_list]
- ';
- $bypass_list = '[bypass_list]
- ';
- $outbound_block_list = '[outbound_block_list]
- ';
- $isget=array();
- foreach ($gfwlist as $index=>$rule) {
- if (empty($rule)) {
- continue;
- } elseif (substr($rule, 0, 1) == '!' || substr($rule, 0, 1) == '[') {
- continue;
- }
- if (substr($rule, 0, 2) == '@@') {
- // ||开头表示前面还有路径
- if (substr($rule, 2, 2) =='||') {
- //$rule_reg = preg_match("/^((http|https):\/\/)?([^\/]+)/i",substr($rule, 2), $matches);
- $host = substr($rule, 4);
- //preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN,".$host.",DIRECT,force-remote-dns\n";
- $bypass_list .= $host."\n";
- continue;
- // !开头相当于正则表达式^
- } elseif (substr($rule, 2, 1) == '|') {
- preg_match("/(\d{1,3}\.){3}\d{1,3}/", substr($rule, 3), $matches);
- if (!isset($matches[0])) {
- continue;
- }
- $host = $matches[0];
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="IP-CIDR,".$host."/32,DIRECT,no-resolve \n";
- $bypass_list .= $host."/32\n";
- continue;
- } else {
- preg_match_all("~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~i", substr($rule, 3), $matches);
- if (!isset($matches[4][0])) {
- continue;
- }
- $host = $matches[4][0];
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN-SUFFIX,".$host.",DIRECT,force-remote-dns\n";
- $bypass_list .= $host."\n";
- continue;
- }
- }
- } elseif (substr($rule, 2, 1) == '.') {
- $host = substr($rule, 3);
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN-SUFFIX,".$host.",DIRECT,force-remote-dns \n";
- $bypass_list .= $host."\n";
- continue;
- }
- }
- }
- // ||开头表示前面还有路径
- if (substr($rule, 0, 2) =='||') {
- //$rule_reg = preg_match("/^((http|https):\/\/)?([^\/]+)/i",substr($rule, 2), $matches);
- $host = substr($rule, 2);
- //preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
- if (strpos($host, "*")!==false) {
- $host = substr($host, strpos($host, "*")+1);
- if (strpos($host, ".")!==false) {
- $host = substr($host, strpos($host, ".")+1);
- }
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN-KEYWORD,".$host.",Proxy,force-remote-dns\n";
- $proxy_list .= $host."\n";
- continue;
- }
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN,".$host.",Proxy,force-remote-dns\n";
- $proxy_list .= $host."\n";
- // !开头相当于正则表达式^
- } elseif (substr($rule, 0, 1) == '|') {
- preg_match("/(\d{1,3}\.){3}\d{1,3}/", substr($rule, 1), $matches);
- if (!isset($matches[0])) {
- continue;
- }
- $host = $matches[0];
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- preg_match("/(\d{1,3}\.){3}\d{1,3}\/\d{1,2}/", substr($rule, 1), $matches_ips);
- if (!isset($matches_ips[0])) {
- $proxy_list .= $host."/32\n";
- } else {
- $host = $matches_ips[0];
- $proxy_list .= $host."\n";
- }
- //$find_function_content.="IP-CIDR,".$host."/32,Proxy,no-resolve \n";
- continue;
- } else {
- preg_match_all("~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~i", substr($rule, 1), $matches);
- if (!isset($matches[4][0])) {
- continue;
- }
- $host = $matches[4][0];
- if (strpos($host, "*")!==false) {
- $host = substr($host, strpos($host, "*")+1);
- if (strpos($host, ".")!==false) {
- $host = substr($host, strpos($host, ".")+1);
- }
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN-KEYWORD,".$host.",Proxy,force-remote-dns\n";
- $proxy_list .= $host."\n";
- continue;
- }
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN-SUFFIX,".$host.",Proxy,force-remote-dns\n";
- $proxy_list .= $host."\n";
- continue;
- }
- }
- } else {
- $host = substr($rule, 0);
- if (strpos($host, "/")!==false) {
- $host = substr($host, 0, strpos($host, "/"));
- }
- if ($host != "") {
- if (isset($isget[$host])) {
- continue;
- }
- $isget[$host]=1;
- //$find_function_content.="DOMAIN-KEYWORD,".$host.",PROXY,force-remote-dns \n";
- $proxy_list .= $host."\n";
- continue;
- }
- }
- $count = $count + 1;
- }
- $acl_content .= $find_function_content."\n".$proxy_list."\n".$bypass_list."\n".$outbound_block_list;
- return $acl_content;
- }
- /**
- * This is a php implementation of autoproxy2pac
- */
- private static function reg_encode($str)
- {
- $tmp_str = $str;
- $tmp_str = str_replace('/', "\\/", $tmp_str);
- $tmp_str = str_replace('.', "\\.", $tmp_str);
- $tmp_str = str_replace(':', "\\:", $tmp_str);
- $tmp_str = str_replace('%', "\\%", $tmp_str);
- $tmp_str = str_replace('*', ".*", $tmp_str);
- $tmp_str = str_replace('-', "\\-", $tmp_str);
- $tmp_str = str_replace('&', "\\&", $tmp_str);
- $tmp_str = str_replace('?', "\\?", $tmp_str);
- $tmp_str = str_replace('+', "\\+", $tmp_str);
- return $tmp_str;
- }
- private static function get_pac($proxy_type, $proxy_host, $proxy_port, $proxy_google, $defined)
- {
- $rulelist = base64_decode(file_get_contents("https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"))."\n".$defined;
- $gfwlist = explode("\n", $rulelist);
- if ($proxy_google == "true") {
- $gfwlist[] = ".google.com";
- }
- $count = 0;
- $pac_content = '';
- $find_function_content = 'function FindProxyForURL(url, host) { var PROXY = "'.$proxy_type.' '.$proxy_host.':'.$proxy_port.'; DIRECT"; var DEFAULT = "DIRECT";'."\n";
- foreach ($gfwlist as $index=>$rule) {
- if (empty($rule)) {
- continue;
- } elseif (substr($rule, 0, 1) == '!' || substr($rule, 0, 1) == '[') {
- continue;
- }
- $return_proxy = 'PROXY';
- // @@开头表示默认是直接访问
- if (substr($rule, 0, 2) == '@@') {
- $rule = substr($rule, 2);
- $return_proxy = "DEFAULT";
- }
- // ||开头表示前面还有路径
- if (substr($rule, 0, 2) =='||') {
- $rule_reg = "^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?".LinkController::reg_encode(substr($rule, 2));
- // !开头相当于正则表达式^
- } elseif (substr($rule, 0, 1) == '|') {
- $rule_reg = "^" . LinkController::reg_encode(substr($rule, 1));
- // 前后匹配的/表示精确匹配
- } elseif (substr($rule, 0, 1) == '/' && substr($rule, -1) == '/') {
- $rule_reg = substr($rule, 1, strlen($rule) - 2);
- } else {
- $rule_reg = LinkController::reg_encode($rule);
- }
- // 以|结尾,替换为$结尾
- if (preg_match("/\|$/i", $rule_reg)) {
- $rule_reg = substr($rule_reg, 0, strlen($rule_reg) - 1)."$";
- }
- $find_function_content.='if (/' . $rule_reg . '/i.test(url)) return '.$return_proxy.';'."\n";
- $count = $count + 1;
- }
- $find_function_content.='return DEFAULT;'."}";
- $pac_content.=$find_function_content;
- return $pac_content;
- }
- private static function get_mac_pac()
- {
- $rulelist = base64_decode(file_get_contents("https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"));
- $gfwlist = explode("\n", $rulelist);
- $gfwlist[] = ".google.com";
- $count = 0;
- $pac_content = '';
- $find_function_content = 'function FindProxyForURL(url, host) { var PROXY = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;"; var DEFAULT = "DIRECT";'."\n";
- foreach ($gfwlist as $index=>$rule) {
- if (empty($rule)) {
- continue;
- } elseif (substr($rule, 0, 1) == '!' || substr($rule, 0, 1) == '[') {
- continue;
- }
- $return_proxy = 'PROXY';
- // @@开头表示默认是直接访问
- if (substr($rule, 0, 2) == '@@') {
- $rule = substr($rule, 2);
- $return_proxy = "DEFAULT";
- }
- // ||开头表示前面还有路径
- if (substr($rule, 0, 2) =='||') {
- $rule_reg = "^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?".LinkController::reg_encode(substr($rule, 2));
- // !开头相当于正则表达式^
- } elseif (substr($rule, 0, 1) == '|') {
- $rule_reg = "^" . LinkController::reg_encode(substr($rule, 1));
- // 前后匹配的/表示精确匹配
- } elseif (substr($rule, 0, 1) == '/' && substr($rule, -1) == '/') {
- $rule_reg = substr($rule, 1, strlen($rule) - 2);
- } else {
- $rule_reg = LinkController::reg_encode($rule);
- }
- // 以|结尾,替换为$结尾
- if (preg_match("/\|$/i", $rule_reg)) {
- $rule_reg = substr($rule_reg, 0, strlen($rule_reg) - 1)."$";
- }
- $find_function_content.='if (/' . $rule_reg . '/i.test(url)) return '.$return_proxy.';'."\n";
- $count = $count + 1;
- }
- $find_function_content.='return DEFAULT;'."}";
- $pac_content.=$find_function_content;
- return $pac_content;
- }
- public static function GetRouter($user, $is_mu = 0, $is_ss = 0)
- {
- $bash = '#!/bin/sh'."\n";
- $bash .= 'export PATH=\'/opt/usr/sbin:/opt/usr/bin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin\''."\n";
- $bash .= 'export LD_LIBRARY_PATH=/lib:/opt/lib'."\n";
- $bash .= 'nvram set ss_type='.($is_ss == 1 ? '0' : '1')."\n";
- $count = 0;
- $items = URL::getAllItems($user, $is_mu, $is_ss);
- foreach($items as $item) {
- if($is_ss == 0) {
- $bash .= 'nvram set rt_ss_name_x'.$count.'="'.$item['remark']."\"\n";
- $bash .= 'nvram set rt_ss_port_x'.$count.'='.$item['port']."\n";
- $bash .= 'nvram set rt_ss_password_x'.$count.'="'.$item['passwd']."\"\n";
- $bash .= 'nvram set rt_ss_server_x'.$count.'='.$item['address']."\n";
- $bash .= 'nvram set rt_ss_usage_x'.$count.'="'."-o ".$item['obfs']." -g ".$item['obfs_param']." -O ".$item['protocol']." -G ".$item['protocol_param']."\"\n";
- $bash .= 'nvram set rt_ss_method_x'.$count.'='.$item['method']."\n";
- $count += 1;
- }else{
- $bash .= 'nvram set rt_ss_name_x'.$count.'="'.$item['remark']."\"\n";
- $bash .= 'nvram set rt_ss_port_x'.$count.'='.$item['port']."\n";
- $bash .= 'nvram set rt_ss_password_x'.$count.'="'.$item['passwd']."\"\n";
- $bash .= 'nvram set rt_ss_server_x'.$count.'='.$item['address']."\n";
- $bash .= 'nvram set rt_ss_usage_x'.$count.'=""'."\n";
- $bash .= 'nvram set rt_ss_method_x'.$count.'='.$item['method']."\n";
- $count += 1;
- }
- }
- $bash .= "nvram set rt_ssnum_x=".$count."\n";
- return $bash;
- }
- public static function GetSSRSub($user, $mu = 0, $max = 0)
- {
- return Tools::base64_url_encode(URL::getAllUrl($user, $mu, 0, 1));
- }
- }
|