From 4f21fd891f221e35fb31f3d5557256331e76d89b Mon Sep 17 00:00:00 2001 From: Shawn <45581750+KOP-XIAO@users.noreply.github.com> Date: Mon, 1 Jun 2020 10:49:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=AA=E7=9F=A5=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E6=97=B6=E9=94=99=E8=AF=AF=E9=87=8D=E5=A4=8D=E6=9C=80?= =?UTF-8?q?=E5=90=8E=E4=B8=80=E4=B8=AA=E8=8A=82=E7=82=B9=E7=9A=84=20bug?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=94=AF=E6=8C=81=E9=83=A8=E5=88=86?= =?UTF-8?q?=20https=20=E6=A0=BC=E5=BC=8F=E7=9A=84URI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Scripts/resource-parser.js | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/Scripts/resource-parser.js b/Scripts/resource-parser.js index f2c6695..2c9f067 100644 --- a/Scripts/resource-parser.js +++ b/Scripts/resource-parser.js @@ -1,11 +1,11 @@ /** -# Quantumult X 资源解析器 (2020-05-31: 12:59 ) +# Quantumult X 资源解析器 (2020-06-01: 10:59 ) 解析器作者: Shawn(请勿私聊问怎么用) 有bug请反馈: @Shawn_KOP_bot 更新请关注tg频道: https://t.me/QuanX_API -主要功能: 将各类服务器订阅解析成 QuantumultX 格式引用(支持 V2RayN/SSR/SS/Trojan/QuanX(conf&list)/Surge(conf&list)格式),并提供 1⃣️ 中的可选参数; +主要功能: 将各类服务器订阅解析成 QuantumultX 格式引用(支持 V2RayN/SSR/SS/Trojan/QuanX(conf&list)/Surge(conf&list)/https(仅部分格式) 订阅),并提供 1⃣️ 中的可选参数; 附加功能: rewrite(重写) /filter(分流) 过滤, 可用于解决无法单独禁用远程引用中某(几)条 rewrite/hostname/filter, 以及直接导入 Surge 类型规则 list 的问题 @@ -397,14 +397,16 @@ function SubsEd2QX(subs,Pudp,Ptfo,Pcert,Ptls13){ var QuanXK=["shadowsocks=","trojan=","vmess=","http="]; var SurgeK=["=ss","=vmess","=trojan","=http","=custom"]; var QXlist=[]; - var node="" for(i=0;i3){ var type=list0[i].split("://")[0].trim() + //$notify(type) var listi=list0[i].replace(/ /g,"") const QuanXCheck = (item) => listi.toLowerCase().indexOf(item)!=-1; const SurgeCheck = (item) => listi.toLowerCase().indexOf(item)!=-1; if(type=="vmess"){ + node= V2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13) }else if(type=="ssr"){ node= SSR2QX(list0[i],Pudp,Ptfo) @@ -412,6 +414,8 @@ function SubsEd2QX(subs,Pudp,Ptfo,Pcert,Ptls13){ node = SS2QX(list0[i],Pudp,Ptfo) }else if(type=="trojan"){ node = TJ2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13) + }else if(type="https"){ //subs,Ptfo,Pcert,Ptls13 + node = HPS2QX(list0[i],Ptfo,Pcert,Ptls13) }else if(QuanXK.some(QuanXCheck)){ node = list0[i] }else if(SurgeK.some(SurgeCheck)){ @@ -431,8 +435,8 @@ function Subs2QX(subs,Pudp,Ptfo,Pcert,Ptls13){ var QuanXK=["shadowsocks=","trojan=","vmess=","http="]; var SurgeK=["=ss","=vmess","=trojan","=http"]; var QXlist=[]; - var node="" for(i=0;i3){ var type=list0[i].split("://")[0].trim() var listi=list0[i].replace(/ /g,"") @@ -446,6 +450,8 @@ function Subs2QX(subs,Pudp,Ptfo,Pcert,Ptls13){ node = SS2QX(list0[i],Pudp,Ptfo) }else if(type=="trojan"){ node = TJ2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13) + }else if(type="https"){ + node = HPS2QX(list0[i],Ptfo,Pcert,Ptls13) }else if(QuanXK.some(QuanXCheck)){ node = list0[i] }else if(SurgeK.some(SurgeCheck)){ @@ -488,7 +494,27 @@ function TagCheck_QX(content){ } return Nlist } - +//http=example.com:443, username=name, password=pwd, over-tls=true, tls-host=example.com, tls-verification=true, tls13=true, fast-open=false, udp-relay=false, tag=http-tls-02 +//HTTPS 类型 URI 转换成 QUANX 格式 +function HPS2QX(subs,Ptfo,Pcert,Ptls13){ + + var server=Base64.decode(subs.replace("https://","")).trim().split("\u0000")[0]; + var nss=[] + if(server!=""){ + var ipport="http="+server.split("@")[1].split("#")[0].split("/")[0]; + var uname="username="+server.split(":")[0]; + var pwd="password="+server.split("@")[0].split(":")[1]; + var tag="tag="+server.split("#")[1]; + var tls="over-tls=true"; + var cert=Pcert!=0? "tls-verification=true":"tls-verification=false"; + var tfo=Ptfo==1? "fast-open=true":"fast-open=false"; + var tls13=Ptls13==1? "tls13=true":"tls13=false"; + nss.push(ipport,uname,pwd,tls,cert,tfo,tls13,tag) + } + var QX=nss.join(","); + return QX + //$notify("ts","content",QX) +} //V2RayN uri转换成 QUANX 格式 function V2QX(subs,Pudp,Ptfo,Pcert,Ptls13){