update 2024-09-20 00:24:06

This commit is contained in:
kenzok8 2024-09-20 00:24:06 +08:00
parent a804cd2f0c
commit 0079a9d6f9
105 changed files with 86544 additions and 113544 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
PKG_VERSION:=0.46.014
PKG_VERSION:=0.46.031
PKG_RELEASE:=beta
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
@ -64,7 +64,6 @@ define Build/Prepare
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_domain_dns.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_domain_dns_policy.list" >/dev/null 2>&1
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_fallback_filter.yaml" >/dev/null 2>&1
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_netflix_domains.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_netflix_domains.list" >/dev/null 2>&1
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_force_sniffing_domain.yaml" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_force_sniffing_domain.yaml" >/dev/null 2>&1
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_sniffing_domain_filter.yaml" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_sniffing_domain_filter.yaml" >/dev/null 2>&1
cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_sniffing_ports_filter.yaml" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_sniffing_ports_filter.yaml" >/dev/null 2>&1
@ -132,11 +131,9 @@ define Package/$(PKG_NAME)/postrm
rm -rf ${dnsmasqconfdir}/dnsmasq_openclash_custom_domain.conf >/dev/null 2>&1
rm -rf ${dnsmasqconfdir}/dnsmasq_openclash_chnroute_pass.conf >/dev/null 2>&1
rm -rf ${dnsmasqconfdir}/dnsmasq_openclash_chnroute6_pass.conf >/dev/null 2>&1
rm -rf ${dnsmasqconfdir}/dnsmasq_accelerated-domains.china.conf >/dev/null 2>&1
rm -rf /tmp/dler* >/dev/null 2>&1
rm -rf /tmp/etc/openclash >/dev/null 2>&1
rm -rf /tmp/openclash_edit_file_name >/dev/null 2>&1
rm -rf /tmp/openclash_*_region>/dev/null 2>&1
sed -i '/OpenClash Append/,/OpenClash Append End/d' "/usr/lib/lua/luci/model/network.lua" >/dev/null 2>&1
sed -i '/.*kB maximum content size*/c\HTTP_MAX_CONTENT = 1024*100 -- 100 kB maximum content size' /usr/lib/lua/luci/http.lua >/dev/null 2>&1
sed -i '/.*kB maximum content size*/c\export let HTTP_MAX_CONTENT = 1024*100; // 100 kB maximum content size' /usr/share/ucode/luci/http.uc >/dev/null 2>&1

View File

@ -32,10 +32,6 @@ function index()
entry({"admin", "services", "openclash", "coreupdate"},call("action_coreupdate"))
entry({"admin", "services", "openclash", "flush_fakeip_cache"}, call("action_flush_fakeip_cache"))
entry({"admin", "services", "openclash", "download_rule"}, call("action_download_rule"))
entry({"admin", "services", "openclash", "download_netflix_domains"}, call("action_download_netflix_domains"))
entry({"admin", "services", "openclash", "download_disney_domains"}, call("action_download_disney_domains"))
entry({"admin", "services", "openclash", "catch_netflix_domains"}, call("action_catch_netflix_domains"))
entry({"admin", "services", "openclash", "write_netflix_domains"}, call("action_write_netflix_domains"))
entry({"admin", "services", "openclash", "restore"}, call("action_restore_config"))
entry({"admin", "services", "openclash", "backup"}, call("action_backup"))
entry({"admin", "services", "openclash", "backup_ex_core"}, call("action_backup_ex_core"))
@ -103,18 +99,17 @@ local json = require "luci.jsonc"
local uci = require("luci.model.uci").cursor()
local datatype = require "luci.cbi.datatypes"
local opkg
local device_name = uci:get("system", "@system[0]", "hostname")
local device_arh = luci.sys.exec("uname -m |tr -d '\n'")
if pcall(require, "luci.model.ipkg") then
opkg = require "luci.model.ipkg"
end
local core_path_mode = uci:get("openclash", "config", "small_flash_memory")
if core_path_mode ~= "1" then
dev_core_path="/etc/openclash/core/clash"
tun_core_path="/etc/openclash/core/clash_tun"
meta_core_path="/etc/openclash/core/clash_meta"
else
dev_core_path="/tmp/etc/openclash/core/clash"
tun_core_path="/tmp/etc/openclash/core/clash_tun"
meta_core_path="/tmp/etc/openclash/core/clash_meta"
end
@ -126,10 +121,6 @@ local function is_web()
return luci.sys.call("pidof clash >/dev/null") == 0
end
local function restricted_mode()
return uci:get("openclash", "config", "restricted_mode")
end
local function is_watchdog()
return process_status("openclash_watchdog.sh")
end
@ -158,14 +149,6 @@ local function lhie1()
return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/lhie1.yaml"))
end
local function ConnersHua()
return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/ConnersHua.yaml"))
end
local function ConnersHua_return()
return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/ConnersHua_return.yaml"))
end
local function chnroute()
return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/etc/openclash/china_ip_route.ipset"))
end
@ -238,29 +221,13 @@ local function coremodel()
end
local function check_core()
if not nixio.fs.access(dev_core_path) and not nixio.fs.access(tun_core_path) and not nixio.fs.access(meta_core_path) then
if not nixio.fs.access(meta_core_path) then
return "0"
else
return "1"
end
end
local function corecv()
if not nixio.fs.access(dev_core_path) then
return "0"
else
return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'", dev_core_path))
end
end
local function coretuncv()
if not nixio.fs.access(tun_core_path) then
return "0"
else
return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'", tun_core_path))
end
end
local function coremetacv()
if not nixio.fs.access(meta_core_path) then
return "0"
@ -271,10 +238,8 @@ end
local function corelv()
luci.sys.call("bash /usr/share/openclash/clash_version.sh")
local core_lv = luci.sys.exec("sed -n 1p /tmp/clash_last_version 2>/dev/null")
local core_tun_lv = luci.sys.exec("sed -n 2p /tmp/clash_last_version 2>/dev/null")
local core_meta_lv = luci.sys.exec("sed -n 3p /tmp/clash_last_version 2>/dev/null")
return core_lv .. "," .. core_tun_lv .. "," .. core_meta_lv
return core_meta_lv
end
local function opcv()
@ -354,13 +319,9 @@ function core_download()
local cdn_url = luci.http.formvalue("url")
if cdn_url then
luci.sys.call(string.format("rm -rf /tmp/clash_last_version 2>/dev/null && bash /usr/share/openclash/clash_version.sh '%s' >/dev/null 2>&1", cdn_url))
luci.sys.call(string.format("bash /usr/share/openclash/openclash_core.sh 'Dev' '%s' >/dev/null 2>&1 &", cdn_url))
luci.sys.call(string.format("bash /usr/share/openclash/openclash_core.sh 'TUN' '%s' >/dev/null 2>&1 &", cdn_url))
luci.sys.call(string.format("bash /usr/share/openclash/openclash_core.sh 'Meta' '%s' >/dev/null 2>&1 &", cdn_url))
else
luci.sys.call("rm -rf /tmp/clash_last_version 2>/dev/null && bash /usr/share/openclash/clash_version.sh >/dev/null 2>&1")
luci.sys.call("bash /usr/share/openclash/openclash_core.sh 'Dev' >/dev/null 2>&1 &")
luci.sys.call("bash /usr/share/openclash/openclash_core.sh 'TUN' >/dev/null 2>&1 &")
luci.sys.call("bash /usr/share/openclash/openclash_core.sh 'Meta' >/dev/null 2>&1 &")
end
@ -372,16 +333,6 @@ function download_rule()
return state
end
function download_disney_domains()
local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',"disney_domains"))
return state
end
function download_netflix_domains()
local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',"netflix_domains"))
return state
end
function action_flush_fakeip_cache()
local state = 0
if is_running() then
@ -751,7 +702,7 @@ function action_rule_mode()
local daip = daip()
local dase = dase() or ""
local cn_port = cn_port()
core_type = uci:get("openclash", "config", "core_type") or "Dev"
core_type = uci:get("openclash", "config", "core_type") or "Meta"
if not daip or not cn_port then return end
info = json.parse(luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/configs', dase, daip, cn_port)))
if info then
@ -773,9 +724,7 @@ function action_switch_rule_mode()
local daip = daip()
local dase = dase() or ""
local cn_port = cn_port()
local core_type = uci:get("openclash", "config", "core_type") or "Dev"
mode = luci.http.formvalue("rule_mode")
if mode == script and core_type ~= "TUN" then luci.http.status(500, "Switch Faild") return end
if not daip or not cn_port then luci.http.status(500, "Switch Faild") return end
info = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XPATCH http://"%s":"%s"/configs -d \'{\"mode\": \"%s\"}\'', dase, daip, cn_port, mode))
if info ~= "" then
@ -1081,8 +1030,7 @@ function action_status()
db_forward_ssl = db_foward_ssl(),
web = is_web(),
cn_port = cn_port(),
restricted_mode = restricted_mode(),
core_type = uci:get("openclash", "config", "core_type") or "Dev";
core_type = uci:get("openclash", "config", "core_type") or "Meta";
})
end
@ -1090,8 +1038,6 @@ function action_state()
luci.http.prepare_content("application/json")
luci.http.write_json({
lhie1 = lhie1(),
ConnersHua = ConnersHua(),
ConnersHua_return = ConnersHua_return(),
ipdb = ipdb(),
geosite = geosite(),
historychecktime = historychecktime(),
@ -1117,8 +1063,6 @@ end
function action_update()
luci.http.prepare_content("application/json")
luci.http.write_json({
corecv = corecv(),
coretuncv = coretuncv(),
coremetacv = coremetacv(),
coremodel = coremodel(),
opcv = opcv(),
@ -1198,20 +1142,6 @@ function action_download_rule()
})
end
function action_download_netflix_domains()
luci.http.prepare_content("application/json")
luci.http.write_json({
rule_download_status = download_netflix_domains();
})
end
function action_download_disney_domains()
luci.http.prepare_content("application/json")
luci.http.write_json({
rule_download_status = download_disney_domains();
})
end
function action_refresh_log()
luci.http.prepare_content("application/json")
local logfile="/tmp/openclash.log"
@ -1326,38 +1256,6 @@ function split(str,delimiter)
return arr
end
function action_write_netflix_domains()
local domains = luci.http.formvalue("domains")
local dustom_file = "/etc/openclash/custom/openclash_custom_netflix_domains.list"
local file = io.open(dustom_file, "a+")
file:seek("set")
local domain = file:read("*a")
for v, k in pairs(split(domains,"\n")) do
if not string.find(domain,k,1,true) then
file:write(k.."\n")
end
end
file:close()
return
end
function action_catch_netflix_domains()
local cmd = "/usr/share/openclash/openclash_debug_getcon.lua 'netflix-nflxvideo'"
luci.http.prepare_content("text/plain")
local util = io.popen(cmd)
if util and util ~= "" then
while true do
local ln = util:read("*l")
if not ln then break end
luci.http.write(ln)
luci.http.write(",")
end
util:close()
return
end
luci.http.status(500, "Bad address")
end
function action_diag_connection()
local addr = luci.http.formvalue("addr")
if addr and (datatype.hostname(addr) or datatype.ipaddr(addr)) then
@ -1425,8 +1323,8 @@ function action_backup()
local reader = ltn12_popen("tar -C '/etc/openclash/' -cz . 2>/dev/null")
luci.http.header(
'Content-Disposition', 'attachment; filename="Backup-OpenClash-%s.tar.gz"' %{
os.date("%Y-%m-%d-%H-%M-%S")
'Content-Disposition', 'attachment; filename="Backup-OpenClash-%s-%s-%s.tar.gz"' %{
device_name, device_arh, os.date("%Y-%m-%d-%H-%M-%S")
})
luci.http.prepare_content("application/x-targz")
@ -1439,8 +1337,8 @@ function action_backup_ex_core()
local reader = ltn12_popen("echo 'core' > /tmp/oc_exclude.txt && tar -C '/etc/openclash/' -X '/tmp/oc_exclude.txt' -cz . 2>/dev/null")
luci.http.header(
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Exclude-Cores-%s.tar.gz"' %{
os.date("%Y-%m-%d-%H-%M-%S")
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Exclude-Cores-%s-%s-%s.tar.gz"' %{
device_name, device_arh, os.date("%Y-%m-%d-%H-%M-%S")
})
luci.http.prepare_content("application/x-targz")
@ -1452,8 +1350,8 @@ function action_backup_only_config()
local reader = ltn12_popen("tar -C '/etc/openclash' -cz './config' 2>/dev/null")
luci.http.header(
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Config-%s.tar.gz"' %{
os.date("%Y-%m-%d-%H-%M-%S")
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Config-%s-%s-%s.tar.gz"' %{
device_name, device_arh, os.date("%Y-%m-%d-%H-%M-%S")
})
luci.http.prepare_content("application/x-targz")
@ -1464,8 +1362,8 @@ function action_backup_only_core()
local reader = ltn12_popen("tar -C '/etc/openclash' -cz './core' 2>/dev/null")
luci.http.header(
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Cores-%s.tar.gz"' %{
os.date("%Y-%m-%d-%H-%M-%S")
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Cores-%s-%s-%s.tar.gz"' %{
device_name, device_arh, os.date("%Y-%m-%d-%H-%M-%S")
})
luci.http.prepare_content("application/x-targz")
@ -1476,8 +1374,8 @@ function action_backup_only_rule()
local reader = ltn12_popen("tar -C '/etc/openclash' -cz './rule_provider' 2>/dev/null")
luci.http.header(
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Only-Rule-Provider-%s.tar.gz"' %{
os.date("%Y-%m-%d-%H-%M-%S")
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Only-Rule-Provider-%s-%s-%s.tar.gz"' %{
device_name, device_arh, os.date("%Y-%m-%d-%H-%M-%S")
})
luci.http.prepare_content("application/x-targz")
@ -1488,8 +1386,8 @@ function action_backup_only_proxy()
local reader = ltn12_popen("tar -C '/etc/openclash' -cz './proxy_provider' 2>/dev/null")
luci.http.header(
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Proxy-Provider-%s.tar.gz"' %{
os.date("%Y-%m-%d-%H-%M-%S")
'Content-Disposition', 'attachment; filename="Backup-OpenClash-Proxy-Provider-%s-%s-%s.tar.gz"' %{
device_name, device_arh, os.date("%Y-%m-%d-%H-%M-%S")
})
luci.http.prepare_content("application/x-targz")

View File

@ -18,6 +18,7 @@ bold_off = [[</strong>]]
local op_mode = string.sub(luci.sys.exec('uci get openclash.config.operation_mode 2>/dev/null'),0,-2)
if not op_mode then op_mode = "redir-host" end
local lan_int_name = uci:get("openclash", "config", "lan_interface_name") or "0"
local lan_ip
if lan_int_name == "0" then
lan_ip = SYS.exec("uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'")
@ -146,26 +147,9 @@ o = s:taboption("dns", Flag, "enable_custom_dns", font_red..bold_on..translate("
o.description = font_red..bold_on..translate("Set OpenClash Upstream DNS Resolve Server")..bold_off..font_off
o.default = 0
---- Fallback DNS Proxy Group
o = s:taboption("dns", Value, "proxy_dns_group", font_red..bold_on..translate("Fallback DNS Proxy Group (Support Regex)")..bold_off..font_off)
o.description = translate("Group Use For Proxy The Fallback DNS, Preventing DNS Lookup Failures")..translate("(Only Meta Core)")
local groupnames,filename
filename = m.uci:get("openclash", "config", "config_path")
if filename then
groupnames = SYS.exec(string.format('ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "YAML.load_file(\'%s\')[\'proxy-groups\'].each do |i| puts i[\'name\']+\'##\' end" 2>/dev/null',filename))
if groupnames then
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do
if groupname ~= nil and groupname ~= "" then
o:value(groupname)
end
end
end
end
o:value("DIRECT")
o:value("Disable", translate("Disable"))
o.default = "Disable"
o.rempty = false
o = s:taboption("dns", Flag, "enable_respect_rules", font_red..bold_on..translate("Respect Rules")..bold_off..font_off)
o.description = font_red..bold_on..translate("Whether or not The Connection to the DNS Server Follow the Rules in Config")..bold_off..font_off
o.default = 0
o = s:taboption("dns", Flag, "append_wan_dns", translate("Append Upstream DNS"))
o.description = translate("Append The Upstream Assigned DNS And Gateway IP To The Nameserver")
@ -225,6 +209,13 @@ if op_mode == "fake-ip" then
o = s:taboption("dns", Flag, "custom_fakeip_filter", translate("Fake-IP-Filter"))
o.default = 0
o = s:taboption("dns", ListValue, "custom_fakeip_filter_mode", translate("Fake-IP-Filter-Mode"))
o.description = translate("Fake-IP is not returned if the matching succeeds when blacklist mode or Fake-IP is returned if the matching succeeds when whitelist mode")
o.default = "blacklist"
o:value("blacklist", translate("Blacklist Mode"))
o:value("whitelist", translate("Whitelist Mode"))
o:depends("custom_fakeip_filter", "1")
custom_fake_black = s:taboption("dns", Value, "custom_fake_filter")
custom_fake_black.template = "cbi/tvalue"
custom_fake_black.description = translate("Domain Names In The List Do Not Return Fake-IP, One rule per line")
@ -432,7 +423,7 @@ o.default = 0
custom_rules = s:taboption("rules", Value, "custom_rules")
custom_rules:depends("enable_custom_clash_rules", 1)
custom_rules.template = "cbi/tvalue"
custom_rules.description = font_green..bold_on..translate("(Priority)")..bold_off..font_off.." "..translate("Custom Rules Here, For More Go:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://lancellc.gitbook.io/clash/clash-config-file/rules\")'>https://lancellc.gitbook.io/clash/clash-config-file/rules</a>".." ,"..translate("IP To CIDR:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"http://ip2cidr.com\")'>http://ip2cidr.com</a>"
custom_rules.description = font_green..bold_on..translate("(Priority)")..bold_off..font_off.." "..translate("Custom Rules Here, For More Go:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://wiki.metacubex.one/config/rules/\")'>https://wiki.metacubex.one/config/rules/</a>".." ,"..translate("IP To CIDR:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"http://ip2cidr.com\")'>http://ip2cidr.com</a>"
custom_rules.rows = 20
custom_rules.wrap = "off"
@ -452,7 +443,7 @@ end
custom_rules_2 = s:taboption("rules", Value, "custom_rules_2")
custom_rules_2:depends("enable_custom_clash_rules", 1)
custom_rules_2.template = "cbi/tvalue"
custom_rules_2.description = font_green..bold_on..translate("(Extended)")..bold_off..font_off.." "..translate("Custom Rules Here, For More Go:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://lancellc.gitbook.io/clash/clash-config-file/rules\")'>https://lancellc.gitbook.io/clash/clash-config-file/rules</a>".." ,"..translate("IP To CIDR:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"http://ip2cidr.com\")'>http://ip2cidr.com</a>"
custom_rules_2.description = font_green..bold_on..translate("(Extended)")..bold_off..font_off.." "..translate("Custom Rules Here, For More Go:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://wiki.metacubex.one/config/rules/\")'>https://wiki.metacubex.one/config/rules/</a>".." ,"..translate("IP To CIDR:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"http://ip2cidr.com\")'>http://ip2cidr.com</a>"
custom_rules_2.rows = 20
custom_rules_2.wrap = "off"
@ -572,10 +563,6 @@ o = ss:option(DummyValue, "rule_name", translate("Other Rules Name"))
function o.cfgvalue(...)
if Value.cfgvalue(...) == "lhie1" then
return translate("lhie1 Rules")
elseif Value.cfgvalue(...) == "ConnersHua" then
return translate("ConnersHua(Provider-type) Rules")
elseif Value.cfgvalue(...) == "ConnersHua_return" then
return translate("ConnersHua Return Rules")
else
return translate("None")
end

View File

@ -177,6 +177,12 @@ o:value("true", translate("Enable"))
o.default = "false"
o:depends("sub_convert", "1")
---- custom params
o = s:option(DynamicList, "custom_params", translate("Custom Params"))
o.description = font_red..bold_on..translate("eg: \"rename=\\s+([2-9])[xX]@ (HIGH:$1)\"")..bold_off..font_off
o.rmempty = false
o:depends("sub_convert", "1")
---- key
o = s:option(DynamicList, "keyword", font_red..bold_on..translate("Keyword Match")..bold_off..font_off)
o.description = font_red..bold_on..translate("eg: hk or tw&bgp")..bold_off..font_off

View File

@ -79,6 +79,20 @@ o:depends("type", "https")
o.rmempty = false
o.default = o.disbled
---- ECS Subnet
o = s:option(Value, "ecs_subnet", translate("ECS Subnet"),translate("Specify the ECS Subnet Address")..translate("(Only Meta Core)"))
o:depends("type", "https")
o.rmempty = true
o.datatype = "ipaddr"
o:value("1.1.1.1/24")
---- ECS Override
o = s:option(Flag, "ecs_override", translate("ECS Override"),translate("Override the ECS Subnet Address")..translate("(Only Meta Core)"))
o:depends("type", "https")
o.rmempty = false
o.datatype = "ipaddr"
o.default = o.disbled
---- Proxy group
o = s:option(Value, "specific_group", translate("Specific Group (Support Regex)"))
o.description = translate("Group Use For Proxy The DNS")..translate("(Only Meta Core)")

View File

@ -72,12 +72,9 @@ if groupnames ~= nil and filename ~= nil then
o = s:option(ListValue, "rule_name", translate("Other Rules Name"))
o.rmempty = true
o:value("lhie1", translate("lhie1 Rules"))
o:value("ConnersHua", translate("ConnersHua(Provider-type) Rules"))
o:value("ConnersHua_return", translate("ConnersHua Return Rules"))
o = s:option(ListValue, "GlobalTV", translate("GlobalTV"))
o:depends("rule_name", "lhie1")
o:depends("rule_name", "ConnersHua")
o.rmempty = true
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do
if groupname ~= nil and groupname ~= "" then
@ -89,7 +86,6 @@ o:value("REJECT")
o = s:option(ListValue, "AsianTV", translate("AsianTV"))
o:depends("rule_name", "lhie1")
o:depends("rule_name", "ConnersHua")
o.rmempty = true
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do
if groupname ~= nil and groupname ~= "" then
@ -101,8 +97,6 @@ o:value("REJECT")
o = s:option(ListValue, "Proxy", translate("Proxy"))
o:depends("rule_name", "lhie1")
o:depends("rule_name", "ConnersHua")
o:depends("rule_name", "ConnersHua_return")
o.rmempty = true
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do
if groupname ~= nil and groupname ~= "" then
@ -389,7 +383,6 @@ o:value("REJECT")
o = s:option(ListValue, "Domestic", translate("Domestic"))
o:depends("rule_name", "lhie1")
o:depends("rule_name", "ConnersHua")
o.rmempty = true
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do
if groupname ~= nil and groupname ~= "" then
@ -401,8 +394,6 @@ o:value("REJECT")
o = s:option(ListValue, "Others", translate("Others"))
o:depends("rule_name", "lhie1")
o:depends("rule_name", "ConnersHua")
o:depends("rule_name", "ConnersHua_return")
o.rmempty = true
o.description = translate("Choose Proxy Groups, Base On Your Config File").." ( "..font_green..bold_on..filename..bold_off..font_off.." )"
for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do

View File

@ -108,6 +108,45 @@ o = s:option(Value, "health_check_interval", translate("Health Check Interval(s)
o.default = "300"
o.rmempty = false
-- [[ other-setting ]]--
o = s:option(Value, "other_parameters", translate("Other Parameters"))
o.template = "cbi/tvalue"
o.rows = 20
o.wrap = "off"
o.description = font_red..bold_on..translate("Edit Your Other Parameters Here")..bold_off..font_off
o.rmempty = true
function o.cfgvalue(self, section)
if self.map:get(section, "other_parameters") == nil then
return "# Example:\n"..
"# Only support YAML, four spaces need to be reserved at the beginning of each line to maintain formatting alignment\n"..
"# 示例:\n"..
"# 仅支持 YAML, 每行行首需要多保留四个空格以使脚本处理后能够与上方配置保持格式对齐\n"..
"# header:\n"..
"# User-Agent:\n"..
"# - \"Clash/v1.18.0\"\n"..
"# - \"mihomo/1.18.3\"\n"..
"# Authorization:\n"..
"# - \"token 1231231\"\n"..
"# override:\n"..
"# skip-cert-verify: true\n"..
"# additional-prefix: \"provider1 prefix |\"\n"..
"# additional-suffix: \"| provider1 suffix\"\n"..
"# proxy-name:\n"..
"# - pattern: \"IPLC-(.*?)倍\"\n"..
"# target: \"iplc x $1\"\n"..
"# exclude-type: \"ss|http\""
else
return Value.cfgvalue(self, section)
end
end
function o.validate(self, value)
if value then
value = value:gsub("\r\n?", "\n")
value = value:gsub("%c*$", "")
end
return value
end
o = s:option(DynamicList, "groups", translate("Proxy Group (Support Regex)"))
o.description = font_red..bold_on..translate("No Need Set when Config Create, The added Proxy Groups Must Exist")..bold_off..font_off
o.rmempty = true
@ -141,4 +180,5 @@ o.write = function()
end
m:append(Template("openclash/toolbar_show"))
m:append(Template("openclash/config_editor"))
return m

View File

@ -69,9 +69,10 @@ o:value("classical")
o = s:option(ListValue, "format", translate("Rule Format")..translate("(TUN&Meta Core)"))
o.rmempty = true
o.description = translate("Choose The Rule File Format, For More Info:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://github.com/Dreamacro/clash/wiki/Premium%3A-Rule-Providers\")'>https://github.com/Dreamacro/clash/wiki/</a>"
o.description = translate("Choose The Rule File Format, For More Info:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://wiki.metacubex.one/config/rule-providers/content/\")'>https://wiki.metacubex.one/config/rule-providers/content/</a>"
o:value("yaml")
o:value("text")
o:value("mrs")
o = s:option(ListValue, "path", translate("Rule Providers Path"))
o.description = translate("Update Your Rule Providers File From Config Luci Page")

View File

@ -10,8 +10,7 @@ local fs = require "luci.openclash"
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/dler-io/Rules )<br/>"..
m.description=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

@ -42,7 +42,7 @@ function IsYmlFile(e)
end
-- [[ Edit Game Rule ]] --
s = m:section(TypedSection, "game_config", translate("Game Rules Append (Only TUN & Meta Core Support)"))
s = m:section(TypedSection, "game_config", translate("Game Rules Append"))
s.anonymous = true
s.addremove = true
s.sortable = true
@ -118,7 +118,7 @@ o:value("REJECT")
o.rmempty = true
-- [[ Edit Other Rule Provider ]] --
s = m:section(TypedSection, "rule_provider_config", translate("Other Rule Providers Append (Only TUN & Meta Core Support)"))
s = m:section(TypedSection, "rule_provider_config", translate("Other Rule Providers Append"))
s.anonymous = true
s.addremove = true
s.sortable = true
@ -204,7 +204,7 @@ o:value("0", translate("Priority Match"))
o:value("1", translate("Extended Match"))
-- [[ Edit Custom Rule Provider ]] --
s = m:section(TypedSection, "rule_providers", translate("Custom Rule Providers Append (Only TUN & Meta Core Support)"))
s = m:section(TypedSection, "rule_providers", translate("Custom Rule Providers Append"))
s.anonymous = true
s.addremove = true
s.sortable = true

View File

@ -140,7 +140,7 @@ o:value("trojan", translate("trojan"))
o:value("vless", translate("Vless ")..translate("(Only Meta Core)"))
o:value("hysteria", translate("Hysteria ")..translate("(Only Meta Core)"))
o:value("hysteria2", translate("Hysteria2 ")..translate("(Only Meta Core)"))
o:value("wireguard", translate("WireGuard")..translate("(TUN&Meta Core)"))
o:value("wireguard", translate("WireGuard")..translate("(Only Meta Core)"))
o:value("tuic", translate("Tuic")..translate("(Only Meta Core)"))
o:value("snell", translate("Snell"))
o:value("socks5", translate("Socks5"))

View File

@ -38,7 +38,8 @@ m.description = translate("Note: To restore the default configuration, try acces
"<br/>"..font_green..translate("Note: Game proxy please use nodes except VMess")..font_off..
"<br/>"..font_green..translate("Note: If you need to perform client access control in Fake-IP mode, please change the DNS hijacking mode to firewall forwarding")..font_off..
"<br/>"..translate("Note: The default proxy routes local traffic, BT, PT download, etc., please use Redir-Host mode as much as possible and pay attention to traffic avoidance")..
"<br/>"..translate("Note: If the connection is abnormal, please follow the steps on this page to check first")..": ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://github.com/vernesong/OpenClash/wiki/%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%E5%BC%82%E5%B8%B8%E6%97%B6%E6%8E%92%E6%9F%A5%E5%8E%9F%E5%9B%A0\")'>"..translate("Click to the page").."</a>"
"<br/>"..translate("Note: If the connection is abnormal, please follow the steps on this page to check first")..": ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://github.com/vernesong/OpenClash/wiki/%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%E5%BC%82%E5%B8%B8%E6%97%B6%E6%8E%92%E6%9F%A5%E5%8E%9F%E5%9B%A0\")'>"..translate("Click to the page").."</a>"..
"<br/>"..font_green..translate("For More Useful Meta Core Functions Go Wiki")..": "..font_off.."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://wiki.metacubex.one/\")'>"..translate("https://wiki.metacubex.one/").."</a>"
s = m:section(TypedSection, "openclash")
s.anonymous = true
@ -59,10 +60,6 @@ s:tab("developer", translate("Developer Settings"))
s:tab("debug", translate("Debug Logs"))
s:tab("dlercloud", translate("Dler Cloud"))
o = s:taboption("op_mode", Flag, "enable_meta_core", font_red..bold_on..translate("Enable Meta Core")..bold_off..font_off)
o.description = font_red..bold_on..translate("Some Premium Core Features are Unavailable, For Other More Useful Functions Go Wiki:")..bold_off..font_off.." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://wiki.metacubex.one/\")'>https://wiki.metacubex.one/</a>"
o.default = 0
o = s:taboption("op_mode", ListValue, "en_mode", font_red..bold_on..translate("Select Mode")..bold_off..font_off)
o.description = translate("Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error")
if op_mode == "redir-host" then
@ -99,7 +96,6 @@ o.description = translate("Select Proxy Mode")
o:value("rule", translate("Rule Proxy Mode"))
o:value("global", translate("Global Proxy Mode"))
o:value("direct", translate("Direct Proxy Mode"))
o:value("script", translate("Script Proxy Mode (Tun Core Only)"))
o.default = "rule"
o = s:taboption("op_mode", Value, "delay_start", translate("Delay Start (s)"))
@ -244,7 +240,7 @@ o.description = translate("Only Supported for Rule Mode")..", "..font_red..bold_
o.default = 1
o = s:taboption("traffic_control", Flag, "disable_udp_quic", font_red..bold_on..translate("Disable QUIC")..bold_off..font_off)
o.description = translate("Prevent YouTube and Others To Use QUIC Transmission")..", "..font_red..bold_on..translate("REJECT UDP Traffic(Not Include CN) On Port 443")..bold_off..font_off
o.description = translate("Prevent YouTube and Others To Use QUIC Transmission")..", "..font_red..bold_on..translate("REJECT UDP Traffic(Not Include bypassed regions via China IP Route setting) On Port 443")..bold_off..font_off
o.default = 1
o = s:taboption("traffic_control", Flag, "skip_proxy_address", translate("Skip Proxy Address"))
@ -261,23 +257,12 @@ o:depends("en_mode", "redir-host")
o:depends("en_mode", "redir-host-tun")
o:depends("en_mode", "redir-host-mix")
if op_mode == "redir-host" then
o = s:taboption("traffic_control", Flag, "china_ip_route", translate("China IP Route"))
o.description = translate("Bypass The China Network Flows, Improve Performance")
o.default = 0
else
o = s:taboption("traffic_control", Flag, "china_ip_route", translate("China IP Route"))
o.description = translate("Bypass The China Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option, Depend on Dnsmasq")
o.default = 0
o:depends("enable_redirect_dns", "1")
o:depends("enable_redirect_dns", "0")
o = s:taboption("traffic_control", Value, "custom_china_domain_dns_server", translate("Specify CN DNS Server"))
o.description = translate("Specify DNS Server For CN Domain Lists, Only One IP Server Address Support")
o.default = "114.114.114.114"
o.placeholder = translate("114.114.114.114 or 127.0.0.1#5300")
o:depends("china_ip_route", "1")
end
o = s:taboption("traffic_control", ListValue, "china_ip_route", translate("China IP Route"))
o.description = translate("Bypass Specified Regions Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option")
o.default = 0
o:value("0", translate("Disable"))
o:value("1", translate("Bypass Mainland China"))
o:value("2", translate("Bypass Overseas"))
o = s:taboption("traffic_control", Flag, "intranet_allowed", translate("Only intranet allowed"))
o.description = translate("When Enabled, The Control Panel And The Connection Broker Port Will Not Be Accessible From The Public Network")
@ -340,50 +325,20 @@ function o.write(self, section, value)
end
--Stream Enhance
se_dns_ip = s:taboption("stream_enhance", DynamicList, "lan_block_google_dns_ips", translate("LAN Block Google DNS IP List"))
se_dns_ip.datatype = "ipmask"
se_dns_ip.rmempty = true
se_dns_mac = s:taboption("stream_enhance", DynamicList, "lan_block_google_dns_macs", translate("LAN Block Google DNS Mac List"))
se_dns_mac.datatype = "list(macaddr)"
se_dns_mac.rmempty = true
luci.ip.neighbors({ family = 4 }, function(n)
if n.mac and n.dest then
se_dns_ip:value(n.dest:string())
se_dns_mac:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() })
end
end)
if string.len(SYS.exec("/usr/share/openclash/openclash_get_network.lua 'gateway6'")) ~= 0 then
luci.ip.neighbors({ family = 6 }, function(n)
if n.mac and n.dest then
se_dns_ip:value(n.dest:string())
se_dns_mac:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() })
end
end)
end
o = s:taboption("stream_enhance", Flag, "stream_domains_prefetch", translate("Prefetch Netflix, Disney Plus Domains"))
o.description = translate("Prevent Some Devices From Directly Using IP Access To Cause Unlocking Failure, Recommend Use meta Sniffer Function")
o.default = 0
o:depends("router_self_proxy", "1")
o = s:taboption("stream_enhance", Value, "stream_domains_prefetch_interval", translate("Domains Prefetch Interval(min)"))
o.default = "1440"
o.datatype = "uinteger"
o.description = translate("Will Run Once Immediately After Started, The Interval Does Not Need To Be Too Short (Take Effect Immediately After Commit)")
o:depends("stream_domains_prefetch", "1")
o = s:taboption("stream_enhance", DummyValue, "stream_domains_update", translate("Update Preset Domains List"))
o:depends("stream_domains_prefetch", "1")
o.template = "openclash/download_stream_domains"
o = s:taboption("stream_enhance", Flag, "stream_auto_select", font_red..bold_on..translate("Auto Select Unlock Proxy")..bold_off..font_off)
o.description = translate("Auto Select Proxy For Streaming Unlock, Support Netflix, Disney Plus, HBO And YouTube Premium, etc")
o.default = 0
o:depends("router_self_proxy", "1")
o = s:taboption("stream_enhance", Button, translate("Flush Unlock Test Cache"))
o.title = translate("Flush Unlock Test Cache")
o.inputtitle = translate("Flush Cache")
o.inputstyle = "reload"
o.write = function()
SYS.call("rm -rf /etc/openclash/history/streaming_unlock_cache >/dev/null 2>&1 &")
end
o:depends("stream_auto_select", "1")
o = s:taboption("stream_enhance", Value, "stream_auto_select_interval", translate("Auto Select Interval(min)"))
o.default = "30"
o.datatype = "uinteger"
@ -1061,16 +1016,6 @@ o.description = translate("Custom Chnroute6 Lists URL, Click Button Below To Ref
o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang-CN-IPV6")..translate("(Default)"))
o.default = "https://ispip.clang.cn/all_cn_ipv6.txt"
o = s:taboption("chnr_update", Value, "cndomain_custom_url")
o.title = translate("Custom CN Doamin Lists URL")
o.rmempty = false
o.description = translate("Custom CN Doamin Dnsmasq Conf URL, Click Button Below To Refresh After Edit")
o:value("https://testingcf.jsdelivr.net/gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf", translate("dnsmasq-china-list-testingcf-jsdelivr")..translate("(Default)"))
o:value("https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf", translate("dnsmasq-china-list-fastly-jsdelivr"))
o:value("https://raw.fastgit.org/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf", translate("dnsmasq-china-list-fastgit"))
o:value("https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf", translate("dnsmasq-china-list-github"))
o.default = "https://testingcf.jsdelivr.net/gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf"
o = s:taboption("chnr_update", Button, translate("Chnroute Lists Update"))
o.title = translate("Update Chnroute Lists")
o.inputtitle = translate("Check And Update")
@ -1178,9 +1123,12 @@ o = s:taboption("ipv6", Flag, "ipv6_dns", translate("IPv6 DNS Resolve"))
o.description = translate("Enable to Resolve IPv6 DNS Requests")
o.default = 0
o = s:taboption("ipv6", Flag, "china_ip6_route", translate("China IPv6 Route"))
o.description = translate("Bypass The China Network Flows, Improve Performance")
o = s:taboption("ipv6", ListValue, "china_ip6_route", translate("China IPv6 Route"))
o.description = translate("Bypass Specified Regions Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option")
o.default = 0
o:value("0", translate("Disable"))
o:value("1", translate("Bypass Mainland China"))
o:value("2", translate("Bypass Overseas"))
o:depends("ipv6_enable", "1")
o = s:taboption("ipv6", Value, "local_network6_pass", translate("Local IPv6 Network Bypassed List"))

View File

@ -1,152 +0,0 @@
<%+cbi/valueheader%>
<script type="text/javascript">//<![CDATA[
var catch_num;
var catch_timeout;
var catch_out;
function act_download_disney_rule(btn)
{
btn.disabled = true;
btn.value = '<%:Downloading Rule...%> ';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash","download_disney_domains")%>',
null,
function(x,status)
{
if ( x && x.status == 200 ) {
if(status.rule_download_status=="0")
{
btn.value = '<%:Download Failed%>';
}
else if (status.rule_download_status=="1")
{
btn.value = '<%:Download Successful%>';
}
else if (status.rule_download_status=="2")
{
btn.value = '<%:Rule No Change%>';
}
}
else {
btn.value = '<%:Download Timeout%>';
}
}
);
btn.disabled = false;
return false;
};
function act_download_netflix_rule(btn)
{
btn.disabled = true;
btn.value = '<%:Downloading Rule...%> ';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash","download_netflix_domains")%>',
null,
function(x,status)
{
if ( x && x.status == 200 ) {
if(status.rule_download_status=="0")
{
btn.value = '<%:Downloading Fail%>';
}
else if (status.rule_download_status=="1")
{
btn.value = '<%:Downloading Successful%>';
}
else if (status.rule_download_status=="2")
{
btn.value = '<%:Rule No Change%>';
}
}
else {
btn.value = '<%:Downloading Timeout%>';
}
}
);
btn.disabled = false;
return false;
};
function catch_netflix_domains()
{
var legend = document.getElementById('catch-netflix-state');
var output = document.getElementById('catch-netflix-output');
var r = confirm("<%:Attention:%>\n<%:The catch result will be automatically saved%>\n\n1. <%:Please make sure the OpenClash works normally%>\n2. <%:The domains catch time is one minute%>\n3. <%:About to open fast.com%>\n4. <%:You can also try to catch while unlocking device playing%>");
if (r == true) {
winOpen("https://fast.com/");
if (legend && output)
{
output.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
'<%:Waiting for command to complete...%>';
legend.parentNode.style.display = 'block';
legend.style.display = 'inline';
catch_num = 0;
catch_out = "";
get_netflix_domains();
}
}
};
function strUnique(str){
var ret = [];
str.replace(/[^,]+/g, function($1, $2) {
(str.indexOf($1) == $2) && ret.push($1);
});
return ret.join('\n');
}
function get_netflix_domains()
{
var legend = document.getElementById('catch-netflix-state');
var output = document.getElementById('catch-netflix-output');
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "catch_netflix_domains")%>', null, function(x, status) {
if (x && x.status == 200 && x.responseText != "")
{
if (catch_out != "") {
catch_out = catch_out + x.responseText;
}
else
{
catch_out = x.responseText;
}
}
}
);
catch_num = catch_num + 1;
if ( catch_num < 20 ) {
catch_timeout = setTimeout("get_netflix_domains()", 3000);
}
else {
clearTimeout(catch_timeout);
if (catch_out != "")
{
legend.style.display = 'none';
output.innerHTML = '<textarea class="cbi-input-textarea" style="width: 100%;display:inline" data-update="change" rows="10" cols="50" readonly="readonly" >'+strUnique(catch_out)+'</textarea>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "write_netflix_domains")%>', {domains: strUnique(catch_out)}, function(x, status) {});
}
else
{
legend.style.display = 'none';
output.innerHTML = '<span class="error"><%:No domain names were catched...%></span>';
}
}
};
//]]></script>
<input type="button" class="btn cbi-button cbi-input-reload" value="<%:Netflix%>" onclick="return act_download_netflix_rule(this)" />
<input type="button" class="btn cbi-button cbi-input-reload" value="<%:Disney Plus%>" onclick="return act_download_disney_rule(this)" />
<input type="button" class="btn cbi-button cbi-input-reload" value="<%:Catch Netflix%>" onclick="return catch_netflix_domains(this)" />
<fieldset style="display: none;margin: 0 auto;">
<legend id="catch-netflix-state"><%:Collecting data...%></legend>
<br />
<span id="catch-netflix-output"></span>
</fieldset>
<%+cbi/valuefooter%>

View File

@ -7,13 +7,13 @@
<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//cdn.jsdelivr.net">
<link rel="dns-prefetch" href="//whois.pconline.com.cn">
<link rel="dns-prefetch" href="//forge.speedtest.cn">
<link rel="dns-prefetch" href="//pubstatic.b0.upaiyun.com">
<link rel="dns-prefetch" href="//api-ipv4.ip.sb">
<link rel="dns-prefetch" href="//api.ipify.org">
<link rel="dns-prefetch" href="//api.ttt.sh">
<link rel="dns-prefetch" href="//qqwry.api.skk.moe">
<link rel="dns-prefetch" href="//d.skk.moe">
<link rel="preconnect" href="https://forge.speedtest.cn">
<link rel="preconnect" href="https://pubstatic.b0.upaiyun.com">
<link rel="preconnect" href="https://whois.pconline.com.cn">
<link rel="preconnect" href="https://api-ipv4.ip.sb">
<link rel="preconnect" href="https://api.ipify.org">
@ -143,7 +143,7 @@
<span style="float: right;"><img src="/luci-static/resources/openclash/img/eye-light.svg" height="20px" title="<%:Hide IP%>" alt="<%:Hide IP%>" id="eye-icon" onclick="return privacy_my_ip(this)" /></span>
</p>
<p style="margin: 10px -2% 0 8%; text-align: left; padding-left: 0px !important; padding-right: 0px !important;">
<span class="ip-title">SpeedTest:</span><span class="ip-result" id="ip-speedtest"></span> <span class="ip-geo" id="ip-speedtest-geo"></span>
<span class="ip-title">UpaiYun:</span><span class="ip-result" id="ip-upaiyun"></span> <span class="ip-geo" id="ip-upaiyun-geo"></span>
</p>
<p style="margin: 10px -2% 0 8%; text-align: left; padding-left: 0px !important; padding-right: 0px !important;">
<span class="ip-title">PConline:</span><span class="ip-result" id="ip-pcol"></span> <span class="ip-geo" id="ip-pcol-geo"></span>
@ -181,6 +181,15 @@
</fieldset>
</body>
<script>
function addTitleOnOverflow() {
document.querySelectorAll('.ip-result, .ip-geo').forEach(function (span) {
if (span.scrollWidth > span.clientWidth && localStorage.getItem('privacy_my_ip') !== 'true') {
span.setAttribute('title', span.textContent);
} else {
span.removeAttribute('title');
}
});
}
function ip_skk()
{
url2='https://ip.skk.moe';
@ -189,13 +198,13 @@
const $$ = document;
var ip_pcol_ip;
var ip_ipsb_ip;
var ip_speedtest_ip;
var ip_upaiyun_ip;
var ip_ipify_ip;
var refresh_http;
var refresh_ip;
$$.getElementById('ip-pcol').innerHTML = '<%:Querying...%>';
$$.getElementById('ip-ipify').innerHTML = '<%:Querying...%>';
$$.getElementById('ip-speedtest').innerHTML = '<%:Querying...%>';
$$.getElementById('ip-upaiyun').innerHTML = '<%:Querying...%>';
$$.getElementById('ip-ipsb').innerHTML = '<%:Querying...%>';
let random = parseInt(Math.random() * 100000000);
let IP = {
@ -248,6 +257,7 @@
$$.getElementById('ip-ipipnet').innerHTML = `${data[0]}`;
};
$$.getElementById('ip-ipipnet-geo').innerHTML = `${data[1]}`;
addTitleOnOverflow();
});
},
getIPApiIP: () => {
@ -257,16 +267,28 @@
$$.getElementById('ip-ipapi').innerHTML = resp.data.ip;
};
IP.parseIPIpip(resp.data.ip, 'ip-ipapi-geo');
addTitleOnOverflow();
})
},
getSpeedIP: () => {
IP.get(`https://forge.speedtest.cn/api/location/info?z=${random}`, 'json')
//getSpeedIP: () => {
// IP.get(`https://forge.speedtest.cn/api/location/info?z=${random}`, 'json')
// .then(resp => {
// if (localStorage.getItem('privacy_my_ip') != 'true') {
// $$.getElementById('ip-speedtest').innerHTML = resp.data.ip;
// };
//$$.getElementById('ip-speedtest-geo').innerHTML = resp.data.country + resp.data.province + resp.data.city + (resp.data.distinct == "null" ? '' : resp.data.distinct) + ' ' + (resp.data.isp == "null" ? '' : resp.data.isp);
// IP.parseIPIpip(resp.data.ip, 'ip-speedtest-geo');
// })
//},
getUpaiIP: () => {
IP.get(`https://pubstatic.b0.upaiyun.com/?_upnode&z=${random}`, 'json')
.then(resp => {
if (localStorage.getItem('privacy_my_ip') != 'true') {
$$.getElementById('ip-speedtest').innerHTML = resp.data.ip;
$$.getElementById('ip-upaiyun').innerHTML = resp.data.remote_addr;
};
//$$.getElementById('ip-speedtest-geo').innerHTML = resp.data.country + resp.data.province + resp.data.city + (resp.data.distinct == "null" ? '' : resp.data.distinct) + ' ' + (resp.data.isp == "null" ? '' : resp.data.isp);
IP.parseIPIpip(resp.data.ip, 'ip-speedtest-geo');
$$.getElementById('ip-upaiyun-geo').innerHTML = resp.data.remote_addr_location.country + resp.data.remote_addr_location.province + resp.data.remote_addr_location.city + ' ' + resp.data.remote_addr_location.isp;
//IP.parseIPIpip(resp.data.remote_addr, 'ip-upaiyun-geo');
addTitleOnOverflow();
})
},
getIpifyIP: () => {
@ -279,6 +301,7 @@
})
.then(ip => {
IP.parseIPIpip(ip, 'ip-ipify-geo');
addTitleOnOverflow();
})
}
};
@ -340,6 +363,7 @@
$$.getElementById('ip-pcol').innerHTML = data.ip;
};
$$.getElementById('ip-pcol-geo').innerHTML = `${data.pro}${data.city}${data.region} ${pcisp[1]}`;
addTitleOnOverflow();
};
function getIpsbIP(data){
@ -347,6 +371,7 @@
$$.getElementById('ip-ipsb').innerHTML = data.ip;
};
IP.parseIPIpip(data.ip, 'ip-ipsb-geo');
addTitleOnOverflow();
};
//function ipCallback(data){
@ -379,11 +404,11 @@
var sbipScript= document.createElement("script");
sbipScript.defer = "defer";
sbipScript.src='https://api-ipv4.ip.sb/jsonip?callback=getIpsbIP';
sbipScript.src=`https://api-ipv4.ip.sb/jsonip?callback=getIpsbIP&z=${random}`;
mypage.appendChild(sbipScript);
//HTTP.runcheck();
IP.getSpeedIP();
IP.getUpaiIP();
IP.getIpifyIP();
};
@ -395,12 +420,13 @@
$$.getElementById('eye-icon').alt='<%:Show IP%>';
ip_pcol_ip = $$.getElementById('ip-pcol').innerHTML;
ip_ipsb_ip = $$.getElementById('ip-ipsb').innerHTML;
ip_speedtest_ip = $$.getElementById('ip-speedtest').innerHTML;
ip_upaiyun_ip = $$.getElementById('ip-upaiyun').innerHTML;
ip_ipify_ip = $$.getElementById('ip-ipify').innerHTML;
$$.getElementById('ip-pcol').innerHTML = '***.***.***.***';
$$.getElementById('ip-ipsb').innerHTML = '***.***.***.***';
$$.getElementById('ip-speedtest').innerHTML = '***.***.***.***';
$$.getElementById('ip-upaiyun').innerHTML = '***.***.***.***';
$$.getElementById('ip-ipify').innerHTML = '***.***.***.***';
addTitleOnOverflow();
}
else {
refresh_http = setInterval("HTTP.runcheck()", Math.floor(Math.random()*(10-5+1)+5)*1000);
@ -419,12 +445,13 @@
imgobj.alt='<%:Show IP%>';
ip_pcol_ip = $$.getElementById('ip-pcol').innerHTML;
ip_ipsb_ip = $$.getElementById('ip-ipsb').innerHTML;
ip_speedtest_ip = $$.getElementById('ip-speedtest').innerHTML;
ip_upaiyun_ip = $$.getElementById('ip-upaiyun').innerHTML;
ip_ipify_ip = $$.getElementById('ip-ipify').innerHTML;
$$.getElementById('ip-pcol').innerHTML = '***.***.***.***';
$$.getElementById('ip-ipsb').innerHTML = '***.***.***.***';
$$.getElementById('ip-speedtest').innerHTML = '***.***.***.***';
$$.getElementById('ip-upaiyun').innerHTML = '***.***.***.***';
$$.getElementById('ip-ipify').innerHTML = '***.***.***.***';
addTitleOnOverflow();
}
else {
imgobj.src='/luci-static/resources/openclash/img/eye-light.svg';
@ -432,7 +459,7 @@
imgobj.alt='<%:Hide IP%>';
$$.getElementById('ip-pcol').innerHTML = ip_pcol_ip;
$$.getElementById('ip-ipsb').innerHTML = ip_ipsb_ip;
$$.getElementById('ip-speedtest').innerHTML = ip_speedtest_ip;
$$.getElementById('ip-upaiyun').innerHTML = ip_upaiyun_ip;
$$.getElementById('ip-ipify').innerHTML = ip_ipify_ip;
localStorage.removeItem('privacy_my_ip');
myip_Load();
@ -452,11 +479,13 @@
HTTP.runcheck();
IP.getIpifyIP();
IP.getSpeedIP();
IP.getUpaiIP();
show_my_ip();
</script>
<script type="text/javascript">
document.write('<script defer="defer" src="https://whois.pconline.com.cn/ipJson.jsp?callback=getPcolIP&z='+parseInt(Math.random() * 100000000)+'" type="text/javascript"><\/script>');
</script>
<script defer="defer" src="https://api-ipv4.ip.sb/jsonip?callback=getIpsbIP"></script>
<script type="text/javascript">
document.write('<script defer="defer" src="https://api-ipv4.ip.sb/jsonip?callback=getIpsbIP&z='+parseInt(Math.random() * 100000000)+'" type="text/javascript"><\/script>');
</script>
</html>

View File

@ -36,17 +36,7 @@
<tr>
<td colspan="4" width="100%">
<p style="margin: 10px 0; text-align: center">
<%
if uci:get("openclash", "config", "enable_meta_core") ~= '1' then
%>
<img id="_logo" src="/luci-static/resources/openclash/img/logo.png?<%=random%>" loading="lazy" width="150px" height="150px" onload="return logo_check(this,this.src,'https://raw.githubusercontent.com/vernesong/OpenClash/<%=RELEASE_BRANCH%>/img/logo.png')" onerror="return logo_error(this,'/luci-static/resources/openclash/img/logo.png?<%=random%>')" title="Hello, World!" alt="OpenClash" onclick="return homepage()" />
<%
else
%>
<img id="_logo" src="/luci-static/resources/openclash/img/meta.png?<%=random%>" loading="lazy" width="150px" height="150px" onload="return logo_check(this,this.src,'https://raw.githubusercontent.com/vernesong/OpenClash/<%=RELEASE_BRANCH%>/img/meta.png')" onerror="return logo_error(this,'/luci-static/resources/openclash/img/meta.png?<%=random%>')" title="Hello, World!" alt="OpenClash" onclick="return homepage()" />
<%
end
%>
<img id="_logo" src="/luci-static/resources/openclash/img/meta.png?<%=random%>" loading="lazy" width="150px" height="150px" onload="return logo_check(this,this.src,'https://raw.githubusercontent.com/vernesong/OpenClash/<%=RELEASE_BRANCH%>/img/meta.png')" onerror="return logo_error(this,'/luci-static/resources/openclash/img/meta.png?<%=random%>')" title="Hello, World!" alt="OpenClash" onclick="return homepage()" />
</p>
<p id="_clashversion" style="margin: 10px 0; text-align: center">
<img src="/luci-static/resources/openclash/img/version.svg?<%=random%>" alt="currentversion" height="21px" onclick="return go_update()">
@ -185,9 +175,8 @@
</p>
</td></tr>
<tr><td width="25%"><%:Node Select Backup%></td><td width="25%" align="left" id="_historychecktime"><%:Collecting data...%></td><td width="25%"><%:lhie1 Rule Update%></td><td width="25%" align="left" id="_lhie1"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:ConnersHua Rule Update%></td><td width="25%" align="left" id="_ConnersHua"><%:Collecting data...%></td><td width="25%"><%:ConnersHua Return Rule Update%></td><td width="25%" align="left" id="_ConnersHua_return"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:Mainland IP Update%></td><td width="25%" align="left" id="_chnroute"><%:Collecting data...%></td><td width="25%"><%: Mainland IPv6 Update%></td><td width="25%" align="left" id="_chnroutev6"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:GEOIP Data Update%></td><td width="25%" align="left" id="_ipdb"><%:Collecting data...%></td><td width="25%"><%:GeoSite Data Update%></td><td width="25%" align="left" id="_geosite"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:GeoIP Data Update%></td><td width="25%" align="left" id="_ipdb"><%:Collecting data...%></td><td width="25%"><%:GeoSite Data Update%></td><td width="25%" align="left" id="_geosite"><%:Collecting data...%></td></tr>
</table>
</fieldset>
<script type="text/javascript">//<![CDATA[
@ -213,8 +202,6 @@
var ipdb = document.getElementById('_ipdb');
var geosite = document.getElementById('_geosite');
var lhie1 = document.getElementById('_lhie1');
var ConnersHua = document.getElementById('_ConnersHua');
var ConnersHua_return = document.getElementById('_ConnersHua_return');
var chnroute = document.getElementById('_chnroute');
var chnroutev6 = document.getElementById('_chnroutev6');
var historychecktime = document.getElementById('_historychecktime');
@ -250,14 +237,7 @@
XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
if ( status.restricted_mode != "1" )
{
clash.innerHTML = status.clash ? '<b style=color:green>' + status.core_type +'&nbsp;&nbsp;&nbsp;<%:Running%></b>' : '<b style=color:red><%:Not Running%></b>';
}
else
{
clash.innerHTML = status.clash ? '<b style=color:green>' + status.core_type +'&nbsp;&nbsp;&nbsp;<%:Running%>&nbsp;&nbsp;&nbsp;<%:<Limited State>%></b>' : '<b style=color:red><%:Not Running%></b>';
}
clash.innerHTML = status.clash ? '<b style=color:green>' + status.core_type +'&nbsp;&nbsp;&nbsp;<%:Running%></b>' : '<b style=color:red><%:Not Running%></b>';
watchdog.innerHTML = status.watchdog ? '&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<%:Daemons%>:&nbsp;&nbsp;&nbsp;<b style=color:green><%:Running%></b>' : '&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<%:Daemons%>:&nbsp;&nbsp;&nbsp;<b style=color:red><%:Not Running%></b>';
dase.innerHTML = status.dase ? "<b style=color:green>"+status.dase+"</b>" : "<b style=color:red>"+"<%:Not Set%>"+"</b>";
web.innerHTML = status.web ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Yacd Control Panel%>" onclick="return ycad_dashboard(this)"/>' : '<b style=color:red><%:Not Running%></b>';
@ -346,9 +326,9 @@
XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "startlog")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
if ( status.startlog.match("level=fatal") || status.startlog.indexOf("FTL [Config]") != "-1" ) {
if ( status.startlog.match("level=fatal") || status.startlog.match("level=error") || status.startlog.indexOf("FTL [Config]") != "-1" ) {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "del_start_log")%>', null, function(x) {});
if ( status.startlog.match("level=fatal") ) {
if ( status.startlog.match("level=fatal") || status.startlog.match("level=error") ) {
alert('<%:OpenClash Start Failed%> :\n\n' + status.startlog.split('msg=')[1]);
}
else {
@ -544,8 +524,6 @@
ipdb.innerHTML = status.ipdb ? "<b style=color:green>"+status.ipdb+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";
geosite.innerHTML = status.geosite ? "<b style=color:green>"+status.geosite+"</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>";
chnroutev6.innerHTML = status.chnroutev6 ? "<b style=color:green>"+status.chnroutev6+"</b>" : "<b style=color:red>"+"<%:File Not Exist%>"+"</b>";
if ( status.historychecktime != "0" ) {
@ -854,14 +832,14 @@
btn.disabled = true;
btn.value = '<%:Metacubexd Control Panel%>';
if (status.daip && window.location.hostname == status.daip) {
url9='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/metacubexd/#/?hostname='+ window.location.hostname + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
url9='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/metacubexd/#/setup?hostname='+ window.location.hostname + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
}
else if (status.daip && window.location.hostname != status.daip && status.db_foward_domain && status.db_foward_port) {
var ui_proto = status.db_forward_ssl == 0 ? 'http://' : 'https://';
url9='<%="'+ui_proto+status.db_foward_domain+':'+status.db_foward_port+'/ui/metacubexd/#/?hostname='+ status.db_foward_domain + '&port=' + status.db_foward_port + '&secret=' + status.dase +'"%>';
url9='<%="'+ui_proto+status.db_foward_domain+':'+status.db_foward_port+'/ui/metacubexd/#/setup?hostname='+ status.db_foward_domain + '&port=' + status.db_foward_port + '&secret=' + status.dase +'"%>';
}
else {
url9='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/metacubexd/"%>';
url9='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/metacubexd/#/"%>';
}
winOpen(url9);
return false;
@ -917,7 +895,7 @@
function gitbookpage()
{
url8='https://lancellc.gitbook.io/clash';
url8='https://wiki.metacubex.one';
winOpen(url8);
};

View File

@ -38,20 +38,6 @@
<td width="25%"><%:Last Check Update%></td><td width="25%" align="left" id="CHECKTIME"><%:Collecting data...%></td>
</tr>
<tr><td width="100%" colspan="4">
<p align="center">
<b><%:Core path:%>/etc/openclash/core/clash</b>
</p>
</td></tr>
<tr><td width="25%">[Dev] <%:Current Core%></td><td width="25%" align="left" id="CORE_CV"><%:Collecting data...%></td><td width="25%">[Dev] <%:Latest Core%></td><td width="25%" align="left" id="CORE_LV"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:Update Core%></td><td width="25%" align="left" id="core_up"><%:Collecting data...%></td><td width="25%"><%:Download Latest Core%></td><td width="25%" align="left" id="ma_core_up"><%:Collecting data...%></td></tr>
<tr><td width="100%" colspan="4">
<p align="center">
<b><%:Core path:%>/etc/openclash/core/clash_tun</b>
</p>
</td></tr>
<tr><td width="25%">[TUN] <%:Current Core%></td><td width="25%" align="left" id="CORE_TUN_CV"><%:Collecting data...%></td><td width="25%">[TUN] <%:Latest Core%></td><td width="25%" align="left" id="CORE_TUN_LV"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:Update Core%></td><td width="25%" align="left" id="core_tun_up"><%:Collecting data...%></td><td width="25%"><%:Download Latest Core%></td><td width="25%" align="left" id="ma_core_tun_up"><%:Collecting data...%></td></tr>
<tr><td width="100%" colspan="4">
<p align="center">
<b><%:Core path:%>/etc/openclash/core/clash_meta</b>
</p>
@ -145,21 +131,13 @@
var core_version = document.getElementById('CORE_VERSION');
var checktime = document.getElementById('CHECKTIME');
var cpu_model = document.getElementById('CPU_MODEL');
var core_cv = document.getElementById('CORE_CV');
var core_lv = document.getElementById('CORE_LV');
var core_tun_cv = document.getElementById('CORE_TUN_CV');
var core_tun_lv = document.getElementById('CORE_TUN_LV');
var core_meta_cv = document.getElementById('CORE_META_CV');
var core_meta_lv = document.getElementById('CORE_META_LV');
var op_cv = document.getElementById('OP_CV');
var op_lv = document.getElementById('OP_LV');
var core_up = document.getElementById('core_up');
var core_tun_up = document.getElementById('core_tun_up');
var core_meta_up = document.getElementById('core_meta_up');
var op_up = document.getElementById('op_up');
var update_tip = document.getElementById('update_tip');
var ma_core_up = document.getElementById('ma_core_up');
var ma_core_tun_up = document.getElementById('ma_core_tun_up');
var ma_core_meta_up = document.getElementById('ma_core_meta_up');
var ma_op_up = document.getElementById('ma_op_up');
var restore = document.getElementById('restore');
@ -173,12 +151,8 @@
var one_key_update_cdn = document.getElementById('one_key_update_cdn');
var remove_core = document.getElementById('remove_core');
var release_branch = document.getElementById('RELEASE_BRANCH');
core_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check And Update%>" onclick="return core_update(this,\'Dev\')"/>';
core_tun_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check And Update%>" onclick="return core_update(this,\'TUN\')"/>';
core_meta_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check And Update%>" onclick="return core_update(this,\'Meta\')"/>';
op_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check And Update%>" onclick="return op_update(this)"/>';
ma_core_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Download%>" onclick="return ma_core_update(this,\'Dev\')"/>';
ma_core_tun_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Download%>" onclick="return ma_core_update(this,\'TUN\')"/>';
ma_core_meta_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Download%>" onclick="return ma_core_update(this,\'Meta\')"/>';
ma_op_up.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Download%>" onclick="return ma_op_update(this)"/>';
restore.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reset" value="<%:Restore Default Config%>" onclick="return restore_config(this)"/>';
@ -222,24 +196,6 @@
else {
checktime.innerHTML = "<b style=color:red><%:Check Failed%></b>";
}
if ( status.corecv == "0" ) {
core_cv.innerHTML = "<b style=color:red><%:File Not Exist%></b>";
}
else if (status.corecv != "") {
core_cv.innerHTML = "<b style=color:green>"+status.corecv+"</b>";
}
else {
core_cv.innerHTML = "<b style=color:red><%:Unknown%></b>";
}
if ( status.coretuncv == "0" ) {
core_tun_cv.innerHTML = "<b style=color:red><%:File Not Exist%></b>";
}
else if (status.coretuncv != "") {
core_tun_cv.innerHTML = "<b style=color:green>"+status.coretuncv+"</b>";
}
else {
core_tun_cv.innerHTML = "<b style=color:red><%:Unknown%></b>";
}
if ( status.coremetacv == "0" ) {
core_meta_cv.innerHTML = "<b style=color:red><%:File Not Exist%></b>";
}
@ -249,29 +205,7 @@
else {
core_meta_cv.innerHTML = "<b style=color:red><%:Unknown%></b>";
}
var corelv = status.corelv;
var arr_core = corelv.split(",");
var corelvis = arr_core[0];
var coretunlvis = arr_core[1];
var coremetalvis = arr_core[2];
if (corelvis != status.corecv && corelvis != "" && corelvis != "\n") {
core_lv.innerHTML = "<b style=color:green>"+corelvis+"<%:<New>%></b>";
}
else if (corelvis != "" && corelvis == status.corecv && corelvis != "\n") {
core_lv.innerHTML = "<b style=color:green>"+corelvis+"</b>";
}
else {
core_lv.innerHTML = "<b style=color:red><%:Unknown%></b>";
}
if (coretunlvis != status.coretuncv && coretunlvis != "" && coretunlvis != "\n") {
core_tun_lv.innerHTML = "<b style=color:green>"+coretunlvis+"<%:<New>%></b>";
}
else if (coretunlvis != "" && coretunlvis == status.coretuncv && coretunlvis != "\n") {
core_tun_lv.innerHTML = "<b style=color:green>"+coretunlvis+"</b>";
}
else {
core_tun_lv.innerHTML = "<b style=color:red><%:Unknown%></b>";
}
var coremetalvis = status.corelv;
if (coremetalvis != status.coremetacv && coremetalvis != "" && coremetalvis != "\n") {
core_meta_lv.innerHTML = "<b style=color:green>"+coremetalvis+"<%:<New>%></b>";
}
@ -385,25 +319,9 @@
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_ma")%>', status.corever, function(x, status) {
if ( x && x.status == 200 ) {
if ( status.corever != "0" ) {
if (type == "Dev") {
url1='https://raw.githubusercontent.com/vernesong/OpenClash/core/'+r+'/dev/clash-'+status.corever+'.tar.gz';
window.location.href=url1;
}
if (type == "TUN") {
var corelv = status.corelv;
var arr_core = corelv.split(",");
var coretunlvis = arr_core[1];
if ( coretunlvis != "" ) {
url3='https://raw.githubusercontent.com/vernesong/OpenClash/core/'+r+'/premium/clash-'+status.corever+'-'+coretunlvis+'.gz';
window.location.href=url3;
}
else {
alert('<%:Failed to get the latest version. Please try again later!%>')
}
}
if (type == "Meta") {
url4='https://raw.githubusercontent.com/vernesong/OpenClash/core/'+r+'/meta/clash-'+status.corever+'.tar.gz';
window.location.href=url4;
window.location.href=url4;
}
}
else {

View File

@ -5,8 +5,6 @@
<option value="config" selected="selected"><%:Config File%> (.yaml)</option>
<option value="proxy-provider"><%:Proxy Provider File%></option>
<option value="rule-provider"><%:Rule Provider File%></option>
<option value="clash">[Dev] <%:Core File%> (.tar.gz)</option>
<option value="clash_tun">[TUN] <%:Core File%> (.gz)</option>
<option value="clash_meta">[Meta] <%:Core File%> (.tar.gz)</option>
<option value="backup-file"><%:Backup File%> (.tar.gz)</option>
</select>

View File

@ -26,14 +26,14 @@ msgstr "覆写设置"
msgid "Rule Providers Append"
msgstr "规则附加"
msgid "Game Rules Append (Only TUN & Meta Core Support)"
msgstr "游戏规则附加(仅 TUN & Meta 内核)"
msgid "Game Rules Append"
msgstr "游戏规则附加"
msgid "Other Rule Providers Append (Only TUN & Meta Core Support)"
msgstr "第三方规则集附加(仅 TUN & Meta 内核)"
msgid "Other Rule Providers Append"
msgstr "第三方规则集附加"
msgid "Custom Rule Providers Append (Only TUN & Meta Core Support)"
msgstr "自定义规则集附加(仅 TUN & Meta 内核)"
msgid "Custom Rule Providers Append"
msgstr "自定义规则集附加"
msgid "General Settings"
msgstr "常规设置"
@ -155,9 +155,6 @@ msgstr "Global【全局代理需前往控制面板手动指定节点】"
msgid "Direct Proxy Mode"
msgstr "Direct【全局直连】"
msgid "Script Proxy Mode (Tun Core Only)"
msgstr "Script【脚本模式 - 仅TUN内核】"
msgid "Select Stack Type"
msgstr "网络栈类型"
@ -165,16 +162,19 @@ msgid "Select Stack Type For TUN Mode, According To The Running Speed on Your Ma
msgstr "请自行根据运行速度为 TUN 模式选择合适的网络栈"
msgid "China IP Route"
msgstr "实验性:绕过中国大陆 IP"
msgstr "实验性:绕过指定区域 IP"
msgid "China IPv6 Route"
msgstr "实验性:绕过中国大陆 IPv6"
msgstr "实验性:绕过指定区域 IPv6"
msgid "Bypass The China Network Flows, Improve Performance"
msgstr "启用后中国大陆流量将不再经过内核,提升系统性能"
msgid "Bypass Mainland China"
msgstr "绕过中国大陆"
msgid "Bypass The China Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option, Depend on Dnsmasq"
msgstr "启用后中国大陆流量将不再经过内核,提升系统性能,如旁路由遇到无法访问,请尝试启用旁路由兼容模式,此功能依赖于 Dnsmasq"
msgid "Bypass Overseas"
msgstr "海外用户回国模式"
msgid "Bypass Specified Regions Network Flows, Improve Performance, If Inaccessibility on Bypass Gateway, Try to Enable Bypass Gateway Compatible Option"
msgstr "启用后指定区域流量将不再经过内核,提升系统性能,如旁路由遇到无法访问,请尝试启用旁路由兼容模式"
msgid "Log Level"
msgstr "日志等级"
@ -479,15 +479,6 @@ msgstr "将覆盖配置文件内的所有规则 (不包括自定义规则),启
msgid "lhie1 Rules"
msgstr "lhie1 规则"
msgid "ConnersHua Rules"
msgstr "ConnersHua 规则"
msgid "ConnersHua(Provider-type) Rules"
msgstr "ConnersHua(规则集) 规则"
msgid "ConnersHua Return Rules"
msgstr "ConnersHua 回国规则"
msgid "Auto Update Other Rules"
msgstr "正在使用第三方规则时更新设置才会生效"
@ -1053,8 +1044,8 @@ msgstr "*禁用 QUIC"
msgid "Prevent YouTube and Others To Use QUIC Transmission"
msgstr "防止 YouTube 等使用 QUIC 导致速度不佳"
msgid "REJECT UDP Traffic(Not Include CN) On Port 443"
msgstr "禁用 443 端口 UDP 流量(不包括国内"
msgid "REJECT UDP Traffic(Not Include bypassed regions via China IP Route setting) On Port 443"
msgstr "禁用 443 端口 UDP 流量(绕过指定区域IP启用或绕过中国大陆时禁用海外方向QUIC回国模式禁用大陆方向QUIC"
msgid "Operation Mode"
msgstr "模式设置"
@ -1224,9 +1215,6 @@ msgstr "组件的状态显示,运行前请确保各项目显示正常,需要
msgid "Node Select Backup"
msgstr "策略组节点选择 备份日期"
msgid "ConnersHua Rule Update"
msgstr "ConnersHua 规则更新日期"
msgid "Mainland IP Update"
msgstr "大陆 IP 白名单 更新日期"
@ -1236,11 +1224,8 @@ msgstr "大陆 IPv6 白名单 更新日期"
msgid "lhie1 Rule Update"
msgstr "lhie1 规则更新日期"
msgid "ConnersHua Return Rule Update"
msgstr "ConnersHua 回国规则更新日期"
msgid "GEOIP Data Update"
msgstr "GEOIP 数据库日期"
msgid "GeoIP Data Update"
msgstr "GeoIP 数据库日期"
msgid "GeoSite Data Update"
msgstr "GeoSite 数据库日期"
@ -1251,9 +1236,6 @@ msgstr "暂未备份"
msgid "Backup"
msgstr "备份"
msgid "<Limited State>"
msgstr "<受限状态>"
msgid "Enhance"
msgstr "增强"
@ -1503,9 +1485,6 @@ msgstr "大陆IPv6段更新 URL"
msgid "Custom Chnroute Lists URL"
msgstr "大陆IP段更新 URL"
msgid "Custom CN Doamin Lists URL"
msgstr "大陆域名列表文件更新 URL"
msgid "Custom GeoIP MMDB URL, Click Button Below To Refresh After Edit"
msgstr "自定义 GeoIP MMDB 数据库的更新来源,编辑后点击下方按钮生效"
@ -1518,9 +1497,6 @@ msgstr "自定义大陆 IP 段的更新来源,编辑后点击下方按钮生
msgid "Custom Chnroute6 Lists URL, Click Button Below To Refresh After Edit"
msgstr "自定义大陆 IPv6 段的更新来源,编辑后点击下方按钮生效"
msgid "Custom CN Doamin Dnsmasq Conf URL, Click Button Below To Refresh After Edit"
msgstr "自定义大陆域名列表配置文件Dnsmasq Conf的更新来源编辑后点击下方按钮生效"
msgid "(Default)"
msgstr "(默认)"
@ -1779,54 +1755,36 @@ msgstr "开始下载大陆 IP 白名单..."
msgid "Start Downloading The Chnroute6 Cidr List..."
msgstr "开始下载大陆 IPv6 白名单..."
msgid "Start Downloading The CN Domains List..."
msgstr "开始下载大陆域名白名单..."
msgid "Chnroute Cidr List Download Success, Check Updated..."
msgstr "大陆 IP 白名单下载成功,检查版本是否更新..."
msgid "Chnroute6 Cidr List Download Success, Check Updated..."
msgstr "大陆 IPv6 白名单下载成功,检查版本是否更新..."
msgid "CN Domains List Download Success, Check Updated..."
msgstr "大陆域名白名单下载成功,检查版本是否更新..."
msgid "Chnroute Cidr List Has Been Updated, Starting To Replace The Old Version..."
msgstr "大陆 IP 白名单有更新,开始替换旧版本..."
msgid "Chnroute6 Cidr List Has Been Updated, Starting To Replace The Old Version..."
msgstr "大陆 IPv6 白名单有更新,开始替换旧版本..."
msgid "CN Domains List Has Been Updated, Starting To Replace The Old Version..."
msgstr "大陆域名白名单有更新,开始替换旧版本..."
msgid "Chnroute Cidr List Update Successful!"
msgstr "大陆 IP 白名单更新成功!"
msgid "Chnroute6 Cidr List Update Successful!"
msgstr "大陆 IPv6 白名单更新成功!"
msgid "CN Domains List Update Successful!"
msgstr "大陆域名白名单更新成功!"
msgid "Updated Chnroute Cidr List No Change, Do Nothing..."
msgstr "大陆 IP 白名单没有更新,停止继续操作..."
msgid "Updated Chnroute6 Cidr List No Change, Do Nothing..."
msgstr "大陆 IPv6 白名单没有更新,停止继续操作..."
msgid "Updated CN Domains List No Change, Do Nothing..."
msgstr "大陆域名白名单没有更新,停止继续操作..."
msgid "Chnroute Cidr List Update Error, Please Try Again Later..."
msgstr "大陆 IP 白名单下载失败,请检查网络或稍后再试..."
msgid "Chnroute6 Cidr List Update Error, Please Try Again Later..."
msgstr "大陆 IPv6 白名单下载失败,请检查网络或稍后再试..."
msgid "CN Domains List Update Error, Please Try Again Later..."
msgstr "大陆域名白名单下载失败,请检查网络或稍后再试..."
msgid "Start Downloading GeoSite Database..."
msgstr "开始下载 GeoSite 数据库..."
@ -1950,15 +1908,9 @@ msgstr "读取完成!"
msgid "Write Successful!"
msgstr "写入完成!"
msgid "Creating By Using Connershua (rule set) Rules..."
msgstr "使用 ConnersHua(规则集) 规则创建中..."
msgid "Creating By Using lhie1 Rules..."
msgstr "使用 lhie1 规则创建中..."
msgid "Creating By Using ConnersHua Return Rules..."
msgstr "使用 ConnersHua 回国规则创建中..."
msgid "Created Successful, Updating Proxies, Proxy-providers, Groups..."
msgstr "创建完成,正在更新服务器、代理集、策略组信息..."
@ -1974,12 +1926,6 @@ msgstr "错误:丢失或未指定第三方规则中的部分策略组,停止
msgid "Tip: Detected That The nameserver DNS Option Has No Server Set, Starting To Complete..."
msgstr "提示检测到DNS选项下的 Nameserver 未设置服务器,开始补全..."
msgid "Error: Failed To Download Proxy-providers, Please Check The Log Page For Detailed error information!"
msgstr "错误:代理集文件下载失败,请到日志页面查看详细错误信息!"
msgid "Error: Failed To Download Rule-providers, Please Check The Log Page For Detailed error information!"
msgstr "错误:规则集文件下载失败,请到日志页面查看详细错误信息!"
msgid "Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers"
msgstr "错误配置文件DNS选项下的 Nameserver 必须设置服务器已停止设置自定义DNS服务器"
@ -1992,21 +1938,6 @@ msgstr "错误:缺少配置文件,请上传或更新配置文件!"
msgid "Error: Config File Format Validation Failed..."
msgstr "错误:配置文件格式校验失败..."
msgid "Tip: Detected The Exclusive Function of The TUN Core, Use TUN Core to Start..."
msgstr "提示:检测到配置了 TUN 内核专属功能,调用 TUN 内核启动..."
msgid "Tip: Detected The Exclusive Function of The Meta Core, Use Meta Core to Start..."
msgstr "提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动..."
msgid "Tip: No Special Configuration Detected, Use Dev Core to Start..."
msgstr "提示:未检测到特殊配置,调用 Dev 内核启动..."
msgid "Tip: Detected that the Dev Core is not Installed, Use TUN Core to Start..."
msgstr "提示:检测到 Dev 内核未安装,调用 TUN 内核启动..."
msgid "Tip: Detected that the Dev Core is not Installed, Use Meta Core to Start..."
msgstr "提示:检测到 Dev 内核未安装,调用 Meta 内核启动..."
msgid "Tip: Detected that the GEOIP Database is not Installed, Ready to Download..."
msgstr "提示:检测到 GEOIP 数据库文件不存在,准备开始下载..."
@ -2019,7 +1950,7 @@ msgstr "提示:检测到 GEOIP Dat 数据库文件不存在,准备开始下
msgid "Tip: Detected that the Core is not Installed, Ready to Download..."
msgstr "提示:检测到内核文件不存在,准备开始下载..."
msgid "Tip: Detected that the Chnroute Cidr or CN Domains List is not Installed, Ready to Download..."
msgid "Tip: Detected that the Chnroute Cidr is not Installed, Ready to Download..."
msgstr "提示:检测到大陆白名单列表不存在,准备开始下载..."
msgid "Tip: Detected that the Chnroute Cidr List Format is wrong, Ready to Reformat..."
@ -2031,24 +1962,9 @@ msgstr "错误Capsh 异常请尝试重新安装依赖【libcap】和相应
msgid "Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Give"
msgstr "提示:你可以尝试从给出的地址中查找、下载并重新安装架构对应的 libcap 和 libcap-bin 依赖"
msgid "Error: Get DNS 'listen' Option Error, OpenClash Can Not Start With Raw Config File"
msgstr "错误:无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败"
msgid "Error: Get DNS 'enhanced-mode' Option Error, OpenClash Can Not Start With Raw Config File"
msgstr "错误:无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败"
msgid "Error: Get General 'redir-port' Option Error, OpenClash Can Not Start With Raw Config File"
msgstr "错误:无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败"
msgid "Error: OpenClash Can Not Start, Please Check The Error Info And Try Again!"
msgstr "错误OpenClash 启动失败,请到日志页面查看详细错误信息!"
msgid "Error: OpenClash Can Not Start, Try Use Raw Config Restart Again..."
msgstr "错误OpenClash 启动失败,尝试使用原始配置文件启动..."
msgid "Error: OpenClash Can Not Start, Try Use Backup Rules Start Again..."
msgstr "错误OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..."
msgid "Found 53 Port Hijacked, Clean Up Firewall Rules..."
msgstr "发现 53 端口被劫持,清理防火墙规则..."
@ -2073,17 +1989,14 @@ msgstr "第四步: 启动主程序..."
msgid "Step 5: Check The Core Status..."
msgstr "第五步: 检查内核启动状态..."
msgid "Step 6: Wait For The File Downloading..."
msgstr "第六步: 等待主程序下载外部文件..."
msgid "Step 6: Set Firewall Rules..."
msgstr "第六步: 设置防火墙规则..."
msgid "Step 7: Set Firewall Rules..."
msgstr "第七步: 设置防火墙规则..."
msgid "Step 7: Restart Dnsmasq..."
msgstr "第七步: 重启 Dnsmasq 程序..."
msgid "Step 8: Restart Dnsmasq..."
msgstr "第八步: 重启 Dnsmasq 程序..."
msgid "Step 9: Add Cron Rules, Start Daemons..."
msgstr "第九步: 添加计划任务,启动进程守护程序..."
msgid "Step 8: Add Cron Rules, Start Daemons..."
msgstr "第八步: 添加计划任务,启动进程守护程序..."
msgid "OpenClash Start Successful!"
msgstr "OpenClash 启动成功,请等待服务器上线!"
@ -2091,9 +2004,6 @@ msgstr "OpenClash 启动成功,请等待服务器上线!"
msgid "Warning: OpenClash Start Successful, Please Note That Network May Abnormal With IPv6's DHCP Server"
msgstr "警告OpenClash 启动成功检测到您启用了IPv6的DHCP服务可能会造成连接异常"
msgid "Warning: OpenClash Start Successful With Raw Config File, Please Note That It's Restricted Mode Now"
msgstr "警告OpenClash 使用原始配置文件启动成功,部分设置可能未生效!"
msgid "OpenClash Stoping..."
msgstr "OpenClash 开始关闭..."
@ -2184,14 +2094,14 @@ msgstr "4、安装 TUN 或者 Meta 内核"
msgid "When setting this page, if the groups is empty, please go to the <server and group management> page to add"
msgstr "本页设置时如策略组为空,请先到《服务器与策略组管理》页面进行添加"
msgid "Introduction to rule set usage: https://lancellc.gitbook.io/clash/clash-config-file/rule-provider"
msgstr "规则集使用介绍https://lancellc.gitbook.io/clash/clash-config-file/rule-provider"
msgid "Introduction to rule set usage: https://wiki.metacubex.one/config/rule-providers/content/"
msgstr "规则集使用介绍https://wiki.metacubex.one/config/rule-providers/content/"
msgid "Introduction to proxy usage: https://lancellc.gitbook.io/clash/clash-config-file/proxies"
msgstr "代理使用介绍https://lancellc.gitbook.io/clash/clash-config-file/proxies"
msgid "Introduction to proxy usage: https://wiki.metacubex.one/config/proxies/"
msgstr "代理使用介绍https://wiki.metacubex.one/config/proxies/"
msgid "Introduction to proxy-provider usage: https://lancellc.gitbook.io/clash/clash-config-file/proxy-provider"
msgstr "代理集使用介绍https://lancellc.gitbook.io/clash/clash-config-file/proxy-provider"
msgid "Introduction to proxy-provider usage: https://wiki.metacubex.one/config/proxy-providers/"
msgstr "代理集使用介绍https://wiki.metacubex.one/config/proxy-providers/"
msgid "Subconverter external configuration (subscription conversion template) Description: https://github.com/tindy2013/subconverter#external-configuration-file"
msgstr "subconverter 外部配置(订阅转换模板)说明https://github.com/tindy2013/subconverter#external-configuration-file"
@ -2385,12 +2295,6 @@ msgstr "错误:设置防回环规则失败,"
msgid "Error: Set lhie1 Rules Failed,"
msgstr "错误设置第三方规则lhie1失败"
msgid "Error: Set ConnersHua Rules Failed,"
msgstr "错误设置第三方规则ConnersHua失败"
msgid "Error: Set ConnersHua Return Rules Failed,"
msgstr "错误设置第三方规则ConnersHua 回国)失败,"
msgid "Error: Filter Proxies Failed,"
msgstr "错误:节点筛选失败,"
@ -2415,9 +2319,6 @@ msgstr "错误:规则集 Rule-Set 规则添加失败,"
msgid "Error: Custom Rule Provider Merge Failed,"
msgstr "错误:规则集 Rule Provider 合并失败,"
msgid "Error: Restore Backup Rules Failed,"
msgstr "错误:还原默认规则失败,"
msgid "Error: Resolve Proxy-providers Failed,"
msgstr "错误:解析代理集失败,"
@ -2529,63 +2430,12 @@ msgstr "被修改,暂停快速启动..."
msgid "Click to Update"
msgstr "点击更新规则"
msgid "Prefetch Netflix, Disney Plus Domains"
msgstr "实验性:预解析 Netflix、Disney Plus 域名"
msgid "Prevent Some Devices From Directly Using IP Access To Cause Unlocking Failure, Recommend Use meta Sniffer Function"
msgstr "防止部分设备直接使用IP访问导致DNS解锁失败建议换用 meta 内核的探测功能"
msgid "Update Preset Domains List"
msgstr "更新预置域名列表"
msgid "Domains Prefetch Interval(min)"
msgstr "域名预解析间隔(分钟)"
msgid "Tip: Start Prefetch Netflix Domains..."
msgstr "提示:开始预解析 Netflix 域名..."
msgid "Tip: Netflix Domains Prefetch Finished!"
msgstr "提示Netflix 域名预解析完成!"
msgid "Tip: Start Prefetch Disney Plus Domains..."
msgstr "提示:开始预解析 Disney Plus 域名..."
msgid "Tip: Disney Plus Domains Prefetch Finished!"
msgstr "提示Disney Plus 域名预解析完成!"
msgid "Persistence Fake-IP"
msgstr "Fake-IP 持久化"
msgid "Cache Fake-IP DNS Resolution Records To File, Improve The Response Speed After Startup"
msgstr "存储 Fake-IP 的 DNS 解析记录到文件,提升内核启动后的反应速度和稳定性"
msgid "About to open fast.com"
msgstr "确认后将打开 fast.com 进行测速"
msgid "Please make sure the OpenClash works normally"
msgstr "请确保 OpenClash 已在正常运行"
msgid "The domains catch time is one minute"
msgstr "域名抓取功能运行时间为一分钟"
msgid "You can also try to catch while unlocking device playing"
msgstr "您也可以在正常解锁的设备播放时尝试抓取"
msgid "The catch result will be automatically saved"
msgstr "抓取结果将自动保存"
msgid "Click to Catch"
msgstr "手动抓取域名"
msgid "Catch Netflix"
msgstr "手动抓取 Netflix 域名"
msgid "No domain names were catched..."
msgstr "未抓取到任何域名..."
msgid "Will Run Once Immediately After Started, The Interval Does Not Need To Be Too Short (Take Effect Immediately After Commit)"
msgstr "启动后会立即执行一次,间隔无需太短(修改后保存配置即可生效)"
msgid "Test failed"
msgstr "检测失败"
@ -2874,6 +2724,12 @@ msgstr "Fake-IP 持久化缓存清理"
msgid "No Specify Upload File"
msgstr "未选择上传文件"
msgid "Custom Params"
msgstr "自定义参数"
msgid "eg: \"rename=\\s+([2-9])[xX]@ (HIGH:$1)\""
msgstr "格式示例:\"rename=\\s+([2-9])[xX]@ (高倍率:$1)\""
msgid "Use Rule Provider"
msgstr "使用规则集"
@ -2937,15 +2793,6 @@ msgstr "错误:因为禁用了代理路由器自身流量,流媒体解锁无
msgid "Error: Multiple Scripts Running, Exiting..."
msgstr "错误:多个脚本运行中,退出..."
msgid "Error: Streaming DNS Prefetch Could not Work Because of Router-Self Proxy Disabled, Exiting..."
msgstr "错误:因为禁用了代理路由器自身流量,预解析无法工作,退出..."
msgid "Enable Meta Core"
msgstr "*使用 Meta 内核"
msgid "Some Premium Core Features are Unavailable, For Other More Useful Functions Go Wiki:"
msgstr "Meta 内核还未支持 Premium 内核的全部功能要了解其独有功能请前往Wiki:"
msgid "Enable Sniffer"
msgstr "*启用流量(域名)探测"
@ -3027,9 +2874,6 @@ msgstr "(仅 TUN 内核)"
msgid "(TUN&Meta Core)"
msgstr "TUN&Meta 内核)"
msgid "Warning: Only Meta Core Support QUIC Type DNS, Skip"
msgstr "警告:仅 Meta 内核支持 QUIC 类型的 DNS跳过"
msgid "Will Override Dns Queries If Domains in The List"
msgstr "列表中的域名将会强制进行探测(嗅探)"
@ -3063,9 +2907,6 @@ msgstr "天"
msgid "Douyin"
msgstr "抖音Douyin"
msgid "Warning: Skip the Custom Rule that Core not Support"
msgstr "警告:跳过核心不支持的自定义规则"
msgid "Specific Interface"
msgstr "指定接口"
@ -3078,24 +2919,12 @@ msgstr "指定策略组(支持正则匹配)"
msgid "Group Use For Proxy The DNS"
msgstr "用于代理此 DNS 的策略组"
msgid "Warning: Only Meta Core Support Specific Group, Skip Setting"
msgstr "警告:仅 Meta 内核支持指定 DNS 的策略组,跳过设置"
msgid "Node Domain Resolve"
msgstr "节点域名解析"
msgid "Use For Node Domain Resolve"
msgstr "用于解析节点域名的 IP 地址"
msgid "Warning: Only Meta Core Support proxy-server-nameserver, Skip Setting"
msgstr "警告:仅 Meta 内核支持设置解析节点域名的 DNS跳过设置"
msgid "Warning: Meta Core not Support Specific Interface, Skip Setting"
msgstr "警告Meta 内核不支持设置指定 DNS 的出口,跳过设置"
msgid "Warning: Only Meta Core Support Force HTTP/3 to connect, Skip Setting"
msgstr "警告:仅 Meta 内核支持 DOH 强制启用 HTTP/3跳过设置"
msgid "Lan Bypassed Port List"
msgstr "绕过核心的来源端口"
@ -3199,23 +3028,17 @@ msgid "Backup Proxy Provider"
msgstr "仅备份代理集"
msgid "Chnroute Bypassed List"
msgstr "绕过中国大陆 IPv4 黑名单"
msgstr "绕过指定区域 IPv4 黑名单"
msgid "Chnroute6 Bypassed List"
msgstr "绕过中国大陆 IPv6 黑名单"
msgstr "绕过指定区域 IPv6 黑名单"
msgid "Domains or IPs in The List Will Not be Affected by The China IP Route Option, Depend on Dnsmasq"
msgstr "列表中的域名或 IP 将不会受到绕过中国大陆 IP 选项的影响,此功能依赖于 Dnsmasq"
msgstr "列表中的域名或 IP 将不会受到绕过指定区域 IP 选项的影响,此功能依赖于 Dnsmasq"
msgid "Warning: You May Need to Turn off The Rebinding Protection Option of Dnsmasq When Hosts Has Set a Reserved Address"
msgstr "警告Hosts 设置了保留地址时需要关闭 Dnsmasq 的重绑定保护选项才能生效"
msgid "LAN Block Google DNS IP List"
msgstr "实验性:屏蔽 Google DNS 的局域网设备 IP"
msgid "LAN Block Google DNS Mac List"
msgstr "实验性:屏蔽 Google DNS 的局域网设备 Mac"
msgid "Auto Select Logic"
msgstr "*自动选择逻辑"
@ -3252,9 +3075,6 @@ msgstr "下载失败:"
msgid "Tip: Waiting for TUN Interface Start..."
msgstr "提示:正在等待 TUN 接口启动..."
msgid "Tip: You Can Try to Restart With Meta Core"
msgstr "提示:您可以尝试使用 Meta 内核启动"
msgid "Warning: Dnsmasq not Support nftset, Use ipset..."
msgstr "警告Dnsmasq 不支持 nftset, 使用 ipset 代替..."
@ -3264,18 +3084,6 @@ msgstr "提示:检测到 Firewall4使用 NFTABLE 规则..."
msgid "Specify CN DNS Server"
msgstr "大陆域名 DNS 服务器"
msgid "Specify DNS Server For CN Domain Lists, Only One IP Server Address Support"
msgstr "指定大陆域名的 DNS 服务器只支持填写一个IP地址"
msgid "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..."
msgstr "警告:检测到 Dnsmasq 工作异常,设置防火墙 DNS 劫持规则..."
msgid "Tip: Dnsmasq Work is Normal, Restore The Firewall DNS Hijacking Rules..."
msgstr "提示:检测到 Dnsmasq 正常工作,还原防火墙 DNS 劫持规则..."
msgid "Tip: Bypass the China IP May Cause the Dnsmasq Load For a Long Time After Restart in FAKE-IP Mode, Hijack the DNS to Core Untill the Dnsmasq Works Well..."
msgstr "提示:在 FAKE-IP 模式下绕过中国 IP 可能会导致 Dnsmasq 加载时间过长,暂时劫持 DNS 至内核直到 Dnsmasq 正常工作..."
msgid "Seconds..."
msgstr "秒后开始启动..."
@ -3438,9 +3246,6 @@ msgstr "提示IPv6 代理模式为 TUN..."
msgid "Tip: IPv6 Proxy Mode is TProxy..."
msgstr "提示IPv6 代理模式为 TProxy..."
msgid "Warning: Only Meta Core Support IPv6 Tun Mode, Use TProxy Instead..."
msgstr "提示:只有 Meta 内核支持 IPv6 Tun 模式,使用 TProxy 模式代替..."
msgid "Warning: Can't Settting Only Intranet Allowed Function, Get IPv4 WAN Interfaces error, Please Verify The Firewall's WAN Zone Name is wan, Ignore This IF The Device Does not Have a WAN Interfaces..."
msgstr "警告:设置仅允许内网功能失败,无法获取 IPv4 的 WAN 接口名称,请确保防火墙设置中 IPv4 WAN 区域的名称为 wan如设备无 WAN 口请忽略此提示..."
@ -3474,9 +3279,6 @@ msgstr "请在此编辑您的附加配置"
msgid "Error: Config Not Found, Switch Config File to"
msgstr "错误:未找到配置文件,切换至配置文件"
msgid "Warning: Skip the nameserver-policy that Core not Support"
msgstr "警告:跳过核心不支持的 nameserver-policy 规则"
msgid "Enable Unified Delay"
msgstr "*启用统一延迟"
@ -3507,14 +3309,11 @@ msgstr "清理成功"
msgid "Flush Timeout"
msgstr "清理超时"
msgid "Fallback DNS Proxy Group (Support Regex)"
msgstr "Fallback DNS 代理组 (支持正则匹配)"
msgid "Respect Rules"
msgstr "遵循规则"
msgid "Group Use For Proxy The Fallback DNS, Preventing DNS Lookup Failures"
msgstr "为所有 Fallback DNS 设置代理策略组,防止 DNS 查询失败"
msgid "Error: Set Fallback DNS Proxy Group Failed,"
msgstr "错误Fallback DNS 代理策略组设置失败,"
msgid "Whether or not The Connection to the DNS Server Follow the Rules in Config"
msgstr "与 DNS 服务器的连接是否遵循配置文件中的规则"
msgid "To Use in Fake-IP Mode, Please Switch The Dns Redirect Mode To Firewall Forwarding"
msgstr "要在 Fake-IP 模式下使用,请将 Dns 重定向模式切换为防火墙转发模式"
@ -3550,4 +3349,49 @@ msgid "LAN Interface Name"
msgstr "LAN 接口名称"
msgid "Select LAN Interface Name"
msgstr "指定正确的 LAN 接口名称"
msgstr "指定正确的 LAN 接口名称"
msgid "For More Useful Meta Core Functions Go Wiki"
msgstr "如需要了解更多关于 Meta 内核的功能,请前往 Wiki"
msgid "Tip: Because Need Ensure Bypassing IP Option Work, Deleted The Fake-IP-Filter Rule"
msgstr "提示:为保证绕过 IP 正常工作,已在 Fake-IP-Filter 中删除规则"
msgid "Tip: Because Need Ensure Bypassing IP Option Work, Added The Fake-IP-Filter Rule"
msgstr "提示:为保证绕过 IP 正常工作,已在 Fake-IP-Filter 中添加规则"
msgid "Fake-IP is not returned if the matching succeeds when blacklist mode or Fake-IP is returned if the matching succeeds when whitelist mode"
msgstr "黑名单模式表示如果匹配成功则不返回 Fake-IP, 白名单模式时只有匹配成功才返回 Fake-IP"
msgid "Blacklist Mode"
msgstr "黑名单模式"
msgid "Whitelist Mode"
msgstr "白名单模式"
msgid "Cached Compliant Nodes Number:"
msgstr "已缓存的符合优先测试条件的节点数量:"
msgid ", Cached Non-compliant Nodes Number:"
msgstr ",不符合优先测试条件的节点数量:"
msgid ", Prioritize Testing With Cached Compliant Nodes..."
msgstr ",将优先使用符合条件的节点进行测试..."
msgid "Flush Unlock Test Cache"
msgstr "清理解锁检测缓存"
msgid "Flush Cache"
msgstr "清理缓存"
msgid "ECS Subnet"
msgstr "ECS 区域地址"
msgid "Specify the ECS Subnet Address"
msgstr "指定 ECS 子网区域地址"
msgid "ECS Override"
msgstr "ECS 区域地址覆盖"
msgid "Override the ECS Subnet Address"
msgstr "强制覆盖 DNS 查询的子网区域地址"

View File

@ -21,7 +21,7 @@ config openclash 'config'
option enable_custom_clash_rules '0'
option other_rule_auto_update '0'
option core_version '0'
option en_mode 'redir-host'
option en_mode 'fake-ip'
option enable_redirect_dns '1'
option servers_if_update '0'
option disable_masq_cache '1'
@ -32,7 +32,7 @@ config openclash 'config'
option enable_udp_proxy '1'
option disable_udp_quic '1'
option lan_ac_mode '0'
option operation_mode 'redir-host'
option operation_mode 'fake-ip'
option enable_rule_proxy '0'
option redirect_dns '0'
option cachesize_dns '0'
@ -48,7 +48,6 @@ config openclash 'config'
option custom_host '0'
option custom_name_policy '0'
option append_wan_dns '0'
option stream_domains_prefetch '0'
option stream_auto_select '0'
option bypass_gateway_compatible '0'
option github_address_mod '0'
@ -57,16 +56,15 @@ config openclash 'config'
option delay_start '0'
option router_self_proxy '1'
option release_branch 'master'
option enable_meta_core '0'
option dashboard_type 'Official'
option yacd_type 'Official'
option append_default_dns '0'
option enable_respect_rules '0'
option geo_custom_url 'https://testingcf.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb'
option geosite_custom_url 'https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat'
option geoip_custom_url 'https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat'
option chnr_custom_url 'https://ispip.clang.cn/all_cn.txt'
option chnr6_custom_url 'https://ispip.clang.cn/all_cn_ipv6.txt'
option cndomain_custom_url 'https://testingcf.jsdelivr.net/gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf'
config dns_servers
option type 'udp'

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,6 @@
#baidu.com
#2400:da00::dbf:0:100
#2400:da00::dbf:0:100
##解决绕过大陆后谷歌商店无法更新
services.googleapis.cn
googleapis.cn
xn--ngstr-lra8j.com

View File

@ -1,4 +1,6 @@
#baidu.com
#114.114.114.114
##解决绕过大陆后谷歌商店无法更新
services.googleapis.cn
services.googleapis.cn
googleapis.cn
xn--ngstr-lra8j.com

View File

@ -1,2 +1,5 @@
#'www.baidu.com': '114.114.114.114'
#'+.internal.crop.com': '10.0.0.1'
#'+.internal.crop.com': '10.0.0.1'
#"geosite:category-games@cn": [https://doh.pub/dns-query, 114.114.114.114, 223.5.5.5]
#"geosite:google": [tls://8.8.4.4, https://1.0.0.1/dns-query]
#"geosite:cn": [https://doh.pub/dns-query, 114.114.114.114, 223.5.5.5]

View File

@ -140,4 +140,10 @@ local.adguard.org
+.n0808.com
#UU Plugin
+.uu.163.com
ps.res.netease.com
ps.res.netease.com
#Wifi Calling
+.pub.3gppnetwork.org
#GEOSITE(Meta core)
geosite:category-games
#geosite:apple-cn
#geosite:google-cn

View File

@ -1,11 +0,0 @@
ipv4-c041-hkg001-ix.1.oca.nflxvideo.net
ipv4-c016-jnb001-ix.1.oca.nflxvideo.net
ipv4-c007-sin001-ix.1.oca.nflxvideo.net
ipv4-c010-jnb001-ix.1.oca.nflxvideo.net
ipv4-c047-sin001-ix.1.oca.nflxvideo.net
ipv6-c041-hkg001-ix.1.oca.nflxvideo.net
ipv4-c056-sin001-ix.1.oca.nflxvideo.net
ipv4-c030-sin001-ix.1.oca.nflxvideo.net
ipv4-c025-jnb001-ix.1.oca.nflxvideo.net
ipv4-c027-jnb001-ix.1.oca.nflxvideo.net
ipv4-c046-hkg001-ix.1.oca.nflxvideo.net

View File

@ -1,25 +1,4 @@
script:
## shortcuts:
## Notice: The core timezone is UTC
## CST 20:00-24:00 = time.now().hour > 12 and time.now().hour < 16
## 内核时区为UTC,故以下time.now()函数的取值需要根据本地时区进行转换
## 北京时间(CST) 20:00-24:00 = time.now().hour > 12 and time.now().hour < 16
## quic: network == 'udp' and dst_port == 443 and (geoip(resolve_ip(host)) != 'CN' or geoip(dst_ip) != 'CN')
## time-limit: in_cidr(src_ip,'192.168.1.2/32') and time.now().hour < 20 or time.now().hour > 21
## time-limit: src_ip == '192.168.1.2' and time.now().hour < 20 or time.now().hour > 21
## code: |
## def main(ctx, metadata):
## directkeywordlist = ["baidu"]
## for directkeyword in directkeywordlist:
## if directkeyword in metadata["host"]:
## ctx.log('[Script] matched keyword %s use direct' % directkeyword)
## return "DIRECT"
rules:
##- SCRIPT,quic,REJECT #shortcuts rule
##- SCRIPT,time-limit,REJECT #shortcuts rule
##- PROCESS-NAME,curl,DIRECT #匹配路由自身进程(curl直连)
##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组)
##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组)
@ -29,6 +8,34 @@ rules:
##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连)
##- DST-PORT,80,DIRECT #匹配数据目标端口(直连)
##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连)
##- GEOSITE,category-public-tracker,DIRECT #匹配GEOSITE数据库规则(直连)
##- DOMAIN-REGEX,^abc.*com,PROXY #正则匹配域名
##- RULE-SET,providername,PROXY #匹配规则集
##- IP-CIDR6,2620:0:2d0:200::7/32,PROXY
##- IP-SUFFIX,8.8.8.8/24,PROXY
##- IP-ASN,13335,DIRECT
##- SRC-GEOIP,cn,DIRECT
##- SRC-IP-ASN,9808,DIRECT
##- SRC-IP-SUFFIX,192.168.1.201/8,DIRECT
##- IN-PORT,7890,PROXY
##- IN-TYPE,SOCKS/HTTP,PROXY
##- IN-USER,mihomo,PROXY
##- IN-NAME,ss,PROXY
##- PROCESS-NAME-REGEX,curl$,PROXY
##- PROCESS-NAME-REGEX,(?i)Telegram,PROXY
##- PROCESS-NAME-REGEX,.*telegram.*,PROXY
##- NETWORK,udp,DIRECT
##- DSCP,4,DIRECT
##- AND,((DOMAIN,baidu.com),(NETWORK,UDP)),DIRECT
##- OR,((NETWORK,UDP),(DOMAIN,baidu.com)),REJECT
##- NOT,((DOMAIN,baidu.com)),PROXY
##- SUB-RULE,(NETWORK,tcp),sub-rule
##排序在上的规则优先生效,如添加(去除规则前的#号):
##IP段192.168.1.2-192.168.1.200 直连
@ -56,6 +63,8 @@ rules:
##- SRC-IP-CIDR,198.18.0.1/32,DIRECT
##DDNS
##- DOMAIN-KEYWORD,synology,DIRECT
##- DOMAIN-KEYWORD,quickconnect,DIRECT
##- DOMAIN-SUFFIX,checkip.dyndns.org,DIRECT
##- DOMAIN-SUFFIX,checkipv6.dyndns.org,DIRECT
##- DOMAIN-SUFFIX,checkip.synology.com,DIRECT

View File

@ -1,18 +1,4 @@
script:
## shortcuts:
## common_port: dst_port not in [21, 22, 23, 53, 80, 123, 143, 194, 443, 465, 587, 853, 993, 995, 998, 2052, 2053, 2082, 2083, 2086, 2095, 2096, 5222, 5228, 5229, 5230, 8080, 8443, 8880, 8888, 8889]
## code: |
## def main(ctx, metadata):
## directkeywordlist = ["baidu"]
## for directkeyword in directkeywordlist:
## if directkeyword in metadata["host"]:
## ctx.log('[Script] matched keyword %s use direct' % directkeyword)
## return "DIRECT"
rules:
##- SCRIPT,common_port,DIRECT #shortcuts rule
##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组)
##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组)
##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组)

View File

@ -1,4 +1,7 @@
skip-domain:
- '+.apple.com'
- Mijia Cloud
- dlg.io.mi.com
- dlg.io.mi.com
- +.oray.com
- +.sunlogin.net
#- geosite:cn

View File

@ -1,130 +0,0 @@
# 针对部分网站显示IP归属地的分流规则
# anti-ip-attribution rule-provider.yaml v0.3.0 b38fca55691235e8b59879093163d971ce803e2e
# https://github.com/lwd-temp/anti-ip-attribution
# 适用于Clash的Rule Provider功能详见https://lancellc.gitbook.io/clash/clash-config-file/rule-provider
payload:
- DOMAIN-SUFFIX,biliapi.net
- DOMAIN,api.bilibili.com
- DOMAIN,api.bilibili.tv
- DOMAIN,app.bilibili.com
- DOMAIN-SUFFIX,biliapi.com
- DOMAIN,api.live.bilibili.com
- DOMAIN,api.vc.bilibili.com
- DOMAIN,passport.bilibili.com
- DOMAIN,live-trace.bilibili.com
- DOMAIN,message.bilibili.com
- DOMAIN,cm.bilibili.com
- DOMAIN-SUFFIX,bilibili.com
- DOMAIN-SUFFIX,im9.com
- DOMAIN-SUFFIX,acg.tv
- DOMAIN-SUFFIX,biligame.com
- IP-CIDR,203.107.1.0/24,REJECT
- DOMAIN-SUFFIX,weibo.cn
- DOMAIN-SUFFIX,weibo.com
- DOMAIN-SUFFIX,weibocdn.com
- DOMAIN-KEYWORD,weibo
- DOMAIN,tieba.baidu.com
- DOMAIN,tbmsg.baidu.com
- DOMAIN,tb5.bdstatic.com
- DOMAIN,fclog.baidu.com
- DOMAIN,gsp0.baidu.com
- DOMAIN,hm.baidu.com
- DOMAIN,www.baidu.com
- DOMAIN,tiebac.baidu.com
- IP-CIDR,180.76.76.0/24
- DOMAIN,httpsdns.baidu.com
- DOMAIN,c.tieba.baidu.com
- DOMAIN,httpdns.baidu.com
- DOMAIN,httpdns.baidubce.com
- DOMAIN,szshort.weixin.qq.com
- DOMAIN,szextshort.weixin.qq.com
- DOMAIN,szminorshort.weixin.qq.com
- DOMAIN,mp.weixin.qq.com
- DOMAIN-SUFFIX,zhihu.com
- IP-CIDR,103.41.167.0/24
- IP-CIDR,118.89.204.198/23,REJECT
- IP-CIDR6,2402:4e00:1200:ed00:0:9089:6dac:96b6/40,REJECT
- DOMAIN-KEYWORD,core-c-lq
- DOMAIN-KEYWORD,core-lq
- DOMAIN-KEYWORD,normal-c-lq
- DOMAIN-KEYWORD,normal-lq
- DOMAIN-KEYWORD,search-quic-lq
- DOMAIN-KEYWORD,search-lq
- DOMAIN-SUFFIX,zijieapi.com,DIRECT
- DOMAIN-SUFFIX,ecombdapi.com,DIRECT
- DOMAIN-KEYWORD,-normal-hl
- DOMAIN-KEYWORD,-normal-c-hl
- DOMAIN-KEYWORD,-core-c-hl
- DOMAIN-KEYWORD,-normal-lf
- DOMAIN-KEYWORD,-normal-c-lf
- DOMAIN-KEYWORD,-core-c-lf
- DOMAIN,sso.douyin.com
- DOMAIN,www.douyin.com
- DOMAIN-SUFFIX,snssdk.com
- DOMAIN-SUFFIX,toutiaoapi.com
- DOMAIN-SUFFIX,gifshow.com
- DOMAIN-SUFFIX,ksapisrv.com
- DOMAIN-SUFFIX,xiaohongshu.com
- DOMAIN,keylol.com
- DOMAIN-SUFFIX,ixigua.com
- DOMAIN,www.wenshushu.cn
- IP-CIDR,119.29.29.98/32,REJECT
- DOMAIN,frodo.douban.com
- DOMAIN,www.douban.com
- DOMAIN,api.coolapk.com
- DOMAIN,api.taptapdada.com
- DOMAIN,god.gameyw.netease.com
- DOMAIN-SUFFIX,huya.com
- DOMAIN-SUFFIX,dongqiudi.com
- DOMAIN,ngabbs.com
- DOMAIN,api.vip.miui.com
- DOMAIN-SUFFIX,music.163.com
- DOMAIN,nstool.netease.com
- DOMAIN,wanproxy.127.net
- DOMAIN,mam.netease.com
- DOMAIN,dt.netease.im
- DOMAIN,api.iplay.163.com
- DOMAIN,api.k.163.com
- DOMAIN,lbs.netease.im
- DOMAIN,wannos.127.net
- DOMAIN,ac.dun.163.com
- DOMAIN-SUFFIX,music.126.net
- DOMAIN-SUFFIX,laiqukankan.com
- DOMAIN-SUFFIX,music.ntes53.netease.com
- IP-CIDR,101.71.154.241/32
- IP-CIDR,103.126.92.132/32
- IP-CIDR,103.126.92.133/32
- IP-CIDR,112.13.119.18/32
- IP-CIDR,112.13.122.4/32
- IP-CIDR,115.236.118.34/32
- IP-CIDR,115.236.121.4/32
- IP-CIDR,45.254.48.1/32
- IP-CIDR,59.111.160.195/32
- IP-CIDR,59.111.19.33/32
- IP-CIDR,59.111.19.53/32
- DOMAIN-SUFFIX,hls3-akm.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,hlsa-akm.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,hls1a-akm.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,hls3a-akm.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,vplay1a.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,vplay3a.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,ws-tct.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,akm-tct.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,tx2play1.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,tc-tct1.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,wsproxy.douyu.com,DIRECT
- DOMAIN-SUFFIX,danmuproxy.douyu.com,DIRECT
- DOMAIN-SUFFIX,img.douyucdn.cn,DIRECT
- DOMAIN-SUFFIX,douyucdn.cn
- DOMAIN-SUFFIX,douyu.com
- DOMAIN,bbs-api.mihoyo.com
- DOMAIN,bbs-api.miyoushe.com
- DOMAIN-SUFFIX,douban.com
- IP-CIDR,49.233.242.15/32
- IP-CIDR,81.70.124.99/32
- IP-CIDR,81.70.125.19/32
- IP-CIDR,140.143.177.206/32
- DOMAIN,api.xiaoheihe.cn
- DOMAIN,y.qq.com,DIRECT
- DOMAIN-SUFFIX,y.qq.com
- DOMAIN,zonai.skland.com

View File

@ -1,3 +0,0 @@
payload:
# > ChatGPT
- DOMAIN-SUFFIX,openai.com

View File

@ -1,366 +0,0 @@
payload:
# China Area Network
# > 360
- DOMAIN-SUFFIX,qhres.com
- DOMAIN-SUFFIX,qhimg.com
# > Alibaba
# USER-AGENT,%E4%BC%98%E9%85%B7*
- DOMAIN-SUFFIX,alibaba.com
- DOMAIN-SUFFIX,alibabausercontent.com
- DOMAIN-SUFFIX,alicdn.com
- DOMAIN-SUFFIX,alikunlun.com
- DOMAIN-SUFFIX,alipay.com
- DOMAIN-SUFFIX,amap.com
- DOMAIN-SUFFIX,autonavi.com
- DOMAIN-SUFFIX,dingtalk.com
- DOMAIN-SUFFIX,mxhichina.com
- DOMAIN-SUFFIX,soku.com
- DOMAIN-SUFFIX,taobao.com
- DOMAIN-SUFFIX,tmall.com
- DOMAIN-SUFFIX,tmall.hk
- DOMAIN-SUFFIX,ykimg.com
- DOMAIN-SUFFIX,youku.com
- DOMAIN-SUFFIX,xiami.com
- DOMAIN-SUFFIX,xiami.net
# > Apple
- DOMAIN-SUFFIX,aaplimg.com
- DOMAIN-SUFFIX,apple.co
- DOMAIN-SUFFIX,apple.com
- DOMAIN-SUFFIX,apple-cloudkit.com
- DOMAIN-SUFFIX,appstore.com
- DOMAIN-SUFFIX,cdn-apple.com
- DOMAIN-SUFFIX,icloud.com
- DOMAIN-SUFFIX,icloud-content.com
- DOMAIN-SUFFIX,me.com
- DOMAIN-SUFFIX,mzstatic.com
# - DOMAIN-KEYWORD,apple.com.akadns.net
# - DOMAIN-KEYWORD,icloud.com.akadns.net
# > Baidu
- DOMAIN-SUFFIX,baidu.com
- DOMAIN-SUFFIX,baidubcr.com
- DOMAIN-SUFFIX,baidupan.com
- DOMAIN-SUFFIX,baidupcs.com
- DOMAIN-SUFFIX,bdimg.com
- DOMAIN-SUFFIX,bdstatic.com
- DOMAIN-SUFFIX,yunjiasu-cdn.net
# > Battle
- DOMAIN-SUFFIX,battle.net
- DOMAIN-SUFFIX,blizzard.com
# > bilibili
- DOMAIN-SUFFIX,acgvideo.com
- DOMAIN-SUFFIX,biliapi.com
- DOMAIN-SUFFIX,biliapi.net
- DOMAIN-SUFFIX,bilibili.com
- DOMAIN-SUFFIX,bilibili.tv
- DOMAIN-SUFFIX,hdslb.com
# > ByteDance
- DOMAIN-SUFFIX,feiliao.com
- DOMAIN-SUFFIX,pstatp.com
- DOMAIN-SUFFIX,snssdk.com
- DOMAIN-SUFFIX,iesdouyin.com
- DOMAIN-SUFFIX,toutiao.com
# > CCTV
- DOMAIN-SUFFIX,cctv.com
- DOMAIN-SUFFIX,cctvpic.com
- DOMAIN-SUFFIX,livechina.com
# > ChinaTelecom
- DOMAIN-SUFFIX,21cn.com
# > DiDi
- DOMAIN-SUFFIX,didialift.com
- DOMAIN-SUFFIX,didiglobal.com
- DOMAIN-SUFFIX,udache.com
# > HunanTV
- DOMAIN-SUFFIX,hitv.com
- DOMAIN-SUFFIX,mgtv.com
# > iQiyi
- DOMAIN-SUFFIX,iqiyi.com
- DOMAIN-SUFFIX,iqiyipic.com
- DOMAIN-SUFFIX,71.am
# > JD
- DOMAIN-SUFFIX,jd.com
- DOMAIN-SUFFIX,jd.hk
- DOMAIN-SUFFIX,jdpay.com
- DOMAIN-SUFFIX,360buyimg.com
# > Kingsoft
- DOMAIN-SUFFIX,iciba.com
- DOMAIN-SUFFIX,ksosoft.com
# > Meitu
- DOMAIN-SUFFIX,meitu.com
- DOMAIN-SUFFIX,meitudata.com
- DOMAIN-SUFFIX,meitustat.com
- DOMAIN-SUFFIX,meipai.com
# > Meituan
- DOMAIN-SUFFIX,dianping.com
- DOMAIN-SUFFIX,dpfile.com
- DOMAIN-SUFFIX,meituan.com
- DOMAIN-SUFFIX,meituan.net
# > MI
- DOMAIN-SUFFIX,duokan.com
- DOMAIN-SUFFIX,mi.com
- DOMAIN-SUFFIX,mi-img.com
- DOMAIN-SUFFIX,miui.com
- DOMAIN-SUFFIX,miwifi.com
- DOMAIN-SUFFIX,xiaomi.com
- DOMAIN-SUFFIX,xiaomi.net
# > Microsoft
# - DOMAIN-SUFFIX,microsoft.com
# - DOMAIN-SUFFIX,msecnd.net
# - DOMAIN-SUFFIX,office.com
# - DOMAIN-SUFFIX,office365.com
# - DOMAIN-SUFFIX,s-microsoft.com
# - DOMAIN-SUFFIX,windows.com
- DOMAIN-SUFFIX,visualstudio.com
# >> Microsoft Software Download
# - DOMAIN,software-download.microsoft.com
# - DOMAIN-KEYWORD,-microsoft-com.akamaized.net
# >> OneDrive
# - DOMAIN-SUFFIX,1drv.com
# - DOMAIN-SUFFIX,storage.live.com
# >> Outlook
- DOMAIN-SUFFIX,hotmail.com
- DOMAIN-SUFFIX,outlook.com
- DOMAIN,outlook.office365.com
- DOMAIN,smtp.office365.com
# >> Windows Server Update Services
- DOMAIN-SUFFIX,dl.delivery.mp.microsoft.com
- DOMAIN-SUFFIX,update.microsoft.com
- DOMAIN-SUFFIX,windowsupdate.com
- DOMAIN-SUFFIX,windowsupdate.microsoft.com
- DOMAIN,download.microsoft.com
- DOMAIN,wustat.windows.com
- DOMAIN,ntservicepack.microsoft.com
# > NetEase
# USER-AGENT,NeteaseMusic*
# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*
- DOMAIN-SUFFIX,163.com
- DOMAIN-SUFFIX,126.com
- DOMAIN-SUFFIX,126.net
- DOMAIN-SUFFIX,127.net
- DOMAIN-SUFFIX,163yun.com
- DOMAIN-SUFFIX,lofter.com
- DOMAIN-SUFFIX,netease.com
- DOMAIN-SUFFIX,ydstatic.com
- DOMAIN-SUFFIX,youdao.com
# > PayPal
# USER-AGENT,PayPal*
- DOMAIN-SUFFIX,paypal.com
- DOMAIN-SUFFIX,paypal.me
- DOMAIN-SUFFIX,paypalobjects.com
# > Sina
- DOMAIN-SUFFIX,sina.com
- DOMAIN-SUFFIX,weibo.com
- DOMAIN-SUFFIX,weibocdn.com
# > Sohu
- DOMAIN-SUFFIX,sohu.com
- DOMAIN-SUFFIX,sohucs.com
- DOMAIN-SUFFIX,sohu-inc.com
- DOMAIN-SUFFIX,v-56.com
# > Sogo
- DOMAIN-SUFFIX,sogo.com
- DOMAIN-SUFFIX,sogou.com
- DOMAIN-SUFFIX,sogoucdn.com
# > Steam
- DOMAIN-SUFFIX,steamcontent.com
- DOMAIN-SUFFIX,steampowered.com
- DOMAIN-SUFFIX,steamstatic.com
# > Tencent
# USER-AGENT,MicroMessenger*
# USER-AGENT,WeChat*
# USER-AGENT,%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1*
- DOMAIN-SUFFIX,gtimg.com
- DOMAIN-SUFFIX,idqqimg.com
- DOMAIN-SUFFIX,igamecj.com
- DOMAIN-SUFFIX,myapp.com
- DOMAIN-SUFFIX,myqcloud.com
- DOMAIN-SUFFIX,qq.com
- DOMAIN-SUFFIX,qqmail.com
- DOMAIN-SUFFIX,servicewechat.com
- DOMAIN-SUFFIX,tencent.com
- DOMAIN-SUFFIX,tencent-cloud.com
- DOMAIN-SUFFIX,tencent-cloud.net
- DOMAIN-SUFFIX,tenpay.com
- DOMAIN-SUFFIX,wechat.com
- DOMAIN,file-igamecj.akamaized.net
- IP-CIDR,182.254.116.0/24,no-resolve
- IP-CIDR,203.205.254.0/23,no-resolve
# > Content Delivery Network
- DOMAIN-SUFFIX,ccgslb.com
- DOMAIN-SUFFIX,ccgslb.net
- DOMAIN-SUFFIX,chinanetcenter.com
- DOMAIN-SUFFIX,meixincdn.com
- DOMAIN-SUFFIX,ourdvs.com
- DOMAIN-SUFFIX,staticdn.net
- DOMAIN-SUFFIX,wangsu.com
# > IP Query
- DOMAIN-SUFFIX,ipip.net
- DOMAIN-SUFFIX,ip.la
- DOMAIN-SUFFIX,ip.sb
- DOMAIN-SUFFIX,ip-cdn.com
- DOMAIN-SUFFIX,ipv6-test.com
- DOMAIN-SUFFIX,myip.la
- DOMAIN-SUFFIX,test-ipv6.com
- DOMAIN-SUFFIX,whatismyip.com
- DOMAIN,ip.istatmenus.app
- DOMAIN,sms.imagetasks.com
# > Speed Test
# - DOMAIN-SUFFIX,speedtest.net
- DOMAIN-SUFFIX,netspeedtestmaster.com
- DOMAIN,speedtest.macpaw.com
# > Private Tracker
- DOMAIN-SUFFIX,acg.rip
- DOMAIN-SUFFIX,animebytes.tv
- DOMAIN-SUFFIX,awesome-hd.me
- DOMAIN-SUFFIX,broadcasthe.net
- DOMAIN-SUFFIX,chdbits.co
- DOMAIN-SUFFIX,classix-unlimited.co.uk
- DOMAIN-SUFFIX,comicat.org
- DOMAIN-SUFFIX,empornium.me
- DOMAIN-SUFFIX,gazellegames.net
- DOMAIN-SUFFIX,hdbits.org
- DOMAIN-SUFFIX,hdchina.org
- DOMAIN-SUFFIX,hddolby.com
- DOMAIN-SUFFIX,hdhome.org
- DOMAIN-SUFFIX,hdsky.me
- DOMAIN-SUFFIX,icetorrent.org
- DOMAIN-SUFFIX,jpopsuki.eu
- DOMAIN-SUFFIX,keepfrds.com
- DOMAIN-SUFFIX,madsrevolution.net
- DOMAIN-SUFFIX,morethan.tv
- DOMAIN-SUFFIX,m-team.cc
- DOMAIN-SUFFIX,myanonamouse.net
- DOMAIN-SUFFIX,nanyangpt.com
- DOMAIN-SUFFIX,ncore.cc
- DOMAIN-SUFFIX,open.cd
- DOMAIN-SUFFIX,ourbits.club
- DOMAIN-SUFFIX,passthepopcorn.me
- DOMAIN-SUFFIX,privatehd.to
- DOMAIN-SUFFIX,pterclub.com
- DOMAIN-SUFFIX,redacted.ch
- DOMAIN-SUFFIX,springsunday.net
- DOMAIN-SUFFIX,tjupt.org
- DOMAIN-SUFFIX,totheglory.im
# > Other
- DOMAIN-SUFFIX,cn
- DOMAIN-SUFFIX,115.com
- DOMAIN-SUFFIX,360in.com
- DOMAIN-SUFFIX,51ym.me
- DOMAIN-SUFFIX,8686c.com
- DOMAIN-SUFFIX,99.com
- DOMAIN-SUFFIX,abchina.com
- DOMAIN-SUFFIX,accuweather.com
- DOMAIN-SUFFIX,agora.io
- DOMAIN-SUFFIX,aicoinstorge.com
- DOMAIN-SUFFIX,air-matters.com
- DOMAIN-SUFFIX,air-matters.io
- DOMAIN-SUFFIX,aixifan.com
- DOMAIN-SUFFIX,amd.com
- DOMAIN-SUFFIX,b612.net
- DOMAIN-SUFFIX,bdatu.com
- DOMAIN-SUFFIX,beitaichufang.com
- DOMAIN-SUFFIX,booking.com
- DOMAIN-SUFFIX,bstatic.com
- DOMAIN-SUFFIX,cailianpress.com
- DOMAIN-SUFFIX,camera360.com
- DOMAIN-SUFFIX,chaoxing.com
- DOMAIN-SUFFIX,chaoxing.com
- DOMAIN-SUFFIX,chinaso.com
- DOMAIN-SUFFIX,chuimg.com
- DOMAIN-SUFFIX,chunyu.mobi
- DOMAIN-SUFFIX,cibntv.net
- DOMAIN-SUFFIX,cmbchina.com
- DOMAIN-SUFFIX,cmbimg.com
- DOMAIN-SUFFIX,coolapk.com
- DOMAIN-SUFFIX,ctrip.com
- DOMAIN-SUFFIX,dfcfw.com
- DOMAIN-SUFFIX,dji.net
- DOMAIN-SUFFIX,docschina.org
- DOMAIN-SUFFIX,douban.com
- DOMAIN-SUFFIX,doubanio.com
- DOMAIN-SUFFIX,douyu.com
- DOMAIN-SUFFIX,dxycdn.com
- DOMAIN-SUFFIX,dytt8.net
- DOMAIN-SUFFIX,eastmoney.com
- DOMAIN-SUFFIX,eudic.net
- DOMAIN-SUFFIX,feng.com
- DOMAIN-SUFFIX,fengkongcloud.com
- DOMAIN-SUFFIX,frdic.com
- DOMAIN-SUFFIX,futu5.com
- DOMAIN-SUFFIX,futunn.com
- DOMAIN-SUFFIX,gandi.net
- DOMAIN-SUFFIX,gcores.com
- DOMAIN-SUFFIX,geilicdn.com
- DOMAIN-SUFFIX,getpricetag.com
- DOMAIN-SUFFIX,gifshow.com
- DOMAIN-SUFFIX,godic.net
- DOMAIN-SUFFIX,heweather.net
- DOMAIN-SUFFIX,hicloud.com
- DOMAIN-SUFFIX,hongxiu.com
- DOMAIN-SUFFIX,hostbuf.com
- DOMAIN-SUFFIX,huxiucdn.com
- DOMAIN-SUFFIX,huya.com
- DOMAIN-SUFFIX,ibm.com
- DOMAIN-SUFFIX,infinitynewtab.com
- DOMAIN-SUFFIX,ithome.com
- DOMAIN-SUFFIX,java.com
- DOMAIN-SUFFIX,jianguoyun.com
- DOMAIN-SUFFIX,jianshu.com
- DOMAIN-SUFFIX,jianshu.io
- DOMAIN-SUFFIX,jidian.im
- DOMAIN-SUFFIX,kaiyanapp.com
- DOMAIN-SUFFIX,kaspersky-labs.com
- DOMAIN-SUFFIX,keepcdn.com
- DOMAIN-SUFFIX,kkmh.com
- DOMAIN-SUFFIX,lanzous.com
- DOMAIN-SUFFIX,luojilab.com
- DOMAIN-SUFFIX,maoyan.com
- DOMAIN-SUFFIX,maoyun.tv
- DOMAIN-SUFFIX,mls-cdn.com
- DOMAIN-SUFFIX,mobike.com
- DOMAIN-SUFFIX,moke.com
- DOMAIN-SUFFIX,mubu.com
- DOMAIN-SUFFIX,myzaker.com
- DOMAIN-SUFFIX,nim-lang-cn.org
- DOMAIN-SUFFIX,ntp.org
- DOMAIN-SUFFIX,nvidia.com
- DOMAIN-SUFFIX,oracle.com
- DOMAIN-SUFFIX,plex.tv
- DOMAIN-SUFFIX,qidian.com
- DOMAIN-SUFFIX,qweather.com
- DOMAIN-SUFFIX,qyer.com
- DOMAIN-SUFFIX,qyerstatic.com
- DOMAIN-SUFFIX,raychase.net
- DOMAIN-SUFFIX,ronghub.com
- DOMAIN-SUFFIX,ruguoapp.com
- DOMAIN-SUFFIX,sankuai.com
- DOMAIN-SUFFIX,scomper.me
- DOMAIN-SUFFIX,shouqianba.com
- DOMAIN-SUFFIX,sm.ms
- DOMAIN-SUFFIX,smzdm.com
- DOMAIN-SUFFIX,snapdrop.net
- DOMAIN-SUFFIX,snwx.com
- DOMAIN-SUFFIX,s-reader.com
- DOMAIN-SUFFIX,sspai.com
- DOMAIN-SUFFIX,subhd.tv
- DOMAIN-SUFFIX,takungpao.com
- DOMAIN-SUFFIX,teamviewer.com
- DOMAIN-SUFFIX,tianyancha.com
- DOMAIN-SUFFIX,tophub.today
- DOMAIN-SUFFIX,uning.com
- DOMAIN-SUFFIX,weather.com
- DOMAIN-SUFFIX,weico.cc
- DOMAIN-SUFFIX,weidian.com
- DOMAIN-SUFFIX,xiachufang.com
- DOMAIN-SUFFIX,xiaoka.tv
- DOMAIN-SUFFIX,ximalaya.com
- DOMAIN-SUFFIX,xinhuanet.com
- DOMAIN-SUFFIX,xmcdn.com
- DOMAIN-SUFFIX,yangkeduo.com
- DOMAIN-SUFFIX,yizhibo.com
- DOMAIN-SUFFIX,zhangzishi.cc
- DOMAIN-SUFFIX,zhihu.com
- DOMAIN-SUFFIX,zhihuishu.com
- DOMAIN-SUFFIX,zhimg.com
- DOMAIN-SUFFIX,zhuihd.com
- DOMAIN,download.jetbrains.com
- DOMAIN,images-cn.ssl-images-amazon.com

View File

@ -1,622 +0,0 @@
payload:
# (DNS Cache Pollution)
# > Amazon
- DOMAIN-SUFFIX,amazon.co.jp
- DOMAIN,d3c33hcgiwev3.cloudfront.net
- DOMAIN,payments-jp.amazon.com
- DOMAIN,s3-ap-northeast-1.amazonaws.com
- DOMAIN,s3-ap-southeast-2.amazonaws.com
# > Akamai
- DOMAIN,a248.e.akamai.net
- DOMAIN,a771.dscq.akamai.net
# > Apple
- DOMAIN,testflight.apple.com
# > Crypto
- DOMAIN-SUFFIX,aex.com
- DOMAIN-SUFFIX,bibox.com
- DOMAIN-SUFFIX,binance.cc
- DOMAIN-SUFFIX,binance.com
- DOMAIN-SUFFIX,binance.us
- DOMAIN-SUFFIX,bitcointalk.org
- DOMAIN-SUFFIX,bitfinex.com
- DOMAIN-SUFFIX,bithumb.com
- DOMAIN-SUFFIX,bitmex.com
- DOMAIN-SUFFIX,bitstamp.net
- DOMAIN-SUFFIX,bittrex.com
- DOMAIN-SUFFIX,bybit.com
- DOMAIN-SUFFIX,coinbase.com
- DOMAIN-SUFFIX,coincheck.com
- DOMAIN-SUFFIX,coingecko.com
- DOMAIN-SUFFIX,coinmarketcap.com
- DOMAIN-SUFFIX,coinone.co.kr
- DOMAIN-SUFFIX,ftx.com
- DOMAIN-SUFFIX,gate.io
- DOMAIN-SUFFIX,gemini.com
- DOMAIN-SUFFIX,huobi.com
- DOMAIN-SUFFIX,korbit.co.kr
- DOMAIN-SUFFIX,kraken.com
- DOMAIN-SUFFIX,kucoin.com
- DOMAIN-SUFFIX,liquid.com
- DOMAIN-SUFFIX,okex.com
- DOMAIN-SUFFIX,poloniex.com
- DOMAIN-SUFFIX,uniswap.org
- DOMAIN-SUFFIX,zb.com
# > Discord
- DOMAIN-SUFFIX,discord.com
- DOMAIN-SUFFIX,discordapp.com
- DOMAIN-SUFFIX,discordapp.net
# > Dropbox
- DOMAIN-SUFFIX,dropbox.com
- DOMAIN-SUFFIX,dropboxapi.com
- DOMAIN-SUFFIX,dropboxusercontent.com
# > Facebook
- DOMAIN-SUFFIX,cdninstagram.com
- DOMAIN-SUFFIX,facebook.com
- DOMAIN-SUFFIX,facebook.net
- DOMAIN-SUFFIX,fb.com
- DOMAIN-SUFFIX,fb.me
- DOMAIN-SUFFIX,fbaddins.com
- DOMAIN-SUFFIX,fbcdn.net
- DOMAIN-SUFFIX,fbsbx.com
- DOMAIN-SUFFIX,fbworkmail.com
- DOMAIN-SUFFIX,instagram.com
- DOMAIN-SUFFIX,m.me
- DOMAIN-SUFFIX,messenger.com
- DOMAIN-SUFFIX,oculus.com
- DOMAIN-SUFFIX,oculuscdn.com
- DOMAIN-SUFFIX,rocksdb.org
- DOMAIN-SUFFIX,whatsapp.com
- DOMAIN-SUFFIX,whatsapp.net
# > Github
- DOMAIN-SUFFIX,github.com
- DOMAIN-SUFFIX,github.io
- DOMAIN-SUFFIX,githubusercontent.com
# > Google
- DOMAIN-SUFFIX,appspot.com
- DOMAIN-SUFFIX,blogger.com
- DOMAIN-SUFFIX,getoutline.org
- DOMAIN-SUFFIX,gvt0.com
- DOMAIN-SUFFIX,gvt1.com
- DOMAIN-SUFFIX,gvt3.com
- DOMAIN-SUFFIX,xn--ngstr-lra8j.com
- DOMAIN-SUFFIX,ytimg.com
- DOMAIN-KEYWORD,google
- DOMAIN-KEYWORD,.blogspot.
# > Line
- DOMAIN-SUFFIX,line.me
- DOMAIN-SUFFIX,line-apps.com
- DOMAIN-SUFFIX,line-scdn.net
- DOMAIN-SUFFIX,naver.jp
- IP-CIDR,103.2.30.0/23,no-resolve
- IP-CIDR,125.209.208.0/20,no-resolve
- IP-CIDR,147.92.128.0/17,no-resolve
- IP-CIDR,203.104.144.0/21,no-resolve
# > Microsoft
- DOMAIN-SUFFIX,aka.ms
- DOMAIN-SUFFIX,onedrive.live.com
- DOMAIN-SUFFIX,streaming.mediaservices.windows.net
- DOMAIN,assets1.xboxlive.com
- DOMAIN,assets2.xboxlive.com
- DOMAIN,az416426.vo.msecnd.net
- DOMAIN,az668014.vo.msecnd.net
# > The New York Times
- DOMAIN-SUFFIX,nyt.com
- DOMAIN-SUFFIX,nytchina.com
- DOMAIN-SUFFIX,nytcn.me
- DOMAIN-SUFFIX,nytco.com
- DOMAIN-SUFFIX,nytimes.com
- DOMAIN-SUFFIX,nytimg.com
- DOMAIN-SUFFIX,nytlog.com
- DOMAIN-SUFFIX,nytstyle.com
# > Pinterest
- DOMAIN-SUFFIX,pinterest.at
- DOMAIN-SUFFIX,pinterest.ca
- DOMAIN-SUFFIX,pinterest.co.uk
- DOMAIN-SUFFIX,pinterest.com
- DOMAIN-SUFFIX,pinterest.de
- DOMAIN-SUFFIX,pinterest.fr
- DOMAIN-SUFFIX,pinterest.jp
- DOMAIN-SUFFIX,pinterest.se
# > pixiv
- DOMAIN-SUFFIX,pixiv.net
- DOMAIN-SUFFIX,pixiv.org
- DOMAIN-SUFFIX,pximg.net
# > Reddit
- DOMAIN-SUFFIX,redd.it
- DOMAIN-SUFFIX,reddit.com
- DOMAIN-SUFFIX,redditmedia.com
# > Telegram
- DOMAIN-SUFFIX,telegra.ph
- DOMAIN-SUFFIX,telegram.org
- IP-CIDR,91.108.4.0/22,no-resolve
- IP-CIDR,91.108.8.0/22,no-resolve
- IP-CIDR,91.108.12.0/22,no-resolve
- IP-CIDR,91.108.16.0/22,no-resolve
- IP-CIDR,91.108.20.0/22,no-resolve
- IP-CIDR,91.108.56.0/22,no-resolve
- IP-CIDR,91.105.192.0/23,no-resolve
- IP-CIDR,149.154.160.0/20,no-resolve
- IP-CIDR,185.76.151.0/24,no-resolve
- IP-CIDR,2001:b28:f23d::/48,no-resolve
- IP-CIDR,2001:b28:f23f::/48,no-resolve
- IP-CIDR,2001:67c:4e8::/48,no-resolve
- IP-CIDR,2001:b28:f23c::/48,no-resolve
- IP-CIDR,2a0a:f280::/32,no-resolve
# > Twitter
- DOMAIN-SUFFIX,pscp.tv
- DOMAIN-SUFFIX,periscope.tv
- DOMAIN-SUFFIX,t.co
- DOMAIN-SUFFIX,twimg.co
- DOMAIN-SUFFIX,twimg.com
- DOMAIN-SUFFIX,twitpic.com
- DOMAIN-SUFFIX,twitter.com
- DOMAIN-SUFFIX,vine.co
# > Wikimedia Foundation
- DOMAIN-SUFFIX,wikileaks.org
- DOMAIN-SUFFIX,wikimapia.org
- DOMAIN-SUFFIX,wikimedia.org
- DOMAIN-SUFFIX,wikinews.org
- DOMAIN-SUFFIX,wikipedia.org
- DOMAIN-SUFFIX,wikiquote.org
# > Others
- DOMAIN-SUFFIX,4shared.com
- DOMAIN-SUFFIX,9cache.com
- DOMAIN-SUFFIX,9gag.com
- DOMAIN-SUFFIX,abc.com
- DOMAIN-SUFFIX,abc.net.au
- DOMAIN-SUFFIX,abebooks.com
- DOMAIN-SUFFIX,ao3.org
- DOMAIN-SUFFIX,apigee.com
- DOMAIN-SUFFIX,apkcombo.com
- DOMAIN-SUFFIX,apk-dl.com
- DOMAIN-SUFFIX,apkfind.com
- DOMAIN-SUFFIX,apkmirror.com
- DOMAIN-SUFFIX,apkmonk.com
- DOMAIN-SUFFIX,apkpure.com
- DOMAIN-SUFFIX,aptoide.com
- DOMAIN-SUFFIX,archive.is
- DOMAIN-SUFFIX,archive.org
- DOMAIN-SUFFIX,archiveofourown.com
- DOMAIN-SUFFIX,archiveofourown.org
- DOMAIN-SUFFIX,arte.tv
- DOMAIN-SUFFIX,artstation.com
- DOMAIN-SUFFIX,arukas.io
- DOMAIN-SUFFIX,ask.com
- DOMAIN-SUFFIX,avg.com
- DOMAIN-SUFFIX,avgle.com
- DOMAIN-SUFFIX,badoo.com
- DOMAIN-SUFFIX,bandcamp.com
- DOMAIN-SUFFIX,bandwagonhost.com
- DOMAIN-SUFFIX,bangkokpost.com
- DOMAIN-SUFFIX,bbc.com
- DOMAIN-SUFFIX,behance.net
- DOMAIN-SUFFIX,biggo.com.tw
- DOMAIN-SUFFIX,bit.ly
- DOMAIN-SUFFIX,bloglovin.com
- DOMAIN-SUFFIX,bloomberg.cn
- DOMAIN-SUFFIX,bloomberg.com
- DOMAIN-SUFFIX,blubrry.com
- DOMAIN-SUFFIX,book.com.tw
- DOMAIN-SUFFIX,booklive.jp
- DOMAIN-SUFFIX,books.com.tw
- DOMAIN-SUFFIX,boslife.net
- DOMAIN-SUFFIX,box.com
- DOMAIN-SUFFIX,brave.com
- DOMAIN-SUFFIX,businessinsider.com
- DOMAIN-SUFFIX,buzzfeed.com
- DOMAIN-SUFFIX,bwh1.net
- DOMAIN-SUFFIX,castbox.fm
- DOMAIN-SUFFIX,cbc.ca
- DOMAIN-SUFFIX,cdw.com
- DOMAIN-SUFFIX,change.org
- DOMAIN-SUFFIX,channelnewsasia.com
- DOMAIN-SUFFIX,ck101.com
- DOMAIN-SUFFIX,clarionproject.org
- DOMAIN-SUFFIX,cloudcone.com
- DOMAIN-SUFFIX,clubhouseapi.com
- DOMAIN-SUFFIX,clyp.it
- DOMAIN-SUFFIX,cna.com.tw
- DOMAIN-SUFFIX,comparitech.com
- DOMAIN-SUFFIX,conoha.jp
- DOMAIN-SUFFIX,crucial.com
- DOMAIN-SUFFIX,cts.com.tw
- DOMAIN-SUFFIX,cw.com.tw
- DOMAIN-SUFFIX,cyberctm.com
- DOMAIN-SUFFIX,cyclingnews.com
- DOMAIN-SUFFIX,dailymotion.com
- DOMAIN-SUFFIX,dailyview.tw
- DOMAIN-SUFFIX,dandanzan.com
- DOMAIN-SUFFIX,daum.net
- DOMAIN-SUFFIX,daumcdn.net
- DOMAIN-SUFFIX,dcard.tw
- DOMAIN-SUFFIX,deadline.com
- DOMAIN-SUFFIX,deepdiscount.com
- DOMAIN-SUFFIX,depositphotos.com
- DOMAIN-SUFFIX,deviantart.com
- DOMAIN-SUFFIX,disconnect.me
- DOMAIN-SUFFIX,disqus.com
- DOMAIN-SUFFIX,dlercloud.com
- DOMAIN-SUFFIX,dmhy.org
- DOMAIN-SUFFIX,dns2go.com
- DOMAIN-SUFFIX,dowjones.com
- DOMAIN-SUFFIX,duckduckgo.com
- DOMAIN-SUFFIX,duyaoss.com
- DOMAIN-SUFFIX,dw.com
- DOMAIN-SUFFIX,dynu.com
- DOMAIN-SUFFIX,earthcam.com
- DOMAIN-SUFFIX,ebookservice.tw
- DOMAIN-SUFFIX,economist.com
- DOMAIN-SUFFIX,edgecastcdn.net
- DOMAIN-SUFFIX,edx-cdn.org
- DOMAIN-SUFFIX,elpais.com
- DOMAIN-SUFFIX,enanyang.my
- DOMAIN-SUFFIX,encyclopedia.com
- DOMAIN-SUFFIX,esoir.be
- DOMAIN-SUFFIX,etherscan.io
- DOMAIN-SUFFIX,euronews.com
- DOMAIN-SUFFIX,evozi.com
- DOMAIN-SUFFIX,exblog.jp
- DOMAIN-SUFFIX,feeder.co
- DOMAIN-SUFFIX,feedly.com
- DOMAIN-SUFFIX,feedx.net
- DOMAIN-SUFFIX,firech.at
- DOMAIN-SUFFIX,flickr.com
- DOMAIN-SUFFIX,flipboard.com
- DOMAIN-SUFFIX,flitto.com
- DOMAIN-SUFFIX,foreignpolicy.com
- DOMAIN-SUFFIX,fortawesome.com
- DOMAIN-SUFFIX,freetls.fastly.net
- DOMAIN-SUFFIX,friday.tw
- DOMAIN-SUFFIX,ft.com
- DOMAIN-SUFFIX,ftchinese.com
- DOMAIN-SUFFIX,ftimg.net
- DOMAIN-SUFFIX,genius.com
- DOMAIN-SUFFIX,getlantern.org
- DOMAIN-SUFFIX,getsync.com
- DOMAIN-SUFFIX,globalvoices.org
- DOMAIN-SUFFIX,goo.ne.jp
- DOMAIN-SUFFIX,goodreads.com
- DOMAIN-SUFFIX,gov.tw
- DOMAIN-SUFFIX,gravatar.com
- DOMAIN-SUFFIX,greatfire.org
- DOMAIN-SUFFIX,gumroad.com
- DOMAIN-SUFFIX,heroku.com
- DOMAIN-SUFFIX,hightail.com
- DOMAIN-SUFFIX,hk01.com
- DOMAIN-SUFFIX,hkbf.org
- DOMAIN-SUFFIX,hkbookcity.com
- DOMAIN-SUFFIX,hkej.com
- DOMAIN-SUFFIX,hket.com
- DOMAIN-SUFFIX,hootsuite.com
- DOMAIN-SUFFIX,hudson.org
- DOMAIN-SUFFIX,huffpost.com
- DOMAIN-SUFFIX,hyread.com.tw
- DOMAIN-SUFFIX,ibtimes.com
- DOMAIN-SUFFIX,i-cable.com
- DOMAIN-SUFFIX,icij.org
- DOMAIN-SUFFIX,icoco.com
- DOMAIN-SUFFIX,imgur.com
- DOMAIN-SUFFIX,independent.co.uk
- DOMAIN-SUFFIX,initiummall.com
- DOMAIN-SUFFIX,inoreader.com
- DOMAIN-SUFFIX,insecam.org
- DOMAIN-SUFFIX,ipfs.io
- DOMAIN-SUFFIX,issuu.com
- DOMAIN-SUFFIX,istockphoto.com
- DOMAIN-SUFFIX,japantimes.co.jp
- DOMAIN-SUFFIX,jiji.com
- DOMAIN-SUFFIX,jinx.com
- DOMAIN-SUFFIX,jkforum.net
- DOMAIN-SUFFIX,joinclubhouse.com
- DOMAIN-SUFFIX,joinmastodon.org
- DOMAIN-SUFFIX,justmysocks.net
- DOMAIN-SUFFIX,justpaste.it
- DOMAIN-SUFFIX,kadokawa.co.jp
- DOMAIN-SUFFIX,kakao.com
- DOMAIN-SUFFIX,kakaocorp.com
- DOMAIN-SUFFIX,kik.com
- DOMAIN-SUFFIX,kingkong.com.tw
- DOMAIN-SUFFIX,knowyourmeme.com
- DOMAIN-SUFFIX,kobo.com
- DOMAIN-SUFFIX,kobobooks.com
- DOMAIN-SUFFIX,kodingen.com
- DOMAIN-SUFFIX,lemonde.fr
- DOMAIN-SUFFIX,lepoint.fr
- DOMAIN-SUFFIX,lihkg.com
- DOMAIN-SUFFIX,limbopro.xyz
- DOMAIN-SUFFIX,listennotes.com
- DOMAIN-SUFFIX,livestream.com
- DOMAIN-SUFFIX,logimg.jp
- DOMAIN-SUFFIX,logmein.com
- DOMAIN-SUFFIX,mail.ru
- DOMAIN-SUFFIX,mailchimp.com
- DOMAIN-SUFFIX,marc.info
- DOMAIN-SUFFIX,matters.news
- DOMAIN-SUFFIX,maying.co
- DOMAIN-SUFFIX,medium.com
- DOMAIN-SUFFIX,mega.nz
- DOMAIN-SUFFIX,mergersandinquisitions.com
- DOMAIN-SUFFIX,mingpao.com
- DOMAIN-SUFFIX,mixi.jp
- DOMAIN-SUFFIX,mixlr.com
- DOMAIN-SUFFIX,mobile01.com
- DOMAIN-SUFFIX,mubi.com
- DOMAIN-SUFFIX,myspace.com
- DOMAIN-SUFFIX,myspacecdn.com
- DOMAIN-SUFFIX,nanyang.com
- DOMAIN-SUFFIX,nationalinterest.org
- DOMAIN-SUFFIX,naver.com
- DOMAIN-SUFFIX,nbcnews.com
- DOMAIN-SUFFIX,ndr.de
- DOMAIN-SUFFIX,neowin.net
- DOMAIN-SUFFIX,newstapa.org
- DOMAIN-SUFFIX,nexitally.com
- DOMAIN-SUFFIX,nhk.or.jp
- DOMAIN-SUFFIX,nii.ac.jp
- DOMAIN-SUFFIX,nikkei.com
- DOMAIN-SUFFIX,nitter.net
- DOMAIN-SUFFIX,nofile.io
- DOMAIN-SUFFIX,notion.so
- DOMAIN-SUFFIX,now.com
- DOMAIN-SUFFIX,nrk.no
- DOMAIN-SUFFIX,nuget.org
- DOMAIN-SUFFIX,nyaa.si
- DOMAIN-SUFFIX,ok.ru
- DOMAIN-SUFFIX,on.cc
- DOMAIN-SUFFIX,orientaldaily.com.my
- DOMAIN-SUFFIX,overcast.fm
- DOMAIN-SUFFIX,paltalk.com
- DOMAIN-SUFFIX,parsevideo.com
- DOMAIN-SUFFIX,pawoo.net
- DOMAIN-SUFFIX,pbxes.com
- DOMAIN-SUFFIX,pcdvd.com.tw
- DOMAIN-SUFFIX,pchome.com.tw
- DOMAIN-SUFFIX,pcloud.com
- DOMAIN-SUFFIX,peing.net
- DOMAIN-SUFFIX,picacomic.com
- DOMAIN-SUFFIX,pinimg.com
- DOMAIN-SUFFIX,player.fm
- DOMAIN-SUFFIX,plurk.com
- DOMAIN-SUFFIX,po18.tw
- DOMAIN-SUFFIX,potato.im
- DOMAIN-SUFFIX,potatso.com
- DOMAIN-SUFFIX,prism-break.org
- DOMAIN-SUFFIX,proxifier.com
- DOMAIN-SUFFIX,pt.im
- DOMAIN-SUFFIX,pts.org.tw
- DOMAIN-SUFFIX,pubu.com.tw
- DOMAIN-SUFFIX,pubu.tw
- DOMAIN-SUFFIX,pureapk.com
- DOMAIN-SUFFIX,quora.com
- DOMAIN-SUFFIX,quoracdn.net
- DOMAIN-SUFFIX,qz.com
- DOMAIN-SUFFIX,radio.garden
- DOMAIN-SUFFIX,rakuten.co.jp
- DOMAIN-SUFFIX,rarbgprx.org
- DOMAIN-SUFFIX,reabble.com
- DOMAIN-SUFFIX,readingtimes.com.tw
- DOMAIN-SUFFIX,readmoo.com
- DOMAIN-SUFFIX,redbubble.com
- DOMAIN-SUFFIX,resilio.com
- DOMAIN-SUFFIX,reuters.com
- DOMAIN-SUFFIX,reutersmedia.net
- DOMAIN-SUFFIX,rfi.fr
- DOMAIN-SUFFIX,roadshow.hk
- DOMAIN-SUFFIX,rsshub.app
- DOMAIN-SUFFIX,scmp.com
- DOMAIN-SUFFIX,scribd.com
- DOMAIN-SUFFIX,seatguru.com
- DOMAIN-SUFFIX,shadowsocks.org
- DOMAIN-SUFFIX,shindanmaker.com
- DOMAIN-SUFFIX,shopee.tw
- DOMAIN-SUFFIX,signal.org
- DOMAIN-SUFFIX,sina.com.hk
- DOMAIN-SUFFIX,slideshare.net
- DOMAIN-SUFFIX,softfamous.com
- DOMAIN-SUFFIX,spiegel.de
- DOMAIN-SUFFIX,startpage.com
- DOMAIN-SUFFIX,steamcommunity.com
- DOMAIN-SUFFIX,steemit.com
- DOMAIN-SUFFIX,steemitwallet.com
- DOMAIN-SUFFIX,straitstimes.com
- DOMAIN-SUFFIX,streamable.com
- DOMAIN-SUFFIX,streema.com
- DOMAIN-SUFFIX,substack.com
- DOMAIN-SUFFIX,t66y.com
- DOMAIN-SUFFIX,tapatalk.com
- DOMAIN-SUFFIX,teco-hk.org
- DOMAIN-SUFFIX,teco-mo.org
- DOMAIN-SUFFIX,teddysun.com
- DOMAIN-SUFFIX,textnow.me
- DOMAIN-SUFFIX,theguardian.com
- DOMAIN-SUFFIX,theinitium.com
- DOMAIN-SUFFIX,themoviedb.org
- DOMAIN-SUFFIX,thetvdb.com
- DOMAIN-SUFFIX,time.com
- DOMAIN-SUFFIX,tineye.com
- DOMAIN-SUFFIX,tiny.cc
- DOMAIN-SUFFIX,tinyurl.com
- DOMAIN-SUFFIX,torproject.org
- DOMAIN-SUFFIX,tradingview.com
- DOMAIN-SUFFIX,tumblr.com
- DOMAIN-SUFFIX,turbobit.net
- DOMAIN-SUFFIX,tutanota.com
- DOMAIN-SUFFIX,tvboxnow.com
- DOMAIN-SUFFIX,udn.com
- DOMAIN-SUFFIX,unseen.is
- DOMAIN-SUFFIX,upmedia.mg
- DOMAIN-SUFFIX,uptodown.com
- DOMAIN-SUFFIX,urbandictionary.com
- DOMAIN-SUFFIX,ustream.tv
- DOMAIN-SUFFIX,uwants.com
- DOMAIN-SUFFIX,v2ex.com
- DOMAIN-SUFFIX,v2fly.org
- DOMAIN-SUFFIX,v2ray.com
- DOMAIN-SUFFIX,viber.com
- DOMAIN-SUFFIX,videopress.com
- DOMAIN-SUFFIX,vimeo.com
- DOMAIN-SUFFIX,voachinese.com
- DOMAIN-SUFFIX,voanews.com
- DOMAIN-SUFFIX,voxer.com
- DOMAIN-SUFFIX,vzw.com
- DOMAIN-SUFFIX,w3schools.com
- DOMAIN-SUFFIX,washingtonpost.com
- DOMAIN-SUFFIX,wattpad.com
- DOMAIN-SUFFIX,whoer.net
- DOMAIN-SUFFIX,wikiwand.com
- DOMAIN-SUFFIX,winudf.com
- DOMAIN-SUFFIX,wire.com
- DOMAIN-SUFFIX,wn.com
- DOMAIN-SUFFIX,wordpress.com
- DOMAIN-SUFFIX,worldcat.org
- DOMAIN-SUFFIX,wsj.com
- DOMAIN-SUFFIX,wsj.net
- DOMAIN-SUFFIX,xhamster.com
- DOMAIN-SUFFIX,xn--90wwvt03e.com
- DOMAIN-SUFFIX,xn--i2ru8q2qg.com
- DOMAIN-SUFFIX,xnxx.com
- DOMAIN-SUFFIX,xvideos.com
- DOMAIN-SUFFIX,yadi.sk
- DOMAIN-SUFFIX,yahoo.com
- DOMAIN-SUFFIX,yandex.ru
- DOMAIN-SUFFIX,ycombinator.com
- DOMAIN-SUFFIX,yesasia.com
- DOMAIN-SUFFIX,yes-news.com
- DOMAIN-SUFFIX,yomiuri.co.jp
- DOMAIN-SUFFIX,you-get.org
- DOMAIN-SUFFIX,zaobao.com
- DOMAIN-SUFFIX,zello.com
- DOMAIN-SUFFIX,zeronet.io
- DOMAIN-SUFFIX,z-lib.org
- DOMAIN-SUFFIX,zoom.us
- DOMAIN,cc.tvbs.com.tw
- DOMAIN,clubhouse.pubnubapi.com
- DOMAIN,ocsp.int-x3.letsencrypt.org
- DOMAIN,us.weibo.com
- DOMAIN-SUFFIX,edu
- DOMAIN-SUFFIX,gov
- DOMAIN-SUFFIX,mil
# (IP Blackhole)
# > Google
- DOMAIN-SUFFIX,abc.xyz
- DOMAIN-SUFFIX,advertisercommunity.com
- DOMAIN-SUFFIX,ampproject.org
- DOMAIN-SUFFIX,android.com
- DOMAIN-SUFFIX,androidify.com
- DOMAIN-SUFFIX,autodraw.com
- DOMAIN-SUFFIX,capitalg.com
- DOMAIN-SUFFIX,certificate-transparency.org
- DOMAIN-SUFFIX,chrome.com
- DOMAIN-SUFFIX,chromeexperiments.com
- DOMAIN-SUFFIX,chromestatus.com
- DOMAIN-SUFFIX,chromium.org
- DOMAIN-SUFFIX,creativelab5.com
- DOMAIN-SUFFIX,debug.com
- DOMAIN-SUFFIX,deepmind.com
- DOMAIN-SUFFIX,dialogflow.com
- DOMAIN-SUFFIX,firebaseio.com
- DOMAIN-SUFFIX,getmdl.io
- DOMAIN-SUFFIX,ggpht.com
- DOMAIN-SUFFIX,gmail.com
- DOMAIN-SUFFIX,gmodules.com
- DOMAIN-SUFFIX,godoc.org
- DOMAIN-SUFFIX,gstatic.com
- DOMAIN-SUFFIX,gv.com
- DOMAIN-SUFFIX,gwtproject.org
- DOMAIN-SUFFIX,itasoftware.com
- DOMAIN-SUFFIX,madewithcode.com
- DOMAIN-SUFFIX,material.io
- DOMAIN-SUFFIX,page.link
- DOMAIN-SUFFIX,polymer-project.org
- DOMAIN-SUFFIX,recaptcha.net
- DOMAIN-SUFFIX,shattered.io
- DOMAIN-SUFFIX,synergyse.com
- DOMAIN-SUFFIX,telephony.goog
- DOMAIN-SUFFIX,tensorflow.org
- DOMAIN-SUFFIX,tfhub.dev
- DOMAIN-SUFFIX,tiltbrush.com
- DOMAIN-SUFFIX,waveprotocol.org
- DOMAIN-SUFFIX,waymo.com
- DOMAIN-SUFFIX,webmproject.org
- DOMAIN-SUFFIX,webrtc.org
- DOMAIN-SUFFIX,whatbrowser.org
- DOMAIN-SUFFIX,widevine.com
- DOMAIN-SUFFIX,x.company
- DOMAIN-SUFFIX,youtu.be
- DOMAIN-SUFFIX,yt.be
- DOMAIN-SUFFIX,ytimg.com
# > Telegram
- DOMAIN-SUFFIX,t.me
- DOMAIN-SUFFIX,tdesktop.com
- DOMAIN-SUFFIX,telegram.me
- DOMAIN-SUFFIX,telesco.pe
# > Facebook
- DOMAIN-KEYWORD,.facebook.
- DOMAIN-SUFFIX,facebookmail.com
# > Others
- DOMAIN-SUFFIX,noxinfluencer.com
- DOMAIN-SUFFIX,smartmailcloud.com
- DOMAIN-SUFFIX,weebly.com
- DOMAIN-SUFFIX,twitter.jp
# (Region-Restricted Access Denied)
# ---(Apple)---
- DOMAIN-SUFFIX,appsto.re
- DOMAIN,books.itunes.apple.com
- DOMAIN-SUFFIX,smoot.apple.com
- DOMAIN,beta.music.apple.com
- DOMAIN,lookup-api.apple.com
# > Web Preview
- DOMAIN,apps.apple.com
- DOMAIN,books.apple.com
- DOMAIN,itunes.apple.com
- DOMAIN,tv.apple.com
# > Podcasts
- DOMAIN,amp-api.podcasts.apple.com
- DOMAIN,bookkeeper.itunes.apple.com
# > News
- DOMAIN,gateway.icloud.com
- DOMAIN-SUFFIX,apple.news
- DOMAIN,news-assets.apple.com
- DOMAIN,news-client.apple.com
- DOMAIN,news-client-search.apple.com
- DOMAIN,news-edge.apple.com
- DOMAIN,news-events.apple.com
- DOMAIN,apple.comscoreresearch.com
# ------
# Google
- DOMAIN-SUFFIX,go.dev
- DOMAIN-SUFFIX,golang.org
# > Others
- DOMAIN-SUFFIX,aicoin.com
- DOMAIN-SUFFIX,aimoon.com
- DOMAIN-SUFFIX,bing.com
- DOMAIN-SUFFIX,cccat.io
- DOMAIN-SUFFIX,dubox.com
- DOMAIN-SUFFIX,duboxcdn.com
- DOMAIN-SUFFIX,ifixit.com
- DOMAIN-SUFFIX,mangakakalot.com
- DOMAIN-SUFFIX,shopeemobile.com
- DOMAIN-SUFFIX,sushi.com
# (Network Jitter)
# > Apple
- DOMAIN,appleid.apple.com
- DOMAIN,developer.apple.com
- DOMAIN,www.icloud.com
- DOMAIN,ocsp.apple.com
# > DigiCert
- DOMAIN,cacerts.digicert.com
- DOMAIN,crl3.digicert.com
- DOMAIN,crl4.digicert.com
- DOMAIN,ocsp.digicert.com
# > Others
- DOMAIN-SUFFIX,cloudcone.com.cn
- DOMAIN-SUFFIX,inkbunny.net
- DOMAIN-SUFFIX,metapix.net
- DOMAIN-SUFFIX,s3.amazonaws.com
- DOMAIN-SUFFIX,zaobao.com.sg
- DOMAIN,international-gfe.download.nvidia.com

View File

@ -0,0 +1,47 @@
payload:
# > ChatGPT
- DOMAIN-SUFFIX,ai.com
- DOMAIN-SUFFIX,chatgpt.com
- DOMAIN-SUFFIX,openai.com
# > Chat GPT API & CDN
- DOMAIN-SUFFIX,cdn.oaistatic.com
- DOMAIN,chat.openai.com.cdn.cloudflare.net
- DOMAIN,openaiapi-site.azureedge.net
- DOMAIN,openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net
- DOMAIN,openaicomproductionae4b.blob.core.windows.net
- DOMAIN,production-openaicom-storage.azureedge.net
- DOMAIN-SUFFIX,oaistatic.com
- DOMAIN-SUFFIX,oaiusercontent.com
- DOMAIN-SUFFIX,o33249.ingest.sentry.io
# > Claude
- DOMAIN-SUFFIX,anthropic.com
- DOMAIN-SUFFIX,claude.ai
# > Copilot
- DOMAIN-SUFFIX,bing.com
- DOMAIN-SUFFIX,bingapis.com
- DOMAIN-SUFFIX,microsoft-falcon.io
- DOMAIN-SUFFIX,microsoftapp.net
- DOMAIN,api.msn.com
- DOMAIN,assets.msn.com
- DOMAIN,copilot.microsoft.com
- DOMAIN,location.microsoft.com
- DOMAIN,login.microsoftonline.com
- DOMAIN,self.events.data.microsoft.com
# > Gemini
- DOMAIN-SUFFIX,gemini.google.com
- DOMAIN,apis.google.com
- DOMAIN,colab.research.google.com
- DOMAIN,content-developerprofiles-pa.googleapis.com
- DOMAIN,generativelanguage.googleapis.com
# > Meta AI
- DOMAIN-SUFFIX,meta.ai
# > Perplexity AI
- DOMAIN-SUFFIX,perplexity.ai

View File

@ -1,332 +0,0 @@
payload:
# Streaming Media
# (Live)
# > Twitch
- PROCESS-NAME,tv.twitch.android.app
- DOMAIN-SUFFIX,ext-twitch.tv
- DOMAIN-SUFFIX,jtvnw.net
- DOMAIN-SUFFIX,ttvnw.net
- DOMAIN-SUFFIX,twitch.tv
- DOMAIN-SUFFIX,twitchcdn.net
- DOMAIN-SUFFIX,twitch-ext.rootonline.de
# (Music)
# > Deezer
- PROCESS-NAME,deezer.android.app
- DOMAIN-SUFFIX,deezer.com
- DOMAIN-SUFFIX,dzcdn.net
# > JOOX
- PROCESS-NAME,com.tencent.ibg.joox
- PROCESS-NAME,com.tencent.ibg.jooxtv
- DOMAIN-SUFFIX,joox.com
- DOMAIN-KEYWORD,jooxweb-api
# > KKBOX
- PROCESS-NAME,com.skysoft.kkbox.android
- DOMAIN-SUFFIX,kkbox.com
- DOMAIN-SUFFIX,kkbox.com.tw
- DOMAIN-SUFFIX,kfs.io
# > Pandora
- PROCESS-NAME,com.pandora.android
- DOMAIN-SUFFIX,pandora.com
# > SoundCloud
- PROCESS-NAME,com.soundcloud.android
- DOMAIN-SUFFIX,p-cdn.us
- DOMAIN-SUFFIX,sndcdn.com
- DOMAIN-SUFFIX,soundcloud.com
# > Spotify
- PROCESS-NAME,com.spotify.music
- DOMAIN-SUFFIX,pscdn.co
- DOMAIN-SUFFIX,scdn.co
- DOMAIN-SUFFIX,spotify.com
- DOMAIN-SUFFIX,spoti.fi
- DOMAIN-KEYWORD,spotify.com
- DOMAIN-KEYWORD,-spotify-com
# > TIDAL
- PROCESS-NAME,com.aspiro.tidal
- DOMAIN-SUFFIX,tidal.com
# > YouTubeMusic
- PROCESS-NAME,com.google.android.apps.youtube.music
- PROCESS-NAME,com.google.android.youtube.tvmusic
# (Podcast)
# > Himalaya
- PROCESS-NAME,com.ximalaya.ting.himalaya
- DOMAIN-SUFFIX,himalaya.com
# (Video)
# > AbemaTV
- PROCESS-NAME,tv.abema
- DOMAIN-SUFFIX,abema.io
- DOMAIN-SUFFIX,abema.tv
- DOMAIN-SUFFIX,ameba.jp
- DOMAIN-SUFFIX,hayabusa.io
- DOMAIN-KEYWORD,abematv.akamaized.net
# > All 4
- PROCESS-NAME,com.channel4.ondemand
- DOMAIN-SUFFIX,c4assets.com
- DOMAIN-SUFFIX,channel4.com
# > Amazon Prime Video
- PROCESS-NAME,com.amazon.avod.thirdp
- DOMAIN-SUFFIX,aiv-cdn.net
- DOMAIN-SUFFIX,aiv-delivery.net
- DOMAIN-SUFFIX,amazonvideo.com
- DOMAIN-SUFFIX,media-amazon.com
- DOMAIN-SUFFIX,primevideo.com
- DOMAIN-SUFFIX,pv-cdn.net
- DOMAIN,atv-ps.amazon.com
- DOMAIN,fls-na.amazon.com
- DOMAIN,avodmp4s3ww-a.akamaihd.net
- DOMAIN,d25xi40x97liuc.cloudfront.net
- DOMAIN,dmqdd6hw24ucf.cloudfront.net
- DOMAIN,dmqdd6hw24ucf.cloudfront.net
- DOMAIN,d22qjgkvxw22r6.cloudfront.net
- DOMAIN,d1v5ir2lpwr8os.cloudfront.net
- DOMAIN,d27xxe7juh1us6.cloudfront.net
# - DOMAIN,www.amazon.com
- DOMAIN-KEYWORD,avoddashs
# > Apple Music TV
- DOMAIN,tv.applemusic.com
# > Apple TV
- DOMAIN,linear.tv.apple.com
- DOMAIN,play-edge.itunes.apple.com
- DOMAIN,uts-api.itunes.apple.com
# > Bahamut
- PROCESS-NAME,tw.com.gamer.android.animad
- DOMAIN-SUFFIX,bahamut.com.tw
- DOMAIN-SUFFIX,gamer.com.tw
- DOMAIN,bahamut.akamaized.net
- DOMAIN,gamer-cds.cdn.hinet.net
- DOMAIN,gamer2-cds.cdn.hinet.net
# > BBC iPlayer
- PROCESS-NAME,bbc.iplayer.android
- DOMAIN-SUFFIX,bbc.co.uk
- DOMAIN-SUFFIX,bbci.co.uk
- DOMAIN-KEYWORD,bbcfmt
- DOMAIN-KEYWORD,uk-live
# > bilibili Intl
- PROCESS-NAME,com.bstar.intl
- DOMAIN-SUFFIX,biliintl.com
- DOMAIN,apm-misaka.biliapi.net
- DOMAIN,p.bstarstatic.com
- DOMAIN,p-bstarstatic.akamaized.net
- DOMAIN,upos-bstar-mirrorakam.akamaized.net
- DOMAIN,upos-bstar1-mirrorakam.akamaized.net
# > DAZN
- PROCESS-NAME,com.dazn
- DOMAIN-SUFFIX,dazn.com
- DOMAIN-SUFFIX,dazn-api.com
- DOMAIN-SUFFIX,dazndn.com
- DOMAIN-SUFFIX,indazn.com
- DOMAIN,d151l6v8er5bdm.cloudfront.net
- DOMAIN-KEYWORD,voddazn
# > discovery+
- PROCESS-NAME,com.discovery.discoveryplus.mobile
- DOMAIN-SUFFIX,disco-api.com
- DOMAIN-SUFFIX,discoveryplus.co.uk
- DOMAIN-SUFFIX,discoveryplus.com
- DOMAIN-SUFFIX,discoveryplus.in
- DOMAIN-SUFFIX,dnitv.com
# - DOMAIN,go-prod-vz.akamaized.net
- DOMAIN,x-default-stgec.uplynk.com
- DOMAIN-KEYWORD,discovery.uplynk.com
# > Disney+
- PROCESS-NAME,com.disney.disneyplus
- DOMAIN-SUFFIX,bamgrid.com
- DOMAIN-SUFFIX,disneyplus.com
- DOMAIN-SUFFIX,disney-plus.net
- DOMAIN-SUFFIX,disneystreaming.com
- DOMAIN-SUFFIX,dssott.com
- DOMAIN,cdn.registerdisney.go.com
# > DMM
- PROCESS-NAME,com.dmm.app.movieplayer
- DOMAIN-SUFFIX,dmm.co.jp
- DOMAIN-SUFFIX,dmm.com
- DOMAIN-SUFFIX,dmm-extension.com
# > encoreTVB
- PROCESS-NAME,com.tvbusa.encore
- DOMAIN-SUFFIX,encoretvb.com
- DOMAIN,edge.api.brightcove.com
- DOMAIN,bcbolt446c5271-a.akamaihd.net
# > HBO NOW & Max
- PROCESS-NAME,com.hbo.hbonow
- DOMAIN-SUFFIX,hbo.com
- DOMAIN-SUFFIX,hbogo.com
- DOMAIN-SUFFIX,hbonow.com
- DOMAIN-SUFFIX,hbomax.com
- DOMAIN-SUFFIX,hbomaxcdn.com
# > HBO Asia
- PROCESS-NAME,hk.hbo.hbogo
- DOMAIN-SUFFIX,hbogoasia.com
- DOMAIN-SUFFIX,hbogoasia.hk
- DOMAIN-KEYWORD,.hbogoasia.
- DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com
- DOMAIN,bcbolthboa-a.akamaihd.net
- DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net
- DOMAIN,dai3fd1oh325y.cloudfront.net
- DOMAIN,hboasia1-i.akamaihd.net
- DOMAIN,hboasia2-i.akamaihd.net
- DOMAIN,hboasia3-i.akamaihd.net
- DOMAIN,hboasia4-i.akamaihd.net
- DOMAIN,hboasia5-i.akamaihd.net
- DOMAIN,hboasialive.akamaized.net
- DOMAIN,hbogoprod-vod.akamaized.net
- DOMAIN,hbolb.onwardsmg.com
- DOMAIN,hbounify-prod.evergent.com
- DOMAIN,players.brightcove.net
- DOMAIN,s3-ap-southeast-1.amazonaws.com
# > 华文电视
- DOMAIN-SUFFIX,5itv.tv
- DOMAIN-SUFFIX,ocnttv.com
# > Hulu
- PROCESS-NAME,com.hulu.plus
- DOMAIN-SUFFIX,hulu.com
- DOMAIN-SUFFIX,huluim.com
- DOMAIN-SUFFIX,hulustream.com
# > Hulu / フールー
- PROCESS-NAME,jp.happyon.android
- DOMAIN-SUFFIX,happyon.jp
- DOMAIN-SUFFIX,hjholdings.jp
- DOMAIN-SUFFIX,hulu.jp
# > ITV
- PROCESS-NAME,air.ITVMobilePlayer
- DOMAIN-SUFFIX,itv.com
- DOMAIN-SUFFIX,itvstatic.com
- DOMAIN,itvpnpmobile-a.akamaihd.net
# > iQIYI
- DOMAIN-SUFFIX,iq.com
- DOMAIN,intl.iqiyi.com
- DOMAIN,intl-rcd.iqiyi.com
- DOMAIN,intl-subscription.iqiyi.com
- IP-CIDR,23.53.32.88/32,no-resolve
- IP-CIDR,23.211.15.99/32,no-resolve
- IP-CIDR,103.5.34.153/32,no-resolve
- IP-CIDR,104.109.129.153/32,no-resolve
- IP-CIDR,110.238.107.47/32,no-resolve
- IP-CIDR,118.26.32.178/32,no-resolve
- IP-CIDR,203.74.95.131/32,no-resolve
- IP-CIDR,203.74.95.139/32,no-resolve
- IP-CIDR,203.74.95.153/32,no-resolve
- IP-CIDR,203.211.4.169/32,no-resolve
- IP-CIDR,203.211.4.193/32,no-resolve
- IP-CIDR,210.71.227.200/32,no-resolve
- IP-CIDR,210.71.227.202/32,no-resolve
- IP-CIDR,210.201.32.8/32,no-resolve
- IP-CIDR,210.201.32.11/32,no-resolve
# > KKTV
- PROCESS-NAME,com.kktv.kktv
- DOMAIN-SUFFIX,kktv.com.tw
- DOMAIN-SUFFIX,kktv.me
- DOMAIN,kktv-theater.kk.stream
# > LINE TV
- PROCESS-NAME,com.linecorp.linetv
- DOMAIN-SUFFIX,linetv.tw
- DOMAIN,d3c7rimkq79yfu.cloudfront.net
# > LiTV
- PROCESS-NAME,com.litv.mobile.gp.litv
- DOMAIN-SUFFIX,litv.tv
- DOMAIN,litvfreemobile-hichannel.cdn.hinet.net
# > My5
- PROCESS-NAME,com.mobileiq.demand5
- DOMAIN-SUFFIX,channel5.com
- DOMAIN-SUFFIX,my5.tv
- DOMAIN,d349g9zuie06uo.cloudfront.net
# > myTV SUPER
- PROCESS-NAME,com.tvb.mytvsuper
- DOMAIN-SUFFIX,mytvsuper.com
- DOMAIN-SUFFIX,tvb.com
# > Naver TV
- PROCESS-NAME,com.nhn.android.naverplayer
- DOMAIN-SUFFIX,naver.com
- DOMAIN-SUFFIX,smartmediarep.com
# > Netflix
- PROCESS-NAME,com.netflix.mediaclient
- DOMAIN-SUFFIX,netflix.com
- DOMAIN-SUFFIX,netflix.net
- DOMAIN-SUFFIX,nflxext.com
- DOMAIN-SUFFIX,nflximg.com
- DOMAIN-SUFFIX,nflximg.net
- DOMAIN-SUFFIX,nflxso.net
- DOMAIN-SUFFIX,nflxvideo.net
- DOMAIN-KEYWORD,netflixdnstest
- DOMAIN-KEYWORD,apiproxy-device-prod-nlb-
- DOMAIN-KEYWORD,dualstack.apiproxy-
- GEOIP,NETFLIX,no-resolve
# > niconico
- PROCESS-NAME,jp.nicovideo.android
- DOMAIN-SUFFIX,dmc.nico
- DOMAIN-SUFFIX,nicovideo.jp
- DOMAIN-SUFFIX,nimg.jp
# > Now E
- PROCESS-NAME,com.pccw.nowemobile
- DOMAIN-SUFFIX,nowe.com
- DOMAIN-SUFFIX,nowestatic.com
# > Paramount+
- PROCESS-NAME,com.cbs.app
- DOMAIN-SUFFIX,cbsi.com
- DOMAIN-SUFFIX,cbsaavideo.com
- DOMAIN-SUFFIX,cbsivideo.com
- DOMAIN-SUFFIX,paramountplus.com
- DOMAIN-SUFFIX,pplusstatic.com
- DOMAIN,cbsi.live.ott.irdeto.com
- DOMAIN,cbsplaylistserver.aws.syncbak.com
- DOMAIN,cbsservice.aws.syncbak.com
- DOMAIN,link.theplatform.com
# > PBS
- PROCESS-NAME,com.pbs.video
- DOMAIN-SUFFIX,pbs.org
# > Peacock
- PROCESS-NAME,com.peacocktv.peacockandroid
- DOMAIN-SUFFIX,peacocktv.com
# > Pornhub
- DOMAIN-SUFFIX,phncdn.com
- DOMAIN-SUFFIX,phprcdn.com
- DOMAIN-SUFFIX,pornhub.com
- DOMAIN-SUFFIX,pornhubpremium.com
# > 台湾好
- PROCESS-NAME,com.twgood.android
- DOMAIN-SUFFIX,skyking.com.tw
- DOMAIN,hamifans.emome.net
# > TikTok
- PROCESS-NAME,com.ss.android.ugc.trill
- DOMAIN-SUFFIX,byteoversea.com
- DOMAIN-SUFFIX,ibytedtos.com
- DOMAIN-SUFFIX,muscdn.com
- DOMAIN-SUFFIX,musical.ly
- DOMAIN-SUFFIX,tiktok.com
- DOMAIN-SUFFIX,tik-tokapi.com
- DOMAIN-SUFFIX,tiktokcdn.com
- DOMAIN-SUFFIX,tiktokv.com
- DOMAIN-KEYWORD,tiktokcdn-
# > TVer
- PROCESS-NAME,jp.hamitv.hamiand1
- DOMAIN-SUFFIX,tver.jp
- DOMAIN,edge.api.brightcove.com
# > ViuTV
- PROCESS-NAME,com.hktve.viutv
- DOMAIN-SUFFIX,viu.com
- DOMAIN-SUFFIX,viu.tv
- DOMAIN,api.viu.now.com
- DOMAIN,d1k2us671qcoau.cloudfront.net
- DOMAIN,d2anahhhmp1ffz.cloudfront.net
- DOMAIN,dfp6rglgjqszk.cloudfront.net
# > WeTV
- PROCESS-NAME,com.tencent.qqlivei18n
- DOMAIN-SUFFIX,wetv.vip
- DOMAIN-SUFFIX,wetvinfo.com
- IP-CIDR,150.109.28.51/32,no-resolve
# > YouTube
- PROCESS-NAME,com.google.android.youtube
- PROCESS-NAME,com.google.android.youtube.tv
- DOMAIN-SUFFIX,googlevideo.com
- DOMAIN-SUFFIX,withyoutube.com
- DOMAIN-SUFFIX,youtu.be
- DOMAIN-SUFFIX,youtube.com
- DOMAIN-SUFFIX,youtubeeducation.com
- DOMAIN-SUFFIX,youtubegaming.com
- DOMAIN-SUFFIX,youtubekids.com
- DOMAIN-SUFFIX,youtube-nocookie.com
- DOMAIN-SUFFIX,yt.be
- DOMAIN-SUFFIX,ytimg.com
- DOMAIN,youtubei.googleapis.com
- DOMAIN,yt3.ggpht.com

View File

@ -1,66 +0,0 @@
payload:
# (Video)
# > Acfun
- DOMAIN-SUFFIX,acfun.cn
- DOMAIN-SUFFIX,aixifan.com
# > bilibili
- DOMAIN-SUFFIX,biliapi.net
- DOMAIN-SUFFIX,bilibili.com
- DOMAIN-SUFFIX,bilivideo.com
- DOMAIN-SUFFIX,hdslb.com
# > Tencent Video
- DOMAIN-SUFFIX,video.qq.com
- DOMAIN-SUFFIX,i.qq.com
- DOMAIN-SUFFIX,v.qq.com
# > iQiyi
- DOMAIN-SUFFIX,iqiyi.com
- DOMAIN-SUFFIX,71edge.com
# > Youku
- DOMAIN-SUFFIX,soku.com
- DOMAIN-SUFFIX,youku.com
- DOMAIN-SUFFIX,ykimg.com
# > XiGua
- DOMAIN-SUFFIX,ixigua.com
- DOMAIN-SUFFIX,snssdk.com
# > HunanTV
- DOMAIN-SUFFIX,hitv.com
- DOMAIN-SUFFIX,hunantv.com
- DOMAIN-SUFFIX,mgtv.com
# > Le
- DOMAIN-SUFFIX,le.com
# > PPLive
- DOMAIN-SUFFIX,pplive.cn
- DOMAIN-SUFFIX,pptv.com
# > Sohu Video
- DOMAIN-SUFFIX,itc.cn
- DOMAIN-SUFFIX,sohu.com
# > Migu Video
- DOMAIN-SUFFIX,cmvideo.cn
- DOMAIN-SUFFIX,miguvideo.com
# (Music)
# > QQ Music
- DOMAIN-SUFFIX,music.qq.com
- DOMAIN-SUFFIX,music.tc.qq.com
- DOMAIN-SUFFIX,qqmusic.qq.com
- DOMAIN-SUFFIX,tencentmusic.com
- DOMAIN-SUFFIX,y.qq.com
- DOMAIN,aqqmusic.tc.qq.com
- DOMAIN,moo.qq.com
# > China Music Corp
- DOMAIN-SUFFIX,kuwo.cn
- DOMAIN-SUFFIX,kugou.com
# > Netease Cloud Music
- DOMAIN-SUFFIX,music.163.com
- DOMAIN-SUFFIX,music.126.net
- DOMAIN,mam.netease.com
- DOMAIN,api.iplay.163.com
# > Qianqian Music
- DOMAIN-SUFFIX,qianqian.com
- DOMAIN-SUFFIX,taihe.com
# > Migu Music
- DOMAIN-SUFFIX,migu.cn
# > Xiaomi
- DOMAIN-SUFFIX,ai.xiaomi.com
- DOMAIN-SUFFIX,music.xiaomi.com
- DOMAIN-SUFFIX,dmhmusic.com

View File

@ -1,20 +0,0 @@
payload:
# > bilibili
- DOMAIN,api.biliapi.com
- DOMAIN,api.biliapi.net
- DOMAIN,api.bilibili.com
- DOMAIN,app.biliapi.com
- DOMAIN,app.biliapi.net
- DOMAIN,app.bilibili.com
- DOMAIN,grpc.biliapi.net
- DOMAIN,m.bilibili.com
- DOMAIN,upos-hz-mirrorakam.akamaized.net
- DOMAIN,www.bilibili.com
- DOMAIN-KEYWORD,cn-hk-eq-bcache-
# > 愛奇藝台灣站
- DOMAIN,cache.video.iqiyi.com
- IP-CIDR,116.211.202.206/32,no-resolve
- IP-CIDR,116.211.202.216/32,no-resolve
# > MangoTV(芒果TV国际)
- DOMAIN-SUFFIX,api.mgtv.com
- DOMAIN,mobileso.bz.mgtv.com

View File

@ -1,20 +0,0 @@
payload:
# Unbreak
# > Google
- DOMAIN-SUFFIX,blog.google
- DOMAIN-SUFFIX,googletraveladservices.com
- DOMAIN,clientservices.googleapis.com
- DOMAIN,dl.google.com
- DOMAIN,dl.l.google.com
- DOMAIN,update.googleapis.com
- DOMAIN,translate.googleapis.com
# >> Firebase Cloud Messaging
- DOMAIN,mtalk.google.com
- DOMAIN,alt1-mtalk.google.com
- DOMAIN,alt2-mtalk.google.com
- DOMAIN,alt3-mtalk.google.com
- DOMAIN,alt4-mtalk.google.com
- DOMAIN,alt5-mtalk.google.com
- DOMAIN,alt6-mtalk.google.com
- DOMAIN,alt7-mtalk.google.com
- DOMAIN,alt8-mtalk.google.com

View File

@ -30,7 +30,6 @@ cp -f "/etc/openclash/custom/openclash_custom_fake_filter.list" "/usr/share/open
cp -f "/etc/openclash/custom/openclash_custom_domain_dns.list" "/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1
cp -f "/etc/openclash/custom/openclash_custom_domain_dns_policy.list" "/usr/share/openclash/backup/openclash_custom_domain_dns_policy.list" >/dev/null 2>&1
cp -f "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "/usr/share/openclash/backup/openclash_custom_fallback_filter.yaml" >/dev/null 2>&1
cp -f "/etc/openclash/custom/openclash_custom_netflix_domains.list" "/usr/share/openclash/backup/openclash_custom_netflix_domains.list" >/dev/null 2>&1
cp -f "/etc/openclash/custom/openclash_force_sniffing_domain.yaml" "/usr/share/openclash/backup/openclash_force_sniffing_domain.yaml" >/dev/null 2>&1
cp -f "/etc/openclash/custom/openclash_sniffing_domain_filter.yaml" "/usr/share/openclash/backup/openclash_sniffing_domain_filter.yaml" >/dev/null 2>&1
cp -f "/etc/openclash/custom/openclash_sniffing_ports_filter.yaml" "/usr/share/openclash/backup/openclash_sniffing_ports_filter.yaml" >/dev/null 2>&1
@ -127,6 +126,9 @@ if [ -f "/tmp/openclash.bak" ]; then
rm -rf "/etc/openclash/openclash" >/dev/null 2>&1
rm -rf "/etc/openclash/fake_filter.list" >/dev/null 2>&1
rm -rf "/etc/openclash/openclash_servers_fake_filter.conf" >/dev/null 2>&1
rm -rf /etc/openclash/core/clash >/dev/null 2>&1
rm -rf /etc/openclash/core/clash_tun >/dev/null 2>&1
rm -rf /etc/openclash/accelerated-domains.china.conf >/dev/null 2>&1
rm -rf "/tmp/openclash" >/dev/null 2>&1
rm -rf "/tmp/openclash.bak" >/dev/null 2>&1
fi

View File

@ -13,7 +13,7 @@ LOG_OUT()
LOG_ALERT()
{
echo -e "$(tail -n 20 $LOG_FILE |grep -E 'level=fatal|FTL\ \[Config\]' |awk 'END {print}')" > $START_LOG
echo -e "$(tail -n 20 $LOG_FILE |grep -E 'level=fatal|level=error|FTL\ \[Config\]' |awk 'END {print}')" > $START_LOG
sleep 3
}

View File

@ -367,9 +367,18 @@ server_key_match()
fi
}
convert_custom_param()
{
if ! (echo "$1" | grep -qE "^\w+=.+$") then
return
fi
local p_name="${1%%=*}" p_value="${1#*=}"
append_custom_params="${append_custom_params}&${p_name}=$(urlencode "$p_value")"
}
sub_info_get()
{
local section="$1" subscribe_url template_path subscribe_url_param template_path_encode key_match_param key_ex_match_param c_address de_ex_keyword sub_ua
local section="$1" subscribe_url template_path subscribe_url_param template_path_encode key_match_param key_ex_match_param c_address de_ex_keyword sub_ua append_custom_params
config_get_bool "enabled" "$section" "enabled" "1"
config_get "name" "$section" "name" ""
config_get "sub_convert" "$section" "sub_convert" ""
@ -454,10 +463,11 @@ sub_info_get()
template_path=$custom_template_url
fi
if [ -n "$template_path" ]; then
config_list_foreach "$section" "custom_params" convert_custom_param
template_path_encode=$(urlencode "$template_path")
[ -n "$key_match_param" ] && key_match_param="$(urlencode "(?i)$key_match_param")"
[ -n "$key_ex_match_param" ] && key_ex_match_param="$(urlencode "(?i)$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$rule_provider"
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$rule_provider$append_custom_params"
c_address="$convert_address"
else
subscribe_url=$address

View File

@ -29,12 +29,10 @@
if [ "$small_flash_memory" != "1" ]; then
chnr_path="/etc/openclash/china_ip_route.ipset"
chnr6_path="/etc/openclash/china_ip6_route.ipset"
cndomain_path="/etc/openclash/accelerated-domains.china.conf"
mkdir -p /etc/openclash
else
chnr_path="/tmp/etc/openclash/china_ip_route.ipset"
chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset"
cndomain_path="/tmp/etc/openclash/accelerated-domains.china.conf"
mkdir -p /tmp/etc/openclash
fi
@ -67,7 +65,7 @@
if [ "$?" -ne "0" ]; then
LOG_OUT "Chnroute Cidr List Has Been Updated, Starting To Replace The Old Version..."
mv /tmp/china_ip_route.list "$chnr_path" >/dev/null 2>&1
if [ "$china_ip_route" -eq 1 ] || [ "$disable_udp_quic" -eq 1 ]; then
if [ "$china_ip_route" -ne 0 ] || [ "$disable_udp_quic" -eq 1 ]; then
restart=1
fi
LOG_OUT "Chnroute Cidr List Update Successful!"
@ -102,7 +100,7 @@
if [ "$?" -ne "0" ]; then
LOG_OUT "Chnroute6 Cidr List Has Been Updated, Starting To Replace The Old Version..."
mv /tmp/china_ip6_route.list "$chnr6_path" >/dev/null 2>&1
if [ "$china_ip6_route" -eq 1 ] || [ "$disable_udp_quic" -eq 1 ]; then
if [ "$china_ip6_route" -ne 0 ] || [ "$disable_udp_quic" -eq 1 ]; then
restart=1
fi
LOG_OUT "Chnroute6 Cidr List Update Successful!"
@ -113,41 +111,6 @@
LOG_OUT "Chnroute6 Cidr List Update Error, Please Try Again Later..."
fi
#CN DOMAIN
LOG_OUT "Start Downloading The CN Domains List..."
if [ -n "$CNDOMAIN_CUSTOM_URL" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$CNDOMAIN_CUSTOM_URL" -o "/tmp/china_domains.list" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/felixonmars/dnsmasq-china-list@master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf -o "/tmp/china_domains.list" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_domains.list" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
fi
if [ "${PIPESTATUS[0]}" -eq "0" ] && [ -s "/tmp/china_domains.list" ] && [ -n "$(cat "/tmp/china_domains.list" |head -1 |grep "server=")" ]; then
LOG_OUT "CN Domains List Download Success, Check Updated..."
cmp -s /tmp/china_domains.list "$cndomain_path"
if [ "$?" -ne "0" ]; then
LOG_OUT "CN Domains List Has Been Updated, Starting To Replace The Old Version..."
mv /tmp/china_domains.list "$cndomain_path" >/dev/null 2>&1
if [ "$china_ip_route" -eq 1 ] && [ -z "$(echo "$en_mode" |grep "redir-host")" ]; then
restart=1
fi
LOG_OUT "CN Domains List Update Successful!"
else
LOG_OUT "Updated CN Domains List No Change, Do Nothing..."
fi
else
LOG_OUT "CN Domains List Update Error, Please Try Again Later..."
fi
if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then
@ -160,6 +123,5 @@
fi
rm -rf /tmp/china_ip*_route* >/dev/null 2>&1
rm -rf /tmp/china_domains.list >/dev/null 2>&1
SLOG_CLEAN
del_lock

View File

@ -15,7 +15,7 @@ if [ -n "$2" ] && [ "$2" != "one_key_update" ]; then
fi
CORE_TYPE="$1"
C_CORE_TYPE=$(uci -q get openclash.config.core_type)
[ -z "$CORE_TYPE" ] && CORE_TYPE="Dev"
[ -z "$CORE_TYPE" ] && CORE_TYPE="Meta"
small_flash_memory=$(uci -q get openclash.config.small_flash_memory)
CPU_MODEL=$(uci -q get openclash.config.core_version)
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
@ -33,159 +33,63 @@ if [ ! -f "/tmp/clash_last_version" ]; then
fi
if [ "$small_flash_memory" != "1" ]; then
dev_core_path="/etc/openclash/core/clash"
tun_core_path="/etc/openclash/core/clash_tun"
meta_core_path="/etc/openclash/core/clash_meta"
mkdir -p /etc/openclash/core
else
dev_core_path="/tmp/etc/openclash/core/clash"
tun_core_path="/tmp/etc/openclash/core/clash_tun"
meta_core_path="/tmp/etc/openclash/core/clash_meta"
mkdir -p /tmp/etc/openclash/core
fi
case $CORE_TYPE in
"TUN")
CORE_CV=$($tun_core_path -v 2>/dev/null |awk -F ' ' '{print $2}')
CORE_LV=$(sed -n 2p /tmp/clash_last_version 2>/dev/null)
if [ -z "$CORE_LV" ]; then
LOG_OUT "Error: 【"$CORE_TYPE"】Core Version Check Error, Please Try Again Later..."
SLOG_CLEAN
exit 0
fi
;;
"Meta")
CORE_CV=$($meta_core_path -v 2>/dev/null |awk -F ' ' '{print $3}' |head -1)
CORE_LV=$(sed -n 3p /tmp/clash_last_version 2>/dev/null)
;;
*)
CORE_CV=$($dev_core_path -v 2>/dev/null |awk -F ' ' '{print $2}')
CORE_LV=$(sed -n 1p /tmp/clash_last_version 2>/dev/null)
esac
CORE_CV=$($meta_core_path -v 2>/dev/null |awk -F ' ' '{print $3}' |head -1)
CORE_LV=$(sed -n 3p /tmp/clash_last_version 2>/dev/null)
[ "$C_CORE_TYPE" = "$CORE_TYPE" ] || [ -z "$C_CORE_TYPE" ] && if_restart=1
if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
if [ "$CPU_MODEL" != 0 ]; then
case $CORE_TYPE in
"TUN")
LOG_OUT "【TUN】Core Downloading, Please Try to Download and Upload Manually If Fails"
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@core/"$RELEASE_BRANCH"/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/core/"$RELEASE_BRANCH"/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
LOG_OUT "【Meta】Core Downloading, Please Try to Download and Upload Manually If Fails"
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
gzip -t /tmp/clash_tun.gz >/dev/null 2>&1
fi
;;
"Meta")
LOG_OUT "【Meta】Core Downloading, Please Try to Download and Upload Manually If Fails"
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_meta.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
gzip -t /tmp/clash_meta.tar.gz >/dev/null 2>&1
fi
;;
*)
LOG_OUT "【Dev】Core Downloading, Please Try to Download and Upload Manually If Fails"
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/vernesong/OpenClash@core/"$RELEASE_BRANCH"/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/vernesong/OpenClash/core/"$RELEASE_BRANCH"/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/core/"$RELEASE_BRANCH"/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
gzip -t /tmp/clash.tar.gz >/dev/null 2>&1
fi
esac
if [ "${PIPESTATUS[0]}" -eq 0 ]; then
gzip -t /tmp/clash_meta.tar.gz >/dev/null 2>&1
fi
if [ "$?" == "0" ]; then
LOG_OUT "【"$CORE_TYPE"】Core Download Successful, Start Update..."
case $CORE_TYPE in
"TUN")
[ -s "/tmp/clash_tun.gz" ] && {
gzip -d /tmp/clash_tun.gz >/dev/null 2>&1
rm -rf /tmp/clash_tun.gz >/dev/null 2>&1
rm -rf "$tun_core_path" >/dev/null 2>&1
chmod 4755 /tmp/clash_tun >/dev/null 2>&1
/tmp/clash_tun -v >/dev/null 2>&1
}
;;
"Meta")
[ -s "/tmp/clash_meta.tar.gz" ] && {
rm -rf "$meta_core_path" >/dev/null 2>&1
tar zxvf /tmp/clash_meta.tar.gz -C /tmp
mv /tmp/clash /tmp/clash_meta >/dev/null 2>&1
rm -rf /tmp/clash_meta.tar.gz >/dev/null 2>&1
chmod 4755 /tmp/clash_meta >/dev/null 2>&1
/tmp/clash_meta -v >/dev/null 2>&1
}
;;
*)
[ -s "/tmp/clash.tar.gz" ] && {
rm -rf "$dev_core_path" >/dev/null 2>&1
tar zxvf /tmp/clash.tar.gz -C /tmp
rm -rf /tmp/clash.tar.gz >/dev/null 2>&1
chmod 4755 /tmp/clash >/dev/null 2>&1
/tmp/clash -v >/dev/null 2>&1
}
esac
[ -s "/tmp/clash_meta.tar.gz" ] && {
rm -rf "$meta_core_path" >/dev/null 2>&1
tar zxvf /tmp/clash_meta.tar.gz -C /tmp
mv /tmp/clash /tmp/clash_meta >/dev/null 2>&1
rm -rf /tmp/clash_meta.tar.gz >/dev/null 2>&1
chmod 4755 /tmp/clash_meta >/dev/null 2>&1
/tmp/clash_meta -v >/dev/null 2>&1
}
if [ "$?" != "0" ]; then
LOG_OUT "【"$CORE_TYPE"】Core Update Failed. Please Make Sure Enough Flash Memory Space or Selected Correct Core Platform And Try Again!"
case $CORE_TYPE in
"TUN")
rm -rf /tmp/clash_tun >/dev/null 2>&1
;;
"Meta")
rm -rf /tmp/clash_meta >/dev/null 2>&1
;;
*)
rm -rf /tmp/clash >/dev/null 2>&1
esac
rm -rf /tmp/clash_meta >/dev/null 2>&1
SLOG_CLEAN
exit 0
fi
case $CORE_TYPE in
"TUN")
mv /tmp/clash_tun "$tun_core_path" >/dev/null 2>&1
;;
"Meta")
mv /tmp/clash_meta "$meta_core_path" >/dev/null 2>&1
;;
*)
mv /tmp/clash "$dev_core_path" >/dev/null 2>&1
esac
mv /tmp/clash_meta "$meta_core_path" >/dev/null 2>&1
if [ "$?" == "0" ]; then
LOG_OUT "【"$CORE_TYPE"】Core Update Successful!"
if [ "$if_restart" -eq 1 ]; then
uci -q set openclash.config.config_reload=0
uci -q commit openclash
uci -q set openclash.config.config_reload=1
uci -q commit openclash
if ([ -z "$2" ] || ([ -n "$2" ] && [ "$2" != "one_key_update" ])) && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -le 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
fi
@ -209,13 +113,5 @@ else
SLOG_CLEAN
fi
case $CORE_TYPE in
"TUN")
rm -rf /tmp/clash_tun >/dev/null 2>&1
;;
"Meta")
rm -rf /tmp/clash_meta >/dev/null 2>&1
;;
*)
rm -rf /tmp/clash >/dev/null 2>&1
esac
rm -rf /tmp/clash_meta >/dev/null 2>&1

View File

@ -14,7 +14,6 @@ del_lock() {
DEBUG_LOG="/tmp/openclash_debug.log"
LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S"))
uci -q commit openclash
set_lock
enable_custom_dns=$(uci -q get openclash.config.enable_custom_dns)
@ -33,8 +32,6 @@ RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path)
CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)"
core_model=$(uci -q get openclash.config.core_version)
cpu_model=$(opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null)
core_version=$(/etc/openclash/core/clash -v 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null)
core_tun_version=$(/etc/openclash/core/clash_tun -v 2>/dev/null |awk -F ' ' '{print $2}' 2>/dev/null)
core_meta_version=$(/etc/openclash/core/clash_meta -v 2>/dev/null |awk -F ' ' '{print $3}' |head -1 2>/dev/null)
servers_update=$(uci -q get openclash.config.servers_update)
mix_proxies=$(uci -q get openclash.config.mix_proxies)
@ -67,11 +64,11 @@ fi
ts_cf()
{
if [ "$1" != 1 ]; then
if [ "$1" = "0" ] || [ -z "$1" ]; then
echo "停用"
else
echo "启用"
fi
fi
}
ts_re()
@ -187,51 +184,6 @@ cat >> "$DEBUG_LOG" <<-EOF
#下方无法显示内核版本号时请确认您的内核版本是否正确或者有无权限
EOF
cat >> "$DEBUG_LOG" <<-EOF
Tun内核版本: $core_tun_version
EOF
if [ ! -f "/etc/openclash/core/clash_tun" ]; then
cat >> "$DEBUG_LOG" <<-EOF
Tun内核文件: 不存在
EOF
else
cat >> "$DEBUG_LOG" <<-EOF
Tun内核文件: 存在
EOF
fi
if [ ! -x "/etc/openclash/core/clash_tun" ]; then
cat >> "$DEBUG_LOG" <<-EOF
Tun内核运行权限: 否
EOF
else
cat >> "$DEBUG_LOG" <<-EOF
Tun内核运行权限: 正常
EOF
fi
cat >> "$DEBUG_LOG" <<-EOF
Dev内核版本: $core_version
EOF
if [ ! -f "/etc/openclash/core/clash" ]; then
cat >> "$DEBUG_LOG" <<-EOF
Dev内核文件: 不存在
EOF
else
cat >> "$DEBUG_LOG" <<-EOF
Dev内核文件: 存在
EOF
fi
if [ ! -x "/etc/openclash/core/clash" ]; then
cat >> "$DEBUG_LOG" <<-EOF
Dev内核运行权限: 否
EOF
else
cat >> "$DEBUG_LOG" <<-EOF
Dev内核运行权限: 正常
EOF
fi
cat >> "$DEBUG_LOG" <<-EOF
Meta内核版本: $core_meta_version
@ -386,7 +338,7 @@ EOF
for nft in "input" "forward" "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do
nft list chain inet fw4 "$nft" >> "$DEBUG_LOG" 2>/dev/null
done >/dev/null 2>&1
for nft in "openclash" "openclash_mangle" "openclash_mangle_output" "openclash_output" "openclash_post" "openclash_wan_input" "openclash_dns_hijack" "openclash_dns_redirect" "openclash_mangle_v6" "openclash_mangle_output_v6" "openclash_post_v6" "openclash_wan6_input"; do
for nft in "openclash" "openclash_mangle" "openclash_mangle_output" "openclash_output" "openclash_post" "openclash_wan_input" "openclash_dns_hijack" "openclash_dns_redirect" "openclash_v6" "openclash_mangle_v6" "openclash_mangle_output_v6" "openclash_output_v6" "openclash_post_v6" "openclash_wan6_input"; do
nft list chain inet fw4 "$nft" >> "$DEBUG_LOG" 2>/dev/null
done >/dev/null 2>&1
fi
@ -490,7 +442,7 @@ cat >> "$DEBUG_LOG" <<-EOF
#===================== 测试本机网络下载(raw.githubusercontent.com) =====================#
EOF
VERSION_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/version"
VERSION_URL="https://raw.githubusercontent.com/vernesong/OpenClash/refs/heads/master/LICENSE"
if pidof clash >/dev/null; then
curl -SsIL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null
else
@ -504,9 +456,10 @@ cat >> "$DEBUG_LOG" <<-EOF
EOF
if pidof clash >/dev/null; then
curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer ${da_password}" -XPATCH http://${lan_ip}:${cn_port}/configs -d '{"log-level": "debug"}'
curl -SsL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer ${da_password}" -XPATCH http://${lan_ip}:${cn_port}/configs -d '{"log-level": "debug"}' >/dev/null
sleep 10
fi
tail -n 100 "/tmp/openclash.log" >> "$DEBUG_LOG" 2>/dev/null
cat >> "$DEBUG_LOG" <<-EOF
@ -514,7 +467,7 @@ cat >> "$DEBUG_LOG" <<-EOF
EOF
if pidof clash >/dev/null; then
curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer ${da_password}" -XPATCH http://${lan_ip}:${cn_port}/configs -d '{"log-level": "silent"}'
curl -SsL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer ${da_password}" -XPATCH http://${lan_ip}:${cn_port}/configs -d '{"log-level": "silent"}' >/dev/null
fi
cat >> "$DEBUG_LOG" <<-EOF

View File

@ -49,10 +49,6 @@ local function debug_getcon()
end
if not addr then
luci.sys.exec(string.format('echo "%s. SourceIP:【%s】 - Host:【%s】 - DestinationIP:【%s】 - Network:【%s】 - RulePayload:【%s】 - Lastchain:【%s】" >> /tmp/openclash_debug.log', i, (info.connections[i].metadata.sourceIP), host, (info.connections[i].metadata.destinationIP), (info.connections[i].metadata.network), (info.connections[i].rulePayload),(info.connections[i].chains[1])))
elseif addr == "netflix-nflxvideo" then
if string.match(host, "nflxvideo.net") or string.match(host, "amazonaws.com") then
print(host)
end
else
if datatype.hostname(addr) and string.lower(addr) == host or datatype.ipaddr(addr) and addr == (info.connections[i].metadata.destinationIP) then
print("id: "..(info.connections[i].id))

View File

@ -12,37 +12,7 @@ urlencode() {
LOG_FILE="/tmp/openclash.log"
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
if [ "$1" == "netflix_domains" ]; then
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
DOWNLOAD_PATH="${github_address_mod}gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
DOWNLOAD_PATH="https://raw.fastgit.org/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list"
else
DOWNLOAD_PATH="${github_address_mod}https://raw.githubusercontent.com/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list"
fi
else
DOWNLOAD_PATH="https://raw.githubusercontent.com/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list"
fi
RULE_FILE_DIR="/usr/share/openclash/res/Netflix_Domains.list"
RULE_FILE_NAME="Netflix_Domains"
RULE_TYPE="netflix"
elif [ "$1" == "disney_domains" ]; then
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
DOWNLOAD_PATH="${github_address_mod}gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
DOWNLOAD_PATH="https://raw.fastgit.org/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list"
else
DOWNLOAD_PATH="${github_address_mod}https://raw.githubusercontent.com/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list"
fi
else
DOWNLOAD_PATH="https://raw.githubusercontent.com/vernesong/OpenClash/$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list"
fi
RULE_FILE_DIR="/usr/share/openclash/res/Disney_Plus_Domains.list"
RULE_FILE_NAME="Disney_Plus_Domains"
RULE_TYPE="disney"
elif [ -z "$(grep "$RULE_FILE_NAME" /usr/share/openclash/res/rule_providers.list 2>/dev/null)" ]; then
if [ -z "$(grep "$RULE_FILE_NAME" /usr/share/openclash/res/rule_providers.list 2>/dev/null)" ]; then
DOWNLOAD_PATH=$(grep -F "$RULE_FILE_NAME" /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null)
RULE_FILE_DIR="/etc/openclash/game_rules/$RULE_FILE_NAME"
RULE_TYPE="game"
@ -60,13 +30,9 @@ urlencode() {
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
TMP_RULE_DIR_TMP="/tmp/$RULE_FILE_NAME.tmp"
[ "$RULE_TYPE" != "netflix" ] && [ "$RULE_TYPE" != "disney" ] && DOWNLOAD_PATH=$(urlencode "$DOWNLOAD_PATH")
DOWNLOAD_PATH=$(urlencode "$DOWNLOAD_PATH")
if [ "$RULE_TYPE" = "netflix" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$RULE_TYPE" = "disney" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$RULE_TYPE" = "game" ]; then
if [ "$RULE_TYPE" = "game" ]; then
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"

View File

@ -70,4 +70,4 @@
rm -rf /tmp/Country.mmdb >/dev/null 2>&1
SLOG_CLEAN
del_lock
del_lock

View File

@ -46,32 +46,6 @@
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
sed -i '1i rules:' /tmp/rules.yaml
elif [ "$rule_name" = "ConnersHua" ]; then
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
sed -i "s/# - RULE-SET,ChinaIP,DIRECT/- RULE-SET,ChinaIP,DIRECT/g" /tmp/rules.yaml 2>/dev/null
sed -i "s/- GEOIP,/#- GEOIP,/g" /tmp/rules.yaml 2>/dev/null
elif [ "$rule_name" = "ConnersHua_return" ]; then
if [ "$github_address_mod" != "0" ]; then
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
else
curl -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 |sed ':a;N;$!ba; s/\n/ /g' | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/rules.yaml" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
fi
fi
if [ -s "/tmp/rules.yaml" ]; then
LOG_OUT "Download Successful, Start Preprocessing Rule File..."

View File

@ -17,6 +17,12 @@ local now_name, group_name, group_type, group_show, status, ip, port, passwd, gr
local groups = {}
local proxies = {}
local tested_proxy = {}
local unlock_cache_file = "/etc/openclash/history/streaming_unlock_cache"
local unlock_cache = FS.readfile(unlock_cache_file)
local unlock_cache_info = {}
if unlock_cache then
unlock_cache_info = JSON.parse(unlock_cache)
end
local self_status = SYS.exec(string.format('ps -w |grep -v grep |grep -c "openclash_streaming_unlock.lua %s"', type))
local select_logic = UCI:get("openclash", "config", "stream_auto_select_logic") or "urltest"
@ -158,19 +164,21 @@ function unlock_auto_select()
if region and region ~= "" then
table.insert(full_support_list, {value.now, value.now, get_group_now(info, value.now), region})
print(now..full_support..""..region.."")
write_cache(type, get_group_now(info, value.now), region)
else
table.insert(full_support_list, {value.now, value.now, get_group_now(info, value.now)})
print(now..full_support_no_area)
write_cache(type, get_group_now(info, value.now))
end
if not all_test and #nodes_filter(now_name, info) ~= 0 then
if status == 4 then
status = 2
if region and region ~= "" then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
write_cache(type, "old_region", region)
end
end
if status == 2 and type == "Google" then
FS.writefile(string.format("/tmp/openclash_%s_region", type), now_name)
write_cache(type, "old_region", now_name)
end
break
else
@ -179,8 +187,10 @@ function unlock_auto_select()
elseif status == 3 then
if region and region ~= "" then
table.insert(other_region_unlock, {value.now, value.now, get_group_now(info, value.now), region})
write_cache(type, get_group_now(info, value.now), region)
else
table.insert(other_region_unlock, {value.now, value.now, get_group_now(info, value.now)})
write_cache(type, get_group_now(info, value.now))
end
if not all_test then
if region and region ~= "" then
@ -210,6 +220,7 @@ function unlock_auto_select()
print(now..no_unlock)
end
end
delete_cache(type, get_group_now(info, value.now))
else
if not all_test then
print(now..faild_test_start)
@ -225,12 +236,16 @@ function unlock_auto_select()
if not all_test then
--filter nodes
value.all = nodes_filter(value.all, info)
if select_logic == "random" then
--sort by random
value.all = table_rand(value.all, proxy_default)
else
--sort by urltest
value.all = table_sort_by_urltest(value.all, proxy_default)
if #value.all > 1 then
if select_logic == "random" then
--sort by random
value.all = table_rand(value.all, proxy_default)
else
--sort by urltest
value.all = table_sort_by_urltest(value.all, proxy_default)
end
--sort by cache
value.all = table_sort_by_cache(value.all)
end
end
if #(value.all) == 0 then
@ -251,12 +266,16 @@ function unlock_auto_select()
if not all_test then
--filter nodes
proxies = nodes_filter(proxies, info)
if select_logic == "random" then
--sort by random
proxies = table_rand(proxies)
else
--sort by urltest
proxies = table_sort_by_urltest(proxies)
if #proxies > 1 then
if select_logic == "random" then
--sort by random
proxies = table_rand(proxies)
else
--sort by urltest
proxies = table_sort_by_urltest(proxies)
end
--sort by cache
proxies = table_sort_by_cache(proxies)
end
end
if #(proxies) == 0 then
@ -293,6 +312,7 @@ function unlock_auto_select()
else
print(now..full_support..""..region.."")
end
write_cache(type, proxy, region)
else
table.insert(full_support_list, {value.all[i], group_name, proxy})
if not all_test then
@ -301,23 +321,27 @@ function unlock_auto_select()
else
print(now..full_support_no_area)
end
write_cache(type, proxy)
end
elseif status == 3 then
if region and region ~= "" then
table.insert(other_region_unlock, {value.all[i], group_name, proxy, region})
print(now..full_support..""..region..""..other_region_unlock_test)
write_cache(type, proxy, region)
else
table.insert(other_region_unlock, {value.all[i], group_name, proxy})
print(now..full_support_no_area..other_region_unlock_test)
write_cache(type, proxy)
end
elseif status == 4 then
if region and region ~= "" then
table.insert(no_old_region_unlock, {value.all[i], group_name, proxy, region})
print(now..full_support..""..region..""..no_old_region_unlock_old_region..""..old_region.."")
write_cache(type, proxy, region)
else
table.insert(no_old_region_unlock, {value.all[i], group_name, proxy})
print(now..no_old_region_unlock_test)
write_cache(type, proxy)
end
elseif status == 1 then
table.insert(original, {value.all[i], group_name, proxy})
@ -326,6 +350,7 @@ function unlock_auto_select()
else
print(now..no_unlock)
end
delete_cache(type, proxy)
else
print(now..test_faild)
end
@ -365,6 +390,7 @@ function unlock_auto_select()
else
print(now..full_support..""..region.."")
end
write_cache(type, value.all[i], region)
else
table.insert(full_support_list, {value.all[i], group_name, value.all[i]})
if not all_test then
@ -373,23 +399,27 @@ function unlock_auto_select()
else
print(now..full_support_no_area)
end
write_cache(type, value.all[i])
end
elseif status == 3 then
if region and region ~= "" then
table.insert(other_region_unlock, {value.all[i], group_name, value.all[i], region})
print(now..full_support..""..region..""..other_region_unlock_no_select)
write_cache(type, value.all[i], region)
else
table.insert(other_region_unlock, {value.all[i], group_name, value.all[i]})
print(now..full_support_no_area..other_region_unlock_no_select)
write_cache(type, value.all[i])
end
elseif status == 4 then
if region and region ~= "" then
table.insert(no_old_region_unlock, {value.all[i], group_name, value.all[i], region})
print(now..full_support..""..region..""..no_old_region_unlock_old_region..""..old_region..""..no_old_region_unlock_old_region_no_select)
write_cache(type, value.all[i], region)
else
table.insert(no_old_region_unlock, {value.all[i], group_name, value.all[i]})
print(now..full_support_no_area..no_old_region_unlock_no_select)
write_cache(type, value.all[i])
end
elseif status == 1 then
table.insert(original, {value.all[i], group_name, value.all[i]})
@ -398,6 +428,7 @@ function unlock_auto_select()
else
print(now..no_unlock_no_select)
end
delete_cache(type, value.all[i])
else
print(now..faild_no_select)
end
@ -424,7 +455,7 @@ function unlock_auto_select()
if #nodes_filter(v[3], info) ~= 0 then
if v[4] then
table.insert(fallback_select, 1, {v[1], v[2], v[3], v[4]})
FS.writefile(string.format("/tmp/openclash_%s_region", type), v[4])
write_cache(type, "old_region", v[4])
else
table.insert(fallback_select, 1, {v[1], v[2], v[3]})
end
@ -441,8 +472,6 @@ function unlock_auto_select()
end
if v[4] then
group_now = group_now .. area_i18 .. ""..v[4]..""
else
group_now = group_now .. area_i18 .. ""..v[4]..""
end
if #full_support_list > 0 then
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..value.name..""..select_all_full_support..group_now)
@ -526,6 +555,8 @@ function unlock_auto_select()
if not group_match and not auto_get_group then
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18..""..key_group..""..no_group_find)
end
--write cache
FS.writefile(unlock_cache_file, JSON.stringify(unlock_cache_info))
end
function urlencode(data)
@ -538,6 +569,54 @@ function datamatch(data, regex)
if result == "true" then return true else return false end
end
function get_old_region(stream_type)
local old_region = ""
if not stream_type then
stream_type = type
end
for k, v in pairs(unlock_cache_info) do
if v[1] == stream_type and v[2] == "old_region" and v[3] then
old_region = v[3]
break
end
end
return old_region
end
function get_old_regex(stream_type)
local old_regex = ""
if not stream_type then
stream_type = type
end
for k, v in pairs(unlock_cache_info) do
if v[1] == stream_type and v[2] == "old_regex" and v[3] then
old_regex = v[3]
break
end
end
return old_regex
end
function write_cache(stream_type, node, region)
if not region then
region = ""
end
if not table_include(unlock_cache_info, {stream_type, node, region}) then
if table_include(unlock_cache_info, {stream_type, node, "cache"}) then
delete_cache(stream_type, node)
end
table.insert(unlock_cache_info, {stream_type, node, region})
end
end
function delete_cache(stream_type, node)
for k, v in pairs(unlock_cache_info) do
if v[1] == stream_type and v[2] == node then
table.remove(unlock_cache_info, k)
end
end
end
function table_rand(t, d)
if t == nil then
return
@ -547,7 +626,7 @@ function table_rand(t, d)
while #t ~= 0 do
local n = math.random(0, #t)
if t[n] ~= nil then
if type == "YouTube Premium" and FS.isfile("/tmp/openclash_Google_region") and FS.readfile("/tmp/openclash_Google_region") == t[n] then
if type == "YouTube Premium" and get_old_region("Google") == t[n] then
table.insert(tab, 1, t[n])
elseif d ~= nil and table_include(groups, d) and d == t[n] then
table.insert(tab, 1, t[n])
@ -618,7 +697,7 @@ function table_sort_by_urltest(t, d)
end)
for _, value in pairs(tab) do
if type == "YouTube Premium" and FS.isfile("/tmp/openclash_Google_region") and FS.readfile("/tmp/openclash_Google_region") == value[1] then
if type == "YouTube Premium" and get_old_region("Google") == value[1] then
table.insert(result, 1, value[1])
elseif d ~= nil and table_include(groups, d) and d == value[1] then
table.insert(result, 1, value[1])
@ -626,23 +705,71 @@ function table_sort_by_urltest(t, d)
table.insert(result, value[1])
end
end
return result
end
function table_sort_by_cache(t)
local tab = {}
local tab_b = {}
local old_region = get_old_region()
if old_region == "" then
old_region = "cache"
end
for n = 1, #(t) do
if table_include(unlock_cache_info, {type, t[n], old_region}) then
table.insert(tab, t[n])
else
table.insert(tab_b, t[n])
end
end
if #tab > 0 then
print(os.date("%Y-%m-%d %H:%M:%S").." "..type.." Group:"..""..group_match_name.."".."Cached Compliant Nodes Number:"..""..#(tab)..""..", Cached Non-compliant Nodes Number:"..""..#(tab_b)..""..", Prioritize Testing With Cached Compliant Nodes...")
end
for k,v in pairs(tab_b) do table.insert(tab, v) end
return tab
end
function table_include(table, value)
if table == nil then
return false
end
for k, v in pairs(table) do
if v == value then
return true
if class_type(v) == "table" and class_type(value) == "table" then
if table_eq(v, value) then
return true
else
if v[1] == value[1] and v[2] == value[2] and value[3] == "cache" then
return true
end
end
else
if v == value then
return true
end
end
end
return false
end
function table_eq(t1, t2)
if t1 == t2 then return true end
if class_type(t1) ~= "table" or class_type(t2) ~= "table" then return false end
for k1, v1 in pairs(t1) do
local v2 = t2[k1]
if v2 == nil or not table_eq(v1, v2) then
return false
end
end
for k2, v2 in pairs(t2) do
local v1 = t1[k2]
if v1 == nil or not table_eq(v1, v2) then
return false
end
end
return true
end
function get_auth_info()
port = UCI:get("openclash", "config", "cn_port")
passwd = UCI:get("openclash", "config", "dashboard_password") or ""
@ -1026,7 +1153,8 @@ function netflix_unlock_test()
local info = SYS.exec(string.format('curl -sLI --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H "Content-Type: application/json" -H "%s" -XGET %s', headers, url))
local result = {}
local region
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_netflix") or ""
if info then
info = JSON.parse(info)
@ -1038,16 +1166,18 @@ function netflix_unlock_test()
region = string.upper(string.match(result[3], "^%a+"))
if region == "TITLE" then region = "US" end
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
return region, old_region
@ -1068,7 +1198,8 @@ function disney_unlock_test()
local body = '{"query":"mutation registerDevice($input: RegisterDeviceInput!) { registerDevice(registerDevice: $input) { grant { grantType assertion } } }","variables":{"input":{"deviceFamily":"browser","applicationRuntime":"chrome","deviceProfile":"windows","deviceLanguage":"en","attributes":{"osDeviceIds":[],"manufacturer":"microsoft","model":null,"operatingSystem":"windows","operatingSystemVersion":"10.0","browserName":"chrome","browserVersion":"96.0.4606"}}}}'
local region, assertion, data, preassertion, disneycookie, tokencontent
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_disney") or ""
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
preassertion = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 %s -H 'User-Agent: %s' -H 'content-type: application/json; charset=UTF-8' -d '{\"deviceFamily\":\"browser\",\"applicationRuntime\":\"chrome\",\"deviceProfile\":\"windows\",\"attributes\":{}}' -XPOST %s", auth, UA, url))
@ -1097,32 +1228,34 @@ function disney_unlock_test()
inSupportedLocation = JSON.parse(data).extensions.sdk.session.inSupportedLocation or ""
if region == "JP" then
status = 2
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and not datamatch(region, old_region) and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and not datamatch(region, old_region)) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
return region, old_region
end
if region and region ~= "" and inSupportedLocation then
status = 2
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_region ~= "" and not datamatch(region, old_region) and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and not datamatch(region, old_region)) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
return region, old_region
end
@ -1155,7 +1288,8 @@ function hbo_max_unlock_test()
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
local result = {}
local region = ""
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_hbo_max") or ""
if data then
data = JSON.parse(data)
@ -1170,16 +1304,18 @@ function hbo_max_unlock_test()
region = string.upper(string.match(result[3], "^%a+"))
end
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
return region, old_region
@ -1195,7 +1331,8 @@ function hbo_go_asia_unlock_test()
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --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 = ""
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
if tonumber(httpcode) == 200 then
status = 1
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
@ -1209,16 +1346,18 @@ function hbo_go_asia_unlock_test()
region = string.upper(data.country)
end
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
return region, old_region
@ -1233,9 +1372,10 @@ function ytb_unlock_test()
local url = "https://m.youtube.com/premium"
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --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 old_region = ""
local old_region = get_old_region()
local data, he_data
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_ytb") or ""
local old_regex = get_old_regex()
if tonumber(httpcode) == 200 then
status = 1
data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' -b 'YSC=BiCUU3-5Gdk; CONSENT=YES+cb.20220301-11-p0.en+FX+700; GPS=1; VISITOR_INFO1_LIVE=4VwPMkB7W5A; PREF=tz=Asia.Shanghai; _gcl_au=1.1.1809531354.1646633279' %s", UA, url))
@ -1254,16 +1394,18 @@ function ytb_unlock_test()
region = "US"
end
end
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
return region, old_region
@ -1274,7 +1416,8 @@ function tvb_anywhere_unlock_test()
local url = "https://uapisfm.tvbanywhere.com.sg/geoip/check/platform/android"
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --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 old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_tvb_anywhere") or ""
if tonumber(httpcode) == 200 then
status = 1
@ -1288,16 +1431,18 @@ function tvb_anywhere_unlock_test()
region = string.upper(data.country)
end
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
end
@ -1310,7 +1455,8 @@ function prime_video_unlock_test()
local url = "https://www.primevideo.com"
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --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 old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_prime_video") or ""
if tonumber(httpcode) == 200 then
status = 1
@ -1319,16 +1465,18 @@ function prime_video_unlock_test()
region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2)
if region then
status = 2
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
return region, old_region
end
@ -1343,7 +1491,8 @@ function dazn_unlock_test()
local url2 = "https://startup.core.indazn.com/misl/v5/Startup"
local httpcode = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --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 old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_dazn") or ""
if tonumber(httpcode) == 200 then
status = 1
@ -1357,16 +1506,18 @@ function dazn_unlock_test()
region = string.upper(data.Region.GeolocatedCountry)
end
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
end
@ -1378,7 +1529,8 @@ function paramount_plus_unlock_test()
status = 0
local url = "https://www.paramountplus.com/"
local region
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_paramount_plus") or ""
local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -o /dev/null -w %%{json} -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
data = JSON.parse(data)
@ -1389,16 +1541,18 @@ function paramount_plus_unlock_test()
data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' %s", UA, url))
region = string.upper(string.sub(string.match(data, "\"siteEdition\":\"%a+|%a+\""), 19, -2)) or string.upper(string.sub(string.match(data, "property: '%a+'"), 12, -2))
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
return region, old_region
end
@ -1411,7 +1565,8 @@ function discovery_plus_unlock_test()
local url = "https://us1-prod-direct.discoveryplus.com/token?deviceId=d1a4a5d25212400d1e6985984604d740&realm=go&shortlived=true"
local url1 = "https://us1-prod-direct.discoveryplus.com/users/me"
local region
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_discovery_plus") or ""
local token = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
if token and JSON.parse(token) and JSON.parse(token).data and JSON.parse(token).data.attributes then
@ -1423,16 +1578,18 @@ function discovery_plus_unlock_test()
region = string.upper(JSON.parse(data).data.attributes.currentLocationTerritory) or string.upper(JSON.parse(data).data.attributes.currentLocationSovereignTerritory)
if region then
status = 2
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
return region, old_region
end
@ -1445,7 +1602,7 @@ function bilibili_unlock_test()
local randsession = SYS.exec("cat /dev/urandom | head -n 32 | md5sum | head -c 32")
local region, httpcode, data, url
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_bilibili") or ""
local old_region = ""
local old_region = get_old_region()
if regex == "HK/MO/TW" then
url = string.format("https://api.bilibili.com/pgc/player/web/playurl?avid=18281381&cid=29892777&qn=0&type=&otype=json&ep_id=183799&fourk=1&fnver=0&fnval=16&session=%s&module=bangumi", randsession)
region = "HK/MO/TW"
@ -1465,14 +1622,14 @@ function bilibili_unlock_test()
if data.code then
if data.code == 0 then
status = 2
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
return region, old_region
end
@ -1491,7 +1648,7 @@ function google_not_cn_test()
status = 2
region = "NOT CN"
if not all_test then
FS.writefile(string.format("/tmp/openclash_%s_region", type), tested_proxy[-1])
write_cache(type, "old_region", tested_proxy[-1])
end
else
region = "CN"
@ -1507,7 +1664,8 @@ function openai_unlock_test()
local region_url = "https://chat.openai.com/cdn-cgi/trace"
local regex = UCI:get("openclash", "config", "stream_auto_select_region_key_openai") or ""
local region = ""
local old_region = ""
local old_region = get_old_region()
local old_regex = get_old_regex()
local data = SYS.exec(string.format("curl -sIL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url))
if data then
if string.find(data, "text/html") then
@ -1517,16 +1675,18 @@ function openai_unlock_test()
region = string.upper(string.sub(string.match(region_data, "loc=%a+"), 5, -1))
end
if region then
if FS.isfile(string.format("/tmp/openclash_%s_region", type)) then
old_region = FS.readfile(string.format("/tmp/openclash_%s_region", type))
end
if not datamatch(region, regex) then
status = 3
elseif old_regex ~= regex and not all_test then
status = 2
elseif old_region ~= "" and region ~= old_region and not all_test then
status = 4
end
if status == 2 and not all_test and ((old_region ~= "" and region ~= old_region) or (old_region == "")) then
FS.writefile(string.format("/tmp/openclash_%s_region", type), region)
if status == 2 and not all_test and region ~= "" and region ~= old_region then
write_cache(type, "old_region", region)
end
if status == 2 and not all_test and regex ~= old_regex then
write_cache(type, "old_regex", regex)
end
end
else

View File

@ -41,13 +41,9 @@ if [ "$1" = "one_key_update" ]; then
LOG_OUT "Tip: If the download fails, try setting the CDN in Overwrite Settings - General Settings - Github Address Modify Options"
fi
if [ -n "$2" ]; then
/usr/share/openclash/openclash_core.sh "Dev" "$1" "$2" >/dev/null 2>&1 &
/usr/share/openclash/openclash_core.sh "TUN" "$1" "$2" >/dev/null 2>&1 &
/usr/share/openclash/openclash_core.sh "Meta" "$1" "$2" >/dev/null 2>&1 &
github_address_mod="$2"
else
/usr/share/openclash/openclash_core.sh "Dev" "$1" >/dev/null 2>&1 &
/usr/share/openclash/openclash_core.sh "TUN" "$1" >/dev/null 2>&1 &
/usr/share/openclash/openclash_core.sh "Meta" "$1" >/dev/null 2>&1 &
fi
@ -79,8 +75,8 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1
if [ -z "$(opkg install /tmp/openclash.ipk --noaction 2>/dev/null |grep 'Upgrading luci-app-openclash on root' 2>/dev/null)" ]; then
LOG_OUT "【OpenClash - v$LAST_VER】Pre Update Test Failed, The File is Saved in /tmp/openclash.ipk, Please Try to Update Manually!"
if [ "$(uci -q get openclash.config.config_reload)" -eq 0 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
else
SLOG_CLEAN
fi
@ -134,8 +130,8 @@ EOF
else
LOG_OUT "【OpenClash - v$LAST_VER】Download Failed, Please Check The Network or Try Again Later!"
rm -rf /tmp/openclash.ipk >/dev/null 2>&1
if [ "$(uci -q get openclash.config.config_reload)" -eq 0 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
else
SLOG_CLEAN
fi
@ -146,7 +142,7 @@ else
else
LOG_OUT "OpenClash Has not Been Updated, Stop Continuing!"
fi
if [ "$(uci -q get openclash.config.config_reload)" -eq 0 ]; then
if [ "$(uci -q get openclash.config.config_reload)" -eq 1 ]; then
/etc/init.d/openclash restart >/dev/null 2>&1 &
else
SLOG_CLEAN

View File

@ -16,122 +16,16 @@ cfg_update_interval=$(uci -q get openclash.config.config_update_interval || echo
log_size=$(uci -q get openclash.config.log_size || echo 1024)
core_type=$(uci -q get openclash.config.core_type)
router_self_proxy=$(uci -q get openclash.config.router_self_proxy || echo 1)
stream_domains_prefetch_interval=$(uci -q get openclash.config.stream_domains_prefetch_interval || echo 1440)
stream_auto_select_interval=$(uci -q get openclash.config.stream_auto_select_interval || echo 30)
NETFLIX_DOMAINS_LIST="/usr/share/openclash/res/Netflix_Domains.list"
NETFLIX_DOMAINS_CUSTOM_LIST="/etc/openclash/custom/openclash_custom_netflix_domains.list"
DISNEY_DOMAINS_LIST="/usr/share/openclash/res/Disney_Plus_Domains.list"
china_ip_route=$(uci -q get openclash.config.china_ip_route)
en_mode=$(uci -q get openclash.config.en_mode)
fakeip_range=$(uci -q get openclash.config.fakeip_range || echo "198.18.0.1/16")
ipv6_mode=$(uci -q get openclash.config.ipv6_mode || echo 0)
skip_proxy_address=$(uci -q get openclash.config.skip_proxy_address || echo 0)
CRASH_NUM=0
CFG_UPDATE_INT=1
SKIP_PROXY_ADDRESS=1
SKIP_PROXY_ADDRESS_INTERVAL=30
STREAM_DOMAINS_PREFETCH=1
STREAM_AUTO_SELECT=1
FW4=$(command -v fw4)
check_dnsmasq() {
if [ -z "$(echo "$en_mode" |grep "redir-host")" ] && [ "$china_ip_route" -eq 1 ] && [ "$enable_redirect_dns" != "2" ]; 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 53)
fi
if [ "$(nslookup www.baidu.com >/dev/null 2>&1 || echo $?)" = "1" ]; then
if [ -n "$FW4" ]; then
if [ -z "$(nft list chain inet fw4 nat_output |grep '12353')" ]; then
LOG_OUT "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..."
nft insert rule inet fw4 dstnat position 0 tcp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft insert rule inet fw4 dstnat position 0 udp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' 2>/dev/null
nft insert rule inet fw4 nat_output position 0 tcp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft insert rule inet fw4 nat_output position 0 udp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft insert rule inet fw4 nat_output position 0 tcp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft insert rule inet fw4 nat_output position 0 udp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
if [ "$ipv6_enable" -eq 1 ]; then
nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} udp dport 53 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' 2>/dev/null
nft add rule inet fw4 nat_output position 0 meta nfproto {ipv6} tcp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft add rule inet fw4 nat_output position 0 meta nfproto {ipv6} udp dport 53 meta skuid != 65534 counter redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft add rule inet fw4 nat_output position 0 meta nfproto {ipv6} tcp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft add rule inet fw4 nat_output position 0 meta nfproto {ipv6} udp dport 12353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
fi
fi
else
if [ -z "$(iptables -t nat -nL OUTPUT --line-number |grep '12353')" ]; then
LOG_OUT "Warning: Dnsmasq Work is Unnormal, Setting The Firewall DNS Hijacking Rules..."
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
iptables -t nat -I OUTPUT -p udp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
iptables -t nat -I OUTPUT -p tcp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
iptables -t nat -I OUTPUT -p udp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
iptables -t nat -I OUTPUT -p tcp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
if [ "$ipv6_enable" -eq 1 ]; then
ip6tables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
ip6tables -t nat -I OUTPUT -p udp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
ip6tables -t nat -I OUTPUT -p tcp --dport 53 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
ip6tables -t nat -I OUTPUT -p udp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
ip6tables -t nat -I OUTPUT -p tcp --dport 12353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
fi
fi
fi
fi
if [ "$(nslookup www.baidu.com 127.0.0.1:12353 >/dev/null 2>&1 || echo $?)" != "1" ]; then
if [ -n "$FW4" ]; then
if [ -n "$(nft list chain inet fw4 nat_output |grep 'OpenClash DNS Hijack')" ]; then
LOG_OUT "Tip: Dnsmasq Work is Normal, Restore The Firewall DNS Hijacking Rules..."
for nft in "nat_output" "dstnat"; do
handles=$(nft -a list chain inet fw4 ${nft} |grep "OpenClash DNS Hijack" |awk -F '# handle ' '{print$2}')
for handle in $handles; do
nft delete rule inet fw4 ${nft} handle ${handle}
done
done >/dev/null 2>&1
local position=$(nft -a list chain inet fw4 dstnat |grep "OpenClash" |grep "DNS" |awk -F '# handle ' '{print$2}' |sort -rn |head -1)
[ -z "$position" ] && position=0
nft add rule inet fw4 dstnat position "$position" tcp dport 53 redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft add rule inet fw4 dstnat position "$position" udp dport 53 redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
if [ "$ipv6_enable" -eq 1 ]; then
nft add rule inet fw4 dstnat position "$position" meta nfproto {ipv6} tcp dport 53 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
nft add rule inet fw4 dstnat position "$position" meta nfproto {ipv6} udp dport 53 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
fi
fi
else
if [ -n "$(iptables -t nat -nL OUTPUT --line-number |grep 'OpenClash DNS Hijack')" ]; then
LOG_OUT "Tip: Dnsmasq Work is Normal, Restore The Firewall DNS Hijacking Rules..."
for ipt in "iptables -nvL OUTPUT -t nat" "iptables -nvL PREROUTING -t nat" "ip6tables -nvL PREROUTING -t nat" "ip6tables -nvL OUTPUT -t nat"; do
lines=$($ipt |sed 1,2d |sed -n "/OpenClash DNS Hijack/=" 2>/dev/null |sort -rn)
if [ -n "$lines" ]; then
for line in $lines; do
$(echo "$ipt" |awk -v OFS=" " '{print $1,$4,$5}' |sed 's/[ ]*$//g') -D $(echo "$ipt" |awk '{print $3}') $line
done
fi
done >/dev/null 2>&1
local position=$(iptables -nvL PREROUTING -t nat |sed 1,2d |grep "OpenClash" |sed -n "/DNS/=" 2>/dev/null |sort -rn |head -1)
[ -z "$position" ] && position=0
[ "$position" -ne 0 ] && let position++
iptables -t nat -I PREROUTING "$position" -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
iptables -t nat -I PREROUTING "$position" -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
if [ "$ipv6_enable" -eq 1 ]; then
position=$(ip6tables -nvL PREROUTING -t nat |sed 1,2d |grep "OpenClash" |sed -n "/DNS/=" 2>/dev/null |sort -rn |head -1)
[ -z "$position" ] && position=0
[ "$position" -ne 0 ] && let position++
ip6tables -t nat -I PREROUTING "$position" -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
ip6tables -t nat -I PREROUTING "$position" -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
fi
fi
fi
fi
fi
}
check_dnsmasq
SLOG_CLEAN
sleep 60
while :;
@ -139,8 +33,6 @@ do
cfg_update=$(uci -q get openclash.config.auto_update)
cfg_update_mode=$(uci -q get openclash.config.config_auto_update_mode)
cfg_update_interval_now=$(uci -q get openclash.config.config_update_interval || echo 60)
stream_domains_prefetch=$(uci -q get openclash.config.stream_domains_prefetch || echo 0)
stream_domains_prefetch_interval_now=$(uci -q get openclash.config.stream_domains_prefetch_interval || echo 1440)
stream_auto_select=$(uci -q get openclash.config.stream_auto_select || echo 0)
stream_auto_select_interval_now=$(uci -q get openclash.config.stream_auto_select_interval || echo 30)
stream_auto_select_netflix=$(uci -q get openclash.config.stream_auto_select_netflix || echo 0)
@ -181,7 +73,7 @@ if [ "$enable" -eq 1 ]; then
chmod o+w /tmp/openclash.log 2>/dev/null
chmod o+w /etc/openclash/cache.db 2>/dev/null
chown nobody:nogroup /etc/openclash/core/* 2>/dev/null
capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin,cap_sys_ptrace"
capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin,cap_sys_ptrace,cap_sys_admin"
capsh --caps="${capabilties}+eip" -- -c "capsh --user=nobody --addamb='${capabilties}' -- -c 'nohup $CLASH -d $CLASH_CONFIG -f \"$CONFIG_FILE\" >> $LOG_FILE 2>&1 &'" >> $LOG_FILE 2>&1
sleep 3
if [ "$core_type" == "TUN" ] || [ "$core_type" == "Meta" ]; then
@ -190,6 +82,9 @@ if [ "$enable" -eq 1 ]; then
if [ "$ipv6_mode" -eq 2 ] && [ "$ipv6_enable" -eq 1 ] && [ "$core_type" == "Meta" ]; then
ip -6 rule del oif utun table 2022 >/dev/null 2>&1
ip -6 route del default dev utun table 2022 >/dev/null 2>&1
ip -6 addr add fdfe:dcba:9876::1/126 dev utun >/dev/null 2>&1
ip -6 route add fdfe:dcba:9876::/126 dev utun proto kernel metric 256 pref medium >/dev/null 2>&1
ip -6 route add fe80::/64 dev utun proto kernel metric 256 pref medium >/dev/null 2>&1
ip -6 route replace default dev utun table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
ip -6 rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
fi
@ -228,9 +123,6 @@ fi
LOG_OUT "Watchdog: Setting Firewall For Enabling Redirect..."
fi
## 防止 DNSMASQ 加载配置时间过长导致 DNS 无法解析
check_dnsmasq
## Localnetwork 刷新
wan_ip4s=$(/usr/share/openclash/openclash_get_network.lua "wanip" 2>/dev/null)
wan_ip6s=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null)
@ -517,35 +409,7 @@ fi
elif [ "$router_self_proxy" != "1" ] && [ "$stream_auto_select" -eq 1 ]; then
LOG_OUT "Error: Streaming Unlock Could not Work Because of Router-Self Proxy Disabled, Exiting..."
fi
##STREAM_DNS_PREFETCH
if [ "$stream_domains_prefetch" -eq 1 ] && [ "$router_self_proxy" -eq 1 ]; then
[ "$stream_domains_prefetch_interval" -ne "$stream_domains_prefetch_interval_now" ] && STREAM_DOMAINS_PREFETCH=1 && stream_domains_prefetch_interval="$stream_domains_prefetch_interval_now"
if [ "$STREAM_DOMAINS_PREFETCH" -ne 0 ]; then
if [ "$(expr "$STREAM_DOMAINS_PREFETCH" % "$stream_domains_prefetch_interval_now")" -eq 0 ] || [ "$STREAM_DOMAINS_PREFETCH" -eq 1 ]; then
LOG_OUT "Tip: Start Prefetch Netflix Domains..."
cat "$NETFLIX_DOMAINS_LIST" |while read -r line
do
[ -n "$line" ] && nslookup $line
done >/dev/null 2>&1
cat "$NETFLIX_DOMAINS_CUSTOM_LIST" |while read -r line
do
[ -n "$line" ] && nslookup $line
done >/dev/null 2>&1
LOG_OUT "Tip: Netflix Domains Prefetch Finished!"
LOG_OUT "Tip: Start Prefetch Disney Plus Domains..."
cat "$DISNEY_DOMAINS_LIST" |while read -r line
do
[ -n "$line" ] && nslookup $line
done >/dev/null 2>&1
LOG_OUT "Tip: Disney Plus Domains Prefetch Finished!"
fi
fi
STREAM_DOMAINS_PREFETCH=$(expr "$STREAM_DOMAINS_PREFETCH" + 1)
elif [ "$router_self_proxy" != "1" ] && [ "$stream_domains_prefetch" -eq 1 ]; then
LOG_OUT "Error: Streaming DNS Prefetch Could not Work Because of Router-Self Proxy Disabled, Exiting..."
fi
SLOG_CLEAN
sleep 60
done 2>/dev/null

View File

@ -1,47 +0,0 @@
rule-providers:
Unbreak:
type: http
behavior: classical
path: "./RuleSet/Unbreak.yaml"
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Unbreak.yaml
interval: 86400
Streaming:
type: http
behavior: classical
path: "./RuleSet/StreamingMedia/Streaming.yaml"
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Streaming.yaml
interval: 86400
StreamingSE:
type: http
behavior: classical
path: "./RuleSet/StreamingMedia/StreamingSE.yaml"
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/StreamingSE.yaml
interval: 86400
Global:
type: http
behavior: classical
path: "./RuleSet/Global.yaml"
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Global.yaml
interval: 86400
China:
type: http
behavior: classical
path: "./RuleSet/China.yaml"
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/China.yaml
interval: 86400
rules:
- RULE-SET,Unbreak,DIRECT
- RULE-SET,Streaming,Streaming
- RULE-SET,StreamingSE,StreamingSE
- RULE-SET,Global,PROXY
- RULE-SET,China,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,100.64.0.0/10,DIRECT
- IP-CIDR,224.0.0.0/4,DIRECT
- IP-CIDR,fe80::/10,DIRECT
- IP-CIDR,119.28.28.28/32,DIRECT
- IP-CIDR,182.254.116.0/24,DIRECT
- MATCH,MATCH

View File

@ -1,79 +0,0 @@
rules:
##source:ConnersHua_return
# (Video)
# AcFun
# USER-AGENT,AcFun*,PROXY
- DOMAIN-SUFFIX,acfun.cn,PROXY
- DOMAIN-SUFFIX,acfun.com,PROXY
- DOMAIN-SUFFIX,aixifan.com,PROXY
# > bilibili
# USER-AGENT,bili-universal,PROXY
# USER-AGENT,Bilibili*,PROXY
- DOMAIN-SUFFIX,acgvideo.com,PROXY
- DOMAIN-SUFFIX,bilibili.com,PROXY
- DOMAIN-SUFFIX,hdslb.com,PROXY
# > HunanTV
# USER-AGENT,MGTV*,PROXY
- DOMAIN-SUFFIX,hitv.com,PROXY
- DOMAIN-SUFFIX,hunantv.com,PROXY
- DOMAIN-SUFFIX,mgtv.com,PROXY
# > Migu
# USER-AGENT,MiguVideo*,PROXY
# USER-AGENT,%E5%92%AA%E5%92%95%E8%A7%86%E9%A2%91,PROXY
- DOMAIN-SUFFIX,cmvideo.cn,PROXY
- DOMAIN-SUFFIX,migu.cn,PROXY
- DOMAIN-SUFFIX,miguvideo.com,PROXY
# > iQiyi
# USER-AGENT,iQiYiPhoneVideo,PROXY
# USER-AGENT,PPStream,PROXY
# USER-AGENT,QIYIVideo,PROXY
# USER-AGENT,QYPlayer,PROXY
- DOMAIN-SUFFIX,iqiyi.com,PROXY
- DOMAIN-SUFFIX,iqiyipic.com,PROXY
- DOMAIN-SUFFIX,qy.net,PROXY
# > Sohu
- DOMAIN-SUFFIX,sohu.com,PROXY
- DOMAIN-SUFFIX,sohu.com.cn,PROXY
- DOMAIN-SUFFIX,itc.cn,PROXY
- DOMAIN-SUFFIX,v-56.com,PROXY
# > Tencent
# USER-AGENT,live4iphone*,PROXY
# USER-AGENT,qqlive4iphone*,PROXY
# USER-AGENT,TencentMidasConnect*,PROXY
- DOMAIN-SUFFIX,video.qq.com,PROXY
# > Youku
# USER-AGENT,Youku*,PROXY
# USER-AGENT,%E4%BC%98%E9%85%B7*,PROXY
- DOMAIN-SUFFIX,soku.com,PROXY
- DOMAIN-SUFFIX,youku.com,PROXY
- DOMAIN-SUFFIX,ykimg.com,PROXY
# (Music)
# > Alibaba
# USER-AGENT,walkman*,PROXY
# USER-AGENT,xiami*,PROXY
- DOMAIN-SUFFIX,xiami.com,PROXY
- DOMAIN-SUFFIX,xiami.net,PROXY
# > Netease
# USER-AGENT,NeteaseMusic*,PROXY
# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,PROXY
- DOMAIN-SUFFIX,music.126.net,PROXY
- DOMAIN-SUFFIX,music.163.com,PROXY
# > Tencent
# USER-AGENT,MOO%E9%9F%B3%E4%B9%90*,PROXY
# USER-AGENT,QQ%E9%9F%B3%E4%B9%90,PROXY
- DOMAIN-SUFFIX,qqmusic.qq.com,PROXY
- DOMAIN-SUFFIX,y.qq.com,PROXY
- DOMAIN,aqqmusic.tc.qq.com,PROXY
# Kugou and Kuwo
- DOMAIN-SUFFIX,kugou.com,PROXY
# USER-AGENT,%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90*,PROXY
- DOMAIN-SUFFIX,kuwo.cn,PROXY
- DOMAIN-SUFFIX,koowo.com,PROXY
# > Baidu
# USER-AGENT,baiduyinyue,PROXY
- DOMAIN-SUFFIX,qianqian.com,PROXY
- GEOIP,CN,PROXY
- MATCH,DIRECT

View File

@ -1,48 +0,0 @@
vod-akc-eu-south-1.media.dssott.com
vod-vzc-eu-south-1.media.dssott.com
vod-l3c-na-central-1.media.dssott.com
vod-akc-na-central-1.media.dssott.com
vod-ftc-na-central-1.media.dssott.com
vod-vzc-na-central-1.media.dssott.com
vod-l3c-na-east-1.media.dssott.com
vod-bgc-na-east-1.media.dssott.com
vod-akc-na-east-1.media.dssott.com
vod-ftc-na-east-1.media.dssott.com
vod-vzc-na-east-1.media.dssott.com
vod-bgc-oc-east-1.media.dssott.com
vod-l3c-na-west-1.media.dssott.com
vod-akc-na-west-1.media.dssott.com
vod-ftc-na-west-1.media.dssott.com
vod-vzc-na-west-1.media.dssott.com
vod-l3c-eu-south-2.media.dssott.com
vod-ftc-eu-south-2.media.dssott.com
vod-l3c-na-east-2.media.dssott.com
vod-akc-na-east-2.media.dssott.com
vod-ftc-na-east-2.media.dssott.com
vod-vzc-na-east-2.media.dssott.com
vod-l3c-oc-east-2.media.dssott.com
vod-akc-oc-east-2.media.dssott.com
vod-ftc-oc-east-2.media.dssott.com
vod-vzc-oc-east-2.media.dssott.com
vod-l3c-na-west-2.media.dssott.com
vod-akc-na-west-2.media.dssott.com
vod-llc-na-west-2.media.dssott.com
vod-cmc-na-west-2.media.dssott.com
vod-ftc-na-west-2.media.dssott.com
vod-vzc-na-west-2.media.dssott.com
cdn.registerdisney.go.com
qa.cdn.registerdisney.go.com
stg.cdn.registerdisney.go.com
val.cdn.registerdisney.go.com
prod-ripcut-delivery.disney-plus.net
appconfigs.disney-plus.net
prod-static.disney-plus.net
global.edge.bamgrid.com
bam-sdk-configs.bamgrid.com
playback-certs.bamgrid.com
search-api-disney.bamgrid.com
content.global.edge.bamgrid.com
disney.playback.edge.bamgrid.com
disney.api.edge.bamgrid.com
disney.content.edge.bamgrid.com
disney.connections.edge.bamgrid.com

View File

@ -1,574 +0,0 @@
ipv4-c001-hkg001-hgc-isp.1.oca.nflxvideo.net
ipv4-c003-hkg001-hgc-isp.1.oca.nflxvideo.net
ipv4-c004-hkg001-hgc-isp.1.oca.nflxvideo.net
ipv4-c001-hkg002-hgc-isp.1.oca.nflxvideo.net
ipv4-c002-hkg002-hgc-isp.1.oca.nflxvideo.net
ipv4-c001-hkg001-cmhk-isp.1.oca.nflxvideo.net
ipv4-c002-hkg001-cmhk-isp.1.oca.nflxvideo.net
ipv4-c002-hkg001-hkbn-isp.1.oca.nflxvideo.net
ipv4-c003-hkg001-hkbn-isp.1.oca.nflxvideo.net
ipv4-c004-hkg001-hkbn-isp.1.oca.nflxvideo.net
ipv4-c005-hkg001-hkbn-isp.1.oca.nflxvideo.net
ipv4-c001-hkg002-hkbn-isp.1.oca.nflxvideo.net
ipv4-c002-hkg002-hkbn-isp.1.oca.nflxvideo.net
ipv4-c003-hkg002-hkbn-isp.1.oca.nflxvideo.net
ipv4-c004-hkg002-hkbn-isp.1.oca.nflxvideo.net
ipv4-c001-hkg001-pccw-isp.1.oca.nflxvideo.net
ipv4-c003-hkg001-pccw-isp.1.oca.nflxvideo.net
ipv4-c004-hkg001-pccw-isp.1.oca.nflxvideo.net
ipv4-c002-hkg002-pccw-isp.1.oca.nflxvideo.net
ipv4-c003-hkg002-pccw-isp.1.oca.nflxvideo.net
ipv4-c004-hkg002-pccw-isp.1.oca.nflxvideo.net
ipv4-c005-hkg002-pccw-isp.1.oca.nflxvideo.net
ipv4-c001-hkg003-pccw-isp.1.oca.nflxvideo.net
ipv4-c002-hkg003-pccw-isp.1.oca.nflxvideo.net
ipv4-c003-hkg003-pccw-isp.1.oca.nflxvideo.net
ipv4-c004-hkg003-pccw-isp.1.oca.nflxvideo.net
ipv4-c010-hkg001-ix.1.oca.nflxvideo.net
ipv6-c010-hkg001-ix.1.oca.nflxvideo.net
ipv4-c020-hkg001-ix.1.oca.nflxvideo.net
ipv6-c020-hkg001-ix.1.oca.nflxvideo.net
ipv4-c030-hkg001-ix.1.oca.nflxvideo.net
ipv6-c030-hkg001-ix.1.oca.nflxvideo.net
ipv4-c040-hkg001-ix.1.oca.nflxvideo.net
ipv6-c040-hkg001-ix.1.oca.nflxvideo.net
ipv4-c050-hkg001-ix.1.oca.nflxvideo.net
ipv4-c060-hkg001-ix.1.oca.nflxvideo.net
ipv6-c001-hkg001-ix.1.oca.nflxvideo.net
ipv4-c011-hkg001-ix.1.oca.nflxvideo.net
ipv6-c011-hkg001-ix.1.oca.nflxvideo.net
ipv4-c021-hkg001-ix.1.oca.nflxvideo.net
ipv6-c021-hkg001-ix.1.oca.nflxvideo.net
ipv4-c031-hkg001-ix.1.oca.nflxvideo.net
ipv6-c031-hkg001-ix.1.oca.nflxvideo.net
ipv4-c041-hkg001-ix.1.oca.nflxvideo.net
ipv6-c041-hkg001-ix.1.oca.nflxvideo.net
ipv4-c051-hkg001-ix.1.oca.nflxvideo.net
ipv4-c061-hkg001-ix.1.oca.nflxvideo.net
ipv4-c002-hkg001-ix.1.oca.nflxvideo.net
ipv6-c002-hkg001-ix.1.oca.nflxvideo.net
ipv4-c012-hkg001-ix.1.oca.nflxvideo.net
ipv4-c022-hkg001-ix.1.oca.nflxvideo.net
ipv6-c022-hkg001-ix.1.oca.nflxvideo.net
ipv4-c032-hkg001-ix.1.oca.nflxvideo.net
ipv6-c032-hkg001-ix.1.oca.nflxvideo.net
ipv4-c042-hkg001-ix.1.oca.nflxvideo.net
ipv6-c042-hkg001-ix.1.oca.nflxvideo.net
ipv4-c052-hkg001-ix.1.oca.nflxvideo.net
ipv4-c062-hkg001-ix.1.oca.nflxvideo.net
ipv4-c003-hkg001-ix.1.oca.nflxvideo.net
ipv6-c003-hkg001-ix.1.oca.nflxvideo.net
ipv4-c013-hkg001-ix.1.oca.nflxvideo.net
ipv6-c013-hkg001-ix.1.oca.nflxvideo.net
ipv4-c023-hkg001-ix.1.oca.nflxvideo.net
ipv6-c023-hkg001-ix.1.oca.nflxvideo.net
ipv4-c033-hkg001-ix.1.oca.nflxvideo.net
ipv6-c033-hkg001-ix.1.oca.nflxvideo.net
ipv4-c043-hkg001-ix.1.oca.nflxvideo.net
ipv6-c043-hkg001-ix.1.oca.nflxvideo.net
ipv4-c053-hkg001-ix.1.oca.nflxvideo.net
ipv4-c004-hkg001-ix.1.oca.nflxvideo.net
ipv6-c004-hkg001-ix.1.oca.nflxvideo.net
ipv4-c014-hkg001-ix.1.oca.nflxvideo.net
ipv6-c014-hkg001-ix.1.oca.nflxvideo.net
ipv4-c024-hkg001-ix.1.oca.nflxvideo.net
ipv6-c024-hkg001-ix.1.oca.nflxvideo.net
ipv4-c034-hkg001-ix.1.oca.nflxvideo.net
ipv6-c034-hkg001-ix.1.oca.nflxvideo.net
ipv4-c044-hkg001-ix.1.oca.nflxvideo.net
ipv6-c044-hkg001-ix.1.oca.nflxvideo.net
ipv4-c054-hkg001-ix.1.oca.nflxvideo.net
ipv4-c005-hkg001-ix.1.oca.nflxvideo.net
ipv6-c005-hkg001-ix.1.oca.nflxvideo.net
ipv4-c015-hkg001-ix.1.oca.nflxvideo.net
ipv6-c015-hkg001-ix.1.oca.nflxvideo.net
ipv4-c025-hkg001-ix.1.oca.nflxvideo.net
ipv6-c025-hkg001-ix.1.oca.nflxvideo.net
ipv4-c035-hkg001-ix.1.oca.nflxvideo.net
ipv6-c035-hkg001-ix.1.oca.nflxvideo.net
ipv4-c045-hkg001-ix.1.oca.nflxvideo.net
ipv4-c055-hkg001-ix.1.oca.nflxvideo.net
ipv4-c006-hkg001-ix.1.oca.nflxvideo.net
ipv6-c006-hkg001-ix.1.oca.nflxvideo.net
ipv4-c016-hkg001-ix.1.oca.nflxvideo.net
ipv6-c016-hkg001-ix.1.oca.nflxvideo.net
ipv4-c026-hkg001-ix.1.oca.nflxvideo.net
ipv6-c026-hkg001-ix.1.oca.nflxvideo.net
ipv4-c036-hkg001-ix.1.oca.nflxvideo.net
ipv6-c036-hkg001-ix.1.oca.nflxvideo.net
ipv4-c046-hkg001-ix.1.oca.nflxvideo.net
ipv4-c056-hkg001-ix.1.oca.nflxvideo.net
ipv4-c007-hkg001-ix.1.oca.nflxvideo.net
ipv6-c007-hkg001-ix.1.oca.nflxvideo.net
ipv4-c017-hkg001-ix.1.oca.nflxvideo.net
ipv6-c017-hkg001-ix.1.oca.nflxvideo.net
ipv4-c027-hkg001-ix.1.oca.nflxvideo.net
ipv6-c027-hkg001-ix.1.oca.nflxvideo.net
ipv4-c037-hkg001-ix.1.oca.nflxvideo.net
ipv6-c037-hkg001-ix.1.oca.nflxvideo.net
ipv4-c047-hkg001-ix.1.oca.nflxvideo.net
ipv4-c057-hkg001-ix.1.oca.nflxvideo.net
ipv4-c008-hkg001-ix.1.oca.nflxvideo.net
ipv6-c008-hkg001-ix.1.oca.nflxvideo.net
ipv4-c018-hkg001-ix.1.oca.nflxvideo.net
ipv6-c018-hkg001-ix.1.oca.nflxvideo.net
ipv4-c028-hkg001-ix.1.oca.nflxvideo.net
ipv6-c028-hkg001-ix.1.oca.nflxvideo.net
ipv4-c038-hkg001-ix.1.oca.nflxvideo.net
ipv6-c038-hkg001-ix.1.oca.nflxvideo.net
ipv4-c048-hkg001-ix.1.oca.nflxvideo.net
ipv4-c058-hkg001-ix.1.oca.nflxvideo.net
ipv4-c009-hkg001-ix.1.oca.nflxvideo.net
ipv6-c009-hkg001-ix.1.oca.nflxvideo.net
ipv6-c019-hkg001-ix.1.oca.nflxvideo.net
ipv4-c029-hkg001-ix.1.oca.nflxvideo.net
ipv6-c029-hkg001-ix.1.oca.nflxvideo.net
ipv4-c039-hkg001-ix.1.oca.nflxvideo.net
ipv6-c039-hkg001-ix.1.oca.nflxvideo.net
ipv4-c049-hkg001-ix.1.oca.nflxvideo.net
ipv4-c059-hkg001-ix.1.oca.nflxvideo.net
ipv4-c001-hkg001-ix.1.oca.nflxvideo.net
ipv4-c019-hkg001-ix.1.oca.nflxvideo.net
ipv4-c001-sin001-starhub-isp.1.oca.nflxvideo.net
ipv6-c001-sin001-starhub-isp.1.oca.nflxvideo.net
ipv4-c002-sin001-starhub-isp.1.oca.nflxvideo.net
ipv6-c002-sin001-starhub-isp.1.oca.nflxvideo.net
ipv4-c003-sin001-starhub-isp.1.oca.nflxvideo.net
ipv6-c003-sin001-starhub-isp.1.oca.nflxvideo.net
ipv4-c004-sin001-starhub-isp.1.oca.nflxvideo.net
ipv6-c004-sin001-starhub-isp.1.oca.nflxvideo.net
ipv4-c005-sin001-starhub-isp.1.oca.nflxvideo.net
ipv6-c005-sin001-starhub-isp.1.oca.nflxvideo.net
ipv4-c006-sin001-starhub-isp.1.oca.nflxvideo.net
ipv4-c010-sin001-ix.1.oca.nflxvideo.net
ipv6-c010-sin001-ix.1.oca.nflxvideo.net
ipv4-c020-sin001-ix.1.oca.nflxvideo.net
ipv4-c030-sin001-ix.1.oca.nflxvideo.net
ipv6-c030-sin001-ix.1.oca.nflxvideo.net
ipv4-c040-sin001-ix.1.oca.nflxvideo.net
ipv6-c040-sin001-ix.1.oca.nflxvideo.net
ipv4-c050-sin001-ix.1.oca.nflxvideo.net
ipv4-c060-sin001-ix.1.oca.nflxvideo.net
ipv4-c001-sin001-ix.1.oca.nflxvideo.net
ipv4-c011-sin001-ix.1.oca.nflxvideo.net
ipv6-c011-sin001-ix.1.oca.nflxvideo.net
ipv4-c021-sin001-ix.1.oca.nflxvideo.net
ipv4-c031-sin001-ix.1.oca.nflxvideo.net
ipv6-c031-sin001-ix.1.oca.nflxvideo.net
ipv4-c041-sin001-ix.1.oca.nflxvideo.net
ipv6-c041-sin001-ix.1.oca.nflxvideo.net
ipv4-c051-sin001-ix.1.oca.nflxvideo.net
ipv4-c061-sin001-ix.1.oca.nflxvideo.net
ipv4-c002-sin001-ix.1.oca.nflxvideo.net
ipv6-c002-sin001-ix.1.oca.nflxvideo.net
ipv4-c012-sin001-ix.1.oca.nflxvideo.net
ipv6-c012-sin001-ix.1.oca.nflxvideo.net
ipv4-c032-sin001-ix.1.oca.nflxvideo.net
ipv6-c032-sin001-ix.1.oca.nflxvideo.net
ipv4-c042-sin001-ix.1.oca.nflxvideo.net
ipv6-c042-sin001-ix.1.oca.nflxvideo.net
ipv4-c052-sin001-ix.1.oca.nflxvideo.net
ipv4-c062-sin001-ix.1.oca.nflxvideo.net
ipv4-c003-sin001-ix.1.oca.nflxvideo.net
ipv4-c013-sin001-ix.1.oca.nflxvideo.net
ipv6-c013-sin001-ix.1.oca.nflxvideo.net
ipv4-c033-sin001-ix.1.oca.nflxvideo.net
ipv4-c043-sin001-ix.1.oca.nflxvideo.net
ipv6-c043-sin001-ix.1.oca.nflxvideo.net
ipv4-c053-sin001-ix.1.oca.nflxvideo.net
ipv6-c053-sin001-ix.1.oca.nflxvideo.net
ipv4-c063-sin001-ix.1.oca.nflxvideo.net
ipv4-c004-sin001-ix.1.oca.nflxvideo.net
ipv6-c004-sin001-ix.1.oca.nflxvideo.net
ipv4-c014-sin001-ix.1.oca.nflxvideo.net
ipv6-c014-sin001-ix.1.oca.nflxvideo.net
ipv4-c034-sin001-ix.1.oca.nflxvideo.net
ipv6-c034-sin001-ix.1.oca.nflxvideo.net
ipv4-c044-sin001-ix.1.oca.nflxvideo.net
ipv6-c044-sin001-ix.1.oca.nflxvideo.net
ipv4-c054-sin001-ix.1.oca.nflxvideo.net
ipv4-c005-sin001-ix.1.oca.nflxvideo.net
ipv6-c005-sin001-ix.1.oca.nflxvideo.net
ipv4-c015-sin001-ix.1.oca.nflxvideo.net
ipv6-c015-sin001-ix.1.oca.nflxvideo.net
ipv4-c025-sin001-ix.1.oca.nflxvideo.net
ipv6-c025-sin001-ix.1.oca.nflxvideo.net
ipv4-c035-sin001-ix.1.oca.nflxvideo.net
ipv6-c035-sin001-ix.1.oca.nflxvideo.net
ipv4-c045-sin001-ix.1.oca.nflxvideo.net
ipv6-c045-sin001-ix.1.oca.nflxvideo.net
ipv4-c055-sin001-ix.1.oca.nflxvideo.net
ipv4-c006-sin001-ix.1.oca.nflxvideo.net
ipv4-c016-sin001-ix.1.oca.nflxvideo.net
ipv4-c026-sin001-ix.1.oca.nflxvideo.net
ipv4-c036-sin001-ix.1.oca.nflxvideo.net
ipv6-c036-sin001-ix.1.oca.nflxvideo.net
ipv4-c046-sin001-ix.1.oca.nflxvideo.net
ipv6-c046-sin001-ix.1.oca.nflxvideo.net
ipv4-c056-sin001-ix.1.oca.nflxvideo.net
ipv4-c007-sin001-ix.1.oca.nflxvideo.net
ipv6-c007-sin001-ix.1.oca.nflxvideo.net
ipv4-c017-sin001-ix.1.oca.nflxvideo.net
ipv6-c017-sin001-ix.1.oca.nflxvideo.net
ipv4-c027-sin001-ix.1.oca.nflxvideo.net
ipv6-c027-sin001-ix.1.oca.nflxvideo.net
ipv4-c037-sin001-ix.1.oca.nflxvideo.net
ipv6-c037-sin001-ix.1.oca.nflxvideo.net
ipv4-c047-sin001-ix.1.oca.nflxvideo.net
ipv6-c047-sin001-ix.1.oca.nflxvideo.net
ipv4-c057-sin001-ix.1.oca.nflxvideo.net
ipv4-c008-sin001-ix.1.oca.nflxvideo.net
ipv6-c008-sin001-ix.1.oca.nflxvideo.net
ipv4-c018-sin001-ix.1.oca.nflxvideo.net
ipv4-c028-sin001-ix.1.oca.nflxvideo.net
ipv6-c028-sin001-ix.1.oca.nflxvideo.net
ipv4-c038-sin001-ix.1.oca.nflxvideo.net
ipv6-c038-sin001-ix.1.oca.nflxvideo.net
ipv4-c048-sin001-ix.1.oca.nflxvideo.net
ipv6-c048-sin001-ix.1.oca.nflxvideo.net
ipv4-c058-sin001-ix.1.oca.nflxvideo.net
ipv4-c009-sin001-ix.1.oca.nflxvideo.net
ipv6-c009-sin001-ix.1.oca.nflxvideo.net
ipv4-c019-sin001-ix.1.oca.nflxvideo.net
ipv6-c019-sin001-ix.1.oca.nflxvideo.net
ipv6-c029-sin001-ix.1.oca.nflxvideo.net
ipv4-c039-sin001-ix.1.oca.nflxvideo.net
ipv6-c039-sin001-ix.1.oca.nflxvideo.net
ipv4-c049-sin001-ix.1.oca.nflxvideo.net
ipv6-c049-sin001-ix.1.oca.nflxvideo.net
ipv4-c059-sin001-ix.1.oca.nflxvideo.net
ipv6-c050-sin001-ix.1.oca.nflxvideo.net
ipv4-c029-sin001-ix.1.oca.nflxvideo.net
ipv4-c001-xsp001-m1-isp.1.oca.nflxvideo.net
ipv4-c002-xsp001-m1-isp.1.oca.nflxvideo.net
ipv4-c003-xsp001-m1-isp.1.oca.nflxvideo.net
ipv4-c001-xsp002-m1-isp.1.oca.nflxvideo.net
ipv4-c002-xsp002-m1-isp.1.oca.nflxvideo.net
ipv4-c003-xsp002-m1-isp.1.oca.nflxvideo.net
ipv4-c001-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv6-c001-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv4-c003-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv6-c003-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv4-c004-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv6-c004-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv4-c005-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv6-c005-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv4-c006-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv6-c006-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv4-c007-xsp002-starhub-isp.1.oca.nflxvideo.net
ipv4-c002-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv6-c002-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv4-c004-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv6-c004-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv4-c005-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv4-c006-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv6-c006-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv4-c007-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv4-c008-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv6-c008-xsp003-starhub-isp.1.oca.nflxvideo.net
ipv4-c100-fra002-ix.1.oca.nflxvideo.net
ipv4-c010-fra002-ix.1.oca.nflxvideo.net
ipv4-c110-fra002-ix.1.oca.nflxvideo.net
ipv4-c020-fra002-ix.1.oca.nflxvideo.net
ipv4-c120-fra002-ix.1.oca.nflxvideo.net
ipv4-c030-fra002-ix.1.oca.nflxvideo.net
ipv4-c130-fra002-ix.1.oca.nflxvideo.net
ipv4-c040-fra002-ix.1.oca.nflxvideo.net
ipv4-c140-fra002-ix.1.oca.nflxvideo.net
ipv4-c050-fra002-ix.1.oca.nflxvideo.net
ipv4-c150-fra002-ix.1.oca.nflxvideo.net
ipv4-c060-fra002-ix.1.oca.nflxvideo.net
ipv4-c070-fra002-ix.1.oca.nflxvideo.net
ipv4-c080-fra002-ix.1.oca.nflxvideo.net
ipv4-c090-fra002-ix.1.oca.nflxvideo.net
ipv4-c001-fra002-ix.1.oca.nflxvideo.net
ipv4-c101-fra002-ix.1.oca.nflxvideo.net
ipv4-c011-fra002-ix.1.oca.nflxvideo.net
ipv4-c111-fra002-ix.1.oca.nflxvideo.net
ipv4-c021-fra002-ix.1.oca.nflxvideo.net
ipv4-c121-fra002-ix.1.oca.nflxvideo.net
ipv4-c031-fra002-ix.1.oca.nflxvideo.net
ipv4-c131-fra002-ix.1.oca.nflxvideo.net
ipv4-c041-fra002-ix.1.oca.nflxvideo.net
ipv4-c141-fra002-ix.1.oca.nflxvideo.net
ipv4-c051-fra002-ix.1.oca.nflxvideo.net
ipv4-c061-fra002-ix.1.oca.nflxvideo.net
ipv4-c071-fra002-ix.1.oca.nflxvideo.net
ipv4-c081-fra002-ix.1.oca.nflxvideo.net
ipv4-c091-fra002-ix.1.oca.nflxvideo.net
ipv4-c002-fra002-ix.1.oca.nflxvideo.net
ipv4-c102-fra002-ix.1.oca.nflxvideo.net
ipv4-c012-fra002-ix.1.oca.nflxvideo.net
ipv4-c112-fra002-ix.1.oca.nflxvideo.net
ipv4-c022-fra002-ix.1.oca.nflxvideo.net
ipv4-c122-fra002-ix.1.oca.nflxvideo.net
ipv4-c132-fra002-ix.1.oca.nflxvideo.net
ipv4-c042-fra002-ix.1.oca.nflxvideo.net
ipv4-c062-fra002-ix.1.oca.nflxvideo.net
ipv4-c072-fra002-ix.1.oca.nflxvideo.net
ipv4-c082-fra002-ix.1.oca.nflxvideo.net
ipv4-c092-fra002-ix.1.oca.nflxvideo.net
ipv4-c003-fra002-ix.1.oca.nflxvideo.net
ipv4-c103-fra002-ix.1.oca.nflxvideo.net
ipv4-c013-fra002-ix.1.oca.nflxvideo.net
ipv4-c113-fra002-ix.1.oca.nflxvideo.net
ipv4-c023-fra002-ix.1.oca.nflxvideo.net
ipv4-c123-fra002-ix.1.oca.nflxvideo.net
ipv4-c033-fra002-ix.1.oca.nflxvideo.net
ipv4-c133-fra002-ix.1.oca.nflxvideo.net
ipv4-c043-fra002-ix.1.oca.nflxvideo.net
ipv4-c153-fra002-ix.1.oca.nflxvideo.net
ipv4-c063-fra002-ix.1.oca.nflxvideo.net
ipv4-c073-fra002-ix.1.oca.nflxvideo.net
ipv4-c083-fra002-ix.1.oca.nflxvideo.net
ipv4-c093-fra002-ix.1.oca.nflxvideo.net
ipv4-c004-fra002-ix.1.oca.nflxvideo.net
ipv4-c104-fra002-ix.1.oca.nflxvideo.net
ipv4-c014-fra002-ix.1.oca.nflxvideo.net
ipv4-c114-fra002-ix.1.oca.nflxvideo.net
ipv4-c024-fra002-ix.1.oca.nflxvideo.net
ipv4-c124-fra002-ix.1.oca.nflxvideo.net
ipv4-c034-fra002-ix.1.oca.nflxvideo.net
ipv4-c134-fra002-ix.1.oca.nflxvideo.net
ipv4-c044-fra002-ix.1.oca.nflxvideo.net
ipv4-c154-fra002-ix.1.oca.nflxvideo.net
ipv4-c064-fra002-ix.1.oca.nflxvideo.net
ipv4-c074-fra002-ix.1.oca.nflxvideo.net
ipv4-c084-fra002-ix.1.oca.nflxvideo.net
ipv4-c094-fra002-ix.1.oca.nflxvideo.net
ipv4-c005-fra002-ix.1.oca.nflxvideo.net
ipv4-c105-fra002-ix.1.oca.nflxvideo.net
ipv4-c015-fra002-ix.1.oca.nflxvideo.net
ipv4-c115-fra002-ix.1.oca.nflxvideo.net
ipv4-c025-fra002-ix.1.oca.nflxvideo.net
ipv4-c125-fra002-ix.1.oca.nflxvideo.net
ipv4-c035-fra002-ix.1.oca.nflxvideo.net
ipv4-c135-fra002-ix.1.oca.nflxvideo.net
ipv4-c045-fra002-ix.1.oca.nflxvideo.net
ipv4-c145-fra002-ix.1.oca.nflxvideo.net
ipv4-c065-fra002-ix.1.oca.nflxvideo.net
ipv4-c075-fra002-ix.1.oca.nflxvideo.net
ipv4-c085-fra002-ix.1.oca.nflxvideo.net
ipv4-c095-fra002-ix.1.oca.nflxvideo.net
ipv4-c006-fra002-ix.1.oca.nflxvideo.net
ipv4-c106-fra002-ix.1.oca.nflxvideo.net
ipv4-c016-fra002-ix.1.oca.nflxvideo.net
ipv4-c116-fra002-ix.1.oca.nflxvideo.net
ipv4-c026-fra002-ix.1.oca.nflxvideo.net
ipv4-c126-fra002-ix.1.oca.nflxvideo.net
ipv4-c036-fra002-ix.1.oca.nflxvideo.net
ipv4-c136-fra002-ix.1.oca.nflxvideo.net
ipv4-c046-fra002-ix.1.oca.nflxvideo.net
ipv4-c146-fra002-ix.1.oca.nflxvideo.net
ipv4-c056-fra002-ix.1.oca.nflxvideo.net
ipv4-c156-fra002-ix.1.oca.nflxvideo.net
ipv4-c066-fra002-ix.1.oca.nflxvideo.net
ipv4-c076-fra002-ix.1.oca.nflxvideo.net
ipv4-c086-fra002-ix.1.oca.nflxvideo.net
ipv4-c096-fra002-ix.1.oca.nflxvideo.net
ipv4-c007-fra002-ix.1.oca.nflxvideo.net
ipv4-c107-fra002-ix.1.oca.nflxvideo.net
ipv4-c017-fra002-ix.1.oca.nflxvideo.net
ipv4-c117-fra002-ix.1.oca.nflxvideo.net
ipv4-c027-fra002-ix.1.oca.nflxvideo.net
ipv4-c127-fra002-ix.1.oca.nflxvideo.net
ipv4-c037-fra002-ix.1.oca.nflxvideo.net
ipv4-c137-fra002-ix.1.oca.nflxvideo.net
ipv4-c047-fra002-ix.1.oca.nflxvideo.net
ipv4-c057-fra002-ix.1.oca.nflxvideo.net
ipv4-c067-fra002-ix.1.oca.nflxvideo.net
ipv4-c077-fra002-ix.1.oca.nflxvideo.net
ipv4-c087-fra002-ix.1.oca.nflxvideo.net
ipv4-c097-fra002-ix.1.oca.nflxvideo.net
ipv4-c008-fra002-ix.1.oca.nflxvideo.net
ipv4-c108-fra002-ix.1.oca.nflxvideo.net
ipv4-c018-fra002-ix.1.oca.nflxvideo.net
ipv4-c028-fra002-ix.1.oca.nflxvideo.net
ipv4-c128-fra002-ix.1.oca.nflxvideo.net
ipv4-c038-fra002-ix.1.oca.nflxvideo.net
ipv4-c138-fra002-ix.1.oca.nflxvideo.net
ipv4-c048-fra002-ix.1.oca.nflxvideo.net
ipv4-c148-fra002-ix.1.oca.nflxvideo.net
ipv4-c058-fra002-ix.1.oca.nflxvideo.net
ipv4-c158-fra002-ix.1.oca.nflxvideo.net
ipv4-c068-fra002-ix.1.oca.nflxvideo.net
ipv4-c078-fra002-ix.1.oca.nflxvideo.net
ipv4-c088-fra002-ix.1.oca.nflxvideo.net
ipv4-c098-fra002-ix.1.oca.nflxvideo.net
ipv4-c009-fra002-ix.1.oca.nflxvideo.net
ipv4-c109-fra002-ix.1.oca.nflxvideo.net
ipv4-c019-fra002-ix.1.oca.nflxvideo.net
ipv4-c119-fra002-ix.1.oca.nflxvideo.net
ipv4-c029-fra002-ix.1.oca.nflxvideo.net
ipv4-c129-fra002-ix.1.oca.nflxvideo.net
ipv4-c039-fra002-ix.1.oca.nflxvideo.net
ipv4-c139-fra002-ix.1.oca.nflxvideo.net
ipv4-c049-fra002-ix.1.oca.nflxvideo.net
ipv4-c149-fra002-ix.1.oca.nflxvideo.net
ipv4-c059-fra002-ix.1.oca.nflxvideo.net
ipv4-c069-fra002-ix.1.oca.nflxvideo.net
ipv4-c079-fra002-ix.1.oca.nflxvideo.net
ipv4-c089-fra002-ix.1.oca.nflxvideo.net
ipv4-c099-fra002-ix.1.oca.nflxvideo.net
ipv4-c010-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c001-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c011-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c002-fra002-dev-ix.1.oca.nflxvideo.net
ipv6-c002-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c012-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c003-fra002-dev-ix.1.oca.nflxvideo.net
ipv6-c003-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c004-fra002-dev-ix.1.oca.nflxvideo.net
ipv6-c004-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c005-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c006-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c007-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c008-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c009-fra002-dev-ix.1.oca.nflxvideo.net
ipv4-c151-fra002-ix.1.oca.nflxvideo.net
ipv4-c032-fra002-ix.1.oca.nflxvideo.net
ipv4-c142-fra002-ix.1.oca.nflxvideo.net
ipv4-c152-fra002-ix.1.oca.nflxvideo.net
ipv4-c143-fra002-ix.1.oca.nflxvideo.net
ipv4-c144-fra002-ix.1.oca.nflxvideo.net
ipv4-c155-fra002-ix.1.oca.nflxvideo.net
ipv4-c147-fra002-ix.1.oca.nflxvideo.net
ipv4-c157-fra002-ix.1.oca.nflxvideo.net
ipv4-c118-fra002-ix.1.oca.nflxvideo.net
ipv4-c003-mfm001-ctm-isp.1.oca.nflxvideo.net
ipv4-c001-tsa001-chieftelecom-isp.1.oca.nflxvideo.net
ipv4-c001-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c002-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c003-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c004-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c005-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c006-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c007-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c008-tsa001-cht-isp.1.oca.nflxvideo.net
ipv4-c002-cjj001-lguplus-isp.1.oca.nflxvideo.net
ipv4-c006-cjj001-lguplus-isp.1.oca.nflxvideo.net
ipv4-c001-hlp001-im2-isp.1.oca.nflxvideo.net
ipv4-c001-hlp001-myrepublicid-isp.1.oca.nflxvideo.net
ipv4-c002-hlp001-myrepublicid-isp.1.oca.nflxvideo.net
ipv4-c001-hlp001-cbn-isp.1.oca.nflxvideo.net
ipv4-c002-hlp001-cbn-isp.1.oca.nflxvideo.net
ipv4-c001-hlp002-linknet-isp.1.oca.nflxvideo.net
ipv4-c002-hlp002-linknet-isp.1.oca.nflxvideo.net
ipv4-c001-hlp003-linknet-isp.1.oca.nflxvideo.net
ipv4-c002-hlp003-linknet-isp.1.oca.nflxvideo.net
ipv4-c001-hlp001-mncplay-isp.1.oca.nflxvideo.net
ipv4-c002-hlp001-mncplay-isp.1.oca.nflxvideo.net
ipv4-c001-bdo001-starnetid-isp.1.oca.nflxvideo.net
ipv4-c002-bdo001-starnetid-isp.1.oca.nflxvideo.net
ipv4-c002-cgk001-moratel-isp.1.oca.nflxvideo.net
ipv4-c001-cgk001-linknet-isp.1.oca.nflxvideo.net
ipv4-c002-cgk001-linknet-isp.1.oca.nflxvideo.net
ipv4-c003-cgk001-linknet-isp.1.oca.nflxvideo.net
ipv4-c001-cgk002-linknet-isp.1.oca.nflxvideo.net
ipv4-c002-cgk002-linknet-isp.1.oca.nflxvideo.net
ipv4-c003-cgk002-linknet-isp.1.oca.nflxvideo.net
ipv4-c003-cgk002-biznet-isp.1.oca.nflxvideo.net
ipv4-c004-cgk002-biznet-isp.1.oca.nflxvideo.net
ipv4-c001-cxp001-biznet-isp.1.oca.nflxvideo.net
ipv4-c001-sub001-biznet-isp.1.oca.nflxvideo.net
ipv4-c016-jnb001-ix.1.oca.nflxvideo.net
ipv4-c010-jnb001-ix.1.oca.nflxvideo.net
ipv4-c025-jnb001-ix.1.oca.nflxvideo.net
ipv4-c027-jnb001-ix.1.oca.nflxvideo.net
ipv6-c001-sin001-ix.1.oca.nflxvideo.net
ipv4-c002-jnb001-ix.1.oca.nflxvideo.net
ipv4-c008-jnb001-ix.1.oca.nflxvideo.net
ipv4-c004-jnb001-ix.1.oca.nflxvideo.net
ipv6-c063-sin001-ix.1.oca.nflxvideo.net
ipv6-c117-fra002-ix.1.oca.nflxvideo.net
ipv4-c037-jnb001-ix.1.oca.nflxvideo.net
ipv4-c026-jnb001-ix.1.oca.nflxvideo.net
ipv6-c124-fra002-ix.1.oca.nflxvideo.net
ipv6-c062-hkg001-ix.1.oca.nflxvideo.net
ipv6-c058-hkg001-ix.1.oca.nflxvideo.net
ipv6-c057-sin001-ix.1.oca.nflxvideo.net
ipv6-c051-hkg001-ix.1.oca.nflxvideo.net
ipv6-c108-fra002-ix.1.oca.nflxvideo.net
ipv4-c024-jnb001-ix.1.oca.nflxvideo.net
ipv4-c030-jnb001-ix.1.oca.nflxvideo.net
ipv4-c010-osa001-ix.1.oca.nflxvideo.net
ipv4-c020-osa001-ix.1.oca.nflxvideo.net
ipv4-c001-osa001-ix.1.oca.nflxvideo.net
ipv4-c011-osa001-ix.1.oca.nflxvideo.net
ipv4-c021-osa001-ix.1.oca.nflxvideo.net
ipv4-c002-osa001-ix.1.oca.nflxvideo.net
ipv4-c012-osa001-ix.1.oca.nflxvideo.net
ipv4-c022-osa001-ix.1.oca.nflxvideo.net
ipv4-c003-osa001-ix.1.oca.nflxvideo.net
ipv4-c013-osa001-ix.1.oca.nflxvideo.net
ipv4-c004-osa001-ix.1.oca.nflxvideo.net
ipv4-c014-osa001-ix.1.oca.nflxvideo.net
ipv4-c005-osa001-ix.1.oca.nflxvideo.net
ipv4-c015-osa001-ix.1.oca.nflxvideo.net
ipv4-c006-osa001-ix.1.oca.nflxvideo.net
ipv4-c016-osa001-ix.1.oca.nflxvideo.net
ipv4-c007-osa001-ix.1.oca.nflxvideo.net
ipv4-c017-osa001-ix.1.oca.nflxvideo.net
ipv4-c008-osa001-ix.1.oca.nflxvideo.net
ipv4-c018-osa001-ix.1.oca.nflxvideo.net
ipv4-c009-osa001-ix.1.oca.nflxvideo.net
ipv4-c019-osa001-ix.1.oca.nflxvideo.net
ipv4-c020-jnb001-ix.1.oca.nflxvideo.net
ipv4-c001-jnb001-ix.1.oca.nflxvideo.net
ipv4-c011-jnb001-ix.1.oca.nflxvideo.net
ipv4-c021-jnb001-ix.1.oca.nflxvideo.net
ipv4-c031-jnb001-ix.1.oca.nflxvideo.net
ipv4-c012-jnb001-ix.1.oca.nflxvideo.net
ipv4-c022-jnb001-ix.1.oca.nflxvideo.net
ipv4-c032-jnb001-ix.1.oca.nflxvideo.net
ipv4-c003-jnb001-ix.1.oca.nflxvideo.net
ipv4-c023-jnb001-ix.1.oca.nflxvideo.net
ipv4-c033-jnb001-ix.1.oca.nflxvideo.net
ipv4-c014-jnb001-ix.1.oca.nflxvideo.net
ipv4-c034-jnb001-ix.1.oca.nflxvideo.net
ipv4-c005-jnb001-ix.1.oca.nflxvideo.net
ipv4-c015-jnb001-ix.1.oca.nflxvideo.net
ipv4-c006-jnb001-ix.1.oca.nflxvideo.net
ipv4-c036-jnb001-ix.1.oca.nflxvideo.net
ipv4-c007-jnb001-ix.1.oca.nflxvideo.net
ipv4-c017-jnb001-ix.1.oca.nflxvideo.net
ipv4-c018-jnb001-ix.1.oca.nflxvideo.net
ipv4-c028-jnb001-ix.1.oca.nflxvideo.net
ipv4-c038-jnb001-ix.1.oca.nflxvideo.net
ipv4-c009-jnb001-ix.1.oca.nflxvideo.net
ipv4-c019-jnb001-ix.1.oca.nflxvideo.net
ipv4-c029-jnb001-ix.1.oca.nflxvideo.net
ipv4-c013-jnb001-ix.1.oca.nflxvideo.net
ipv4-c035-jnb001-ix.1.oca.nflxvideo.net
dualstack.apiproxy-nrdp-prod-nlb-4-9fae3883a092e5c6.elb.us-west-2.amazonaws.com
dualstack.apiproxy-nrdp-prod-nlb-2-42101415231301e4.elb.us-west-2.amazonaws.com
dualstack.apiproxy-nrdp-prod-nlb-1-4659b24f746a127b.elb.us-west-2.amazonaws.com
dualstack.apiproxy-nrdp-prod-nlb-3-80d1f4b305f7c0e4.elb.us-west-2.amazonaws.com
ipv4-c002-hkg001-pccw-isp.1.oca.nflxvideo.net
ipv6-c012-hkg001-ix.1.oca.nflxvideo.net
ipv6-c006-sin001-starhub-isp.1.oca.nflxvideo.net
ipv6-c026-sin001-ix.1.oca.nflxvideo.net
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-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

@ -106,6 +106,11 @@ dns:
# fake-ip-filter:
# - '*.lan'
# - localhost.ptlogin2.qq.com
# The matching mode of fake-ip-filter is set to a blacklist by default.
# That is, fake-ip is not returned if the matching succeeds
# It can be set to whitelist, that is, fake-ip is returned only after the match is successful
fake-ip-filter-mode: blacklist
# Supports UDP, TCP, DoT, DoH. You can specify the port to connect to.
# All DNS questions are sent directly to the nameserver, without proxies
@ -469,4 +474,4 @@ rules:
- DST-PORT,80,DIRECT
- SRC-PORT,7777,DIRECT
- RULE-SET,apple,REJECT # Premium only
- MATCH,auto
- MATCH,auto

View File

@ -1,18 +1,18 @@
300英雄,300hero-cn.rules
方舟:生存进化,ARK--Survival-Evolved.rules
永恒之塔-台服,Aion-TW.rules
美国卡车模拟国际服,American-Truck-Simulator.rules
太空狼人杀,Among Us.rules
圣歌,Anthem.rules
Apex-uu,Apex-uu.rules
Apex英雄,Apex.rules
方舟:生存进化,ARK--Survival-Evolved.rules
武装突袭3,Arma3.rules
刺客信条:奥德赛,Assassin's-Creed-Odyssey.rules,Assassins-Creed-Odyssey.rules
刺客信条:起源,Assassin's-Creed-Origins.rules,Assassins-Creed-Origins.rules
Atlas-全区,Atlas.rules
战网,Battle-net-tw.rules
战地4,BattleField-4.rules
战地1,Battlefield-1.rules
战地4,BattleField-4.rules
戰地5,Battlefield-.rules,Battlefield-5.rules
黑色沙漠,Black-Desert.rules
黑色幸存者,BlackSurvivor.rules
@ -24,17 +24,17 @@ Atlas-全区,Atlas.rules
泡泡战士-跑跑卡丁车-韩服,BubbleFighter-KartRider-KR.rules
绕过大陆和局域网,BypassCNandLan.rules
绕过大陆和局域网someip,BypassCNandLan_someip.rules
反恐精英:全球攻势,CS-GO.rules
反恐精英:全球攻势-港服(tx),CSGO-HKtx.rules
反恐精英:全球攻势-港服(uu),CSGO-HKuu.rules
反恐精英:全球攻势-日服(tx),CSGO-JPtx.rules
反恐精英:全球攻势-美服(tx),CSGO-UStx.rules
使命召唤4现代战争重置版,Call-Of-Duty-4-Modern-Warfare.rules
使命召唤16&19现代战争I&II,Call-Of-Duty-Modern-Warfare.rules
使命召唤15亚服,Call-Of-Duty15-Asia.rules
使命召唤17冷战,Call-Of-Duty17-ColdWar.rules
仅代理中国IP,China-IP-only.rules
英雄连2,Company-Of-Heroes-2.rules
反恐精英:全球攻势,CS-GO.rules
反恐精英:全球攻势-港服(tx),CSGO-HKtx.rules
反恐精英:全球攻势-港服(uu),CSGO-HKuu.rules
反恐精英:全球攻势-日服(tx),CSGO-JPtx.rules
反恐精英:全球攻势-美服(tx),CSGO-UStx.rules
黑暗之魂3,Dark-Souls-3.rules
不屈不挠,Dauntless.rules
DayZ steam,DayZ.rules
@ -43,24 +43,24 @@ DayZ steam,DayZ.rules
命运2-全服(uu),Destiny2-Alluu.rules
天命2-亚服/命运2-亚服,Destiny2-Asia.rules
天命2-欧服/命运2-欧服,Destiny2-EU.rules
天命2-美服/命运2-美服,Destiny2-US.rules
命运2-steam,Destiny2-steam.rules
天命2-美服/命运2-美服,Destiny2-US.rules
暗黑破坏神2重制版,Diablo-2-Resurrected.rules
暗黑破坏神3-亚服,Diablo3-Asia.rules
暗黑破坏神3-美服,Diablo3-US.rules
暗黑破坏神4-港服,DiabloIV-HK.rules
脏弹-Steam,Dirty-Bomb.rules
Discord语音,Discord-All.rules
饥荒-steam,Don't-Starve-steam.rules
饥荒-steam,Don't-Starve-steam.rules,Dont-Starve-steam.rules
刀塔霸业,Dota-Underlords.rules
DOTA2-日服,Dota2-jp.rules
逃离塔科夫,Escape-from-Tarkov.rules
欧卡2所有分区-UU,Euro-Truck-Simulator-2.rules
Eve-online欧服,Eve-online.rules
FIFA20,FIFA20.rules
最终幻想14国服,FINAL-FANTASY-XIV-cn.rules
糖豆人,Fall-Guys.rules
FIFA19,FiFa19-INT.rules
FIFA20,FIFA20.rules
最终幻想14国服,FINAL-FANTASY-XIV-cn.rules
最终幻想14,Final-Fantasy-XIV.rules
荣耀战魂,For-Honour.rules
堡垒之夜亚服,Fortnite-AS.rules
@ -69,12 +69,14 @@ FIFA19,FiFa19-INT.rules
极限竞速地平线5,Forza-Horizon-5.rules
极限竞速7,Forza-Motorsport-7.rules
基佬大乱斗Gang Beasts,Gang-Beasts.rules
原神-港澳台服,GenshinImpact.exe_SSTAP.rules
鹅鸭杀,Goose-Goose-Duck-HK.rules
Grand Theft Auto V,Grand Theft Auto V.rules
激战2,Guild-Wars-2.rules
巫师昆特牌国际服,Gwent_The-Witcher-Card-game.rules
杀手2外服,HITMAN2.rules
光环:士官长合集,Halo-The-Master-Chief-Collection.rules
风暴英雄,heros of the storm-kr.rules
杀手2外服,HITMAN2.rules
荒野行动PC版-国服,HuangYeXingDong-cn.rules
猎杀对决,Hunt-Showdown-Asia.rules
叛乱:沙漠风暴,Insurgency-Sandstorm.rules
@ -83,25 +85,25 @@ Jump大乱斗,Jump-Force.rules
酷狗回国,KuGou-cn.rules
Kurtzpel,Kurtzpel.rules
求生之路2-Test,L4D2-Test.rules
英雄联盟PBE,League-of-Legends-PBE.rules
英雄联盟-日服,League-of-Legends-jp.rules
英雄联盟-韩服,League-of-Legends-kr.rules
英雄联盟PBE,League-of-Legends-PBE.rules
英雄联盟-台服+Garena平台(2018-12-19更新),League-of-Legends-tw+Garena(2018-12-19).rules
英雄联盟-台服,League-of-Legends-tw.rules
英雄联盟-美服,League-of-Legends-us.rules
致命公司,Lethal Company.rules
失落的方舟韩服,Lost-Ark.rules
失落的方舟俄服,Lostark-RU.rules
传奇4-亚服,MIR4-asia.rules
万智牌:竞技场-国际服,MTG-Arena.rules
奇迹传奇MU2,MU2.rules
冒险岛,Maplestory-us.rules
心灵终结,MentalOmega.rules
微软模拟飞行年度版,Microsoft-Flight-Simulator-Game-Of-The-Year-Edition.rules
巨硬商店,Microsoft-Srote.rules
我的世界-地下城,Minecraft-Dungeons.rules
传奇4-亚服,MIR4-asia.rules
误造,Miscreated.rules
怪兽世界猎人steam版,Monster-Hunter-World.rules
万智牌:竞技场-国际服,MTG-Arena.rules
奇迹传奇MU2,MU2.rules
NBA-2K19,NBA-2K19.rules
NBA2K20,NBA2K20.rules
仁王,NIOH.rules
@ -109,18 +111,18 @@ NBA2K20,NBA2K20.rules
Osu!,Osu!.rules
守望先锋-亚服,Overwatch-Asia.rules
守望先锋-美服,Overwatch-US.rules
流亡黯道-国际服,Path Of Exile.rules
流放之路,PathOfexile.rules
梦幻之星2-日服(tx),PHANTASY STAR ONLINE2-JPtx.rules
行星边际2,PlanetSide-2.rules
绝地求生大逃杀,PlayerUnknown's-Battlegrounds-update.rules,PlayerUnknowns-Battlegrounds-update.rules
实况足球-2018,Pro-Evolution-Soccer-2018.rules
实况足球-2019,Pro-Evolution-Soccer-2019.rules
绝地求生亚服&东南亚服,PUBG-Asia&-Southeast-Asia.rules
绝地求生国际服,PUBG-INT.rules
绝地求生韩服,PUBG-kakao.rules
绝地求生轻量版-WEB客户端,PUBGLITE-WEB.rules
绝地求生低配版-Garena,PUBGLite-Garena.rules
流亡黯道-国际服,Path Of Exile.rules
流放之路,PathOfexile.rules
行星边际2,PlanetSide-2.rules
绝地求生大逃杀,PlayerUnknown's-Battlegrounds-update.rules
实况足球-2018,Pro-Evolution-Soccer-2018.rules
实况足球-2019,Pro-Evolution-Soccer-2019.rules
绝地求生轻量版-WEB客户端,PUBGLITE-WEB.rules
R2竞技场服,R2Arena.rules
R2俄服官服,R2RU.rules
R2美服,R2US.rules
@ -141,42 +143,41 @@ StarCraft 2 亚服,StarCraft-2-asia.rules
Steam-社区(Beta),Steam.rules
极限巅峰,Steep.rules
街头霸王5,Street-Fighter-V.rules
神谕之战,TERA.rules
新枫之谷,TMS.rules
仅代理Telegram,Telegram.rules
神谕之战,TERA.rules
飙酷车神,The-Crew.rules
飙酷车神2,The-Crew2.rules
上古卷轴OL,The-Elder-Scrolls-Online.rules
泰坦陨落2,TiTanFall2.rules
天涯明月刀-台服,TianYaMingYueDao-tw.rules
幽灵行动:荒野,Tom-Clancy's-Ghost-Recon-Wildlands.rules
彩虹六号-异种-全部,Tom-Clancy's-Rainbow-Six-Extraction-all.rules
彩虹六号-围攻-EAS,Tom-Clancy's-Rainbow-Six-Siege-EAS.rules
彩虹六号-围攻-全部,Tom-Clancy's-Rainbow-Six-Siege-all.rules
全境封锁2,Tom-clancy's-The-Division-2.rules
全境封锁,Tom-clancy's-The-Division.rules
泰坦陨落2,TiTanFall2.rules
新枫之谷,TMS.rules
幽灵行动:荒野,Tom-Clancy's-Ghost-Recon-Wildlands.rules,Tom-Clancys-Ghost-Recon-Wildlands.rules
彩虹六号-异种-全部,Tom-Clancy's-Rainbow-Six-Extraction-all.rules,Tom-Clancys-Rainbow-Six-Extraction-all.rules
彩虹六号-围攻-全部,Tom-Clancy's-Rainbow-Six-Siege-all.rules,Tom-Clancys-Rainbow-Six-Siege-all.rules
彩虹六号-围攻-EAS,Tom-Clancy's-Rainbow-Six-Siege-EAS.rules,Tom-Clancys-Rainbow-Six-Siege-EAS.rules
全境封锁2,Tom-clancy's-The-Division-2.rules,Tom-clancys-The-Division-2.rules
全境封锁,Tom-clancy's-The-Division.rules,Tom-clancys-The-Division.rules
Twitch直播,Twitch.rules
未转变者Unturned,Unturned.rules
VRchat,VRchat.rules
无畏契约,Valorant.rules
VRchat,VRchat.rules
战争雷霆-steam,War-thunder-steam.rules
战争前线,Warface.rules
星际战甲,Warframe.rules
看门狗,Watch-Dogs.rules
看门狗2,Watch-Dogs2.rules
求生意志OL,Will-To-Live-Online.rules
魔兽世界-欧服,WoW-EU.rules
World War 3,World-War-3.rules
坦克世界-亚服,World-of-Tanks-Asia.rules
坦克世界闪电战,World-of-Tanks-Blitz.rules
坦克世界-国服,World-of-Tanks-cn.rules
魔兽世界台服,World-of-warcraft-tw.rules
战舰世界国服UU,World-of-Warships-CN.rules
战舰世界欧服,World-of-warships-EU.rules
战舰世界-美服,World-of-Warships-US.rules
战舰世界-亚服,World-of-Warships.rules
魔兽世界台服,World-of-warcraft-tw.rules
战舰世界欧服,World-of-warships-EU.rules
World War 3,World-War-3.rules
僵尸世界大战,Worldwar-Z.rules
魔兽世界-欧服,WoW-EU.rules
游戏王决斗链接,YO-GI-HO delulinks.rules
YY语音,YY-cn.rules
游侠对战平台,YouXiaDuiZhanPingTai.rules
风暴英雄,heros of the storm-kr.rules
YY语音,YY-cn.rules

View File

@ -1,50 +1,24 @@
放行规则-ConnersHua(建议置顶并直连),ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Unbreak.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,dler-io/Rules/master/Clash/Provider/,Domestic IPs.yaml
国内IP白名单,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,ChinaIP.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,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,dler-io/Rules/master/Clash/Provider/,Reject.yaml
广告规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Advertising.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,dler-io/Rules/master/Clash/Provider/Media/,ABC.yaml
Abema TV,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,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,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,dler-io/Rules/master/Clash/Provider/Media/,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,dler-io/Rules/master/Clash/Provider/Media/,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,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,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,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
BanEasyListChina,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasyListChina.yaml
@ -52,129 +26,70 @@ BanEasyPrivacy,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,BanEasy
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,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
Blizzard,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Blizzard.yaml
ChatGPT,lhie1,classical,dler-io/Rules/master/Clash/Provider/,ChatGPT.yaml
ChinaCompanyIp,ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaCompanyIp.yaml
ChinaDomain,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaDomain.yaml
ChinaIp(By ACL4SSR),ACL4SSR,ipcidr,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaIp.yaml,ChinaIp-ACL4SSR.yaml
ChinaMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ChinaMedia.yaml
Chromecast,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,Chromecast.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,dler-io/Rules/master/Clash/Provider/Media/,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,dler-io/Rules/master/Clash/Provider/Media/,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
GoogleDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleDrive.yaml
GoogleFCM,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,GoogleFCM.yaml
GoogleSearch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleSearch.yaml
GoogleVoice,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleVoice.yaml
HBO(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,HBO.yaml,HBO-ACL4SSR.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,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,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,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,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,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,dler-io/Rules/master/Clash/Provider/Media/,Line TV.yaml
LocalAreaNetwork,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,LocalAreaNetwork.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,dler-io/Rules/master/Clash/Provider/Media/,Netease Music.yaml
Netflix(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Netflix.yaml,Netflix-ACL4SSR.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,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,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,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,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
ProxyLite,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyLite.yaml
ProxyMedia,ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/,ProxyMedia.yaml
Scholar(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,Scholar.yaml,Scholar-ACL4SSR.yaml
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,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,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,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,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,dler-io/Rules/master/Clash/Provider/Media/,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,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,dler-io/Rules/master/Clash/Provider/Media/,YouTube Music.yaml
YouTube(By ACL4SSR),ACL4SSR,classical,ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/,YouTube.yaml,YouTube-ACL4SSR.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,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,dler-io/Rules/master/Clash/Provider/Media/,IQIYI.yaml
IQ,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,IQ.yaml
myTV SUPER,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,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
myTV SUPER,lhie1,classical,dler-io/Rules/master/Clash/Provider/Media/,myTV SUPER.yaml

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{i,f as r,b as s,d as a}from"./vendor-TCjgV7Sn.js";var l=a('<div class="py-2 text-center text-lg font-semibold">');const n=t=>(()=>{var e=l();return i(e,r(()=>t.children)),s(()=>e.classList.toggle("divider",!!t.withDivider)),e})();export{n as C};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{c as t,L as V,i as e,F as C,b as w,d as v,k as y,p as P,j as X,g as I,M as Z,ae as G,P as J,ap as K,aq as Q,t as A,D as U,e as Y}from"./vendor-TCjgV7Sn.js";import{c as ee,g as te,a as re,e as le,f as j,r as ae}from"./index-IZ7lrjtp.js";import{u as W,z as se,T as ne,A as ie,L as g,E as oe,F as ce,G as N,H as O,I as B,M as de,c as ge,B as ue,y as he}from"./index-k-FO5KmN.js";import{C as M}from"./ConfigTitle-_jKUZ02Y.js";var ve=v('<div class="flex flex-col gap-4"><div><select class="select select-bordered w-full"></select></div><div><select class="select select-bordered w-full"></select></div><div><select class="select select-bordered w-full">'),k=v("<option>");const fe=i=>{const[a]=W();return t(de,{ref:c=>{var o;return(o=i.ref)==null?void 0:o.call(i,c)},get icon(){return t(V,{size:24})},get title(){return a("logsSettings")},get children(){var c=ve(),o=c.firstChild,d=o.firstChild,_=o.nextSibling,b=_.firstChild,$=_.nextSibling,p=$.firstChild;return e(o,t(M,{withDivider:!0,get children(){return a("tableSize")}}),d),d.addEventListener("change",r=>se(r.target.value)),e(d,t(C,{get each(){return Object.values(ne)},children:r=>(()=>{var s=k();return s.value=r,e(s,()=>a(r)),s})()})),e(_,t(M,{withDivider:!0,get children(){return a("logLevel")}}),b),b.addEventListener("change",r=>ie(r.target.value)),e(b,t(C,{get each(){return[g.Info,g.Error,g.Warning,g.Debug,g.Silent]},children:r=>(()=>{var s=k();return s.value=r,e(s,()=>a(r)),s})()})),e($,t(M,{withDivider:!0,get children(){return a("logMaxRows")}}),p),p.addEventListener("change",r=>oe(parseInt(r.target.value))),e(p,t(C,{each:ce,children:r=>(()=>{var s=k();return s.value=r,e(s,r),s})()})),w(()=>d.value=N()),w(()=>b.value=O()),w(()=>p.value=B()),c}})};var me=v("<span>"),be=v('<div class="flex h-full flex-col gap-2"><div class="join w-full"><input type=search class="input join-item input-primary input-sm flex-1 flex-shrink-0 sm:input-md"></div><div class="overflow-x-auto whitespace-nowrap rounded-md bg-base-300"><table><thead class="sticky top-0 z-10"></thead><tbody>'),pe=v("<tr>"),_e=v('<th class=bg-base-200><div class="flex items-center"><div>'),$e=v('<tr class="hover:!bg-primary hover:text-primary-content">'),Se=v("<td class=py-2>");const q=(i,a,c,o)=>{const d=ae(i.getValue(a),c);return o({itemRank:d}),d.passed},Fe=()=>{let i;const[a]=W();let c=1;const[o,d]=y([]),_=ge("logs",{level:O()});P(()=>{const l=_();l&&(d(f=>[{...l,seq:c},...f].slice(0,B())),c++)});const[b,$]=y(""),[p,r]=X(y([]),{name:"logsTableSorting",storage:localStorage}),s=[{header:a("sequence"),accessorFn:l=>l.seq},{header:a("type"),accessorFn:l=>l.type,cell:({row:l})=>{const f=l.original.type;let u="";switch(f){case g.Error:u="text-error";break;case g.Warning:u="text-warning";break;case g.Info:u="text-info";break;case g.Debug:u="text-success";break}return(()=>{var S=me();return I(S,u),e(S,()=>`[${l.original.type}]`),S})()}},{header:a("payload"),accessorFn:l=>l.payload}],E=ee({filterFns:{fuzzy:q},state:{get globalFilter(){return b()},get sorting(){return p()}},get data(){return o()},sortDescFirst:!0,columns:s,onGlobalFilterChange:$,onSortingChange:r,globalFilterFn:q,getFilteredRowModel:te(),getSortedRowModel:re(),getCoreRowModel:le()});return(()=>{var l=be(),f=l.firstChild,u=f.firstChild,S=f.nextSibling,R=S.firstChild,D=R.firstChild,H=D.nextSibling;return u.$$input=n=>$(n.target.value),e(f,t(ue,{class:"join-item btn-sm sm:btn-md",onClick:()=>i==null?void 0:i.showModal(),get icon(){return t(Z,{})}}),null),e(D,t(G,{get each(){return E.getHeaderGroups()},children:n=>{const m=n();return(()=>{var h=pe();return e(h,t(G,{get each(){return m.headers},children:L=>{const x=L();return(()=>{var z=_e(),T=z.firstChild,F=T.firstChild;return J(F,"click",x.column.getToggleSortingHandler(),!0),e(F,()=>j(x.column.columnDef.header,x.getContext())),e(T,()=>({asc:t(K,{}),desc:t(Q,{})})[x.column.getIsSorted()]??null,null),w(()=>I(F,A(x.column.getCanSort()&&"cursor-pointer select-none","flex-1"))),z})()}})),h})()}})),e(H,t(C,{get each(){return E.getRowModel().rows},children:n=>(()=>{var m=$e();return e(m,t(C,{get each(){return n.getVisibleCells()},children:h=>(()=>{var L=Se();return e(L,()=>j(h.column.columnDef.cell,h.getContext())),L})()})),m})()})),e(l,t(fe,{ref:n=>i=n}),null),w(n=>{var m=a("search"),h=A(he(N()),"table relative rounded-none");return m!==n.e&&U(u,"placeholder",n.e=m),h!==n.t&&I(R,n.t=h),n},{e:void 0,t:void 0}),l})()};Y(["input","click"]);export{Fe as default};

View File

@ -0,0 +1 @@
import{u as O,f as e,ah as X,i as t,ai as I,aj as Z,F as x,ak as J,al as K,am as u,an as U,ao as Y,_ as C,ap as W,aq as B,ar as V,O as ee,t as v,y as L,A as te,q as ae,b as re,x as le,Q as se,$ as k,C as ne,a2 as oe,a3 as ie,B as P,a5 as ce,a1 as j,a6 as de,a9 as ue,aa as ge,a0 as q,ae as he,ag as ve,k as fe}from"./index-QV8LhAb2.js";import{c as me,g as be,a as pe,e as _e,f as A,r as $e}from"./index-DzC0BcbT.js";var Se=v('<div class="flex flex-col gap-4"><div><select class="select select-bordered w-full"></select></div><div><select class="select select-bordered w-full"></select></div><div><select class="select select-bordered w-full">'),M=v("<option>");const xe=i=>{const[r]=O();return e(ee,{ref:o=>{var c;return(c=i.ref)==null?void 0:c.call(i,o)},get icon(){return e(X,{size:24})},get title(){return r("logsSettings")},get children(){var o=Se(),c=o.firstChild,d=c.firstChild,_=c.nextSibling,m=_.firstChild,w=_.nextSibling,b=w.firstChild;return t(c,e(I,{withDivider:!0,get children(){return r("tableSize")}}),d),d.addEventListener("change",a=>Z(a.target.value)),t(d,e(x,{get each(){return Object.values(J)},children:a=>(()=>{var s=M();return s.value=a,t(s,()=>r(a)),s})()})),t(_,e(I,{withDivider:!0,get children(){return r("logLevel")}}),m),m.addEventListener("change",a=>K(a.target.value)),t(m,e(x,{get each(){return[u.Info,u.Error,u.Warning,u.Debug,u.Silent]},children:a=>(()=>{var s=M();return s.value=a,t(s,()=>r(a)),s})()})),t(w,e(I,{withDivider:!0,get children(){return r("logMaxRows")}}),b),b.addEventListener("change",a=>U(parseInt(a.target.value))),t(b,e(x,{each:Y,children:a=>(()=>{var s=M();return s.value=a,t(s,a),s})()})),C(()=>d.value=W()),C(()=>m.value=B()),C(()=>b.value=V()),o}})};let G=1;const[Ce,we]=L([]),ye=te("logs",{level:B()}),[H,Le]=L(!1);ae(()=>{const i=ye();!i||H()||(we(r=>[{...i,seq:G},...r].slice(0,V())),G++)});const Fe=()=>({logs:Ce,paused:H,setPaused:Le});var Ie=v("<span>"),ke=v('<div class="flex h-full flex-col gap-2"><div class="join w-full"><input type=search class="input input-sm join-item input-primary flex-1 flex-shrink-0"></div><div class="overflow-x-auto whitespace-nowrap rounded-md bg-base-300"><table><thead class="sticky top-0 z-10"></thead><tbody>'),Me=v("<tr>"),Re=v('<th class=bg-base-200><div class="flex items-center"><div>'),Ee=v('<tr class="hover:!bg-primary hover:text-primary-content">'),De=v("<td class=py-2>");const N=(i,r,o,c)=>{const d=$e(i.getValue(r),o);return c({itemRank:d}),d.passed},Pe=()=>{const i=re();if(!le())return i("/setup",{replace:!0}),null;let r;const[o]=O(),[c,d]=L(""),{logs:_,paused:m,setPaused:w}=Fe(),[b,a]=se(L([]),{name:"logsTableSorting",storage:localStorage}),s=[{header:o("sequence"),accessorFn:n=>n.seq},{header:o("type"),accessorFn:n=>n.type,cell:({row:n})=>{const p=n.original.type;let g="";switch(p){case u.Error:g="text-error";break;case u.Warning:g="text-warning";break;case u.Info:g="text-info";break;case u.Debug:g="text-success";break}return(()=>{var $=Ie();return k($,g),t($,()=>`[${n.original.type}]`),$})()}},{header:o("payload"),accessorFn:n=>n.payload}],R=me({filterFns:{fuzzy:N},state:{get globalFilter(){return c()},get sorting(){return b()}},get data(){return _()},sortDescFirst:!0,columns:s,onGlobalFilterChange:d,onSortingChange:a,globalFilterFn:N,getFilteredRowModel:be(),getSortedRowModel:pe(),getCoreRowModel:_e()});return(()=>{var n=ke(),p=n.firstChild,g=p.firstChild,$=p.nextSibling,E=$.firstChild,D=E.firstChild,Q=D.nextSibling;return g.$$input=l=>d(l.target.value),t(p,e(P,{class:"btn-primary join-item btn-sm",onClick:()=>w(l=>!l),get icon(){return ne(()=>!!m())()?e(oe,{}):e(ie,{})}}),null),t(p,e(P,{class:"btn-primary join-item btn-sm",onClick:()=>r==null?void 0:r.showModal(),get icon(){return e(ce,{})}}),null),t(D,e(j,{get each(){return R.getHeaderGroups()},children:l=>{const f=l();return(()=>{var h=Me();return t(h,e(j,{get each(){return f.headers},children:y=>{const S=y();return(()=>{var z=Re(),T=z.firstChild,F=T.firstChild;return de(F,"click",S.column.getToggleSortingHandler(),!0),t(F,()=>A(S.column.columnDef.header,S.getContext())),t(T,()=>({asc:e(ue,{}),desc:e(ge,{})})[S.column.getIsSorted()]??null,null),C(()=>k(F,q(S.column.getCanSort()&&"cursor-pointer select-none","flex-1"))),z})()}})),h})()}})),t(Q,e(x,{get each(){return R.getRowModel().rows},children:l=>(()=>{var f=Ee();return t(f,e(x,{get each(){return l.getVisibleCells()},children:h=>(()=>{var y=De();return t(y,()=>A(h.column.columnDef.cell,h.getContext())),y})()})),f})()})),t(n,e(xe,{ref:l=>r=l}),null),C(l=>{var f=o("search"),h=q(he(W()),"table relative rounded-none");return f!==l.e&&ve(g,"placeholder",l.e=f),h!==l.t&&k(E,l.t=h),l},{e:void 0,t:void 0}),n})()};fe(["input","click"]);export{Pe as default};

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

@ -1 +0,0 @@
import{B as z,a1 as A,a2 as N,a3 as P,a4 as q,N as H,i as c,c as h,O as M,F as O,d as C,a5 as x,v as U,e as T,w as X}from"./vendor-TCjgV7Sn.js";import{u as G,e as m,B as _,s as f,a as J,b as S,t as K}from"./index-k-FO5KmN.js";let v;const Q=new Uint8Array(16);function W(){if(!v&&(v=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!v))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return v(Q)}const a=[];for(let t=0;t<256;++t)a.push((t+256).toString(16).slice(1));function Y(t,e=0){return a[t[e+0]]+a[t[e+1]]+a[t[e+2]]+a[t[e+3]]+"-"+a[t[e+4]]+a[t[e+5]]+"-"+a[t[e+6]]+a[t[e+7]]+"-"+a[t[e+8]]+a[t[e+9]]+"-"+a[t[e+10]]+a[t[e+11]]+a[t[e+12]]+a[t[e+13]]+a[t[e+14]]+a[t[e+15]]}const Z=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),E={randomUUID:Z};function tt(t,e,d){if(E.randomUUID&&!e&&!t)return E.randomUUID();t=t||{};const i=t.random||(t.rng||W)();if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){d=d||0;for(let o=0;o<16;++o)e[d+o]=i[o];return e}return Y(i)}var et=C('<div class="mx-auto flex max-w-screen-sm flex-col items-center gap-4 py-10"><form class=contents><div class="flex w-full flex-col gap-4"><div class=flex-1><label class=label><span class=label-text></span></label><input name=url type=url class="input input-bordered w-full"placeholder=http://127.0.0.1:9090 list=defaultEndpoints><datalist id=defaultEndpoints><option value=http://127.0.0.1:9090></option></datalist></div><div class=flex-1><label class=label><span class=label-text></span></label><input name=secret type=password class="input input-bordered w-full"placeholder=secret></div></div></form><div class="grid w-full grid-cols-2 gap-4">'),nt=C('<div class="badge badge-info flex w-full cursor-pointer items-center justify-between gap-4 py-4"><span class=truncate>');const st=x.object({url:x.string().min(1),secret:x.string()}),it=()=>{const[t]=G(),e=z(),d=A(),i=n=>{S(n),d("/overview")},o=(n,s)=>X.get(n,{headers:s?{Authorization:`Bearer ${s}`}:{}}).then(({ok:l})=>l).catch(l=>{const{message:r}=l;U.error(r)}),R=async n=>{const s=m().find(l=>l.id===n);s&&await o(s.url,s.secret)&&i(n)},y=async({url:n,secret:s})=>{const l=K(n);if(!await o(l,s))return;const r=tt(),u=m().slice(),p=u.find(b=>b.url===l);if(!p){f([{id:r,url:l,secret:s},...u]),i(r);return}p.secret=s,p.id=r,f(u),i(r)},I=n=>{const{message:s}=n;U.error(s)},{form:$}=N({extend:P({schema:st}),onSubmit:y,onError:I}),L=n=>{J()===n&&S(""),f(m().filter(s=>s.id!==n))};return q(()=>{const n=new URLSearchParams(e.search);n.has("hostname")?y({url:`${window.location.protocol}//${n.get("hostname")}${n.get("port")?`:${n.get("port")}`:""}`,secret:n.get("secret")??""}):m().length===0&&y({url:"http://127.0.0.1:9090",secret:""})}),(()=>{var n=et(),s=n.firstChild,l=s.firstChild,r=l.firstChild,u=r.firstChild,p=u.firstChild,b=r.nextSibling,k=b.firstChild,D=k.firstChild,B=s.nextSibling;return H($,s,()=>$),c(p,()=>t("endpointURL")),c(D,()=>t("secret")),c(l,h(_,{type:"submit",class:"btn-primary uppercase",get children(){return t("add")}}),null),c(B,h(O,{get each(){return m()},children:({id:w,url:V})=>(()=>{var g=nt(),j=g.firstChild;return g.$$click=()=>R(w),c(j,V),c(g,h(_,{class:"btn-circle btn-ghost btn-xs text-white",onClick:F=>{F.stopPropagation(),L(w)},get children(){return h(M,{})}}),null),g})()})),n})()};T(["click"]);export{it as default};

View File

@ -0,0 +1 @@
import{u as z,a as P,b as q,c as H,v as M,o as N,e as u,d as T,i as o,f as h,B as _,I as X,F as G,t as L,z as f,s as b,g as S,h as J,j as C,k as K,l as O,m as Q}from"./index-QV8LhAb2.js";var a=[];for(var y=0;y<256;++y)a.push((y+256).toString(16).slice(1));function W(t,n=0){return(a[t[n+0]]+a[t[n+1]]+a[t[n+2]]+a[t[n+3]]+"-"+a[t[n+4]]+a[t[n+5]]+"-"+a[t[n+6]]+a[t[n+7]]+"-"+a[t[n+8]]+a[t[n+9]]+"-"+a[t[n+10]]+a[t[n+11]]+a[t[n+12]]+a[t[n+13]]+a[t[n+14]]+a[t[n+15]]).toLowerCase()}var m,Y=new Uint8Array(16);function Z(){if(!m&&(m=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!m))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return m(Y)}var tt=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);const E={randomUUID:tt};function et(t,n,x){if(E.randomUUID&&!n&&!t)return E.randomUUID();t=t||{};var l=t.random||(t.rng||Z)();return l[6]=l[6]&15|64,l[8]=l[8]&63|128,W(l)}var nt=L('<div class="mx-auto flex max-w-screen-sm flex-col items-center gap-4 py-10"><form class=contents><div class="flex w-full flex-col gap-4"><div class=flex-1><label class=label><span class=label-text></span></label><input name=url type=url class="input input-bordered w-full"placeholder=http://127.0.0.1:9090 list=defaultEndpoints><datalist id=defaultEndpoints><option value=http://127.0.0.1:9090></option></datalist></div><div class=flex-1><label class=label><span class=label-text></span></label><input name=secret type=password class="input input-bordered w-full"placeholder=secret></div></div></form><div class="grid w-full grid-cols-2 gap-4">'),st=L('<div class="badge badge-info flex w-full cursor-pointer items-center justify-between gap-4 py-4"><span class=truncate>');const at=f.object({url:f.string().min(1),secret:f.string()}),lt=()=>{const[t]=z(),n=P(),x=q(),l=s=>{C(s),x("/overview")},$=(s,e)=>O.get(s,{headers:e?{Authorization:`Bearer ${e}`}:{}}).then(({ok:r})=>r).catch(r=>{const{message:i}=r;S.error(i)}),R=async s=>{const e=u().find(r=>r.id===s);e&&await $(e.url,e.secret)&&l(s)},g=async({url:s,secret:e})=>{const r=Q(s);if(!await $(r,e))return;const i=et(),c=u().slice(),d=c.find(v=>v.url===r);if(!d){b([{id:i,url:r,secret:e},...c]),l(i);return}d.secret=e,d.id=i,b(c),l(i)},I=s=>{const{message:e}=s;S.error(e)},{form:w}=H({extend:M({schema:at}),onSubmit:g,onError:I}),k=s=>{J()===s&&C(""),b(u().filter(e=>e.id!==s))};return N(()=>{let s=n.search||window.location.search;if(s){const r=n.hash.match(/\?.*$/);Array.isArray(r)&&r[0]&&(s=r[0].replace("?",""))}const e=new URLSearchParams(s);e.has("hostname")?g({url:`${e.get("http")?"http:":e.get("https")?"https:":window.location.protocol}//${e.get("hostname")}${e.get("port")?`:${e.get("port")}`:""}`,secret:e.get("secret")??""}):u().length===0&&g({url:"http://127.0.0.1:9090",secret:""})}),(()=>{var s=nt(),e=s.firstChild,r=e.firstChild,i=r.firstChild,c=i.firstChild,d=c.firstChild,v=i.nextSibling,D=v.firstChild,j=D.firstChild,A=e.nextSibling;return T(w,e,()=>w),o(d,()=>t("endpointURL")),o(j,()=>t("secret")),o(r,h(_,{type:"submit",class:"btn-primary uppercase",get children(){return t("add")}}),null),o(A,h(G,{get each(){return u()},children:({id:U,url:V})=>(()=>{var p=st(),B=p.firstChild;return p.$$click=()=>R(U),o(B,V),o(p,h(_,{class:"btn-circle btn-ghost btn-xs text-white",onClick:F=>{F.stopPropagation(),k(U)},get children(){return h(X,{})}}),null),p})()})),s})()};K(["click"]);export{lt as default};

View File

@ -0,0 +1 @@
import{V as a,b2 as m}from"./index-QV8LhAb2.js";const s=o=>a(o).locale(m()).fromNow();export{s as f};

View File

@ -1 +0,0 @@
import{Y as a}from"./vendor-TCjgV7Sn.js";import{ad as m}from"./index-k-FO5KmN.js";const s=o=>a(o).locale(m()).fromNow();export{s as f};

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

File diff suppressed because one or more lines are too long

View File

@ -11,9 +11,8 @@
<link rel="apple-touch-icon" href="./pwa-192x192.png" />
<title>metacubexd</title>
<script type="module" crossorigin src="./assets/index-k-FO5KmN.js"></script>
<link rel="modulepreload" crossorigin href="./assets/vendor-TCjgV7Sn.js">
<link rel="stylesheet" crossorigin href="./assets/index-5ivcdObt.css">
<script type="module" crossorigin src="./assets/index-QV8LhAb2.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-BVqcsp-M.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>

Some files were not shown because too many files have changed in this diff Show More