@@ -429,7 +429,7 @@ export default {
429429 }
430430 } ) . filter ( item => item !== null ) . join ( '\n' ) ;
431431 } else { // 订阅转换
432- const 订阅转换URL = `${ config_JSON . 订阅转换配置 . SUBAPI } /sub?target=${ 订阅类型 } &url=${ encodeURIComponent ( url . protocol + '//' + url . host + '/sub?target=mixed&token=' + 今日订阅转换后端专属TOKEN + ( url . searchParams . has ( 'sub' ) && url . searchParams . get ( 'sub' ) != '' ? `&sub=${ url . searchParams . get ( 'sub' ) } ` : '' ) ) } &config=${ encodeURIComponent ( config_JSON . 订阅转换配置 . SUBCONFIG ) } &emoji=${ config_JSON . 订阅转换配置 . SUBEMOJI } &scv=${ config_JSON . 跳过证书验证 } ` ;
432+ const 订阅转换URL = `${ config_JSON . 订阅转换配置 . SUBAPI } /sub?target=${ 订阅类型 } &url=${ encodeURIComponent ( url . protocol + '//' + url . host + '/sub?target=mixed&token=' + 今日订阅转换后端专属TOKEN + '&asOrg=' + 识别运营商 ( request ) + ( url . searchParams . has ( 'sub' ) && url . searchParams . get ( 'sub' ) != '' ? `&sub=${ url . searchParams . get ( 'sub' ) } ` : '' ) ) } &config=${ encodeURIComponent ( config_JSON . 订阅转换配置 . SUBCONFIG ) } &emoji=${ config_JSON . 订阅转换配置 . SUBEMOJI } &scv=${ config_JSON . 跳过证书验证 } ` ;
433433 try {
434434 const response = await fetch ( 订阅转换URL , { headers : { 'User-Agent' : 'Subconverter for ' + 订阅类型 + ' edge' + 'tunnel (https://github.com/cmliu/edge' + 'tunnel)' } } ) ;
435435 if ( response . ok ) {
@@ -4677,17 +4677,48 @@ async function 读取config_JSON(env, hostname, userID, UA = "Mozilla/5.0", 重
46774677 return config_JSON ;
46784678}
46794679
4680+ function 识别运营商 ( request ) {
4681+ const cf = request ?. cf ;
4682+ const ASN运营商映射 = {
4683+ '4134' : 'ct' ,
4684+ '4809' : 'ct' ,
4685+ '4811' : 'ct' ,
4686+ '4812' : 'ct' ,
4687+ '4815' : 'ct' ,
4688+ '4837' : 'cu' ,
4689+ '4814' : 'cu' ,
4690+ '9929' : 'cu' ,
4691+ '17623' : 'cu' ,
4692+ '17816' : 'cu' ,
4693+ '9808' : 'cmcc' ,
4694+ '24400' : 'cmcc' ,
4695+ '56040' : 'cmcc' ,
4696+ '56041' : 'cmcc' ,
4697+ '56044' : 'cmcc' ,
4698+ } ;
4699+ const 运营商关键词映射 = [
4700+ { code : 'ct' , pattern : / c h i n a n e t | c h i n a t e l e c o m | c h i n a t e l e c o m | c n 2 | s h t e l / } ,
4701+ { code : 'cmcc' , pattern : / c m i | c m n e t | c h i n a m o b i l e | c h i n a m o b i l e | c m c c | m o b i l e c o m m u n i c a t i o n s / } ,
4702+ { code : 'cu' , pattern : / c h i n a 1 6 9 | c h i n a u n i c o m | c h i n a u n i c o m | c u c c | c n c g r o u p | c u i i | n e t c o m / } ,
4703+ ] ;
4704+ if ( String ( cf ?. country || '' ) . toLowerCase ( ) !== 'cn' ) return 'cf' ;
4705+ const 组织名称 = String ( cf ?. asOrganization || '' ) . toLowerCase ( ) ;
4706+ const 命中运营商 = 运营商关键词映射 . find ( ( { pattern } ) => pattern . test ( 组织名称 ) ) ?. code ;
4707+ return 命中运营商 || ASN运营商映射 [ String ( cf ?. asn || '' ) ] || 'cf' ;
4708+ }
4709+
46804710async function 生成随机IP ( request , count = 16 , 指定端口 = - 1 , TLS = true ) {
4681- const ISP配置 = {
4682- '9808' : { file : 'cmcc' , name : 'CF移动优选' } ,
4683- '4837' : { file : 'cu' , name : 'CF联通优选' } ,
4684- '17623' : { file : 'cu' , name : 'CF联通优选' } ,
4685- '17816' : { file : 'cu' , name : 'CF联通优选' } ,
4686- '4134' : { file : 'ct' , name : 'CF电信优选' } ,
4711+ const url = new URL ( request . url ) ;
4712+ const 查询参数运营商 = String ( url . searchParams . get ( 'asOrg' ) || '' ) . toLowerCase ( ) ;
4713+ const 运营商文件标识 = [ 'ct' , 'cu' , 'cmcc' , 'cf' ] . includes ( 查询参数运营商 ) ? 查询参数运营商 : 识别运营商 ( request ) ;
4714+ const 运营商名称映射 = {
4715+ cmcc : 'CF移动优选' ,
4716+ cu : 'CF联通优选' ,
4717+ ct : 'CF电信优选' ,
4718+ cf : 'CF官方优选' ,
46874719 } ;
4688- const asn = request . cf . asn , isp = ISP配置 [ asn ] ;
4689- const cidr_url = isp ? `https://raw.githubusercontent.com/cmliu/cmliu/main/CF-CIDR/${ isp . file } .txt` : 'https://raw.githubusercontent.com/cmliu/cmliu/main/CF-CIDR.txt' ;
4690- const cfname = isp ?. name || 'CF官方优选' ;
4720+ const cidr_url = 运营商文件标识 === 'cf' ? 'https://raw.githubusercontent.com/cmliu/cmliu/main/CF-CIDR.txt' : `https://raw.githubusercontent.com/cmliu/cmliu/main/CF-CIDR/${ 运营商文件标识 } .txt` ;
4721+ const cfname = 运营商名称映射 [ 运营商文件标识 ] || 'CF官方优选' ;
46914722 const cfport = TLS ? [ 443 , 2053 , 2083 , 2087 , 2096 , 8443 ] : [ 80 , 8080 , 8880 , 2052 , 2082 , 2086 , 2095 ] ;
46924723 let cidrList = [ ] ;
46934724 try { const res = await fetch ( cidr_url ) ; cidrList = res . ok ? await 整理成数组 ( await res . text ( ) ) : [ '104.16.0.0/13' ] } catch { cidrList = [ '104.16.0.0/13' ] }
0 commit comments