update-02.01

This commit is contained in:
github-actions[bot] 2022-02-01 09:06:01 +08:00
parent 26864d9bb6
commit 107e9cdc4c
41 changed files with 760 additions and 524 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.44.09 PKG_VERSION:=0.44.16
PKG_RELEASE:=beta PKG_RELEASE:=beta
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash> PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>

View File

@ -107,10 +107,10 @@ end
local function is_watchdog() local function is_watchdog()
local ps_version = luci.sys.exec("ps --version 2>&1 |grep -c procps-ng |tr -d '\n'") local ps_version = luci.sys.exec("ps --version 2>&1 |grep -c procps-ng |tr -d '\n'")
if ps_version == "0" then if ps_version == "1" then
return luci.sys.call("ps |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0 return luci.sys.call("ps -efw |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0
else else
return luci.sys.call("ps -ef |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0 return luci.sys.call("ps -w |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0
end end
end end
@ -274,6 +274,10 @@ local function corever()
return uci:get("openclash", "config", "core_version") return uci:get("openclash", "config", "core_version")
end end
local function release_branch()
return uci:get("openclash", "config", "release_branch")
end
local function save_corever_branch() local function save_corever_branch()
if luci.http.formvalue("core_ver") then if luci.http.formvalue("core_ver") then
uci:set("openclash", "config", "core_version", luci.http.formvalue("core_ver")) uci:set("openclash", "config", "core_version", luci.http.formvalue("core_ver"))
@ -919,6 +923,7 @@ function action_update()
coretuncv = coretuncv(), coretuncv = coretuncv(),
opcv = opcv(), opcv = opcv(),
corever = corever(), corever = corever(),
release_branch = release_branch(),
upchecktime = upchecktime(), upchecktime = upchecktime(),
corelv = corelv(), corelv = corelv(),
oplv = oplv(); oplv = oplv();

View File

@ -163,6 +163,7 @@ o.rmempty = true
---- de_exkey ---- de_exkey
o = s:option(MultiValue, "de_ex_keyword", font_red..bold_on..translate("Exclude Keyword Match Default")..bold_off..font_off) o = s:option(MultiValue, "de_ex_keyword", font_red..bold_on..translate("Exclude Keyword Match Default")..bold_off..font_off)
o.rmempty = true o.rmempty = true
o:depends("sub_convert", 0)
o:value("过期时间") o:value("过期时间")
o:value("剩余流量") o:value("剩余流量")
o:value("TG群") o:value("TG群")

View File

@ -95,6 +95,16 @@ o.default = "150"
o.rmempty = true o.rmempty = true
o:depends("type", "url-test") o:depends("type", "url-test")
-- [[ interface-name ]]--
o = s:option(Value, "interface_name", translate("interface-name"))
o.rmempty = true
o.placeholder = translate("eth0")
-- [[ routing-mark ]]--
o = s:option(Value, "routing_mark", translate("routing-mark"))
o.rmempty = true
o.placeholder = translate("2333")
o = s:option(DynamicList, "other_group", translate("Other Group")) o = s:option(DynamicList, "other_group", translate("Other Group"))
o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off
uci:foreach("openclash", "groups", uci:foreach("openclash", "groups",

View File

@ -11,7 +11,7 @@ local uci = require "luci.model.uci".cursor()
m = SimpleForm("openclash", translate("Other Rule Providers List")) m = SimpleForm("openclash", translate("Other Rule Providers List"))
m.description=translate("Rule Project:").." ConnersHua ( https://github.com/DivineEngine/Profiles )<br/>".. m.description=translate("Rule Project:").." ConnersHua ( https://github.com/DivineEngine/Profiles )<br/>"..
translate("Rule Project:").." lhie1 ( https://github.com/lhie1/Rules )<br/>".. translate("Rule Project:").." lhie1 ( https://github.com/dler-io/Rules )<br/>"..
translate("Rule Project:").." ACL4SSR ( https://github.com/ACL4SSR/ACL4SSR/tree/master )" translate("Rule Project:").." ACL4SSR ( https://github.com/ACL4SSR/ACL4SSR/tree/master )"
m.reset = false m.reset = false
m.submit = false m.submit = false

View File

@ -150,6 +150,11 @@ o = s:option(Value, "psk", translate("Psk"))
o.rmempty = false o.rmempty = false
o:depends("type", "snell") o:depends("type", "snell")
o = s:option(ListValue, "snell_version", translate("Version"))
o:value("2")
o:value("3")
o:depends("type", "snell")
o = s:option(ListValue, "cipher", translate("Encrypt Method")) o = s:option(ListValue, "cipher", translate("Encrypt Method"))
for _, v in ipairs(encrypt_methods_ss) do o:value(v) end for _, v in ipairs(encrypt_methods_ss) do o:value(v) end
o.rmempty = true o.rmempty = true
@ -204,6 +209,7 @@ o:depends("type", "ssr")
o:depends("type", "vmess") o:depends("type", "vmess")
o:depends("type", "socks5") o:depends("type", "socks5")
o:depends("type", "trojan") o:depends("type", "trojan")
o:depends({type = "snell", snell_version = "3"})
o = s:option(ListValue, "obfs", translate("obfs-mode")) o = s:option(ListValue, "obfs", translate("obfs-mode"))
o.rmempty = true o.rmempty = true
@ -398,7 +404,7 @@ o = s:option(Value, "interface_name", translate("interface-name"))
o.rmempty = true o.rmempty = true
o.placeholder = translate("eth0") o.placeholder = translate("eth0")
-- [[ interface-name ]]-- -- [[ routing-mark ]]--
o = s:option(Value, "routing_mark", translate("routing-mark")) o = s:option(Value, "routing_mark", translate("routing-mark"))
o.rmempty = true o.rmempty = true
o.placeholder = translate("2333") o.placeholder = translate("2333")

View File

@ -475,80 +475,122 @@ o = s:taboption("stream_enhance", Flag, "stream_auto_select_netflix", translate(
o.default=1 o.default=1
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_netflix", translate("Netflix Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_netflix", translate("Netflix Group Filter"))
o.default = "Netflix|奈飞" o.default = "Netflix|奈飞"
o.placeholder = "Netflix|奈飞" o.placeholder = "Netflix|奈飞"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_netflix", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_netflix", translate("Netflix Unlock Region Filter"))
o.default = ""
o.placeholder = "HK|SG|TW"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_netflix", "1") o:depends("stream_auto_select_netflix", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_disney", translate("Disney Plus")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_disney", translate("Disney Plus"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_disney", translate("Disney Plus Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_disney", translate("Disney Plus Group Filter"))
o.default = "Disney|迪士尼" o.default = "Disney|迪士尼"
o.placeholder = "Disney|迪士尼" o.placeholder = "Disney|迪士尼"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_disney", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_disney", translate("Disney Plus Unlock Region Filter"))
o.default = ""
o.placeholder = "HK|SG|TW"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_disney", "1") o:depends("stream_auto_select_disney", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_ytb", translate("YouTube Premium")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_ytb", translate("YouTube Premium"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_ytb", translate("YouTube Premium Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_ytb", translate("YouTube Premium Group Filter"))
o.default = "YouTube|油管" o.default = "YouTube|油管"
o.placeholder = "YouTube|油管" o.placeholder = "YouTube|油管"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_ytb", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_ytb", translate("YouTube Premium Unlock Region Filter"))
o.default = ""
o.placeholder = "HK|US"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_ytb", "1") o:depends("stream_auto_select_ytb", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_prime_video", translate("Amazon Prime Video")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_prime_video", translate("Amazon Prime Video"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_prime_video", translate("Amazon Prime Video Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_prime_video", translate("Amazon Prime Video Group Filter"))
o.default = "Amazon|Prime Video" o.default = "Amazon|Prime Video"
o.placeholder = "Amazon|Prime Video" o.placeholder = "Amazon|Prime Video"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_prime_video", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_prime_video", translate("Amazon Prime Video Unlock Region Filter"))
o.default = ""
o.placeholder = "HK|US|SG"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_prime_video", "1") o:depends("stream_auto_select_prime_video", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_now", translate("HBO Now")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_now", translate("HBO Now"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_now", translate("HBO Now Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_now", translate("HBO Now Group Filter"))
o.default = "HBO|HBONow|HBO Now" o.default = "HBO|HBONow|HBO Now"
o.placeholder = "HBO|HBONow|HBO Now" o.placeholder = "HBO|HBONow|HBO Now"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_hbo_now", "1") o:depends("stream_auto_select_hbo_now", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_max", translate("HBO Max")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_max", translate("HBO Max"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_max", translate("HBO Max Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_max", translate("HBO Max Group Filter"))
o.default = "HBO|HBOMax|HBO Max" o.default = "HBO|HBOMax|HBO Max"
o.placeholder = "HBO|HBOMax|HBO Max" o.placeholder = "HBO|HBOMax|HBO Max"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_hbo_max", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_hbo_max", translate("HBO Max Unlock Region Filter"))
o.default = ""
o.placeholder = "US"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_hbo_max", "1") o:depends("stream_auto_select_hbo_max", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_go_asia", translate("HBO GO Asia")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_go_asia", translate("HBO GO Asia"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_go_asia", translate("HBO GO Asia Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_hbo_go_asia", translate("HBO GO Asia Group Filter"))
o.default = "HBO|HBOGO|HBO GO" o.default = "HBO|HBOGO|HBO GO"
o.placeholder = "HBO|HBOGO|HBO GO" o.placeholder = "HBO|HBOGO|HBO GO"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_hbo_go_asia", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_hbo_go_asia", translate("HBO Max Unlock Region Filter"))
o.default = ""
o.placeholder = "HK|SG|TW"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_hbo_go_asia", "1") o:depends("stream_auto_select_hbo_go_asia", "1")
o = s:taboption("stream_enhance", Flag, "stream_auto_select_tvb_anywhere", translate("TVB Anywhere+")) o = s:taboption("stream_enhance", Flag, "stream_auto_select_tvb_anywhere", translate("TVB Anywhere+"))
o.default=0 o.default=0
o:depends("stream_auto_select", "1") o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_tvb_anywhere", translate("TVB Anywhere+ Group Filter Keywords")) o = s:taboption("stream_enhance", Value, "stream_auto_select_group_key_tvb_anywhere", translate("TVB Anywhere+ Group Filter"))
o.default = "TVB" o.default = "TVB"
o.placeholder = "TVB" o.placeholder = "TVB"
o.description = translate("It Will Be Searched According To The Keywords When Auto Search Group Fails") o.description = translate("It Will Be Searched According To The Regex When Auto Search Group Fails")
o:depends("stream_auto_select_tvb_anywhere", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_region_key_tvb_anywhere", translate("HBO Max Unlock Region Filter"))
o.default = ""
o.placeholder = "HK|SG|TW"
o.description = translate("It Will Be Selected Region According To The Regex")
o:depends("stream_auto_select_tvb_anywhere", "1") o:depends("stream_auto_select_tvb_anywhere", "1")
---- update Settings ---- update Settings

View File

@ -57,11 +57,10 @@ ul{
} }
.radio-button{ .radio-button{
width: fit-content; width: fit-content;
text-align: center; text-align: center;
overflow: auto; overflow: auto;
margin: 10px auto; margin: 10px auto;
white-space: nowrap;
background-color: #d1d1d1; background-color: #d1d1d1;
border-radius: 4px; border-radius: 4px;
} }

View File

@ -383,7 +383,7 @@
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "state")%>', null, function(x, status) { XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "state")%>', null, function(x, status) {
if ( x && x.status == 200 ) { if ( x && x.status == 200 ) {
ipdb.innerHTML = status.ipdb ? "<b style=color:green>"+status.ipdb+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>"; ipdb.innerHTML = status.ipdb ? "<b style=color:green>"+status.ipdb+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";
lhie1.innerHTML = status.lhie1 ? "<b style=color:green>"+status.lhie1+"/b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>"; lhie1.innerHTML = status.lhie1 ? "<b style=color:green>"+status.lhie1+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";
ConnersHua.innerHTML = status.ConnersHua ? "<b style=color:green>"+status.ConnersHua+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>"; ConnersHua.innerHTML = status.ConnersHua ? "<b style=color:green>"+status.ConnersHua+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";
ConnersHua_return.innerHTML = status.ConnersHua_return ? "<b style=color:green>"+status.ConnersHua_return+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>"; ConnersHua_return.innerHTML = status.ConnersHua_return ? "<b style=color:green>"+status.ConnersHua_return+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";
chnroute.innerHTML = status.chnroute ? "<b style=color:green>"+status.chnroute+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>"; chnroute.innerHTML = status.chnroute ? "<b style=color:green>"+status.chnroute+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";

View File

@ -73,7 +73,7 @@ function sub_info_get_<%=idname%>()
}; };
}); });
var s_<%=idname%> = setTimeout("sub_info_get_<%=idname%>()",1000*10); var s_<%=idname%> = setTimeout("sub_info_get_<%=idname%>()",1000*60);
}; };
//]]></script> //]]></script>

View File

