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
PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.44.09
PKG_VERSION:=0.44.16
PKG_RELEASE:=beta
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>

View File

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

View File

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

View File

@ -95,6 +95,16 @@ o.default = "150"
o.rmempty = true
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.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off
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.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 )"
m.reset = false
m.submit = false

View File

@ -150,6 +150,11 @@ o = s:option(Value, "psk", translate("Psk"))
o.rmempty = false
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"))
for _, v in ipairs(encrypt_methods_ss) do o:value(v) end
o.rmempty = true
@ -204,6 +209,7 @@ o:depends("type", "ssr")
o:depends("type", "vmess")
o:depends("type", "socks5")
o:depends("type", "trojan")
o:depends({type = "snell", snell_version = "3"})
o = s:option(ListValue, "obfs", translate("obfs-mode"))
o.rmempty = true
@ -398,7 +404,7 @@ o = s:option(Value, "interface_name", translate("interface-name"))
o.rmempty = true
o.placeholder = translate("eth0")
-- [[ interface-name ]]--
-- [[ routing-mark ]]--
o = s:option(Value, "routing_mark", translate("routing-mark"))
o.rmempty = true
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: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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_disney", translate("Disney Plus"))
o.default=0
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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_ytb", translate("YouTube Premium"))
o.default=0
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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_prime_video", translate("Amazon Prime Video"))
o.default=0
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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_now", translate("HBO Now"))
o.default=0
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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_max", translate("HBO Max"))
o.default=0
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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_hbo_go_asia", translate("HBO GO Asia"))
o.default=0
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.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 = s:taboption("stream_enhance", Flag, "stream_auto_select_tvb_anywhere", translate("TVB Anywhere+"))
o.default=0
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.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")
---- update Settings

View File

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

View File

@ -383,7 +383,7 @@
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "state")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
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_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>";

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>

View File

@ -24,8 +24,8 @@
</select></td>
<td width="25%"><%:Release Branch Selected%></td>
<td width="25%" align="left"><select id="RELEASE_BRANCH">
<option value="master"><%:Master%></option>
<option value="dev"><%:Developer%></option>
<option value="master">Master</option>
<option value="dev">Developer</option>
</select></td>
</tr>
<tr>
@ -116,6 +116,12 @@
else {
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 new_op = arr_op[1];
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>";
}
else if (oplvis != "") {

View File

@ -2474,29 +2474,50 @@ msgstr "展开策略组"
msgid "Automatically Expand The Group When Selected"
msgstr "自动展开嵌套的策略组并进行解锁检测,启用后可能会造成网络不稳定"
msgid "Netflix Group Filter Keywords"
msgstr "Netflix 策略组筛选关键字"
msgid "Netflix Group Filter"
msgstr "Netflix 策略组筛选"
msgid "Disney Plus Group Filter Keywords"
msgstr "Disney Plus 策略组筛选关键字"
msgid "Disney Plus Group Filter"
msgstr "Disney Plus 策略组筛选"
msgid "HBO Now Group Filter Keywords"
msgstr "HBO Now 策略组筛选关键字"
msgid "HBO Now Group Filter"
msgstr "HBO Now 策略组筛选"
msgid "HBO Max Group Filter Keywords"
msgstr "HBO Max 策略组筛选关键字"
msgid "HBO Max Group Filter"
msgstr "HBO Max 策略组筛选"
msgid "HBO GO Asia Group Filter Keywords"
msgstr "HBO GO Asia 策略组筛选关键字"
msgid "HBO GO Asia Group Filter"
msgstr "HBO GO Asia 策略组筛选"
msgid "YouTube Premium Group Filter Keywords"
msgstr "YouTube Premium 策略组筛选关键字"
msgid "YouTube Premium Group Filter"
msgstr "YouTube Premium 策略组筛选"
msgid "TVB Anywhere+ Group Filter Keywords"
msgstr "TVB Anywhere+ 策略组筛选关键字"
msgid "TVB Anywhere+ Group Filter"
msgstr "TVB Anywhere+ 策略组筛选"
msgid "Amazon Prime Video Group Filter Keywords"
msgstr "Amazon Prime Video 策略组筛选关键字"
msgid "Amazon Prime Video Group Filter"
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..."
msgstr "提示开始自动选择检测Netflix 解锁节点..."
@ -2576,8 +2597,11 @@ msgstr "仅支持自制剧!开始进行解锁节点自动选择..."
msgid "unlock test faild! start auto select unlock proxy..."
msgstr "解锁检测失败!开始进行解锁节点自动选择..."
msgid "It Will Be Searched According To The Keywords When Auto Search Group Fails"
msgstr "策略组自动获取失败时将会根据关键字进行匹配"
msgid "It Will Be Searched According To The Regex When Auto Search Group Fails"
msgstr "策略组自动获取失败时将会根据正则表达式进行匹配"
msgid "It Will Be Selected Region According To The Regex"
msgstr "解锁区域将会根据正则表达式进行匹配"
msgid "not support unlock!"
msgstr "不支持解锁!"
@ -2597,9 +2621,21 @@ msgstr "解锁节点自动选择失败,无可用节点,回退到"
msgid ", area:"
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 "根据关键字搜索且自动获取策略组失败,请确认关键字的有效性!"
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"
msgstr "*远程域名解析"

View File

@ -1,26 +1,26 @@
#!/bin/sh /etc/rc.common
# 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
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"))
CLASH="/etc/openclash/clash"
CLASH_CONFIG="/etc/openclash"
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="/etc/openclash/cache.db"
LOG_FILE="/tmp/openclash.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"
DNS_FILE="/tmp/yaml_dns.yaml"
GAME_RULE_FILE="/tmp/yaml_game_rule.yaml"
@ -301,7 +301,7 @@ yml_provider_path()
end
#CDN Replace
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
};
if not Value_1.eql?(Value['$2']) then
@ -1172,6 +1172,11 @@ do_run_file()
geoip_path="/etc/openclash/Country.mmdb"
chnr_path="/etc/openclash/china_ip_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
else
dev_core_path="/tmp/etc/openclash/core/clash"
@ -1179,10 +1184,13 @@ do_run_file()
geoip_path="/tmp/etc/openclash/Country.mmdb"
chnr_path="/tmp/etc/openclash/china_ip_route.ipset"
chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset"
rm -rf "/etc/openclash/Country.mmdb" 2>/dev/null
rm -rf "/etc/openclash/china_ip_route.ipset" 2>/dev/null
rm -rf "/etc/openclash/china_ip6_route.ipset" 2>/dev/null
rm -rf "/etc/openclash/core" 2>/dev/null
CACHE_PATH="/tmp/etc/openclash/cache.db"
mkdir -p /tmp/etc/openclash
[ ! -h "/etc/openclash/Country.mmdb" ] && mv "/etc/openclash/Country.mmdb" "$geoip_path" 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
rm -rf "/etc/openclash/clash" 2>/dev/null
@ -1226,12 +1234,41 @@ do_run_file()
core_type="TUN"
core_start_log="Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..."
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 "$dev_core_path" ] && chmod 4755 "$dev_core_path" 2>/dev/null
#文件检查
#fake_ip_filter
if [ "$3" = "fake-ip" ]; 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
}
[ ! -f "$geoip_path" ] && {
LOG_OUT "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..."
nofile=1
nohup /usr/share/openclash/openclash_ipdb.sh &
}
[ ! -f "$CLASH" ] && {
LOG_OUT "Tip: Detected that the Core is not Installed, Ready to Download..."
nofile=1
rm -rf "/tmp/clash_last_version"
nohup /usr/share/openclash/openclash_core.sh "$core_type" &
}
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..."
nofile=1
nohup /usr/share/openclash/openclash_chnroute.sh &
#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 [ "$nofile" = "1" ]; then
del_lock
exit 0
fi
[ -f "$CACHE_PATH" ] && [ "$small_flash_memory" = "1" ] && {
ln -s "$CACHE_PATH" /etc/openclash/cache.db 2>/dev/null
}
if [ -z "$_koolshare" ]; 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
check_interface_name
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
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
kill_clash
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/rule_provider/* 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
DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port)
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
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"
@ -1861,6 +1876,10 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then
if [ "$en_mode" = "fake-ip" ]; then
iptables -t nat -N 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
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"
@ -1870,7 +1889,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then
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
if [ -n "$en_mode_tun" ]; then
#TUN模式
@ -1902,7 +1921,7 @@ if [ -n "$en_mode_tun" ]; 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"
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
iptables -t mangle -N 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
fi
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
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 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
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
if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then
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="external-controller" content="http://secret@example.com:9090"-->
<title>Clash</title>
<script type="module" crossorigin src="./assets/index.c727f058.js"></script>
<link rel="modulepreload" href="./assets/vendor.5151d57b.js">
<link rel="stylesheet" href="./assets/index.61b62488.css">
<script type="module" crossorigin src="./assets/index.049e98b9.js"></script>
<link rel="modulepreload" href="./assets/vendor.e882027f.js">
<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>
<body>
<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")
[ -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")"
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"
else
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")
[ ! -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
dev_core_path="/etc/openclash/core/clash"
tun_core_path="/etc/openclash/core/clash_tun"

View File

@ -26,10 +26,15 @@ fi
CONFIG_FILE=$(unify_ps_cfgname)
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="/etc/openclash/history/${CONFIG_NAME%.*}.db"
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
if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then

View File

@ -35,10 +35,10 @@
LOG_OUT "Start Downloading Third Party Rules in Use..."
if [ "$rule_name" = "lhie1" ]; 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
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
sed -i '1i rules:' /tmp/rules.yaml
elif [ "$rule_name" = "ConnersHua" ]; then

View File

@ -8,15 +8,14 @@ local uci = require("luci.model.uci").cursor()
local fs = require "luci.openclash"
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 filmId = 81215567
local filmId = 70143836
local type = arg[1]
local enable = tonumber(uci:get("openclash", "config", "stream_auto_select")) or 0
local now_name, group_name, group_type, group_show, status
local groups = {}
local proxies = {}
if enable == 0 then os.exit(0) end
if not type then os.exit(0) end
if enable == 0 or not type then os.exit(0) end
function unlock_auto_select()
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 ip = luci.sys.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'")
local original = {}
local key_groups = {}
local other_region_unlock = {}
local tested_proxy = {}
local fallback_select = {}
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 = "full support, area:"
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 faild_test_start = "unlock test faild! start auto select unlock proxy..."
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
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
key_group = uci:get("openclash", "config", "stream_auto_select_group_key_prime_video") or "prime video|amazon"
end
string.gsub(key_group, '[^%|]+', function(w) table.insert(key_groups, w) end)
if #key_groups == 0 then table.insert(key_groups, type) end
if not key_group then key_group = type end
else
table.insert(key_groups, auto_get_group)
key_group = "^" .. auto_get_group .. "$"
end
--save group name
@ -98,189 +101,206 @@ function unlock_auto_select()
group_match = false
for _, value in pairs(info.proxies) do
--match only once
for g = 1, #key_groups do
while true do
--find group
if not string.find(string.lower(value.name), string.lower(key_groups[g])) then
break
while true do
--find group
if not datamatch(value.name, key_group) then
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
--get groups info
get_proxy(info, value.name, value.name)
table.insert(tested_proxy, now_name)
group_match = true
--test now proxy
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name..""
end
if status ~= 2 then
os.execute("sleep 3")
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..""
end
if status == 2 then
if region and region ~= "" then
print(now..full_support..""..region.."")
else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name..""
print(now..full_support_no_area)
end
if status ~= 2 then
os.execute("sleep 3")
region = proxy_unlock_test()
end
if status == 2 then
if region then
print(now..full_support..""..region.."")
else
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
break
elseif status == 3 then
table.insert(other_region_unlock, {get_group_now(info, value.name), group_name, now_name})
print(now..other_region_unlock_test_start)
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..faild_test_start)
print(now..no_unlock_test_start)
end
--find new unlock
if value.type == "Selector" then
--loop proxy test
for i = 1, #(value.all) do
--save group current selected
proxy_default = value.now
while true do
if value.all[i] == "REJECT" or value.all[i] == "DIRECT" then
break
else
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)))
else
print(now..faild_test_start)
end
--find new unlock
if value.type == "Selector" then
--loop proxy test
for i = 1, #(value.all) do
--save group current selected
proxy_default = value.now
while true do
if value.all[i] == "REJECT" or value.all[i] == "DIRECT" then
break
else
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
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
--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)))
--skip tested proxy
while true do
if table_include(tested_proxy, now_name) then
if table_include(tested_proxy, proxy) then
break
else
table.insert(tested_proxy, now_name)
table.insert(tested_proxy, proxy)
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..""
while true do
if proxy == "REJECT" or proxy == "DIRECT" then
break
else
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..group_show..""..now_name..""
end
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, now_name)..""..area_i18..""..region.."")
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 and 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 == 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
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).."")
print(now..test_faild)
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
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
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
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
break
elseif status == 1 then
if type == "Netflix" then
print(now..original_no_select)
end
if status == 2 then
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
print(now..no_unlock_no_select)
fallback_select = original
end
else
print(now..faild_no_select)
for k, v in pairs(fallback_select) 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])))
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
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
break
end
if group_match then break end
break
end
if auto_get_group and group_match 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, "/%?(.+)")))
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()
status = 0
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 result = {}
local region
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_netflix") or ""
if info then
info = json.parse(info)
end
@ -527,8 +553,11 @@ function netflix_unlock_test()
string.gsub(info.url_effective, '[^/]+', function(w) table.insert(result, w) end)
region = string.upper(string.match(result[3], "^%a+"))
if region == "TITLE" then region = "US" end
if not datamatch(region, regex) then
status = 3
end
return region
elseif info.http_code == 404 then
elseif info.http_code == 404 or info.http_code == 403 then
status = 1
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 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 regex = uci:get("openclash", "config", "stream_auto_select_region_key_disney") or ""
if tonumber(httpcode) == 200 then
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))
if url_effective == "https://disneyplus.disney.co.jp/" then
status = 2
region = "JP"
if not datamatch(region, regex) then
status = 3
end
return region
elseif string.find(url_effective,"hotstar") then
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))
if region and region ~= "" then
status = 2
if not datamatch(region, regex) then
status = 3
end
return region
end
end
@ -585,7 +621,8 @@ function hbo_max_unlock_test()
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 result = {}
local region
local region = ""
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_max") or ""
if data then
data = json.parse(data)
end
@ -597,10 +634,11 @@ function hbo_max_unlock_test()
string.gsub(data.url_effective, '[^/]+', function(w) table.insert(result, w) end)
if result[3] then
region = string.upper(string.match(result[3], "^%a+"))
if region then
return region
end
end
if not datamatch(region, regex) then
status = 3
end
return region
end
end
end
@ -611,6 +649,8 @@ function hbo_go_asia_unlock_test()
status = 0
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 regex = uci:get("openclash", "config", "stream_auto_select_region_key_hbo_go_asia") or ""
local region = ""
if tonumber(httpcode) == 200 then
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))
@ -621,8 +661,12 @@ function hbo_go_asia_unlock_test()
if data.territory then
status = 2
if data.country then
return string.upper(data.country)
region = string.upper(data.country)
end
if not datamatch(region, regex) then
status = 3
end
return region
end
end
end
@ -633,7 +677,8 @@ function ytb_unlock_test()
status = 0
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 region
local region = ""
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_ytb") or ""
if tonumber(httpcode) == 200 then
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))
@ -643,22 +688,25 @@ function ytb_unlock_test()
region = string.sub(string.match(data, "\"GL\":\"%a+\""), 7, -2)
if region then
status = 2
return region
else
if not string.find(data,"www%.google%.cn") then
status = 2
return "US"
region = "US"
end
end
if not datamatch(region, regex) then
status = 3
end
end
return
return region
end
function tvb_anywhere_unlock_test()
status = 0
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 region
local region = ""
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") or ""
if tonumber(httpcode) == 200 then
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))
@ -667,13 +715,15 @@ function tvb_anywhere_unlock_test()
end
if data and data.allow_in_this_country then
status = 2
region = string.upper(data.country)
if region then
return region
if data.country then
region = string.upper(data.country)
end
if not datamatch(region, regex) then
status = 3
end
end
end
return
return region
end
function prime_video_unlock_test()
@ -681,6 +731,7 @@ function prime_video_unlock_test()
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 region
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_prime_video") or ""
if tonumber(httpcode) == 200 then
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))
@ -688,6 +739,9 @@ function prime_video_unlock_test()
region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2)
if region then
status = 2
if not datamatch(region, regex) then
status = 3
end
return region
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 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
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
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)

View File

@ -552,4 +552,23 @@ ipv4-c001-cgk001-moratel-isp.1.oca.nflxvideo.net
ipv4-c221-sjc002-ix.1.oca.nflxvideo.net
ipv4-c204-sjc002-dev-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:
type: http
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"
interval: 86400
Special:
type: http
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"
interval: 86400
Netflix:
type: http
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"
interval: 86400
Spotify:
type: http
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"
interval: 86400
YouTube:
type: http
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"
interval: 86400
Bilibili:
type: http
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"
interval: 86400
IQ:
type: http
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"
interval: 86400
IQIYI:
type: http
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"
interval: 86400
Letv:
type: http
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"
interval: 86400
Netease Music:
type: http
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"
interval: 86400
Tencent Video:
type: http
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"
interval: 86400
Youku:
type: http
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"
interval: 86400
WeTV:
type: http
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"
interval: 86400
ABC:
type: http
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"
interval: 86400
Abema TV:
type: http
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"
interval: 86400
Amazon:
type: http
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"
interval: 86400
Apple News:
type: http
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"
interval: 86400
Apple TV:
type: http
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"
interval: 86400
Bahamut:
type: http
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"
interval: 86400
BBC iPlayer:
type: http
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"
interval: 86400
DAZN:
type: http
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"
interval: 86400
Discovery Plus:
type: http
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"
interval: 86400
Disney Plus:
type: http
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"
interval: 86400
encoreTVB:
type: http
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"
interval: 86400
Fox Now:
type: http
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"
interval: 86400
Fox+:
type: http
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+"
interval: 86400
HBO Go:
type: http
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"
interval: 86400
HBO Max:
type: http
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"
interval: 86400
Hulu Japan:
type: http
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"
interval: 86400
Hulu:
type: http
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"
interval: 86400
Japonx:
type: http
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"
interval: 86400
JOOX:
type: http
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"
interval: 86400
KKBOX:
type: http
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"
interval: 86400
KKTV:
type: http
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"
interval: 86400
Line TV:
type: http
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"
interval: 86400
myTV SUPER:
type: http
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"
interval: 86400
Pandora:
type: http
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"
interval: 86400
PBS:
type: http
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"
interval: 86400
Pornhub:
type: http
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"
interval: 86400
Soundcloud:
type: http
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"
interval: 86400
ViuTV:
type: http
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"
interval: 86400
Telegram:
type: http
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"
interval: 86400
Steam:
type: http
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"
interval: 86400
Speedtest:
type: http
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"
interval: 86400
PayPal:
type: http
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"
interval: 86400
Microsoft:
type: http
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"
interval: 86400
PROXY:
type: http
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"
interval: 86400
Domestic:
type: http
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"
interval: 86400
Apple:
type: http
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"
interval: 86400
Google FCM:
type: http
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"
interval: 86400
Scholar:
type: http
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"
interval: 86400
Domestic IPs:
type: http
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"
interval: 86400
LAN:
type: http
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"
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
放行规则-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
反劫持规则,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
国内域名白名单(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/StreamingMedia/,StreamingCN.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/StreamingMedia/,Streaming.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
微软服务,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/Guard/,Privacy.yaml
ABC,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,ABC.yaml
Abema TV,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Abema%20TV.yaml,Abema TV.yaml
ABC,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,ABC.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,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,AbemaTV.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
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
AppStore,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStore.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 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 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 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(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
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
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
BanAD,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanAD.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
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,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
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
@ -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
ChinaMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaMedia.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
Deezer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Deezer.yaml
Developer,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Developer.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
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,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DisneyPlus.yaml
Download,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,Download.yaml
EHGallery,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,EHGallery.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 Now,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Fox%20Now.yaml,Fox Now.yaml
Fox+,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Fox+.yaml
Fox Now,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Fox%20Now.yaml,Fox Now.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
Google,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Google.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
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 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-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
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(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Hulu.yaml,Hulu-lhie1.yaml
Hulu Japan,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Hulu Japan.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-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
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
Japonx,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Japonx.yaml
KKBOX(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,KKBOX.yaml,KKBOX-lhie1.yaml
Japonx,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Japonx.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
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
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
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
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
My5,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,My5.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 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
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
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
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
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
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
Peacock,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Peacock.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
Prime-Video,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Prime-Video.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
Sony,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Sony.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
Speedtest,lhie1,classical,lhie1/Rules/master/Clash/Provider/,Speedtest.yaml
Soundcloud(By lhie1),lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Soundcloud.yaml,Soundcloud-lhie1.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 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
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
TIDAL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,TIDAL.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 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
TelegramNL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramNL.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
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
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
WeTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,WeTV.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 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
YouTubeMusic,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,YouTubeMusic.yaml
Youku,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,Youku.yaml
encoreTVB(By lhie1),lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,encoreTVB.yaml,encoreTVB-lhie1.yaml
Youku,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,Youku.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
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,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,iQiyi.yaml
myTV SUPER,lhie1,classical,lhie1/Rules/master/Clash/Provider/Media/,myTV%20SUPER.yaml,myTV SUPER.yaml
iQiyi,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,iQiyi.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
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
无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
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 神机规则 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 洞主规则完整版,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
@ -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 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 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 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 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 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 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 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 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
nzw9314 规则,nzw9314_custom.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/nzw9314_custom.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
ACL4SSR 规则 WithGFW,ACL4SSR_WithGFW.ini,https://raw.githubusercontent.com/tindy2013/subconverter/master/base/config/ACL4SSR_WithGFW.ini
eHpo1 规则,ehpo1_main.ini,https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/ehpo1_main.ini

View File

@ -217,9 +217,25 @@ do
end
}.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{
#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
Value['proxy-groups'][$count]['proxies'].each{
|x|

View File

@ -178,6 +178,8 @@ yml_groups_set()
config_get "test_url" "$section" "test_url" ""
config_get "test_interval" "$section" "test_interval" ""
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
return
@ -258,15 +260,21 @@ yml_groups_set()
sed -i "/use: ${group_name}/d" $GROUP_FILE 2>/dev/null
fi
[ ! -z "$test_url" ] && {
[ -n "$test_url" ] && {
echo " url: $test_url" >>$GROUP_FILE
}
[ ! -z "$test_interval" ] && {
[ -n "$test_interval" ] && {
echo " interval: \"$test_interval\"" >>$GROUP_FILE
}
[ ! -z "$tolerance" ] && {
[ -n "$tolerance" ] && {
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)

View File

@ -745,6 +745,13 @@ do
system(psk)
end
}.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;
if '$server_type' == 'socks5' or '$server_type' == 'http' then
Thread.new{

View File

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

View File

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

View File

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

View File

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