@ -24,8 +24,8 @@
</select></td> </select></td>
<td width="25%"><%:Release Branch Selected%></td> <td width="25%"><%:Release Branch Selected%></td>
<td width="25%" align="left"><select id="RELEASE_BRANCH"> <td width="25%" align="left"><select id="RELEASE_BRANCH">
<option value="master"><%:Master%></option> <option value="master">Master</option>
<option value="dev"><%:Developer%></option> <option value="dev">Developer</option>
</select></td> </select></td>
</tr> </tr>
<tr> <tr>
@ -116,6 +116,12 @@
else { else {
core_version.value = "0"; core_version.value = "0";
} }
if ( status.release_branch != "" ) {
release_branch.value = status.release_branch;
}
else {
release_branch.value = "master";
}
} }
}); });
@ -173,7 +179,7 @@
var oplvis = arr_op[0]; var oplvis = arr_op[0];
var new_op = arr_op[1]; var new_op = arr_op[1];
op_cv.innerHTML = status.opcv ? "<b style=color:green>"+status.opcv+"</b>" : "<b style=color:red><%:Unknown%></b>"; op_cv.innerHTML = status.opcv ? "<b style=color:green>"+status.opcv+"</b>" : "<b style=color:red><%:Unknown%></b>";
if ( new_op == "2" ) { if ( new_op == "2" && oplvis != "") {
op_lv.innerHTML = "<b style=color:green>"+oplvis+"<%:<New>%></b>"; op_lv.innerHTML = "<b style=color:green>"+oplvis+"<%:<New>%></b>";
} }
else if (oplvis != "") { else if (oplvis != "") {

View File

@ -2474,29 +2474,50 @@ msgstr "展开策略组"
msgid "Automatically Expand The Group When Selected" msgid "Automatically Expand The Group When Selected"
msgstr "自动展开嵌套的策略组并进行解锁检测,启用后可能会造成网络不稳定" msgstr "自动展开嵌套的策略组并进行解锁检测,启用后可能会造成网络不稳定"
msgid "Netflix Group Filter Keywords" msgid "Netflix Group Filter"
msgstr "Netflix 策略组筛选关键字" msgstr "Netflix 策略组筛选"
msgid "Disney Plus Group Filter Keywords" msgid "Disney Plus Group Filter"
msgstr "Disney Plus 策略组筛选关键字" msgstr "Disney Plus 策略组筛选"
msgid "HBO Now Group Filter Keywords" msgid "HBO Now Group Filter"
msgstr "HBO Now 策略组筛选关键字" msgstr "HBO Now 策略组筛选"
msgid "HBO Max Group Filter Keywords" msgid "HBO Max Group Filter"
msgstr "HBO Max 策略组筛选关键字" msgstr "HBO Max 策略组筛选"
msgid "HBO GO Asia Group Filter Keywords" msgid "HBO GO Asia Group Filter"
msgstr "HBO GO Asia 策略组筛选关键字" msgstr "HBO GO Asia 策略组筛选"
msgid "YouTube Premium Group Filter Keywords" msgid "YouTube Premium Group Filter"
msgstr "YouTube Premium 策略组筛选关键字" msgstr "YouTube Premium 策略组筛选"
msgid "TVB Anywhere+ Group Filter Keywords" msgid "TVB Anywhere+ Group Filter"
msgstr "TVB Anywhere+ 策略组筛选关键字" msgstr "TVB Anywhere+ 策略组筛选"
msgid "Amazon Prime Video Group Filter Keywords" msgid "Amazon Prime Video Group Filter"
msgstr "Amazon Prime Video 策略组筛选关键字" msgstr "Amazon Prime Video 策略组筛选"
msgid "Netflix Unlock Region Filter"
msgstr "Netflix 解锁区域筛选"
msgid "Disney Plus Unlock Region Filter"
msgstr "Disney Plus 解锁区域筛选"
msgid "HBO Max Unlock Region Filter"
msgstr "HBO Max 解锁区域筛选"
msgid "HBO GO Asia Unlock Region Filter"
msgstr "HBO GO Asia 解锁区域筛选"
msgid "YouTube Premium Unlock Region Filter"
msgstr "YouTube Premium 解锁区域筛选"
msgid "TVB Anywhere+ Unlock Region Filter"
msgstr "TVB Anywhere+ 解锁区域筛选"
msgid "Amazon Prime Video Unlock Region Filter"
msgstr "Amazon Prime Video 解锁区域筛选"
msgid "Tip: Start Auto Select Proxy For Netflix Unlock..." msgid "Tip: Start Auto Select Proxy For Netflix Unlock..."
msgstr "提示开始自动选择检测Netflix 解锁节点..." msgstr "提示开始自动选择检测Netflix 解锁节点..."
@ -2576,8 +2597,11 @@ msgstr "仅支持自制剧!开始进行解锁节点自动选择..."
msgid "unlock test faild! start auto select unlock proxy..." msgid "unlock test faild! start auto select unlock proxy..."
msgstr "解锁检测失败!开始进行解锁节点自动选择..." msgstr "解锁检测失败!开始进行解锁节点自动选择..."
msgid "It Will Be Searched According To The Keywords When Auto Search Group Fails" msgid "It Will Be Searched According To The Regex When Auto Search Group Fails"
msgstr "策略组自动获取失败时将会根据关键字进行匹配" msgstr "策略组自动获取失败时将会根据正则表达式进行匹配"
msgid "It Will Be Selected Region According To The Regex"
msgstr "解锁区域将会根据正则表达式进行匹配"
msgid "not support unlock!" msgid "not support unlock!"
msgstr "不支持解锁!" msgstr "不支持解锁!"
@ -2597,9 +2621,21 @@ msgstr "解锁节点自动选择失败,无可用节点,回退到"
msgid ", area:" msgid ", area:"
msgstr ",区域:" msgstr ",区域:"
msgid "failed to search based on keywords and automatically obtain the group, please confirm the validity of the keywords!" msgid "failed to search based on keywords and automatically obtain the group, please confirm the validity of the regex!"
msgstr "根据关键字搜索且自动获取策略组失败,请确认关键字的有效性!" msgstr "根据关键字搜索且自动获取策略组失败,请确认关键字的有效性!"
msgid "unlock node auto selected failed, no node match the regex, rolled back to other full support node"
msgstr "解锁节点自动选择失败,未找到区域匹配的节点,回退到其他区域的解锁节点"
msgid "full support but not match the regex!"
msgstr "完整解锁但区域不匹配!"
msgid "but not match the regex! the type of group is not select, auto select could not work!"
msgstr "完整解锁但区域不匹配!当前策略组类型非 Select无法进行自动选择"
msgid "full support but not match the regex! start auto select unlock proxy..."
msgstr "完整解锁但区域不匹配!开始进行解锁节点自动选择..."
msgid "DNS Remote" msgid "DNS Remote"
msgstr "*远程域名解析" msgstr "*远程域名解析"

View File

@ -1,26 +1,26 @@
#!/bin/sh /etc/rc.common #!/bin/sh /etc/rc.common
# Copyright (c) 2019 vernesong # Copyright (c) 2019 vernesong
[ ! -f /etc/openwrt_release ] && exit 0
. /usr/share/openclash/openclash_ps.sh
. /usr/share/openclash/ruby.sh
. /usr/share/openclash/log.sh
START=99 START=99
STOP=15 STOP=15
. $IPKG_INSTROOT/usr/share/openclash/openclash_ps.sh
. $IPKG_INSTROOT/usr/share/openclash/ruby.sh
. $IPKG_INSTROOT/usr/share/openclash/log.sh
[ -f /etc/openwrt_release ] && {
RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path)
BACKUP_FILE="/etc/openclash/backup/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)"
CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)"
}
LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S")) LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S"))
CLASH="/etc/openclash/clash" CLASH="/etc/openclash/clash"
CLASH_CONFIG="/etc/openclash" CLASH_CONFIG="/etc/openclash"
CRON_FILE="/etc/crontabs/root" CRON_FILE="/etc/crontabs/root"
RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path)
BACKUP_FILE="/etc/openclash/backup/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)"
CACHE_PATH_OLD="/etc/openclash/.cache" CACHE_PATH_OLD="/etc/openclash/.cache"
CACHE_PATH="/etc/openclash/cache.db" CACHE_PATH="/etc/openclash/cache.db"
LOG_FILE="/tmp/openclash.log" LOG_FILE="/tmp/openclash.log"
START_LOG="/tmp/openclash_start.log" START_LOG="/tmp/openclash_start.log"
CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)"
RULE_PROVIDER_FILE="/tmp/yaml_rule_provider.yaml" RULE_PROVIDER_FILE="/tmp/yaml_rule_provider.yaml"
DNS_FILE="/tmp/yaml_dns.yaml" DNS_FILE="/tmp/yaml_dns.yaml"
GAME_RULE_FILE="/tmp/yaml_game_rule.yaml" GAME_RULE_FILE="/tmp/yaml_game_rule.yaml"
@ -301,7 +301,7 @@ yml_provider_path()
end end
#CDN Replace #CDN Replace
if x['url'] and x['url'] =~ /^https:\/\/raw.githubusercontent.com/ then if x['url'] and x['url'] =~ /^https:\/\/raw.githubusercontent.com/ then
x['url'] = 'https://cdn.jsdelivr.net/gh/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '@' + x['url'].split(x['url'].split('/')[4] + '/')[1] x['url'] = 'https://cdn.jsdelivr.net/gh/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '@' + x['url'].split(x['url'].split('/')[2] + '/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '/')[1]
end end
}; };
if not Value_1.eql?(Value['$2']) then if not Value_1.eql?(Value['$2']) then
@ -1172,6 +1172,11 @@ do_run_file()
geoip_path="/etc/openclash/Country.mmdb" geoip_path="/etc/openclash/Country.mmdb"
chnr_path="/etc/openclash/china_ip_route.ipset" chnr_path="/etc/openclash/china_ip_route.ipset"
chnr6_path="/etc/openclash/china_ip6_route.ipset" chnr6_path="/etc/openclash/china_ip6_route.ipset"
mv "/tmp/etc/openclash/Country.mmdb" "$geoip_path" 2>/dev/null
mv "/tmp/etc/openclash/china_ip_route.ipset" "$chnr_path" 2>/dev/null
mv "/tmp/etc/openclash/china_ip6_route.ipset" "$chnr6_path" 2>/dev/null
mv "/tmp/etc/openclash/core/" "/etc/openclash" 2>/dev/null
mv "/tmp/etc/openclash/cache.db" "/etc/openclash/cache.db" 2>/dev/null
rm -rf "/tmp/etc/openclash" 2>/dev/null rm -rf "/tmp/etc/openclash" 2>/dev/null
else else
dev_core_path="/tmp/etc/openclash/core/clash" dev_core_path="/tmp/etc/openclash/core/clash"
@ -1179,10 +1184,13 @@ do_run_file()
geoip_path="/tmp/etc/openclash/Country.mmdb" geoip_path="/tmp/etc/openclash/Country.mmdb"
chnr_path="/tmp/etc/openclash/china_ip_route.ipset" chnr_path="/tmp/etc/openclash/china_ip_route.ipset"
chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset" chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset"
rm -rf "/etc/openclash/Country.mmdb" 2>/dev/null CACHE_PATH="/tmp/etc/openclash/cache.db"
rm -rf "/etc/openclash/china_ip_route.ipset" 2>/dev/null mkdir -p /tmp/etc/openclash
rm -rf "/etc/openclash/china_ip6_route.ipset" 2>/dev/null [ ! -h "/etc/openclash/Country.mmdb" ] && mv "/etc/openclash/Country.mmdb" "$geoip_path" 2>/dev/null
rm -rf "/etc/openclash/core" 2>/dev/null [ ! -h "/etc/openclash/china_ip_route.ipset" ] && mv "/etc/openclash/china_ip_route.ipset" "$chnr_path" 2>/dev/null
[ ! -h "/etc/openclash/china_ip6_route.ipset" ] && mv "/etc/openclash/china_ip6_route.ipset" "$chnr6_path" 2>/dev/null
mv "/etc/openclash/core/" "/tmp/etc/openclash" 2>/dev/null
[ ! -h "/etc/openclash/cache.db" ] && mv "/etc/openclash/cache.db" "$CACHE_PATH" 2>/dev/null
fi fi
rm -rf "/etc/openclash/clash" 2>/dev/null rm -rf "/etc/openclash/clash" 2>/dev/null
@ -1226,12 +1234,41 @@ do_run_file()
core_type="TUN" core_type="TUN"
core_start_log="Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..." core_start_log="Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..."
fi fi
[ ! -f "$CLASH" ] && {
LOG_OUT "Tip: Detected that the Core is not Installed, Ready to Download..."
rm -rf "/tmp/clash_last_version"
/usr/share/openclash/openclash_core.sh "$core_type"
if [ "$core_type" == "TUN" ] && [ ! -f "$tun_core_path" ]; then
start_fail
elif [ -z "$core_type" ] && [ ! -f "$dev_core_path" ]; then
start_fail
else
del_lock
restart
exit 0
fi
}
[ ! -f "$geoip_path" ] && {
LOG_OUT "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..."
/usr/share/openclash/openclash_ipdb.sh
}
if [ "$china_ip_route" = "1" ] || [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then
if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ]; then
LOG_OUT "Tip: Detected that the Chnroute Cidr List is not Installed, Ready to Download..."
/usr/share/openclash/openclash_chnroute.sh
fi
fi
if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ] || [ ! -f "$geoip_path" ]; then
start_fail
fi
#权限检查
[ ! -x "$tun_core_path" ] && chmod 4755 "$tun_core_path" 2>/dev/null [ ! -x "$tun_core_path" ] && chmod 4755 "$tun_core_path" 2>/dev/null
[ ! -x "$dev_core_path" ] && chmod 4755 "$dev_core_path" 2>/dev/null [ ! -x "$dev_core_path" ] && chmod 4755 "$dev_core_path" 2>/dev/null
#文件检查
#fake_ip_filter #fake_ip_filter
if [ "$3" = "fake-ip" ]; then if [ "$3" = "fake-ip" ]; then
if [ ! -f "/tmp/openclash_fake_filter.list" ] || [ -n "$(grep "config servers" /etc/config/openclash 2>/dev/null)" ]; then if [ ! -f "/tmp/openclash_fake_filter.list" ] || [ -n "$(grep "config servers" /etc/config/openclash 2>/dev/null)" ]; then
@ -1255,31 +1292,36 @@ do_run_file()
ln -s "$chnr6_path" /etc/openclash/china_ip6_route.ipset 2>/dev/null ln -s "$chnr6_path" /etc/openclash/china_ip6_route.ipset 2>/dev/null
} }
[ ! -f "$geoip_path" ] && { #Resore history cache
LOG_OUT "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..." if [ -f "$HISTORY_PATH" ] && [ -f "$HISTORY_PATH_OLD" ]; then
nofile=1 if [ "$(date -r $HISTORY_PATH +%s)" -ge "$(date -r $HISTORY_PATH_OLD +%s)" ]; then
nohup /usr/share/openclash/openclash_ipdb.sh & cmp -s "$CACHE_PATH" "$HISTORY_PATH"
} if [ "$?" -ne "0" ]; then
cp "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null
[ ! -f "$CLASH" ] && { fi
LOG_OUT "Tip: Detected that the Core is not Installed, Ready to Download..." else
nofile=1 cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD"
rm -rf "/tmp/clash_last_version" if [ "$?" -ne "0" ]; then
nohup /usr/share/openclash/openclash_core.sh "$core_type" & cp "$HISTORY_PATH_OLD" "$CACHE_PATH_OLD" 2>/dev/null
} fi
fi
if [ "$china_ip_route" = "1" ] || [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then else
if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ]; then if [ -f "$HISTORY_PATH" ]; then
LOG_OUT "Tip: Detected that the Chnroute Cidr List is not Installed, Ready to Download..." cmp -s "$CACHE_PATH" "$HISTORY_PATH"
nofile=1 if [ "$?" -ne "0" ]; then
nohup /usr/share/openclash/openclash_chnroute.sh & cp "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null
fi
fi
if [ -f "$HISTORY_PATH_OLD" ]; then
cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD"
if [ "$?" -ne "0" ]; then
cp "$HISTORY_PATH_OLD" "$CACHE_PATH_OLD" 2>/dev/null
fi
fi fi
fi fi
[ -f "$CACHE_PATH" ] && [ "$small_flash_memory" = "1" ] && {
if [ "$nofile" = "1" ]; then ln -s "$CACHE_PATH" /etc/openclash/cache.db 2>/dev/null
del_lock }
exit 0
fi
if [ -z "$_koolshare" ]; then if [ -z "$_koolshare" ]; then
if ! capsh --is-uid=0 >/dev/null || ! capsh --has-ambient >/dev/null; then if ! capsh --is-uid=0 >/dev/null || ! capsh --has-ambient >/dev/null; then
@ -1322,40 +1364,13 @@ start_run_core()
modprobe tun >/dev/null 2>&1 modprobe tun >/dev/null 2>&1
check_interface_name check_interface_name
config_reload=$(uci -q get openclash.config.config_reload) config_reload=$(uci -q get openclash.config.config_reload)
#Resore history cache
if [ -f "$HISTORY_PATH" ] && [ -f "$HISTORY_PATH_OLD" ]; then
if [ "$(date -r $HISTORY_PATH +%s)" -ge "$(date -r $HISTORY_PATH_OLD +%s)" ]; then
cmp -s "$CACHE_PATH" "$HISTORY_PATH"
if [ "$?" -ne "0" ]; then
cp "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null
fi
else
cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD"
if [ "$?" -ne "0" ]; then
cp "$HISTORY_PATH_OLD" "$CACHE_PATH_OLD" 2>/dev/null
fi
fi
else
if [ -f "$HISTORY_PATH" ]; then
cmp -s "$CACHE_PATH" "$HISTORY_PATH"
if [ "$?" -ne "0" ]; then
cp "$HISTORY_PATH" "$CACHE_PATH" 2>/dev/null
fi
fi
if [ -f "$HISTORY_PATH_OLD" ]; then
cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD"
if [ "$?" -ne "0" ]; then
cp "$HISTORY_PATH_OLD" "$CACHE_PATH_OLD" 2>/dev/null
fi
fi
fi
if [ -n "$(pidof clash)" ] && [ "$core_type" != "TUN" ] && [ "$config_reload" != "0" ]; then if [ -n "$(pidof clash)" ] && [ "$core_type" != "TUN" ] && [ "$config_reload" != "0" ]; then
curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null
else else
kill_clash kill_clash
if [ -z "$_koolshare" ]; then if [ -z "$_koolshare" ]; then
#防止赋权失败 #防止赋权失败
touch /tmp/openclash.log 2>/dev/null touch "/tmp/openclash.log" 2>/dev/null
chmod o+w /etc/openclash/proxy_provider/* 2>/dev/null chmod o+w /etc/openclash/proxy_provider/* 2>/dev/null
chmod o+w /etc/openclash/rule_provider/* 2>/dev/null chmod o+w /etc/openclash/rule_provider/* 2>/dev/null
chmod o+w /tmp/openclash.log 2>/dev/null chmod o+w /tmp/openclash.log 2>/dev/null
@ -1692,7 +1707,7 @@ fi
if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL PREROUTING --line-number |grep 'DNS Hijack')"]; then if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL PREROUTING --line-number |grep 'DNS Hijack')"]; then
DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port) DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port)
if [ -z "$DNSPORT" ]; then if [ -z "$DNSPORT" ]; then
DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo "$dns_port") DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo "$dns_port")
fi fi
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack"
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack" iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack"
@ -1861,6 +1876,10 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then
if [ "$en_mode" = "fake-ip" ]; then if [ "$en_mode" = "fake-ip" ]; then
iptables -t nat -N openclash_output iptables -t nat -N openclash_output
iptables -t nat -F openclash_output iptables -t nat -F openclash_output
if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL OUTPUT --line-number |grep 'DNS Hijack')"]; then
iptables -t nat -I OUTPUT -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack"
iptables -t nat -I OUTPUT -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "DNS Hijack"
fi
iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN
if [ "$intranet_allowed" -eq 1 ]; then if [ "$intranet_allowed" -eq 1 ]; then
iptables -t nat -A openclash_output -p tcp -d 198.18.0.0/16 -j DNAT --to-destination "$lan_ip:$proxy_port" iptables -t nat -A openclash_output -p tcp -d 198.18.0.0/16 -j DNAT --to-destination "$lan_ip:$proxy_port"
@ -1870,7 +1889,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then
fi fi
fi fi
iptables -t nat -I OUTPUT -j openclash_output >/dev/null 2>&1 iptables -t nat -A OUTPUT -j openclash_output >/dev/null 2>&1
fi fi
if [ -n "$en_mode_tun" ]; then if [ -n "$en_mode_tun" ]; then
#TUN模式 #TUN模式
@ -1902,7 +1921,7 @@ if [ -n "$en_mode_tun" ]; then
elif [ -z "$_koolshare" ]; then elif [ -z "$_koolshare" ]; then
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
fi fi
iptables -t mangle -I OUTPUT -j openclash_output iptables -t mangle -A OUTPUT -j openclash_output
elif [ -z "$_koolshare" ] && [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -eq 1 ]; then elif [ -z "$_koolshare" ] && [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -eq 1 ]; then
iptables -t mangle -N openclash_output iptables -t mangle -N openclash_output
iptables -t mangle -F openclash_output iptables -t mangle -F openclash_output
@ -1913,7 +1932,7 @@ if [ -n "$en_mode_tun" ]; then
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1
fi fi
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK" iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK"
iptables -t mangle -I OUTPUT -j openclash_output iptables -t mangle -A OUTPUT -j openclash_output
fi fi
iptables -t mangle -N openclash iptables -t mangle -N openclash

View File

@ -17,10 +17,10 @@ set_lock
if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then
if pidof clash >/dev/null; then if pidof clash >/dev/null; then
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1 curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
fi fi
if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then
curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1 curl -sL --connect-timeout 5 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
fi fi
if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then
echo "CheckTime:$CKTIME" >>$LAST_OPVER echo "CheckTime:$CKTIME" >>$LAST_OPVER

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -8,9 +8,9 @@
<meta name="description" content="Clash web port" /> <meta name="description" content="Clash web port" />
<!--meta name="external-controller" content="http://secret@example.com:9090"--> <!--meta name="external-controller" content="http://secret@example.com:9090"-->
<title>Clash</title> <title>Clash</title>
<script type="module" crossorigin src="./assets/index.c727f058.js"></script> <script type="module" crossorigin src="./assets/index.049e98b9.js"></script>
<link rel="modulepreload" href="./assets/vendor.5151d57b.js"> <link rel="modulepreload" href="./assets/vendor.e882027f.js">
<link rel="stylesheet" href="./assets/index.61b62488.css"> <link rel="stylesheet" href="./assets/index.760643c8.css">
<link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head> <link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
<body> <body>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>

View File

@ -1 +1 @@
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didnt register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),u={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>u[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-6659438f"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.61b62488.css",revision:null},{url:"assets/index.c727f058.js",revision:null},{url:"assets/vendor.5151d57b.js",revision:null},{url:"index.html",revision:"6315ca1a6e197faa97288f5bcf8cc706"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))})); if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didnt register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-b7e829be"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.049e98b9.js",revision:null},{url:"assets/index.760643c8.css",revision:null},{url:"assets/vendor.e882027f.js",revision:null},{url:"index.html",revision:"4e8629bf048d1d7a769b0e0678133f08"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));

View File

@ -462,7 +462,7 @@ sub_info_get()
template_path_encode=$(urlencode "$template_path") template_path_encode=$(urlencode "$template_path")
[ -n "$key_match_param" ] && key_match_param="(?i)$(urlencode "$key_match_param")" [ -n "$key_match_param" ] && key_match_param="(?i)$(urlencode "$key_match_param")"
[ -n "$key_ex_match_param" ] && key_ex_match_param="(?i)$(urlencode "$key_ex_match_param")" [ -n "$key_ex_match_param" ] && key_ex_match_param="(?i)$(urlencode "$key_ex_match_param")"
subscribe_url_param="?target=clash&new_name=true&url=$subscribe_url&config=$template_path_encode&include=$key_match_param&exclude=$key_ex_match_param&emoji=$emoji&list=false&sort=$sort&$udp&scv=$skip_cert_verify&append_type=$node_type&fdn=true" subscribe_url_param="?target=clash&new_name=true&url=$subscribe_url&config=$template_path_encode&include=$key_match_param&exclude=$key_ex_match_param&emoji=$emoji&list=false&sort=$sort&$udp&scv=$skip_cert_verify&append_type=$node_type&fdn=true&expand=false"
c_address="$convert_address" c_address="$convert_address"
else else
subscribe_url=$address subscribe_url=$address

View File

@ -11,6 +11,13 @@ CPU_MODEL=$(uci get openclash.config.core_version 2>/dev/null)
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master") RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
[ ! -f "/tmp/clash_last_version" ] && /usr/share/openclash/clash_version.sh 2>/dev/null [ ! -f "/tmp/clash_last_version" ] && /usr/share/openclash/clash_version.sh 2>/dev/null
if [ ! -f "/tmp/clash_last_version" ]; then
LOG_OUT "Error: 【"$CORE_TYPE"】Core Version Check Error, Please Try Again Later..."
sleep 3
SLOG_CLEAN
exit 0
fi
if [ "$small_flash_memory" != "1" ]; then if [ "$small_flash_memory" != "1" ]; then
dev_core_path="/etc/openclash/core/clash" dev_core_path="/etc/openclash/core/clash"
tun_core_path="/etc/openclash/core/clash_tun" tun_core_path="/etc/openclash/core/clash_tun"

View File

@ -26,10 +26,15 @@ fi
CONFIG_FILE=$(unify_ps_cfgname) CONFIG_FILE=$(unify_ps_cfgname)
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $4}' 2>/dev/null) CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $4}' 2>/dev/null)
small_flash_memory=$(uci -q get openclash.config.small_flash_memory)
HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}" HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}"
HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db" HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db"
CACHE_PATH_OLD="/etc/openclash/.cache" CACHE_PATH_OLD="/etc/openclash/.cache"
CACHE_PATH="/etc/openclash/cache.db" if [ "$small_flash_memory" != "1" ]; then
CACHE_PATH="/etc/openclash/cache.db"
else
CACHE_PATH="/tmp/etc/openclash/cache.db"
fi
set_lock set_lock
if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then

View File

@ -35,10 +35,10 @@
LOG_OUT "Start Downloading Third Party Rules in Use..." LOG_OUT "Start Downloading Third Party Rules in Use..."
if [ "$rule_name" = "lhie1" ]; then if [ "$rule_name" = "lhie1" ]; then
if pidof clash >/dev/null; then if pidof clash >/dev/null; then
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/lhie1/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1 curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
fi fi
if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then
curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1 curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
fi fi
sed -i '1i rules:' /tmp/rules.yaml sed -i '1i rules:' /tmp/rules.yaml
elif [ "$rule_name" = "ConnersHua" ]; then elif [ "$rule_name" = "ConnersHua" ]; then

View File

@ -8,15 +8,14 @@ local uci = require("luci.model.uci").cursor()
local fs = require "luci.openclash" local fs = require "luci.openclash"
local json = require "luci.jsonc" local json = require "luci.jsonc"
local UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36" local UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
local filmId = 81215567 local filmId = 70143836
local type = arg[1] local type = arg[1]
local enable = tonumber(uci:get("openclash", "config", "stream_auto_select")) or 0 local enable = tonumber(uci:get("openclash", "config", "stream_auto_select")) or 0
local now_name, group_name, group_type, group_show, status local now_name, group_name, group_type, group_show, status
local groups = {} local groups = {}
local proxies = {} local proxies = {}
if enable == 0 then os.exit(0) end if enable == 0 or not type then os.exit(0) end
if not type then os.exit(0) end
function unlock_auto_select() function unlock_auto_select()
local key_group, region, now, proxy, group_match, proxy_default, auto_get_group, info, group_now local key_group, region, now, proxy, group_match, proxy_default, auto_get_group, info, group_now
@ -24,10 +23,11 @@ function unlock_auto_select()
local passwd = uci:get("openclash", "config", "dashboard_password") or "" local passwd = uci:get("openclash", "config", "dashboard_password") or ""
local ip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") local ip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'")
local original = {} local original = {}
local key_groups = {} local other_region_unlock = {}
local tested_proxy = {} local tested_proxy = {}
local fallback_select = {}
local gorup_i18 = "Group:" local gorup_i18 = "Group:"
local no_group_find = "failed to search based on keywords and automatically obtain the group, please confirm the validity of the keywords!" local no_group_find = "failed to search based on keywords and automatically obtain the group, please confirm the validity of the regex!"
local full_support_no_area = "full support." local full_support_no_area = "full support."
local full_support = "full support, area:" local full_support = "full support, area:"
local only_original = "only support homemade!" local only_original = "only support homemade!"
@ -43,6 +43,10 @@ function unlock_auto_select()
local no_unlock_test_start = "not support unlock! start auto select unlock proxy..." local no_unlock_test_start = "not support unlock! start auto select unlock proxy..."
local faild_test_start = "unlock test faild! start auto select unlock proxy..." local faild_test_start = "unlock test faild! start auto select unlock proxy..."
local area_i18 = ", area:" local area_i18 = ", area:"
local select_faild_other_region = "unlock node auto selected failed, no node match the regex, rolled back to other full support node"
local other_region_unlock_test = "full support but not match the regex!"
local other_region_unlock_no_select = "but not match the regex! the type of group is not select, auto select could not work!"
local other_region_unlock_test_start = "full support but not match the regex! start auto select unlock proxy..."
if not ip or ip == "" then if not ip or ip == "" then
ip = luci.sys.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'") ip = luci.sys.exec("ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1 | tr -d '\n'")
@ -82,10 +86,9 @@ function unlock_auto_select()
elseif type == "Amazon Prime Video" then elseif type == "Amazon Prime Video" then
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_prime_video") or "prime video|amazon" key_group = uci:get("openclash", "config", "stream_auto_select_group_key_prime_video") or "prime video|amazon"
end end
string.gsub(key_group, '[^%|]+', function(w) table.insert(key_groups, w) end) if not key_group then key_group = type end
if #key_groups == 0 then table.insert(key_groups, type) end
else else
table.insert(key_groups, auto_get_group) key_group = "^" .. auto_get_group .. "$"
end end
--save group name --save group name
@ -98,189 +101,206 @@ function unlock_auto_select()
group_match = false group_match = false
for _, value in pairs(info.proxies) do for _, value in pairs(info.proxies) do
--match only once --match only once
for g = 1, #key_groups do while true do
while true do --find group
--find group if not datamatch(value.name, key_group) then
if not string.find(string.lower(value.name), string.lower(key_groups[g])) then break
break else
--get groups info
get_proxy(info, value.name, value.name)
table.insert(tested_proxy, now_name)
group_match = true
--test now proxy
region = proxy_unlock_test()
if table_include(groups, now_name) then
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""
else else
--get groups info now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name..""
get_proxy(info, value.name, value.name) end
table.insert(tested_proxy, now_name) if status ~= 2 then
group_match = true os.execute("sleep 3")
--test now proxy
region = proxy_unlock_test() region = proxy_unlock_test()
if table_include(groups, now_name) then end
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show.."" if status == 2 then
if region and region ~= "" then
print(now..full_support..""..region.."")
else else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name.."" print(now..full_support_no_area)
end end
if status ~= 2 then break
os.execute("sleep 3") elseif status == 3 then
region = proxy_unlock_test() table.insert(other_region_unlock, {get_group_now(info, value.name), group_name, now_name})
end print(now..other_region_unlock_test_start)
if status == 2 then elseif status == 1 then
if region then table.insert(original, {get_group_now(info, value.name), group_name, now_name})
print(now..full_support..""..region.."") if type == "Netflix" then
else print(now..original_test_start)
print(now..full_support_no_area)
end
break
elseif status == 1 then
table.insert(original, {get_group_now(info, value.name), group_name, now_name})
if type == "Netflix" then
print(now..original_test_start)
else
print(now..no_unlock_test_start)
end
else else
print(now..faild_test_start) print(now..no_unlock_test_start)
end end
else
--find new unlock print(now..faild_test_start)
if value.type == "Selector" then end
--loop proxy test
for i = 1, #(value.all) do --find new unlock
--save group current selected if value.type == "Selector" then
proxy_default = value.now --loop proxy test
while true do for i = 1, #(value.all) do
if value.all[i] == "REJECT" or value.all[i] == "DIRECT" then --save group current selected
break proxy_default = value.now
else while true do
get_proxy(info, value.all[i], value.name) if value.all[i] == "REJECT" or value.all[i] == "DIRECT" then
if group_type == "Selector" then break
if group_name == value.all[i] then else
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, group_name, ip, port, urlencode(value.name))) get_proxy(info, value.all[i], value.name)
if group_type == "Selector" then
if group_name == value.all[i] then
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, group_name, ip, port, urlencode(value.name)))
end
for p = 1, #(proxies) do
proxy = proxies[p]
if table_include(groups, proxy) then
group_now = get_group_now(info, proxy)
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..group_now..""
else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..proxy..""
end end
for p = 1, #(proxies) do --skip tested proxy
proxy = proxies[p]
if table_include(groups, proxy) then
group_now = get_group_now(info, proxy)
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..group_now..""
else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..proxy..""
end
--skip tested proxy
while true do
if table_include(tested_proxy, proxy) then
break
else
table.insert(tested_proxy, proxy)
end
while true do
if proxy == "REJECT" or proxy == "DIRECT" then
break
else
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy, ip, port, urlencode(group_name)))
region = proxy_unlock_test()
if status == 2 then
if region then
print(now..full_support..""..region.."")
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..proxy..""..area_i18..""..region.."")
else
print(now..full_support_no_area)
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..proxy.."")
end
elseif status == 1 then
table.insert(original, {value.all[i], group_name, proxy})
if type == "Netflix" then
print(now..only_original)
else
print(now..no_unlock)
end
else
print(now..test_faild)
end
end
break
end
if status == 2 then
break
elseif p == #(proxies) and #(proxies) ~= 1 then
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, now_name, ip, port, urlencode(group_name)))
end
break
end
if status == 2 then break end
end
else
--only group expand
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, value.all[i], ip, port, urlencode(group_name)))
while true do while true do
if table_include(tested_proxy, now_name) then if table_include(tested_proxy, proxy) then
break break
else else
table.insert(tested_proxy, now_name) table.insert(tested_proxy, proxy)
end end
region = proxy_unlock_test() while true do
if table_include(groups, now_name) then if proxy == "REJECT" or proxy == "DIRECT" then
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show.."" break
else else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name.."" luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy, ip, port, urlencode(group_name)))
end region = proxy_unlock_test()
if status == 2 then if status == 2 then
if region then if region and region ~= "" then
print(now..full_support..""..region.."") print(now..full_support..""..region.."")
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, now_name)..""..area_i18..""..region.."") print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..proxy..""..area_i18..""..region.."")
else
print(now..full_support_no_area)
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..proxy.."")
end
elseif status == 3 then
table.insert(other_region_unlock, {value.all[i], group_name, proxy})
print(now..other_region_unlock_test)
elseif status == 1 then
table.insert(original, {value.all[i], group_name, proxy})
if type == "Netflix" then
print(now..only_original)
else
print(now..no_unlock)
end
else else
print(now..full_support_no_area) print(now..test_faild)
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, now_name).."")
end end
elseif status == 1 then
table.insert(original, {value.all[i], group_name, value.all[i]})
if type == "Netflix" then
print(now..original_no_select)
else
print(now..no_unlock_no_select)
end
else
print(now..faild_no_select)
end end
break
end
if status == 2 then
break
elseif p == #(proxies) and #(proxies) ~= 1 then
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, now_name, ip, port, urlencode(group_name)))
end
break break
end end
if status == 2 then break end
end
else
--only group expand
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, value.all[i], ip, port, urlencode(group_name)))
while true do
if table_include(tested_proxy, now_name) then
break
else
table.insert(tested_proxy, now_name)
end
region = proxy_unlock_test()
if table_include(groups, now_name) then
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""
else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name..""
end
if status == 2 then
if region and region ~= "" then
print(now..full_support..""..region.."")
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, now_name)..""..area_i18..""..region.."")
else
print(now..full_support_no_area)
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, now_name).."")
end
elseif status == 3 then
table.insert(other_region_unlock, {value.all[i], group_name, value.all[i]})
print(now..full_support..""..region..""..other_region_unlock_no_select)
elseif status == 1 then
table.insert(original, {value.all[i], group_name, value.all[i]})
if type == "Netflix" then
print(now..original_no_select)
else
print(now..no_unlock_no_select)
end
else
print(now..faild_no_select)
end
break
end end
end end
break
end
if status == 2 then
break
elseif i == #(value.all) and #original > 0 then
for k, v in pairs(original) do
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[1], ip, port, urlencode(value.name)))
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[3], ip, port, urlencode(v[2])))
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_faild..""..v[3].."")
break
end
elseif i == #(value.all) then
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy_default, ip, port, urlencode(value.name)))
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_faild..""..proxy_default.."")
end
end
else
region = proxy_unlock_test()
if status == 2 then
if region then
print(now..full_support..""..region.."")
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, value.name)..""..area_i18..""..region.."")
else
print(now..full_support_no_area)
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, value.name).."")
end end
break break
elseif status == 1 then end
if type == "Netflix" then if status == 2 then
print(now..original_no_select) break
elseif i == #(value.all) and (#original > 0 or #other_region_unlock > 0) then
if #other_region_unlock > 0 then
fallback_select = other_region_unlock
else else
print(now..no_unlock_no_select) fallback_select = original
end end
else for k, v in pairs(fallback_select) do
print(now..faild_no_select) luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[1], ip, port, urlencode(value.name)))
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, v[3], ip, port, urlencode(v[2])))
if #other_region_unlock > 0 then
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_faild_other_region..""..v[3].."")
else
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_faild..""..v[3].."")
end
break
end
elseif i == #(value.all) then
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy_default, ip, port, urlencode(value.name)))
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_faild..""..proxy_default.."")
end end
end end
else
region = proxy_unlock_test()
if status == 2 then
if region and region ~= "" then
print(now..full_support..""..region.."")
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, value.name)..""..area_i18..""..region.."")
else
print(now..full_support_no_area)
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_success..""..get_group_now(info, value.name).."")
end
break
elseif status == 3 then
print(now..full_support..""..region..""..other_region_unlock_no_select)
elseif status == 1 then
if type == "Netflix" then
print(now..original_no_select)
else
print(now..no_unlock_no_select)
end
else
print(now..faild_no_select)
end
end end
break
end end
if group_match then break end break
end end
if auto_get_group and group_match then break end if auto_get_group and group_match then break end
if status == 2 then break end if status == 2 then break end
@ -511,6 +531,11 @@ function urlencode(data)
return luci.sys.exec(string.format("echo %s |sed 's/+/%%20/g'", string.match(data, "/%?(.+)"))) return luci.sys.exec(string.format("echo %s |sed 's/+/%%20/g'", string.match(data, "/%?(.+)")))
end end
function datamatch(data, regex)
local result = luci.sys.exec(string.format('ruby -E UTF-8 -e "x=\'%s\'; if x =~ /%s/i then print \'true\' else print \'false\' end"', data, regex))
if result == "true" then return true else return false end
end
function netflix_unlock_test() function netflix_unlock_test()
status = 0 status = 0
local url = "https://www.netflix.com/title/"..filmId local url = "https://www.netflix.com/title/"..filmId
@ -518,6 +543,7 @@ function netflix_unlock_test()
local info = luci.sys.exec(string.format('curl -sLI -m 3 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url)) local info = luci.sys.exec(string.format('curl -sLI -m 3 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url))
local result = {} local result = {}
local region local region
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_netflix") or ""
if info then if info then
info = json.parse(info) info = json.parse(info)
end end
@ -527,8 +553,11 @@ function netflix_unlock_test()
string.gsub(info.url_effective, '[^/]+', function(w) table.insert(result, w) end) string.gsub(info.url_effective, '[^/]+', function(w) table.insert(result, w) end)
region = string.upper(string.match(result[3], "^%a+")) region = string.upper(string.match(result[3], "^%a+"))
if region == "TITLE" then region = "US" end if region == "TITLE" then region = "US" end
if not datamatch(region, regex) then
status = 3
end
return region return region
elseif info.http_code == 404 then elseif info.http_code == 404 or info.http_code == 403 then
status = 1 status = 1
end end
end end
@ -543,12 +572,16 @@ function disney_unlock_test()
local auth = '"grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange&latitude=0&longitude=0&platform=browser&subject_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJiNDAzMjU0NS0yYmE2LTRiZGMtOGFlOS04ZWI3YTY2NzBjMTIiLCJhdWQiOiJ1cm46YmFtdGVjaDpzZXJ2aWNlOnRva2VuIiwibmJmIjoxNjIyNjM3OTE2LCJpc3MiOiJ1cm46YmFtdGVjaDpzZXJ2aWNlOmRldmljZSIsImV4cCI6MjQ4NjYzNzkxNiwiaWF0IjoxNjIyNjM3OTE2LCJqdGkiOiI0ZDUzMTIxMS0zMDJmLTQyNDctOWQ0ZC1lNDQ3MTFmMzNlZjkifQ.g-QUcXNzMJ8DwC9JqZbbkYUSKkB1p4JGW77OON5IwNUcTGTNRLyVIiR8mO6HFyShovsR38HRQGVa51b15iAmXg&subject_token_type=urn%3Abamtech%3Aparams%3Aoauth%3Atoken-type%3Adevice"' local auth = '"grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange&latitude=0&longitude=0&platform=browser&subject_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJiNDAzMjU0NS0yYmE2LTRiZGMtOGFlOS04ZWI3YTY2NzBjMTIiLCJhdWQiOiJ1cm46YmFtdGVjaDpzZXJ2aWNlOnRva2VuIiwibmJmIjoxNjIyNjM3OTE2LCJpc3MiOiJ1cm46YmFtdGVjaDpzZXJ2aWNlOmRldmljZSIsImV4cCI6MjQ4NjYzNzkxNiwiaWF0IjoxNjIyNjM3OTE2LCJqdGkiOiI0ZDUzMTIxMS0zMDJmLTQyNDctOWQ0ZC1lNDQ3MTFmMzNlZjkifQ.g-QUcXNzMJ8DwC9JqZbbkYUSKkB1p4JGW77OON5IwNUcTGTNRLyVIiR8mO6HFyShovsR38HRQGVa51b15iAmXg&subject_token_type=urn%3Abamtech%3Aparams%3Aoauth%3Atoken-type%3Adevice"'
local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} %s -H 'User-Agent: %s' -d %s -XPOST %s", headers, UA, auth, url)) local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} %s -H 'User-Agent: %s' -d %s -XPOST %s", headers, UA, auth, url))
local region local region
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_disney") or ""
if tonumber(httpcode) == 200 then if tonumber(httpcode) == 200 then
status = 1 status = 1
local url_effective = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{url_effective} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url2)) local url_effective = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{url_effective} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url2))
if url_effective == "https://disneyplus.disney.co.jp/" then if url_effective == "https://disneyplus.disney.co.jp/" then
status = 2 status = 2
region = "JP" region = "JP"
if not datamatch(region, regex) then
status = 3
end
return region return region
elseif string.find(url_effective,"hotstar") then elseif string.find(url_effective,"hotstar") then
return return
@ -556,6 +589,9 @@ function disney_unlock_test()
local region = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s |grep 'Region: ' |awk '{print $2}' |tr -d '\n'", UA, url2)) local region = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s |grep 'Region: ' |awk '{print $2}' |tr -d '\n'", UA, url2))
if region and region ~= "" then if region and region ~= "" then
status = 2 status = 2
if not datamatch(region, regex) then
status = 3
end
return region return region
end end
end end
@ -585,7 +621,8 @@ function hbo_max_unlock_test()
local url = "https://www.hbomax.com/" local url = "https://www.hbomax.com/"
local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
local result = {} local result = {}
local region local region = ""
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_max") or ""
if data then if data then
data = json.parse(data) data = json.parse(data)
end end
@ -597,10 +634,11 @@ function hbo_max_unlock_test()
string.gsub(data.url_effective, '[^/]+', function(w) table.insert(result, w) end) string.gsub(data.url_effective, '[^/]+', function(w) table.insert(result, w) end)
if result[3] then if result[3] then
region = string.upper(string.match(result[3], "^%a+")) region = string.upper(string.match(result[3], "^%a+"))
if region then
return region
end
end end
if not datamatch(region, regex) then
status = 3
end
return region
end end
end end
end end
@ -611,6 +649,8 @@ function hbo_go_asia_unlock_test()
status = 0 status = 0
local url = "https://api2.hbogoasia.com/v1/geog?lang=undefined&version=0&bundleId=www.hbogoasia.com" local url = "https://api2.hbogoasia.com/v1/geog?lang=undefined&version=0&bundleId=www.hbogoasia.com"
local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_go_asia") or ""
local region = ""
if tonumber(httpcode) == 200 then if tonumber(httpcode) == 200 then
status = 1 status = 1
local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
@ -621,8 +661,12 @@ function hbo_go_asia_unlock_test()
if data.territory then if data.territory then
status = 2 status = 2
if data.country then if data.country then
return string.upper(data.country) region = string.upper(data.country)
end end
if not datamatch(region, regex) then
status = 3
end
return region
end end
end end
end end
@ -633,7 +677,8 @@ function ytb_unlock_test()
status = 0 status = 0
local url = "https://m.youtube.com/premium" local url = "https://m.youtube.com/premium"
local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
local region local region = ""
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_ytb") or ""
if tonumber(httpcode) == 200 then if tonumber(httpcode) == 200 then
status = 1 status = 1
local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
@ -643,22 +688,25 @@ function ytb_unlock_test()
region = string.sub(string.match(data, "\"GL\":\"%a+\""), 7, -2) region = string.sub(string.match(data, "\"GL\":\"%a+\""), 7, -2)
if region then if region then
status = 2 status = 2
return region
else else
if not string.find(data,"www%.google%.cn") then if not string.find(data,"www%.google%.cn") then
status = 2 status = 2
return "US" region = "US"
end end
end end
if not datamatch(region, regex) then
status = 3
end
end end
return return region
end end
function tvb_anywhere_unlock_test() function tvb_anywhere_unlock_test()
status = 0 status = 0
local url = "https://uapisfm.tvbanywhere.com.sg/geoip/check/platform/android" local url = "https://uapisfm.tvbanywhere.com.sg/geoip/check/platform/android"
local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
local region local region = ""
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") or ""
if tonumber(httpcode) == 200 then if tonumber(httpcode) == 200 then
status = 1 status = 1
local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
@ -667,13 +715,15 @@ function tvb_anywhere_unlock_test()
end end
if data and data.allow_in_this_country then if data and data.allow_in_this_country then
status = 2 status = 2
region = string.upper(data.country) if data.country then
if region then region = string.upper(data.country)
return region end
if not datamatch(region, regex) then
status = 3
end end
end end
end end
return return region
end end
function prime_video_unlock_test() function prime_video_unlock_test()
@ -681,6 +731,7 @@ function prime_video_unlock_test()
local url = "https://www.primevideo.com" local url = "https://www.primevideo.com"
local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local httpcode = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -o /dev/null -w %%{http_code} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
local region local region
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_prime_video") or ""
if tonumber(httpcode) == 200 then if tonumber(httpcode) == 200 then
status = 1 status = 1
local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url)) local data = luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
@ -688,6 +739,9 @@ function prime_video_unlock_test()
region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2) region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2)
if region then if region then
status = 2 status = 2
if not datamatch(region, regex) then
status = 3
end
return region return region
end end
end end

View File

@ -7,10 +7,10 @@ OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '
if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then
if pidof clash >/dev/null; then if pidof clash >/dev/null; then
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1 curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
fi fi
if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then
curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1 curl -sL --connect-timeout 5 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
fi fi
if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null) OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)

View File

@ -552,4 +552,23 @@ ipv4-c001-cgk001-moratel-isp.1.oca.nflxvideo.net
ipv4-c221-sjc002-ix.1.oca.nflxvideo.net ipv4-c221-sjc002-ix.1.oca.nflxvideo.net
ipv4-c204-sjc002-dev-ix.1.oca.nflxvideo.net ipv4-c204-sjc002-dev-ix.1.oca.nflxvideo.net
ipv4-c070-lax009-ix.1.oca.nflxvideo.net ipv4-c070-lax009-ix.1.oca.nflxvideo.net
ipv4-c024-lax009-ix.1.oca.nflxvideo.net ipv4-c024-lax009-ix.1.oca.nflxvideo.net
ipv4-c044-lhr005-ix.1.oca.nflxvideo.net
ipv4-c133-lhr004-ix.1.oca.nflxvideo.net
ipv4-c144-sea001-ix.1.oca.nflxvideo.net
ipv4-c046-nyc005-ix.1.oca.nflxvideo.net
ipv4-c007-pdx001-ix.1.oca.nflxvideo.net
ipv4-c111-lhr004-ix.1.oca.nflxvideo.net
ipv4-c059-lhr005-ix.1.oca.nflxvideo.net
ipv4-c162-sea001-ix.1.oca.nflxvideo.net
ipv4-c031-nyc005-ix.1.oca.nflxvideo.net
ipv4-c022-pdx001-ix.1.oca.nflxvideo.net
ipv6-c212-sea001-ix.1.oca.nflxvideo.net
ipv6-c147-sea001-ix.1.oca.nflxvideo.net
ipv6-c181-sea001-ix.1.oca.nflxvideo.net
ipv6-c204-sea001-ix.1.oca.nflxvideo.net
ipv4-c132-lhr004-ix.1.oca.nflxvideo.net
ipv4-c067-lhr005-ix.1.oca.nflxvideo.net
ipv4-c197-sea001-ix.1.oca.nflxvideo.net
ipv4-c044-pdx001-ix.1.oca.nflxvideo.net
ipv4-c060-nyc005-ix.1.oca.nflxvideo.net

View File

@ -145,318 +145,318 @@ rule-providers:
Reject: Reject:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Reject.yaml url: https://raw.dler.io/main/Clash/Provider/Reject.yaml
path: "./Rules/Reject" path: "./Rules/Reject"
interval: 86400 interval: 86400
Special: Special:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Special.yaml url: https://raw.dler.io/main/Clash/Provider/Special.yaml
path: "./Rules/Special" path: "./Rules/Special"
interval: 86400 interval: 86400
Netflix: Netflix:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Netflix.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Netflix.yaml
path: "./Rules/Media/Netflix" path: "./Rules/Media/Netflix"
interval: 86400 interval: 86400
Spotify: Spotify:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Spotify.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Spotify.yaml
path: "./Rules/Media/Spotify" path: "./Rules/Media/Spotify"
interval: 86400 interval: 86400
YouTube: YouTube:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/YouTube.yaml url: https://raw.dler.io/main/Clash/Provider/Media/YouTube.yaml
path: "./Rules/Media/YouTube" path: "./Rules/Media/YouTube"
interval: 86400 interval: 86400
Bilibili: Bilibili:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Bilibili.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Bilibili.yaml
path: "./Rules/Media/Bilibili" path: "./Rules/Media/Bilibili"
interval: 86400 interval: 86400
IQ: IQ:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/IQ.yaml url: https://raw.dler.io/main/Clash/Provider/Media/IQ.yaml
path: "./Rules/Media/IQI" path: "./Rules/Media/IQI"
interval: 86400 interval: 86400
IQIYI: IQIYI:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/IQIYI.yaml url: https://raw.dler.io/main/Clash/Provider/Media/IQIYI.yaml
path: "./Rules/Media/IQYI" path: "./Rules/Media/IQYI"
interval: 86400 interval: 86400
Letv: Letv:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Letv.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Letv.yaml
path: "./Rules/Media/Letv" path: "./Rules/Media/Letv"
interval: 86400 interval: 86400
Netease Music: Netease Music:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Netease%20Music.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Netease%20Music.yaml
path: "./Rules/Media/Netease_Music" path: "./Rules/Media/Netease_Music"
interval: 86400 interval: 86400
Tencent Video: Tencent Video:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Tencent%20Video.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Tencent%20Video.yaml
path: "./Rules/Media/Tencent_Video" path: "./Rules/Media/Tencent_Video"
interval: 86400 interval: 86400
Youku: Youku:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Youku.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Youku.yaml
path: "./Rules/Media/Youku" path: "./Rules/Media/Youku"
interval: 86400 interval: 86400
WeTV: WeTV:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/WeTV.yaml url: https://raw.dler.io/main/Clash/Provider/Media/WeTV.yaml
path: "./Rules/Media/WeTV" path: "./Rules/Media/WeTV"
interval: 86400 interval: 86400
ABC: ABC:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/ABC.yaml url: https://raw.dler.io/main/Clash/Provider/Media/ABC.yaml
path: "./Rules/Media/ABC" path: "./Rules/Media/ABC"
interval: 86400 interval: 86400
Abema TV: Abema TV:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Abema%20TV.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Abema%20TV.yaml
path: "./Rules/Media/Abema_TV" path: "./Rules/Media/Abema_TV"
interval: 86400 interval: 86400
Amazon: Amazon:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Amazon.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Amazon.yaml
path: "./Rules/Media/Amazon" path: "./Rules/Media/Amazon"
interval: 86400 interval: 86400
Apple News: Apple News:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Apple%20News.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Apple%20News.yaml
path: "./Rules/Media/Apple_News" path: "./Rules/Media/Apple_News"
interval: 86400 interval: 86400
Apple TV: Apple TV:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Apple%20TV.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Apple%20TV.yaml
path: "./Rules/Media/Apple_TV" path: "./Rules/Media/Apple_TV"
interval: 86400 interval: 86400
Bahamut: Bahamut:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Bahamut.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Bahamut.yaml
path: "./Rules/Media/Bahamut" path: "./Rules/Media/Bahamut"
interval: 86400 interval: 86400
BBC iPlayer: BBC iPlayer:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/BBC%20iPlayer.yaml url: https://raw.dler.io/main/Clash/Provider/Media/BBC%20iPlayer.yaml
path: "./Rules/Media/BBC_iPlayer" path: "./Rules/Media/BBC_iPlayer"
interval: 86400 interval: 86400
DAZN: DAZN:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/DAZN.yaml url: https://raw.dler.io/main/Clash/Provider/Media/DAZN.yaml
path: "./Rules/Media/DAZN" path: "./Rules/Media/DAZN"
interval: 86400 interval: 86400
Discovery Plus: Discovery Plus:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Discovery%20Plus.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Discovery%20Plus.yaml
path: "./Rules/Media/Discovery_Plus" path: "./Rules/Media/Discovery_Plus"
interval: 86400 interval: 86400
Disney Plus: Disney Plus:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Disney%20Plus.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Disney%20Plus.yaml
path: "./Rules/Media/Disney_Plus" path: "./Rules/Media/Disney_Plus"
interval: 86400 interval: 86400
encoreTVB: encoreTVB:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/encoreTVB.yaml url: https://raw.dler.io/main/Clash/Provider/Media/encoreTVB.yaml
path: "./Rules/Media/encoreTVB" path: "./Rules/Media/encoreTVB"
interval: 86400 interval: 86400
Fox Now: Fox Now:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Fox%20Now.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Fox%20Now.yaml
path: "./Rules/Media/Fox_Now" path: "./Rules/Media/Fox_Now"
interval: 86400 interval: 86400
Fox+: Fox+:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Fox%2B.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Fox%2B.yaml
path: "./Rules/Media/Fox+" path: "./Rules/Media/Fox+"
interval: 86400 interval: 86400
HBO Go: HBO Go:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/HBO%20Go.yaml url: https://raw.dler.io/main/Clash/Provider/Media/HBO%20Go.yaml
path: "./Rules/Media/HBO_Go" path: "./Rules/Media/HBO_Go"
interval: 86400 interval: 86400
HBO Max: HBO Max:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/HBO%20Max.yaml url: https://raw.dler.io/main/Clash/Provider/Media/HBO%20Max.yaml
path: "./Rules/Media/HBO_Max" path: "./Rules/Media/HBO_Max"
interval: 86400 interval: 86400
Hulu Japan: Hulu Japan:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Hulu%20Japan.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Hulu%20Japan.yaml
path: "./Rules/Media/Hulu_Japan" path: "./Rules/Media/Hulu_Japan"
interval: 86400 interval: 86400
Hulu: Hulu:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Hulu.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Hulu.yaml
path: "./Rules/Media/Hulu" path: "./Rules/Media/Hulu"
interval: 86400 interval: 86400
Japonx: Japonx:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Japonx.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Japonx.yaml
path: "./Rules/Media/Japonx" path: "./Rules/Media/Japonx"
interval: 86400 interval: 86400
JOOX: JOOX:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/JOOX.yaml url: https://raw.dler.io/main/Clash/Provider/Media/JOOX.yaml
path: "./Rules/Media/JOOX" path: "./Rules/Media/JOOX"
interval: 86400 interval: 86400
KKBOX: KKBOX:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/KKBOX.yaml url: https://raw.dler.io/main/Clash/Provider/Media/KKBOX.yaml
path: "./Rules/Media/KKBOX" path: "./Rules/Media/KKBOX"
interval: 86400 interval: 86400
KKTV: KKTV:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/KKTV.yaml url: https://raw.dler.io/main/Clash/Provider/Media/KKTV.yaml
path: "./Rules/Media/KKTV" path: "./Rules/Media/KKTV"
interval: 86400 interval: 86400
Line TV: Line TV:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Line%20TV.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Line%20TV.yaml
path: "./Rules/Media/Line_TV" path: "./Rules/Media/Line_TV"
interval: 86400 interval: 86400
myTV SUPER: myTV SUPER:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/myTV%20SUPER.yaml url: https://raw.dler.io/main/Clash/Provider/Media/myTV%20SUPER.yaml
path: "./Rules/Media/myTV_SUPER" path: "./Rules/Media/myTV_SUPER"
interval: 86400 interval: 86400
Pandora: Pandora:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Pandora.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Pandora.yaml
path: "./Rules/Media/Pandora" path: "./Rules/Media/Pandora"
interval: 86400 interval: 86400
PBS: PBS:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/PBS.yaml url: https://raw.dler.io/main/Clash/Provider/Media/PBS.yaml
path: "./Rules/Media/PBS" path: "./Rules/Media/PBS"
interval: 86400 interval: 86400
Pornhub: Pornhub:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Pornhub.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Pornhub.yaml
path: "./Rules/Media/Pornhub" path: "./Rules/Media/Pornhub"
interval: 86400 interval: 86400
Soundcloud: Soundcloud:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/Soundcloud.yaml url: https://raw.dler.io/main/Clash/Provider/Media/Soundcloud.yaml
path: "./Rules/Media/Soundcloud" path: "./Rules/Media/Soundcloud"
interval: 86400 interval: 86400
ViuTV: ViuTV:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Media/ViuTV.yaml url: https://raw.dler.io/main/Clash/Provider/Media/ViuTV.yaml
path: "./Rules/Media/ViuTV" path: "./Rules/Media/ViuTV"
interval: 86400 interval: 86400
Telegram: Telegram:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Telegram.yaml url: https://raw.dler.io/main/Clash/Provider/Telegram.yaml
path: "./Rules/Telegram" path: "./Rules/Telegram"
interval: 86400 interval: 86400
Steam: Steam:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Steam.yaml url: https://raw.dler.io/main/Clash/Provider/Steam.yaml
path: "./Rules/Steam" path: "./Rules/Steam"
interval: 86400 interval: 86400
Speedtest: Speedtest:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Speedtest.yaml url: https://raw.dler.io/main/Clash/Provider/Speedtest.yaml
path: "./Rules/Speedtest" path: "./Rules/Speedtest"
interval: 86400 interval: 86400
PayPal: PayPal:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/PayPal.yaml url: https://raw.dler.io/main/Clash/Provider/PayPal.yaml
path: "./Rules/PayPal" path: "./Rules/PayPal"
interval: 86400 interval: 86400
Microsoft: Microsoft:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Microsoft.yaml url: https://raw.dler.io/main/Clash/Provider/Microsoft.yaml
path: "./Rules/Microsoft" path: "./Rules/Microsoft"
interval: 86400 interval: 86400
PROXY: PROXY:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Proxy.yaml url: https://raw.dler.io/main/Clash/Provider/Proxy.yaml
path: "./Rules/Proxy" path: "./Rules/Proxy"
interval: 86400 interval: 86400
Domestic: Domestic:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Domestic.yaml url: https://raw.dler.io/main/Clash/Provider/Domestic.yaml
path: "./Rules/Domestic" path: "./Rules/Domestic"
interval: 86400 interval: 86400
Apple: Apple:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Apple.yaml url: https://raw.dler.io/main/Clash/Provider/Apple.yaml
path: "./Rules/Apple" path: "./Rules/Apple"
interval: 86400 interval: 86400
Google FCM: Google FCM:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Google%20FCM.yaml url: https://raw.dler.io/main/Clash/Provider/Google%20FCM.yaml
path: "./Rules/Google FCM" path: "./Rules/Google FCM"
interval: 86400 interval: 86400
Scholar: Scholar:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Scholar.yaml url: https://raw.dler.io/main/Clash/Provider/Scholar.yaml
path: "./Rules/Scholar" path: "./Rules/Scholar"
interval: 86400 interval: 86400
Domestic IPs: Domestic IPs:
type: http type: http
behavior: ipcidr behavior: ipcidr
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/Domestic%20IPs.yaml url: https://raw.dler.io/main/Clash/Provider/Domestic%20IPs.yaml
path: "./Rules/Domestic_IPs" path: "./Rules/Domestic_IPs"
interval: 86400 interval: 86400
LAN: LAN:
type: http type: http
behavior: classical behavior: classical
url: https://cdn.jsdelivr.net/gh/lhie1/Rules@master/Clash/Provider/LAN.yaml url: https://raw.dler.io/main/Clash/Provider/LAN.yaml
path: "./Rules/LAN" path: "./Rules/LAN"
interval: 86400 interval: 86400

File diff suppressed because one or more lines are too long

View File

@ -1,49 +1,49 @@
放行规则-ConnersHua(建议置顶并直连),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Unbreak.yaml 放行规则-ConnersHua(建议置顶并直连),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Unbreak.yaml
放行规则-lhie1(建议置顶并直连),lhie1,classical,lhie1/Rules/master/Clash/Provider/,Special.yaml 放行规则-lhie1(建议置顶并直连),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Special.yaml
放行规则-ACL4SSR(建议置顶并直连),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,UnBan.yaml 放行规则-ACL4SSR(建议置顶并直连),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,UnBan.yaml
反劫持规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Hijacking.yaml 反劫持规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Hijacking.yaml
国内IP白名单(By lhie1),lhie1,ipcidr,lhie1/Rules/master/Clash/Provider/,Domestic%20IPs.yaml,Domestic IPs.yaml 国内IP白名单(By lhie1),lhie1,ipcidr,dler-io/Rules/master/Clash/Provider/,Domestic%20IPs.yaml,Domestic IPs.yaml
国内IP白名单,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,ChinaIP.yaml 国内IP白名单,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,ChinaIP.yaml
国内域名白名单(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/,Domestic.yaml 国内域名白名单(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Domestic.yaml
国内域名白名单,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,China.yaml 国内域名白名单,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,China.yaml
国内流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingCN.yaml 国内流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingCN.yaml
国内流媒体国际版合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingSE.yaml 国内流媒体国际版合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingSE.yaml
国外常用网站合集(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/,Proxy.yaml 国外常用网站合集(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Proxy.yaml
国外常用网站合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Global.yaml 国外常用网站合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Global.yaml
国外流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,Streaming.yaml 国外流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,Streaming.yaml
学术网站,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Scholar.yaml 学术网站,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Scholar.yaml
广告规则(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/,Reject.yaml 广告规则(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Reject.yaml
广告规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Advertising.yaml 广告规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Advertising.yaml
微软服务,lhie1,classical,lhie1/Rules/master/Clash/Provider/,Microsoft.yaml 微软服务,lhie1,classical,dler-io/Rules/master/Clash/Provider/,Microsoft.yaml
数字货币相关,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Cryptocurrency.yaml 数字货币相关,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Cryptocurrency.yaml
隐私规则合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Privacy.yaml 隐私规则合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Privacy.yaml
ABC,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,ABC.yaml ABC,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,ABC.yaml
Abema TV,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Abema%20TV.yaml,Abema TV.yaml Abema TV,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Abema%20TV.yaml,Abema TV.yaml
AbemaTV(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,AbemaTV.yaml,AbemaTV-ACL4SSR.yaml AbemaTV(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,AbemaTV.yaml,AbemaTV-ACL4SSR.yaml
AbemaTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,AbemaTV.yaml AbemaTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,AbemaTV.yaml
Adobe,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Adobe.yaml Adobe,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Adobe.yaml
All-4,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,All-4.yaml All-4,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,All-4.yaml
Amazon(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Amazon.yaml,Amazon-ACL4SSR.yaml Amazon(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Amazon.yaml,Amazon-ACL4SSR.yaml
Amazon,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Amazon.yaml Amazon,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Amazon.yaml
AmazonIp,ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,AmazonIp.yaml AmazonIp,ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,AmazonIp.yaml
AppStore,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStore.yaml AppStore,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStore.yaml
AppStoreConnect,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStoreConnect.yaml AppStoreConnect,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStoreConnect.yaml
Apple FindMy,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,FindMy.yaml Apple FindMy,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,FindMy.yaml
Apple Music,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Music.yaml Apple Music,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Music.yaml
Apple News(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Apple%20News.yaml,Apple News.yaml Apple News(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Apple%20News.yaml,Apple News.yaml
Apple News,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,News.yaml Apple News,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,News.yaml
Apple SoftwareUpdate,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,SoftwareUpdate.yaml Apple SoftwareUpdate,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,SoftwareUpdate.yaml
Apple TV(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Apple%20TV.yaml,Apple TV.yaml Apple TV(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Apple%20TV.yaml,Apple TV.yaml
Apple TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TV.yaml Apple TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TV.yaml
Apple TestFlight,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TestFlight.yaml Apple TestFlight,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TestFlight.yaml
Apple iCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,iCloud.yaml Apple iCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,iCloud.yaml
Apple(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Apple.yaml,Apple-ACL4SSR.yaml Apple(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Apple.yaml,Apple-ACL4SSR.yaml
Apple(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/,Apple.yaml,Apple-lhie1.yaml Apple(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Apple.yaml,Apple-lhie1.yaml
Apple,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Apple.yaml Apple,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Apple.yaml
BBC iPlayer,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,BBC iPlayer.yaml BBC iPlayer,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,BBC iPlayer.yaml
BBC-iPlayer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,BBC-iPlayer.yaml BBC-iPlayer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,BBC-iPlayer.yaml
Bahamut(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Bahamut.yaml,Bahamut-ACL4SSR.yaml Bahamut(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Bahamut.yaml,Bahamut-ACL4SSR.yaml
Bahamut(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Bahamut.yaml,Bahamut-lhie1.yaml Bahamut(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Bahamut.yaml,Bahamut-lhie1.yaml
Bahamut,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Bahamut.yaml Bahamut,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Bahamut.yaml
BanAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanAD.yaml BanAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanAD.yaml
BanEasyList,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyList.yaml BanEasyList,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyList.yaml
@ -51,7 +51,7 @@ BanEasyListChina,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEa
BanEasyPrivacy,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyPrivacy.yaml BanEasyPrivacy,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyPrivacy.yaml
BanProgramAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanProgramAD.yaml BanProgramAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanProgramAD.yaml
Bilibili(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Bilibili.yaml,Bilibili-ACL4SSR.yaml Bilibili(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Bilibili.yaml,Bilibili-ACL4SSR.yaml
Bilibili,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Bilibili.yaml Bilibili,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Bilibili.yaml
Bilibili-Intl,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,bilibili-Intl.yaml Bilibili-Intl,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,bilibili-Intl.yaml
BilibiliHMT,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,BilibiliHMT.yaml BilibiliHMT,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,BilibiliHMT.yaml
Blizzard(By ConnersHua),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Blizzard.yaml,Blizzard-ConnersHua.yaml Blizzard(By ConnersHua),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Blizzard.yaml,Blizzard-ConnersHua.yaml
@ -61,21 +61,21 @@ ChinaDomain,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaDomai
ChinaIp(By ACL4SSR),ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaIp.yaml,ChinaIp-ACL4SSR.yaml ChinaIp(By ACL4SSR),ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaIp.yaml,ChinaIp-ACL4SSR.yaml
ChinaMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaMedia.yaml ChinaMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaMedia.yaml
Chromecast,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,Chromecast.yaml Chromecast,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,Chromecast.yaml
DAZN(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,DAZN.yaml,DAZN-lhie1.yaml DAZN(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,DAZN.yaml,DAZN-lhie1.yaml
DAZN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DAZN.yaml DAZN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DAZN.yaml
Deezer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Deezer.yaml Deezer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Deezer.yaml
Developer,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Developer.yaml Developer,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Developer.yaml
Discord,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Discord.yaml Discord,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Discord.yaml
DiscoveryPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DiscoveryPlus.yaml DiscoveryPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DiscoveryPlus.yaml
Disney Plus,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Disney%20Plus.yaml,Disney Plus.yaml Disney Plus,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Disney%20Plus.yaml,Disney Plus.yaml
DisneyPlus(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,DisneyPlus.yaml,DisneyPlus-ACL4SSR.yaml DisneyPlus(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,DisneyPlus.yaml,DisneyPlus-ACL4SSR.yaml
DisneyPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DisneyPlus.yaml DisneyPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DisneyPlus.yaml
Download,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,Download.yaml Download,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,Download.yaml
EHGallery,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,EHGallery.yaml EHGallery,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,EHGallery.yaml
Epic,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Epic.yaml Epic,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Epic.yaml
FOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,FOX.yaml FOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,FOX.yaml
Fox Now,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Fox%20Now.yaml,Fox Now.yaml Fox Now,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Fox%20Now.yaml,Fox Now.yaml
Fox+,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Fox+.yaml Fox+,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Fox+.yaml
GFW地址,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,IP-Blackhole.yaml GFW地址,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,IP-Blackhole.yaml
Google,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Google.yaml Google,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Google.yaml
GoogleCN,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,GoogleCN.yaml GoogleCN,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,GoogleCN.yaml
@ -84,52 +84,52 @@ GoogleFCM,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Goog
GoogleSearch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleSearch.yaml GoogleSearch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleSearch.yaml
GoogleVoice,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleVoice.yaml GoogleVoice,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleVoice.yaml
HBO(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,HBO.yaml,HBO-ACL4SSR.yaml HBO(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,HBO.yaml,HBO-ACL4SSR.yaml
HBO(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,HBO.yaml,HBO-lhie1.yaml HBO(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,HBO.yaml,HBO-lhie1.yaml
HBO,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO.yaml HBO,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO.yaml
HBO-GO-HKG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO-GO-HKG.yaml HBO-GO-HKG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO-GO-HKG.yaml
HWTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HWTV.yaml HWTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HWTV.yaml
Himalaya,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Podcast/,Himalaya.yaml Himalaya,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Podcast/,Himalaya.yaml
Hulu Japan,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Hulu Japan.yaml Hulu Japan,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Hulu Japan.yaml
Hulu(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Hulu.yaml,Hulu-lhie1.yaml Hulu(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Hulu.yaml,Hulu-lhie1.yaml
Hulu,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu.yaml Hulu,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu.yaml
Hulu-JPN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu-JPN.yaml Hulu-JPN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu-JPN.yaml
ITV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ITV.yaml ITV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ITV.yaml
Instagram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Instagram.yaml Instagram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Instagram.yaml
JOOX(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,JOOX.yaml,JOOX-lhie1.yaml JOOX(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,JOOX.yaml,JOOX-lhie1.yaml
JOOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,JOOX.yaml JOOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,JOOX.yaml
Japonx,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Japonx.yaml Japonx,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Japonx.yaml
KKBOX(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,KKBOX.yaml,KKBOX-lhie1.yaml KKBOX(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,KKBOX.yaml,KKBOX-lhie1.yaml
KKBOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,KKBOX.yaml KKBOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,KKBOX.yaml
KKTV(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,KKTV.yaml,KKTV-lhie1.yaml KKTV(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,KKTV.yaml,KKTV-lhie1.yaml
KKTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,KKTV.yaml KKTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,KKTV.yaml
LINE-TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LINE-TV.yaml LINE-TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LINE-TV.yaml
Letv,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Letv.yaml Letv,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Letv.yaml
LiTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LiTV.yaml LiTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LiTV.yaml
Line TV,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Line%20TV.yaml,Line TV.yaml Line TV,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Line%20TV.yaml,Line TV.yaml
LocalAreaNetwork,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,LocalAreaNetwork.yaml LocalAreaNetwork,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,LocalAreaNetwork.yaml
MOO,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,MOO.yaml MOO,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,MOO.yaml
Microsoft(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Microsoft.yaml,Microsoft-ACL4SSR.yaml Microsoft(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Microsoft.yaml,Microsoft-ACL4SSR.yaml
My5,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,My5.yaml My5,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,My5.yaml
NetEaseMusic,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,NetEaseMusic.yaml NetEaseMusic,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,NetEaseMusic.yaml
Netease Music,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Netease%20Music.yaml,Netease Music.yaml Netease Music,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Netease%20Music.yaml,Netease Music.yaml
Netflix(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Netflix.yaml,Netflix-ACL4SSR.yaml Netflix(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Netflix.yaml,Netflix-ACL4SSR.yaml
Netflix(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Netflix.yaml,Netflix-lhie1.yaml Netflix(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Netflix.yaml,Netflix-lhie1.yaml
Netflix,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Netflix.yaml Netflix,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Netflix.yaml
Nintendo,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Nintendo.yaml Nintendo,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Nintendo.yaml
Now-E,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Now-E.yaml Now-E,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Now-E.yaml
OneDrive(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,OneDrive.yaml,OneDrive-ACL4SSR.yaml OneDrive(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,OneDrive.yaml,OneDrive-ACL4SSR.yaml
OneDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Microsoft/,OneDrive.yaml OneDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Microsoft/,OneDrive.yaml
Origin,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Origin.yaml Origin,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Game/,Origin.yaml
PBS(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,PBS.yaml,PBS-lhie1.yaml PBS(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,PBS.yaml,PBS-lhie1.yaml
PBS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,PBS.yaml PBS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,PBS.yaml
Pandora(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Pandora.yaml,Pandora-lhie1.yaml Pandora(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Pandora.yaml,Pandora-lhie1.yaml
Pandora,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Pandora.yaml Pandora,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Pandora.yaml
ParamountPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ParamountPlus.yaml ParamountPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ParamountPlus.yaml
PayPal(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/,PayPal.yaml,PayPal-lhie1.yaml PayPal(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,PayPal.yaml,PayPal-lhie1.yaml
PayPal,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,PayPal.yaml PayPal,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,PayPal.yaml
Peacock,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Peacock.yaml Peacock,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Peacock.yaml
Porn,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Porn.yaml Porn,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Porn.yaml
Pornhub(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Pornhub.yaml,Pornhub-lhie1.yaml Pornhub(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Pornhub.yaml,Pornhub-lhie1.yaml
Pornhub,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Pornhub.yaml Pornhub,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Pornhub.yaml
Prime-Video,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Prime-Video.yaml Prime-Video,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Prime-Video.yaml
ProxyGFWlist,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyGFWlist.yaml ProxyGFWlist,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyGFWlist.yaml
@ -139,40 +139,40 @@ Scholar(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Rul
Siri,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Siri.yaml Siri,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Siri.yaml
Sony,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Sony.yaml Sony,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Sony.yaml
SoundCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,SoundCloud.yaml SoundCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,SoundCloud.yaml
Soundcloud(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Soundcloud.yaml,Soundcloud-lhie1.yaml Soundcloud(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Soundcloud.yaml,Soundcloud-lhie1.yaml
Speedtest,lhie1,classical,lhie1/Rules/master/Clash/Provider/,Speedtest.yaml Speedtest,lhie1,classical,dler-io/Rules/master/Clash/Provider/,Speedtest.yaml
Spotify(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Spotify.yaml,Spotify-ACL4SSR.yaml Spotify(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Spotify.yaml,Spotify-ACL4SSR.yaml
Spotify(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Spotify.yaml,Spotify-lhie1.yaml Spotify(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Spotify.yaml,Spotify-lhie1.yaml
Spotify,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Spotify.yaml Spotify,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Spotify.yaml
Steam(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Steam.yaml,Steam-ACL4SSR.yaml Steam(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Steam.yaml,Steam-ACL4SSR.yaml
Steam,lhie1,classical,lhie1/Rules/master/Clash/Provider/,Steam.yaml Steam,lhie1,classical,dler-io/Rules/master/Clash/Provider/,Steam.yaml
SteamCN,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,SteamCN.yaml SteamCN,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,SteamCN.yaml
TIDAL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,TIDAL.yaml TIDAL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,TIDAL.yaml
TaiwanGood,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TaiwanGood.yaml TaiwanGood,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TaiwanGood.yaml
Telegram(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Telegram.yaml,Telegram-ACL4SSR.yaml Telegram(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Telegram.yaml,Telegram-ACL4SSR.yaml
Telegram(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/,Telegram.yaml,Telegram-lhie1.yaml Telegram(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/,Telegram.yaml,Telegram-lhie1.yaml
Telegram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,Telegram.yaml Telegram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,Telegram.yaml
TelegramNL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramNL.yaml TelegramNL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramNL.yaml
TelegramSG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramSG.yaml TelegramSG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramSG.yaml
TelegramUS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramUS.yaml TelegramUS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramUS.yaml
Tencent Video,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Tencent%20Video.yaml,Tencent Video.yaml Tencent Video,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Tencent%20Video.yaml,Tencent Video.yaml
TikTok,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TikTok.yaml TikTok,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TikTok.yaml
Twitch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Live/,Twitch.yaml Twitch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Live/,Twitch.yaml
ViuTV(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,ViuTV.yaml,ViuTV-lhie1.yaml ViuTV(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,ViuTV.yaml,ViuTV-lhie1.yaml
ViuTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ViuTV.yaml ViuTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ViuTV.yaml
WeTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,WeTV.yaml WeTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,WeTV.yaml
Xbox,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Xbox.yaml Xbox,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Xbox.yaml
YouTube Music,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,YouTube%20Music.yaml,YouTube Music.yaml YouTube Music,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,YouTube%20Music.yaml,YouTube Music.yaml
YouTube(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,YouTube.yaml,YouTube-ACL4SSR.yaml YouTube(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,YouTube.yaml,YouTube-ACL4SSR.yaml
YouTube(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,YouTube.yaml,YouTube-lhie1.yaml YouTube(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,YouTube.yaml,YouTube-lhie1.yaml
YouTube,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,YouTube.yaml YouTube,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,YouTube.yaml
YouTubeMusic,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,YouTubeMusic.yaml YouTubeMusic,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,YouTubeMusic.yaml
Youku,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Youku.yaml Youku,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Youku.yaml
encoreTVB(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,encoreTVB.yaml,encoreTVB-lhie1.yaml encoreTVB(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,encoreTVB.yaml,encoreTVB-lhie1.yaml
encoreTVB,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,encoreTVB.yaml encoreTVB,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,encoreTVB.yaml
iCloud-email,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Mail.yaml iCloud-email,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Mail.yaml
iQIYI,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,iQIYI.yaml iQIYI,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,iQIYI.yaml
iQiyi,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,iQiyi.yaml iQiyi,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,iQiyi.yaml
myTV SUPER,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,myTV%20SUPER.yaml,myTV SUPER.yaml myTV SUPER,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,myTV%20SUPER.yaml,myTV SUPER.yaml
myTV-SUPER,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,myTV-SUPER.yaml myTV-SUPER,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,myTV-SUPER.yaml
niconico,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,niconico.yaml niconico,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,niconico.yaml

View File

@ -1,9 +1,7 @@
默认附带用于Clash的AdGuard DNS,default_with_clash_adg.yml,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/default_with_clash_adg.yml 默认附带用于Clash的AdGuard DNS,default_with_clash_adg.yml,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/default_with_clash_adg.yml
无Urltest,no_urltest.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/no_urltest.ini 无Urltest,no_urltest.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/no_urltest.ini
带Urltest,urltest.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/urltest.ini 带Urltest,urltest.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/urltest.ini
ConnersHua 神机规则 Basic,connershua_basic.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_basic.ini
ConnersHua 神机规则 Pro,connershua_pro.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_new.ini ConnersHua 神机规则 Pro,connershua_pro.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_new.ini
ConnersHua 神机规则 BacktoCN 回国专用,connershua_backtocn.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_backtocn.ini
lhie1 洞主规则(使用 Clash 分组规则),lhie1_clash.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_clash.ini lhie1 洞主规则(使用 Clash 分组规则),lhie1_clash.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_clash.ini
lhie1 洞主规则完整版,lhie1_dler.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_dler.ini lhie1 洞主规则完整版,lhie1_dler.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_dler.ini
ACL4SSR 规则标准版,acl4ssr_standard.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/acl4ssr_standard.ini ACL4SSR 规则标准版,acl4ssr_standard.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/acl4ssr_standard.ini
@ -23,28 +21,20 @@ ACL4SSR 规则 Online,ACL4SSR_Online.ini,https://raw.githubusercontent.com/tindy
ACL4SSR 规则 Online AdblockPlus,ACL4SSR_Online_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_AdblockPlus.ini ACL4SSR 规则 Online AdblockPlus,ACL4SSR_Online_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_AdblockPlus.ini
ACL4SSR 规则 Online Full,ACL4SSR_Online_Full.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full.ini ACL4SSR 规则 Online Full,ACL4SSR_Online_Full.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full.ini
ACL4SSR 规则 Online Full AdblockPlus,ACL4SSR_Online_Full_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_AdblockPlus.ini ACL4SSR 规则 Online Full AdblockPlus,ACL4SSR_Online_Full_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_AdblockPlus.ini
ACL4SSR 规则 Online Full Google,ACL4SSR_Online_Full_Google.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_Google.ini
ACL4SSR 规则 Online Full MultiMode,ACL4SSR_Online_Full_MultiMode.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_MultiMode.ini
ACL4SSR 规则 Online Full Netflix,ACL4SSR_Online_Full_Netflix.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_Netflix.ini ACL4SSR 规则 Online Full Netflix,ACL4SSR_Online_Full_Netflix.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_Netflix.ini
ACL4SSR 规则 Online Full NoAuto,ACL4SSR_Online_Full_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_NoAuto.ini ACL4SSR 规则 Online Full NoAuto,ACL4SSR_Online_Full_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Full_NoAuto.ini
ACL4SSR 规则 Online Mini,ACL4SSR_Online_Mini.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini.ini ACL4SSR 规则 Online Mini,ACL4SSR_Online_Mini.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini.ini
ACL4SSR 规则 Online Mini AdblockPlus,ACL4SSR_Online_Mini_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_AdblockPlus.ini ACL4SSR 规则 Online Mini AdblockPlus,ACL4SSR_Online_Mini_AdblockPlus.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_AdblockPlus.ini
ACL4SSR 规则 Online Mini Fallback,ACL4SSR_Online_Mini_Fallback.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_Fallback.ini ACL4SSR 规则 Online Mini Fallback,ACL4SSR_Online_Mini_Fallback.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_Fallback.ini
ACL4SSR 规则 Online Mini MultiCountry,ACL4SSR_Online_Mini_MultiCountry.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_MultiCountry.ini
ACL4SSR 规则 Online Mini MultiMode,ACL4SSR_Online_Mini_MultiMode.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_MultiMode.ini ACL4SSR 规则 Online Mini MultiMode,ACL4SSR_Online_Mini_MultiMode.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_MultiMode.ini
ACL4SSR 规则 Online Mini NoAuto,ACL4SSR_Online_Mini_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_NoAuto.ini ACL4SSR 规则 Online Mini NoAuto,ACL4SSR_Online_Mini_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_Mini_NoAuto.ini
ACL4SSR 规则 Online MultiCountry,ACL4SSR_Online_MultiCountry.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_MultiCountry.ini
ACL4SSR 规则 Online NoAuto,ACL4SSR_Online_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_NoAuto.ini ACL4SSR 规则 Online NoAuto,ACL4SSR_Online_NoAuto.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_NoAuto.ini
ACL4SSR 规则 Online NoReject,ACL4SSR_Online_NoReject.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_NoReject.ini ACL4SSR 规则 Online NoReject,ACL4SSR_Online_NoReject.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_Online_NoReject.ini
ACL4SSR 规则 WithChinaIp,ACL4SSR_WithChinaIp.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithChinaIp.ini ACL4SSR 规则 WithChinaIp,ACL4SSR_WithChinaIp.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithChinaIp.ini
ACL4SSR 规则 WithChinaIp WithGFW,ACL4SSR_WithChinaIp_WithGFW.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithChinaIp_WithGFW.ini ACL4SSR 规则 WithChinaIp WithGFW,ACL4SSR_WithChinaIp_WithGFW.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithChinaIp_WithGFW.ini
eHpo1 规则,ehpo1_main.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/ehpo1_main.ini ACL4SSR 规则 WithGFW,ACL4SSR_WithGFW.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithGFW.ini
nzw9314 规则,nzw9314_custom.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/nzw9314_custom.ini eHpo1 规则,ehpo1_main.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/ehpo1_main.ini
maicoo-l 规则,maicoo-l_custom.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/maicoo-l_custom.ini
rixCloud 官方规则,rixcloud_custom.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/rixcloud_custom.ini
Maying,maying_optimized.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/maying_optimized.ini
Nexitally,nexitally_optimized.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/nexitally_optimized.ini
贼船,zeichuan_optimized.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/zeichuan_optimized.ini
N3RO,n3ro_optimized.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/n3ro_optimized.ini
Scholar,scholar_optimized.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/scholar_optimized.ini
YToo,ytoo_optimized.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/ytoo_optimized.ini
DlerCloud Platinum 李哥定制规则,dlercloud_lige_platinum.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/dlercloud_lige_platinum.ini
DlerCloud Gold 李哥定制规则,dlercloud_lige_gold.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/dlercloud_lige_gold.ini
DlerCloud Silver 李哥定制规则,dlercloud_lige_silver.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/dlercloud_lige_silver.ini
网易云解锁(仅规则分组),netease.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/netease.ini

View File

@ -217,9 +217,25 @@ do
end end
}.join; }.join;
Thread.new{
#interface-name
if Value['proxy-groups'][$count].key?('interface-name') then
interface_name = '${uci_set}interface_name=' + Value['proxy-groups'][$count]['interface-name'].to_s
system(interface_name)
end
}.join;
Thread.new{
#routing-mark
if Value['proxy-groups'][$count].key?('routing-mark') then
routing_mark = '${uci_set}routing_mark=' + Value['proxy-groups'][$count]['routing-mark'].to_s
system(routing_mark)
end
}.join;
Thread.new{ Thread.new{
#other_group #other_group
Value_1=YAML.load_file('/tmp/Proxy_Group'); Value_1 = File.readlines('/tmp/Proxy_Group').map!{|x| x.strip};
if Value['proxy-groups'][$count].key?('proxies') then if Value['proxy-groups'][$count].key?('proxies') then
Value['proxy-groups'][$count]['proxies'].each{ Value['proxy-groups'][$count]['proxies'].each{
|x| |x|

View File

@ -178,6 +178,8 @@ yml_groups_set()
config_get "test_url" "$section" "test_url" "" config_get "test_url" "$section" "test_url" ""
config_get "test_interval" "$section" "test_interval" "" config_get "test_interval" "$section" "test_interval" ""
config_get "tolerance" "$section" "tolerance" "" config_get "tolerance" "$section" "tolerance" ""
config_get "interface_name" "$section" "interface_name" ""
config_get "routing_mark" "$section" "routing_mark" ""
if [ ! -z "$if_game_group" ] && [ "$if_game_group" != "$name" ]; then if [ ! -z "$if_game_group" ] && [ "$if_game_group" != "$name" ]; then
return return
@ -258,15 +260,21 @@ yml_groups_set()
sed -i "/use: ${group_name}/d" $GROUP_FILE 2>/dev/null sed -i "/use: ${group_name}/d" $GROUP_FILE 2>/dev/null
fi fi
[ ! -z "$test_url" ] && { [ -n "$test_url" ] && {
echo " url: $test_url" >>$GROUP_FILE echo " url: $test_url" >>$GROUP_FILE
} }
[ ! -z "$test_interval" ] && { [ -n "$test_interval" ] && {
echo " interval: \"$test_interval\"" >>$GROUP_FILE echo " interval: \"$test_interval\"" >>$GROUP_FILE
} }
[ ! -z "$tolerance" ] && { [ -n "$tolerance" ] && {
echo " tolerance: \"$tolerance\"" >>$GROUP_FILE echo " tolerance: \"$tolerance\"" >>$GROUP_FILE
} }
[ -n "$interface_name" ] && {
echo " interface-name: \"$interface_name\"" >>$GROUP_FILE
}
[ -n "$routing_mark" ] && {
echo " routing-mark: \"$routing_mark\"" >>$GROUP_FILE
}
} }
create_config=$(uci get openclash.config.create_config 2>/dev/null) create_config=$(uci get openclash.config.create_config 2>/dev/null)

View File

@ -745,6 +745,13 @@ do
system(psk) system(psk)
end end
}.join }.join
Thread.new{
if Value['proxies'][$count].key?('version') then
snell_version = '${uci_set}snell_version=' + Value['proxies'][$count]['version'].to_s
system(snell_version)
end
}.join
end; end;
if '$server_type' == 'socks5' or '$server_type' == 'http' then if '$server_type' == 'socks5' or '$server_type' == 'http' then
Thread.new{ Thread.new{

View File

@ -217,6 +217,7 @@ yml_servers_set()
config_get "auth_pass" "$section" "auth_pass" "" config_get "auth_pass" "$section" "auth_pass" ""
config_get "psk" "$section" "psk" "" config_get "psk" "$section" "psk" ""
config_get "obfs_snell" "$section" "obfs_snell" "" config_get "obfs_snell" "$section" "obfs_snell" ""
config_get "snell_version" "$section" "snell_version" ""
config_get "sni" "$section" "sni" "" config_get "sni" "$section" "sni" ""
config_get "alpn" "$section" "alpn" "" config_get "alpn" "$section" "alpn" ""
config_get "http_path" "$section" "http_path" "" config_get "http_path" "$section" "http_path" ""
@ -661,6 +662,11 @@ cat >> "$SERVER_FILE" <<-EOF
port: $port port: $port
psk: $psk psk: $psk
EOF EOF
if [ -n "$snell_version" ]; then
cat >> "$SERVER_FILE" <<-EOF
version: "$snell_version"
EOF
fi
if [ "$obfs_snell" != "none" ] && [ ! -z "$host" ]; then if [ "$obfs_snell" != "none" ] && [ ! -z "$host" ]; then
cat >> "$SERVER_FILE" <<-EOF cat >> "$SERVER_FILE" <<-EOF
obfs-opts: obfs-opts:

View File

@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=shadowsocks-rust PKG_NAME:=shadowsocks-rust
PKG_VERSION:=1.12.5 PKG_VERSION:=1.13.1
PKG_RELEASE:=$(AUTORELEASE) PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE_HEADER:=shadowsocks-v$(PKG_VERSION) PKG_SOURCE_HEADER:=shadowsocks-v$(PKG_VERSION)

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=Xray-core PKG_NAME:=Xray-core
PKG_VERSION:=1.5.2 PKG_VERSION:=1.5.3
PKG_RELEASE:=$(AUTORELEASE) PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz

View File

@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=xray-plugin PKG_NAME:=xray-plugin
PKG_VERSION:=1.5.2 PKG_VERSION:=1.5.3
PKG_RELEASE:=$(AUTORELEASE) PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz