mirror of
https://github.com/kenzok8/openwrt-packages
synced 2025-01-07 07:06:45 +08:00
update 2022-11-05 20:16:29
This commit is contained in:
parent
77a5597610
commit
3e4174fa79
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-openclash
|
||||
PKG_VERSION:=0.45.59
|
||||
PKG_VERSION:=0.45.69
|
||||
PKG_RELEASE:=beta
|
||||
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
|
||||
|
||||
@ -123,6 +123,7 @@ define Package/$(PKG_NAME)/postrm
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_custom_domain.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/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
|
||||
|
@ -198,7 +198,7 @@ local function db_foward_ssl()
|
||||
end
|
||||
|
||||
local function check_lastversion()
|
||||
luci.sys.exec("sh /usr/share/openclash/openclash_version.sh 2>/dev/null")
|
||||
luci.sys.exec("bash /usr/share/openclash/openclash_version.sh 2>/dev/null")
|
||||
return luci.sys.exec("sed -n '/^https:/,$p' /tmp/openclash_last_version 2>/dev/null")
|
||||
end
|
||||
|
||||
@ -223,7 +223,7 @@ local function coremodel()
|
||||
if opkg and opkg.info("libc") and opkg.info("libc")["libc"] then
|
||||
return opkg.info("libc")["libc"]["Architecture"]
|
||||
else
|
||||
return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null")
|
||||
return luci.sys.exec("rm -f /var/lock/opkg.lock && opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null")
|
||||
end
|
||||
end
|
||||
|
||||
@ -252,7 +252,7 @@ local function coremetacv()
|
||||
end
|
||||
|
||||
local function corelv()
|
||||
luci.sys.call("sh /usr/share/openclash/clash_version.sh")
|
||||
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")
|
||||
@ -263,26 +263,26 @@ local function opcv()
|
||||
if opkg and opkg.info("luci-app-openclash") and opkg.info("luci-app-openclash")["luci-app-openclash"] then
|
||||
return "v" .. opkg.info("luci-app-openclash")["luci-app-openclash"]["Version"]
|
||||
else
|
||||
return luci.sys.exec("opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print \"v\"$2}'")
|
||||
return luci.sys.exec("rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print \"v\"$2}'")
|
||||
end
|
||||
end
|
||||
|
||||
local function oplv()
|
||||
local new = luci.sys.call(string.format("sh /usr/share/openclash/openclash_version.sh"))
|
||||
local new = luci.sys.call(string.format("bash /usr/share/openclash/openclash_version.sh"))
|
||||
local oplv = luci.sys.exec("sed -n 1p /tmp/openclash_last_version 2>/dev/null")
|
||||
return oplv .. "," .. new
|
||||
end
|
||||
|
||||
local function opup()
|
||||
luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/openclash_version.sh >/dev/null 2>&1")
|
||||
return luci.sys.call("sh /usr/share/openclash/openclash_update.sh >/dev/null 2>&1 &")
|
||||
luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && bash /usr/share/openclash/openclash_version.sh >/dev/null 2>&1")
|
||||
return luci.sys.call("bash /usr/share/openclash/openclash_update.sh >/dev/null 2>&1 &")
|
||||
end
|
||||
|
||||
local function coreup()
|
||||
uci:set("openclash", "config", "enable", "1")
|
||||
uci:commit("openclash")
|
||||
local type = luci.http.formvalue("core_type")
|
||||
luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh >/dev/null 2>&1")
|
||||
luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && bash /usr/share/openclash/clash_version.sh >/dev/null 2>&1")
|
||||
return luci.sys.call(string.format("/usr/share/openclash/openclash_core.sh '%s' >/dev/null 2>&1 &", type))
|
||||
end
|
||||
|
||||
@ -378,7 +378,7 @@ function action_remove_all_core()
|
||||
end
|
||||
|
||||
function action_one_key_update()
|
||||
return luci.sys.call("sh /usr/share/openclash/openclash_update.sh 'one_key_update' >/dev/null 2>&1 &")
|
||||
return luci.sys.call("bash /usr/share/openclash/openclash_update.sh 'one_key_update' >/dev/null 2>&1 &")
|
||||
end
|
||||
|
||||
local function dler_login_info_save()
|
||||
@ -1145,31 +1145,49 @@ function action_refresh_log()
|
||||
line = log_tb[i]:reverse()
|
||||
line_trans = line
|
||||
ex_match = false
|
||||
core_match = false
|
||||
time_format = false
|
||||
while true do
|
||||
ex_keys = {"UDP%-Receive%-Buffer%-Size", "^Sec%-Fetch%-Mode", "^User%-Agent", "^Access%-Control", "^Accept", "^Origin", "^Referer", "^Connection", "^Pragma", "^Cache-"}
|
||||
for key=1, #ex_keys do
|
||||
if string.find (line, ex_keys[key]) then
|
||||
ex_match = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if ex_match then break end
|
||||
if not string.find (line, "level=") then
|
||||
if not string.find (line, "【") or not string.find (line, "】") then
|
||||
line_trans = trans_line_nolabel(line)
|
||||
else
|
||||
line_trans = trans_line(line)
|
||||
for key=1, #ex_keys do
|
||||
if string.find (line, ex_keys[key]) then
|
||||
ex_match = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if data == "" then
|
||||
data = line_trans
|
||||
elseif log_len == 0 and i == limit then
|
||||
data = data .."\n" .. line_trans .. "\n..."
|
||||
else
|
||||
data = data .."\n" .. line_trans
|
||||
end
|
||||
break
|
||||
end
|
||||
if ex_match then break end
|
||||
|
||||
core_keys = {" DBG ", " INF ", "level=", " WRN ", " ERR "}
|
||||
for key=1, #core_keys do
|
||||
if string.find(string.sub(line, 0, 13), core_keys[key]) or (string.find(line, core_keys[key]) and core_keys[key] == "level=") then
|
||||
core_match = true
|
||||
if core_keys[key] ~= "level=" then
|
||||
time_format = true
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
if time_format then
|
||||
if string.match(string.sub(line, 0, 8), "%d%d:%d%d:%d%d") then
|
||||
line_trans = '"'..os.date("%Y-%m-%d %H:%M:%S", tonumber(string.sub(line, 0, 8)))..'"'..string.sub(line, 9, -1)
|
||||
end
|
||||
end
|
||||
if not core_match then
|
||||
if not string.find (line, "【") or not string.find (line, "】") then
|
||||
line_trans = trans_line_nolabel(line)
|
||||
else
|
||||
line_trans = trans_line(line)
|
||||
end
|
||||
end
|
||||
if data == "" then
|
||||
data = line_trans
|
||||
elseif log_len == 0 and i == limit then
|
||||
data = data .."\n" .. line_trans .. "\n..."
|
||||
else
|
||||
data = data .."\n" .. line_trans
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
luci.http.write_json({
|
||||
len = len,
|
||||
@ -1551,7 +1569,7 @@ function all_proxies_stream_test()
|
||||
end
|
||||
|
||||
function trans_line_nolabel(data)
|
||||
local line_trans = "data"
|
||||
local line_trans = ""
|
||||
if string.match(string.sub(data, 0, 19), "%d%d%d%d%-%d%d%-%d%d %d%d:%d%d:%d%d") then
|
||||
line_trans = string.sub(data, 0, 20)..luci.i18n.translate(string.sub(data, 21, -1))
|
||||
else
|
||||
|
@ -251,6 +251,31 @@ o:depends("type", "socks5")
|
||||
o:depends("type", "trojan")
|
||||
o:depends({type = "snell", snell_version = "3"})
|
||||
|
||||
o = s:option(ListValue, "xudp", translate("XUDP Enable")..translate("(Only Meta Core)"))
|
||||
o.rmempty = true
|
||||
o.default = "false"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends({type = "vmess", udp = "true"})
|
||||
|
||||
o = s:option(Value, "packet_encoding", translate("Packet-Encoding")..translate("(Only Meta Core)"))
|
||||
o.rmempty = true
|
||||
o:depends("type", "vmess")
|
||||
|
||||
o = s:option(ListValue, "global_padding", translate("Global-Padding")..translate("(Only Meta Core)"))
|
||||
o.rmempty = true
|
||||
o.default = "false"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends("type", "vmess")
|
||||
|
||||
o = s:option(ListValue, "authenticated_length", translate("Authenticated-Length")..translate("(Only Meta Core)"))
|
||||
o.rmempty = true
|
||||
o.default = "false"
|
||||
o:value("true")
|
||||
o:value("false")
|
||||
o:depends("type", "vmess")
|
||||
|
||||
o = s:option(ListValue, "obfs", translate("obfs-mode"))
|
||||
o.rmempty = true
|
||||
o.default = "none"
|
||||
@ -449,9 +474,9 @@ o:value("http/1.1")
|
||||
o:depends("type", "trojan")
|
||||
|
||||
-- [[ alpn ]]--
|
||||
o = s:option(Value, "hysteria_alpn", translate("alpn"))
|
||||
o = s:option(DynamicList, "hysteria_alpn", translate("alpn"))
|
||||
o.rmempty = false
|
||||
o.default = "h3"
|
||||
o:value("h3")
|
||||
o:depends("type", "hysteria")
|
||||
|
||||
-- [[ grpc ]]--
|
||||
|
@ -118,12 +118,21 @@ o:depends("en_mode", "redir-host")
|
||||
o:depends("en_mode", "redir-host-tun")
|
||||
o:depends("en_mode", "redir-host-mix")
|
||||
|
||||
o = s:taboption("op_mode", Flag, "china_ip_route", translate("China IP Route"))
|
||||
o.description = translate("Bypass The China Network Flows, Improve Performance")
|
||||
o.default = 0
|
||||
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("op_mode", 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("op_mode", Flag, "china_ip_route", translate("China IP Route"))
|
||||
o.description = translate("Bypass The China Network Flows, Improve Performance, Depend on Dnsmasq")
|
||||
o.default = 0
|
||||
|
||||
o = s:taboption("op_mode", 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("op_mode", 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")
|
||||
@ -164,6 +173,7 @@ o = s:taboption("settings", Value, "github_address_mod", font_red..bold_on..tran
|
||||
o.description = translate("Modify The Github Address In The Config And OpenClash With Proxy(CDN) To Prevent File Download Faild. Format Reference:").." ".."<a href='javascript:void(0)' onclick='javascript:return winOpen(\"https://ghproxy.com/\")'>https://ghproxy.com/</a>"
|
||||
o:value("0", translate("Disable"))
|
||||
o:value("https://fastly.jsdelivr.net/")
|
||||
o:value("https://testingcf.jsdelivr.net/")
|
||||
o:value("https://raw.fastgit.org/")
|
||||
o:value("https://cdn.jsdelivr.net/")
|
||||
o.default = "0"
|
||||
@ -380,6 +390,11 @@ o.description = font_red..bold_on..translate("Sniffer Will Prevent Domain Name P
|
||||
o.default = 1
|
||||
o:depends("enable_meta_core", "1")
|
||||
|
||||
o = s:taboption("meta", Flag, "enable_meta_sniffer_pure_ip", translate("Forced Sniff Pure IP"))
|
||||
o.description = translate("Forced Sniff Pure IP Connections")
|
||||
o.default = 1
|
||||
o:depends("enable_meta_sniffer", "1")
|
||||
|
||||
o = s:taboption("meta", Flag, "enable_meta_sniffer_custom", translate("Custom Sniffer Settings"))
|
||||
o.description = translate("Custom The Force and Skip Sniffing Doamin Lists")
|
||||
o.default = 0
|
||||
@ -483,9 +498,10 @@ o = s:taboption("meta", Value, "geoip_custom_url")
|
||||
o.title = translate("Custom GeoIP Dat URL")
|
||||
o.rmempty = true
|
||||
o.description = translate("Custom GeoIP Dat URL, Click Button Below To Refresh After Edit")
|
||||
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat", translate("Loyalsoldier-Version")..translate("(Default)"))
|
||||
o:value("https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat", translate("Loyalsoldier-testingcf-jsdelivr-Version")..translate("(Default)"))
|
||||
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat", translate("Loyalsoldier-fastly-jsdelivr-Version"))
|
||||
o:value("https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geoip.dat", translate("OSDN-Version")..translate("(Default)"))
|
||||
o.default = "https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"
|
||||
o.default = "https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"
|
||||
o:depends("geoip_auto_update", "1")
|
||||
|
||||
o = s:taboption("meta", Button, translate("GEOIP Dat Update"))
|
||||
@ -527,9 +543,10 @@ o = s:taboption("meta", Value, "geosite_custom_url")
|
||||
o.title = translate("Custom GeoSite URL")
|
||||
o.rmempty = true
|
||||
o.description = translate("Custom GeoSite Data URL, Click Button Below To Refresh After Edit")
|
||||
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat", translate("Loyalsoldier-Version")..translate("(Default)"))
|
||||
o:value("https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat", translate("Loyalsoldier-testingcf-jsdelivr-Version")..translate("(Default)"))
|
||||
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat", translate("Loyalsoldier-fastly-jsdelivr-Version"))
|
||||
o:value("https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geosite.dat", translate("OSDN-Version")..translate("(Default)"))
|
||||
o.default = "https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"
|
||||
o.default = "https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"
|
||||
o:depends("geosite_auto_update", "1")
|
||||
|
||||
o = s:taboption("meta", Button, translate("GEOSITE Update"))
|
||||
@ -637,7 +654,6 @@ function o.write(self, section, value)
|
||||
end
|
||||
end
|
||||
|
||||
if op_mode == "redir-host" then
|
||||
o = s:taboption("lan_ac", Value, "chnroute_pass", translate("Chnroute Bypassed List"))
|
||||
o.template = "cbi/tvalue"
|
||||
o.description = translate("Domains or IPs in The List Will Not be Affected by The China IP Route Option, Depend on Dnsmasq")
|
||||
@ -675,7 +691,7 @@ function o.write(self, section, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---- Rules Settings
|
||||
o = s:taboption("rules", Flag, "rule_source", translate("Enable Other Rules"))
|
||||
o.description = translate("Use Other Rules")
|
||||
@ -1291,9 +1307,9 @@ o = s:taboption("geo_update", Value, "geo_custom_url")
|
||||
o.title = translate("Custom GEOIP URL")
|
||||
o.rmempty = true
|
||||
o.description = translate("Custom GEOIP Data URL, Click Button Below To Refresh After Edit")
|
||||
o:value("https://fastly.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb", translate("Alecthw-lite-Version")..translate("(Default mmdb)"))
|
||||
o:value("https://fastly.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/Country.mmdb", translate("Alecthw-Version")..translate("(All Info mmdb)"))
|
||||
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb", translate("Hackl0us-Version")..translate("(Only CN)"))
|
||||
o:value("https://testingcf.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb", translate("Alecthw-lite-Version")..translate("(Default mmdb)"))
|
||||
o:value("https://testingcf.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/Country.mmdb", translate("Alecthw-Version")..translate("(All Info mmdb)"))
|
||||
o:value("https://testingcf.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb", translate("Hackl0us-Version")..translate("(Only CN)"))
|
||||
o:value("https://geolite.clash.dev/Country.mmdb", translate("Geolite.clash.dev"))
|
||||
o.default = "http://www.ideame.top/mmdb/Country.mmdb"
|
||||
o:depends("enable_geoip_dat", 0)
|
||||
@ -1337,7 +1353,8 @@ o.rmempty = false
|
||||
o.description = translate("Custom Chnroute Lists URL, Click Button Below To Refresh After Edit")
|
||||
o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang-CN")..translate("(Default)"))
|
||||
o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang-CN-CIDR"))
|
||||
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us-CN-CIDR")..translate("(Large Size)"))
|
||||
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us-CN-CIDR-fastly-jsdelivr")..translate("(Large Size)"))
|
||||
o:value("https://testingcf.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us-CN-CIDR-testingcf-jsdelivr")..translate("(Large Size)"))
|
||||
o.default = "https://ispip.clang.cn/all_cn.txt"
|
||||
|
||||
o = s:taboption("chnr_update", Value, "chnr6_custom_url")
|
||||
@ -1347,6 +1364,16 @@ 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")
|
||||
|
@ -231,7 +231,13 @@ function line_tolocal(str){
|
||||
var dt = new Date(res[1]);
|
||||
}
|
||||
if (dt && dt != "Invalid Date"){
|
||||
cstrt[cn]=dt.getFullYear()+"-"+p(dt.getMonth()+1)+"-"+p(dt.getDate())+" "+p(dt.getHours())+":"+p(dt.getMinutes())+":"+p(dt.getSeconds())+v.substring(res[1].length + 7);
|
||||
if (v.indexOf("level=") != -1) {
|
||||
var log_info = v.substring(res[1].length + 7);
|
||||
}
|
||||
else {
|
||||
var log_info = v.substring(res[1].length + 2);
|
||||
}
|
||||
cstrt[cn]=dt.getFullYear()+"-"+p(dt.getMonth()+1)+"-"+p(dt.getDate())+" "+p(dt.getHours())+":"+p(dt.getMinutes())+":"+p(dt.getSeconds())+log_info;
|
||||
cn = cn + 1;
|
||||
}
|
||||
else{
|
||||
|
@ -307,10 +307,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
HTTP.runcheck();
|
||||
IP.getIpifyIP();
|
||||
//IP.getSpeedIP();
|
||||
|
||||
|
||||
function getPcolIP(data){
|
||||
let pcisp = data.addr.split(' ');
|
||||
$$.getElementById('ip-pcol').innerHTML = data.ip;
|
||||
@ -326,8 +323,6 @@
|
||||
$$.getElementById('ip-taobao').innerHTML = data.ip;
|
||||
IP.parseIPIpip(data.ip, 'ip-taobao-geo');
|
||||
};
|
||||
|
||||
window.onload=myip_Load();
|
||||
|
||||
function myip_Load()
|
||||
{
|
||||
@ -350,31 +345,18 @@
|
||||
tbipScript.src='https://www.taobao.com/help/getip.php?callback=ipCallback';
|
||||
tbip.appendChild(sbipScript);
|
||||
|
||||
const $$ = document;
|
||||
random = parseInt(Math.random() * 100000000);
|
||||
HTTP.runcheck();
|
||||
//HTTP.runcheck();
|
||||
IP.getIpifyIP();
|
||||
//IP.getSpeedIP();
|
||||
|
||||
function getPcolIP(data){
|
||||
let pcisp = data.addr.split(' ');
|
||||
$$.getElementById('ip-pcol').innerHTML = data.ip;
|
||||
$$.getElementById('ip-pcol-geo').innerHTML = `${data.pro}${data.city}${data.region} ${pcisp[1]}`;
|
||||
};
|
||||
|
||||
function getIpsbIP(data){
|
||||
$$.getElementById('ip-ipsb').innerHTML = data.ip;
|
||||
IP.parseIPIpip(data.ip, 'ip-ipsb-geo');
|
||||
};
|
||||
|
||||
function ipCallback(data){
|
||||
$$.getElementById('ip-taobao').innerHTML = data.ip;
|
||||
IP.parseIPIpip(data.ip, 'ip-taobao-geo');
|
||||
};
|
||||
|
||||
setTimeout("myip_Load()",Math.floor(Math.random()*(30-10+1)+10)*1000);
|
||||
}
|
||||
|
||||
HTTP.runcheck();
|
||||
IP.getIpifyIP();
|
||||
//IP.getSpeedIP();
|
||||
setInterval("HTTP.runcheck()", Math.floor(Math.random()*(10-5+1)+5)*1000);
|
||||
setInterval("myip_Load()", Math.floor(Math.random()*(30-10+1)+10)*1000);
|
||||
|
||||
|
||||
</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>');
|
||||
|
@ -39,7 +39,7 @@ sub_info_get_<%=idname%>();
|
||||
function progressbar_<%=idname%>(v, m, pc, np, f, t, tr) {
|
||||
return String.format(
|
||||
'<div style="width:250px; max-width:500px; position:relative; border:1px solid #999999; border-radius: 6px">' +
|
||||
(pc <= 50 ? '<div style="background-color:#9edd9e; width:%d%%; height:36px; border-radius: 6px">' : (pc > 50 && pc <= 80 ? '<div style="background-color:#ffc99f; width:%d%%; height:35px">' : '<div style="background-color:#ffb9b9; width:%d%%; height:35px">')) +
|
||||
(pc >= 50 ? '<div style="background-color:#9edd9e; width:%d%%; height:36px; border-radius: 6px">' : (pc < 50 && pc >= 20 ? '<div style="background-color:#ffc99f; width:%d%%; height:35px">' : '<div style="background-color:#ffb9b9; width:%d%%; height:35px">')) +
|
||||
'<div style="position:absolute; left:0;' + (tr == "null" ? 'top:12px;' : 'top:0;') + 'text-align:center; width:100%%">' +
|
||||
'<small>%s '+ (f ? f : '/') +' %s ' + (np ? "" : '(%s%%)') + (tr == "null" ? '<div style="visibility: hidden;">' : '<div style="visibility: visible;">') + '%s (<%:Remaining%> %s <%:days%>)</small>' +
|
||||
'</div>' +
|
||||
@ -60,7 +60,7 @@ function sub_info_get_<%=idname%>()
|
||||
}
|
||||
else {
|
||||
//document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "<span style=color:green>" + save_info.used + "</span> | <span style=color:green>" + save_info.total + "</span> <br/> <%:Plan Expiration Time%>: " + "<span style=color:green>" + save_info.expire + "</span>";
|
||||
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((save_info.used), (save_info.total), (save_info.percent ? save_info.percent : 0), false, false, (save_info.expire), (save_info.day_left ? save_info.day_left : 0));
|
||||
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((save_info.used), (save_info.total), (save_info.percent ? (100-save_info.percent) : 0), false, false, (save_info.expire), (save_info.day_left ? save_info.day_left : 0));
|
||||
}
|
||||
};
|
||||
|
||||
@ -71,7 +71,7 @@ function sub_info_get_<%=idname%>()
|
||||
retry_<%=idname%> = 0;
|
||||
localStorage.setItem("<%=filename%>",JSON.stringify(status));
|
||||
document.getElementById('<%=idname%>').className = "sub_tab_show";
|
||||
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((status.used), (status.total), (status.percent), false, false, (status.expire), (status.day_left));
|
||||
document.getElementById('<%=idname%>').innerHTML = progressbar_<%=idname%>((status.used), (status.total), (100-status.percent), false, false, (status.expire), (status.day_left));
|
||||
//document.getElementById('<%=idname%>').innerHTML = "<%:Plan Traffic%>" + ": " + "<span style=color:green>" + status.used + "</span> | <span style=color:green>" + status.total + "</span> <br/> <%:Plan Expiration Time%>: " + "<span style=color:green>" + status.expire + "</span>";
|
||||
}
|
||||
else if ( x && x.status == 200 && status.sub_info == "No Sub Info Found" ) {
|
||||
|
@ -14,7 +14,7 @@
|
||||
<option value="linux-armv5"><%:linux-armv5%></option>
|
||||
<option value="linux-armv6"><%:linux-armv6%></option>
|
||||
<option value="linux-armv7"><%:linux-armv7%></option>
|
||||
<option value="linux-armv8"><%:linux-armv8%></option>
|
||||
<option value="linux-arm64"><%:linux-arm64(armv8)%></option>
|
||||
<option value="linux-mips-hardfloat"><%:linux-mips-hardfloat%></option>
|
||||
<option value="linux-mips-softfloat"><%:linux-mips-softfloat%></option>
|
||||
<option value="linux-mips64"><%:linux-mips64%></option>
|
||||
|
@ -170,6 +170,9 @@ msgstr "实验性:绕过中国大陆 IPv6"
|
||||
msgid "Bypass The China Network Flows, Improve Performance"
|
||||
msgstr "启用后中国大陆流量将不再经过内核,提升系统性能"
|
||||
|
||||
msgid "Bypass The China Network Flows, Improve Performance, Depend on Dnsmasq"
|
||||
msgstr "启用后中国大陆流量将不再经过内核,提升系统性能,此功能依赖于 Dnsmasq"
|
||||
|
||||
msgid "Log Level"
|
||||
msgstr "日志等级"
|
||||
|
||||
@ -730,6 +733,9 @@ msgstr "混淆参数(可选)"
|
||||
msgid "UDP Enable"
|
||||
msgstr "UDP 支持"
|
||||
|
||||
msgid "XUDP Enable"
|
||||
msgstr "XUDP 支持"
|
||||
|
||||
msgid "obfs-mode"
|
||||
msgstr "传输协议"
|
||||
|
||||
@ -1450,6 +1456,9 @@ msgstr "大陆IPv6段更新URL"
|
||||
msgid "Custom Chnroute Lists URL"
|
||||
msgstr "大陆IP段更新URL"
|
||||
|
||||
msgid "Custom CN Doamin Lists URL"
|
||||
msgstr "大陆域名列表文件更新URL"
|
||||
|
||||
msgid "Custom GEOIP Data URL, Click Button Below To Refresh After Edit"
|
||||
msgstr "自定义 GEOIP 数据库的更新来源,编辑后点击下方按钮生效"
|
||||
|
||||
@ -1462,6 +1471,9 @@ 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 "(默认)"
|
||||
|
||||
@ -1720,36 +1732,54 @@ 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 数据库..."
|
||||
|
||||
@ -1942,7 +1972,7 @@ msgstr "提示: 检测到 GEOIP Dat 数据库文件不存在,准备开始下
|
||||
msgid "Tip: Detected that the Core is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到内核文件不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the Chnroute Cidr List is not Installed, Ready to Download..."
|
||||
msgid "Tip: Detected that the Chnroute Cidr or CN Domains List is not Installed, Ready to Download..."
|
||||
msgstr "提示: 检测到大陆白名单列表不存在,准备开始下载..."
|
||||
|
||||
msgid "Tip: Detected that the Chnroute Cidr List Format is wrong, Ready to Reformat..."
|
||||
@ -2617,8 +2647,8 @@ msgstr "Bilibili 策略组:"
|
||||
msgid "Google Group:"
|
||||
msgstr "Google 策略组:"
|
||||
|
||||
msgid "full support."
|
||||
msgstr "完整解锁。"
|
||||
msgid "full support"
|
||||
msgstr "完整解锁"
|
||||
|
||||
msgid "full support, area:"
|
||||
msgstr "完整解锁,区域:"
|
||||
@ -2629,8 +2659,8 @@ msgstr "仅支持自制剧!"
|
||||
msgid "unlock test faild!"
|
||||
msgstr "解锁检测失败!"
|
||||
|
||||
msgid "the type of group is not select, auto select could not work!"
|
||||
msgstr "当前策略组类型非Select,无法进行自动选择!"
|
||||
msgid ", the type of group is not select, auto select could not work!"
|
||||
msgstr ",当前策略组类型非Select,无法进行自动选择!"
|
||||
|
||||
msgid "Start auto select unlock proxy..."
|
||||
msgstr "开始进行解锁节点自动选择..."
|
||||
@ -2683,20 +2713,26 @@ msgstr "解锁节点自动选择失败,未找到区域匹配的节点,回退
|
||||
msgid "unlock node auto selected successfully, no node match the old region, rolled back to other full support node"
|
||||
msgstr "解锁节点自动选择成功,未找到与先前解锁区域匹配的节点,回退到其他区域且符合条件的解锁节点"
|
||||
|
||||
msgid "full support but not match the regex!"
|
||||
msgstr "完整解锁但区域不匹配!"
|
||||
msgid ", but not match the regex!"
|
||||
msgstr ",但区域与设置不匹配!"
|
||||
|
||||
msgid "full support but not match the old region!"
|
||||
msgstr "完整解锁但与先前解锁区域不匹配!"
|
||||
|
||||
msgid "but not match the regex! the type of group is not select, auto select could not work!"
|
||||
msgstr "完整解锁但区域不匹配!当前策略组类型非 Select,无法进行自动选择!"
|
||||
msgid ", but not match the old region:"
|
||||
msgstr ",但不匹配先前解锁区域:"
|
||||
|
||||
msgid "the type of group is not select, auto select could not work!"
|
||||
msgstr "当前策略组类型非 Select,无法进行自动选择!"
|
||||
|
||||
msgid ",but not match the regex! the type of group is not select, auto select could not work!"
|
||||
msgstr "完整解锁但区域与设置不匹配!当前策略组类型非 Select,无法进行自动选择!"
|
||||
|
||||
msgid "but not match the old region! the type of group is not select, auto select could not work!"
|
||||
msgstr "完整解锁但与先前解锁区域不匹配!当前策略组类型非 Select,无法进行自动选择!"
|
||||
msgstr "但与先前解锁区域不匹配!当前策略组类型非 Select,无法进行自动选择!"
|
||||
|
||||
msgid "full support but not match the regex! start auto select unlock proxy..."
|
||||
msgstr "完整解锁但区域不匹配!开始进行解锁节点自动选择..."
|
||||
msgid ", but not match the regex! start auto select unlock proxy..."
|
||||
msgstr ",但区域与设置不匹配!开始进行解锁节点自动选择..."
|
||||
|
||||
msgid "unlock node test finished, rolled back to the full support node"
|
||||
msgstr "解锁检测完成,回退到完整解锁的节点"
|
||||
@ -3141,3 +3177,42 @@ msgstr "Google 非送中"
|
||||
|
||||
msgid "In Fake-ip Mode, Even If This Option is Turned Off, Domain Type Connections Still Pass Through The Core For The Availability"
|
||||
msgstr "在 Fake-IP 模式时,即使关闭此选项,域名类型的连接仍将通过核心以保证可用性"
|
||||
|
||||
msgid "Warning: TUN Interface Start Failed, Please Check The Dependence or Try to Restart Again!"
|
||||
msgstr "警告:TUN 接口启动失败,请检查依赖情况或稍后重试!"
|
||||
|
||||
msgid "Warning: TUN Interface Start Failed, Try to Restart Again..."
|
||||
msgstr "警告:TUN 接口启动失败,尝试重启内核..."
|
||||
|
||||
msgid "Forced Sniff Pure IP Connections"
|
||||
msgstr "强制探测(嗅探)所有纯 IP 的连接"
|
||||
|
||||
msgid "Forced Sniff Pure IP"
|
||||
msgstr "探测(嗅探)纯 IP 连接"
|
||||
|
||||
msgid "Download Failed:"
|
||||
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 代替..."
|
||||
|
||||
msgid "Tip: Firewall4 was Detected, Use NFTABLE Rules..."
|
||||
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 "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 正常工作..."
|
||||
|
@ -58,11 +58,12 @@ config openclash 'config'
|
||||
option dashboard_type 'Official'
|
||||
option yacd_type 'Official'
|
||||
option append_default_dns '1'
|
||||
option geo_custom_url 'https://fastly.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb'
|
||||
option geosite_custom_url 'https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat'
|
||||
option geoip_custom_url 'https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat'
|
||||
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 group 'nameserver'
|
||||
|
@ -249,6 +249,7 @@ if [ -z "$(pidof clash)" ] && [ "$provider_path_check" == "false" ]; then
|
||||
LOG_OUT "Error: Failed To Download Rule-providers, Please Check The Log Page For Detailed error information!"
|
||||
fi
|
||||
LOG_ALERT
|
||||
LOG_OUT "Tip: You Can Try to Restart With Meta Core"
|
||||
start_fail
|
||||
fi
|
||||
}
|
||||
@ -365,7 +366,7 @@ yml_other_rules_get()
|
||||
check_run_quick()
|
||||
{
|
||||
quick_start=true
|
||||
check_file="$(echo $RAW_CONFIG_FILE | tr " " "?") /etc/openclash/custom/openclash_custom_domain_dns.list /etc/openclash/custom/openclash_custom_domain_dns_policy.list /etc/openclash/custom/openclash_custom_fake_filter.list /etc/openclash/custom/openclash_custom_fallback_filter.yaml /etc/openclash/custom/openclash_custom_hosts.list /etc/openclash/custom/openclash_custom_rules.list /etc/openclash/custom/openclash_custom_rules_2.list $dev_core_path $tun_core_path $meta_core_path $ipdb_path $geosite_path $geoip_path $chnr_path $chnr6_path /usr/share/openclash/res/ConnersHua.yaml /usr/share/openclash/res/ConnersHua_return.yaml /usr/share/openclash/res/lhie1.yaml /etc/openclash/custom/openclash_force_sniffing_domain.yaml /etc/openclash/custom/openclash_sniffing_domain_filter.yaml /etc/openclash/custom/openclash_sniffing_port_filter.yaml /etc/openclash/custom/openclash_custom_localnetwork_ipv4.list /etc/openclash/custom/openclash_custom_localnetwork_ipv6.list /etc/openclash/custom/openclash_custom_chnroute_pass.list /etc/openclash/custom/openclash_custom_chnroute6_pass.list"
|
||||
check_file="$(echo $RAW_CONFIG_FILE | tr " " "?") /etc/openclash/custom/openclash_custom_domain_dns.list /etc/openclash/custom/openclash_custom_domain_dns_policy.list /etc/openclash/custom/openclash_custom_fake_filter.list /etc/openclash/custom/openclash_custom_fallback_filter.yaml /etc/openclash/custom/openclash_custom_hosts.list /etc/openclash/custom/openclash_custom_rules.list /etc/openclash/custom/openclash_custom_rules_2.list $dev_core_path $tun_core_path $meta_core_path $ipdb_path $geosite_path $geoip_path $chnr_path $chnr6_path /usr/share/openclash/res/ConnersHua.yaml /usr/share/openclash/res/ConnersHua_return.yaml /usr/share/openclash/res/lhie1.yaml /etc/openclash/custom/openclash_force_sniffing_domain.yaml /etc/openclash/custom/openclash_sniffing_domain_filter.yaml /etc/openclash/custom/openclash_sniffing_port_filter.yaml /etc/openclash/custom/openclash_custom_localnetwork_ipv4.list /etc/openclash/custom/openclash_custom_localnetwork_ipv6.list /etc/openclash/custom/openclash_custom_chnroute_pass.list /etc/openclash/custom/openclash_custom_chnroute6_pass.list $cndomain_path"
|
||||
if [ ! -f "$CONFIG_FILE" ] || [ ! -f "/tmp/openclash_config.tmp" ] || [ ! -f "/tmp/openclash.change" ]; then
|
||||
quick_start=false
|
||||
return
|
||||
@ -467,11 +468,13 @@ do_run_file()
|
||||
chnr6_path="/etc/openclash/china_ip6_route.ipset"
|
||||
geosite_path="/etc/openclash/GeoSite.dat"
|
||||
geoip_path="/etc/openclash/GeoIP.dat"
|
||||
cndomain_path="/etc/openclash/accelerated-domains.china.conf"
|
||||
mv "/tmp/etc/openclash/Country.mmdb" "$ipdb_path" 2>/dev/null
|
||||
mv "/tmp/etc/openclash/china_ip_route.ipset" "$chnr_path" 2>/dev/null
|
||||
mv "/tmp/etc/openclash/china_ip6_route.ipset" "$chnr6_path" 2>/dev/null
|
||||
mv "/tmp/etc/openclash/GeoSite.dat" "$geosite_path" 2>/dev/null
|
||||
mv "/tmp/etc/openclash/GeoIP.dat" "$geoip_path" 2>/dev/null
|
||||
mv "/tmp/etc/openclash/accelerated-domains.china.conf" "$cndomain_path" 2>/dev/null
|
||||
mv "/tmp/etc/openclash/core/" "/etc/openclash" 2>/dev/null
|
||||
if [ "$CACHE_PATH" != "/tmp/etc/openclash/cache.db" ]; then
|
||||
rm -rf "/tmp/etc/openclash" 2>/dev/null
|
||||
@ -485,11 +488,13 @@ do_run_file()
|
||||
chnr6_path="/tmp/etc/openclash/china_ip6_route.ipset"
|
||||
geosite_path="/tmp/etc/openclash/GeoSite.dat"
|
||||
geoip_path="/tmp/etc/openclash/GeoIP.dat"
|
||||
cndomain_path="/tmp/etc/openclash/accelerated-domains.china.conf"
|
||||
[ ! -h "/etc/openclash/Country.mmdb" ] && mv "/etc/openclash/Country.mmdb" "$ipdb_path" 2>/dev/null
|
||||
[ ! -h "/etc/openclash/china_ip_route.ipset" ] && mv "/etc/openclash/china_ip_route.ipset" "$chnr_path" 2>/dev/null
|
||||
[ ! -h "/etc/openclash/china_ip6_route.ipset" ] && mv "/etc/openclash/china_ip6_route.ipset" "$chnr6_path" 2>/dev/null
|
||||
[ ! -h "/etc/openclash/GeoSite.dat" ] && mv "/etc/openclash/GeoSite.dat" "$geosite_path" 2>/dev/null
|
||||
[ ! -h "/etc/openclash/GeoIP.dat" ] && mv "/etc/openclash/GeoIP.dat" "$geoip_path" 2>/dev/null
|
||||
[ ! -h "/etc/openclash/accelerated-domains.china.conf" ] && mv "/etc/openclash/accelerated-domains.china.conf" "$cndomain_path" 2>/dev/null
|
||||
mv "/etc/openclash/core/" "/tmp/etc/openclash" 2>/dev/null
|
||||
fi
|
||||
|
||||
@ -559,7 +564,7 @@ do_run_file()
|
||||
start_fail
|
||||
else
|
||||
del_lock
|
||||
restart
|
||||
stop
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
@ -590,7 +595,11 @@ do_run_file()
|
||||
|
||||
if [ "$china_ip_route" = "1" ] || [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then
|
||||
if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ]; then
|
||||
LOG_OUT "Tip: Detected that the Chnroute Cidr List is not Installed, Ready to Download..."
|
||||
LOG_OUT "Tip: Detected that the Chnroute Cidr or CN Domains List is not Installed, Ready to Download..."
|
||||
/usr/share/openclash/openclash_chnroute.sh
|
||||
fi
|
||||
if [ ! -f "$cndomain_path" ] && [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
LOG_OUT "Tip: Detected that the Chnroute Cidr or CN Domains List is not Installed, Ready to Download..."
|
||||
/usr/share/openclash/openclash_chnroute.sh
|
||||
fi
|
||||
if [ -n "$FW4" ]; then
|
||||
@ -613,6 +622,9 @@ do_run_file()
|
||||
if [ ! -f "$chnr_path" ] || [ ! -f "$chnr6_path" ]; then
|
||||
start_fail
|
||||
fi
|
||||
if [ ! -f "$cndomain_path" ] && [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
start_fail
|
||||
fi
|
||||
fi
|
||||
|
||||
[ ! -x "$tun_core_path" ] && chmod 4755 "$tun_core_path" 2>/dev/null
|
||||
@ -638,6 +650,10 @@ do_run_file()
|
||||
[ -f "$chnr6_path" ] && [ "$small_flash_memory" = "1" ] && {
|
||||
ln -s "$chnr6_path" /etc/openclash/china_ip6_route.ipset 2>/dev/null
|
||||
}
|
||||
|
||||
[ -f "$cndomain_path" ] && [ "$small_flash_memory" = "1" ] && {
|
||||
ln -s "$cndomain_path" /etc/openclash/accelerated-domains.china.conf 2>/dev/null
|
||||
}
|
||||
|
||||
#Restore history cache
|
||||
if [ -f "$HISTORY_PATH" ] && [ -f "$HISTORY_PATH_OLD" ]; then
|
||||
@ -1214,9 +1230,11 @@ if dnsmasq --version | grep -q 'Compile time options:.* nftset'; then
|
||||
nftflag="inet#fw4#"
|
||||
else
|
||||
settype="ipset"
|
||||
[ -n "$FW4" ] && LOG_OUT "Warning: Dnsmasq not Support nftset, Use ipset..."
|
||||
fi
|
||||
|
||||
if [ -n "$FW4" ]; then
|
||||
LOG_OUT "Tip: Firewall4 was Detected, Use NFTABLE Rules..."
|
||||
if [ "$china_ip_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then
|
||||
nft 'flush set inet fw4 china_ip_route'
|
||||
nft -f '/etc/openclash/china_ip_route.ipset' 2>/dev/null
|
||||
@ -1239,15 +1257,34 @@ if [ -n "$FW4" ]; then
|
||||
nft 'flush set inet fw4 china_ip_route_pass' 2>/dev/null
|
||||
nft -f '/tmp/openclash_china_ip_route_pass.list' 2>/dev/null
|
||||
rm -rf /tmp/openclash_china_ip_route_pass.list 2>/dev/null
|
||||
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
cp "$cndomain_path" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
cat "$cndomain_path" |awk -v dns="${custom_china_domain_dns_server}" -F '/' '!/^$/&&!/^#/{print $1"/"$2"/"dns}' >/tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
for i in `awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("%s\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list`
|
||||
do
|
||||
sed -i "/server=\/${i}\//d" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
done 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
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 [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(nft list chain inet fw4 dstnat |grep 'OpenClash DNS Hijack')"]; then
|
||||
DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port)
|
||||
if [ -z "$DNSPORT" ]; then
|
||||
DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo "$dns_port")
|
||||
fi
|
||||
nft insert rule inet fw4 dstnat position 0 tcp dport 53 redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft insert rule inet fw4 dstnat position 0 udp dport 53 redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft insert rule inet fw4 dstnat position 0 tcp dport 53 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft insert rule inet fw4 dstnat position 0 udp dport 53 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
fi
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
LOG_OUT "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..."
|
||||
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 add 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 add 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 add rule inet fw4 nat_output position 0 tcp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
fi
|
||||
|
||||
#lan_google_dns_ac
|
||||
@ -1345,6 +1382,7 @@ if [ -n "$FW4" ]; then
|
||||
#nft 'delete chain inet fw4 openclash_post' 2>/dev/null
|
||||
nft 'add chain inet fw4 openclash_post' 2>/dev/null
|
||||
nft 'flush chain inet fw4 openclash_post' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_post ip saddr @localnetwork tcp sport @lan_ac_black_ports counter return' 2>/dev/null
|
||||
nft add rule inet fw4 openclash_post meta mark "$PROXY_FWMARK" counter accept 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_post ip daddr @localnetwork counter return' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_post meta nfproto {ipv4} fib saddr type != { local } meta skuid != 65534 counter masquerade' 2>/dev/null
|
||||
@ -1383,9 +1421,9 @@ if [ -n "$FW4" ]; then
|
||||
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
nft 'add rule inet fw4 openclash tcp dport != @common_ports counter return' 2>/dev/null
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
nft add rule inet fw4 openclash ip protocol tcp counter redirect to "$proxy_port" 2>/dev/null
|
||||
nft 'add rule inet fw4 dstnat ip protocol tcp counter jump openclash' 2>/dev/null
|
||||
@ -1413,9 +1451,9 @@ if [ -n "$FW4" ]; then
|
||||
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle udp dport != @common_ports counter return' 2>/dev/null
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
|
||||
nft add rule inet fw4 openclash_mangle meta l4proto { udp } mark set "$PROXY_FWMARK" tproxy ip to 127.0.0.1:"$tproxy_port" counter accept 2>/dev/null
|
||||
@ -1453,12 +1491,12 @@ if [ -n "$FW4" ]; then
|
||||
nft add rule inet fw4 openclash_output tcp dport != @common_ports skuid != 65534 counter return 2>/dev/null
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
nft 'add rule inet fw4 openclash_output ip daddr @wan_ac_black_ips counter return' 2>/dev/null
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_output skuid != 65534 ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_output skuid != 65534 ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
nft add rule inet fw4 openclash_output ip protocol tcp skuid != 65534 counter redirect to "$proxy_port" 2>/dev/null
|
||||
nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }'
|
||||
nft 'add chain inet fw4 nat_output { type nat hook output priority -1; }' 2>/dev/null
|
||||
nft 'add rule inet fw4 nat_output ip protocol tcp counter jump openclash_output' 2>/dev/null
|
||||
fi
|
||||
|
||||
@ -1466,15 +1504,34 @@ if [ -n "$FW4" ]; then
|
||||
#TUN模式
|
||||
#启动TUN
|
||||
TUN_WAIT=0
|
||||
TUN_RESTART=1
|
||||
ip link set utun up
|
||||
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] )
|
||||
LOG_OUT "Tip: Waiting for TUN Interface Start..."
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 10 ] )
|
||||
do
|
||||
ip link set utun up
|
||||
let TUN_WAIT++
|
||||
sleep 2
|
||||
done
|
||||
|
||||
if [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -gt 10 ]; then
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_RESTART" -le 3 ] )
|
||||
do
|
||||
LOG_OUT "Warning: TUN Interface Start Failed, Try to Restart Again..."
|
||||
kill_clash
|
||||
sleep 3
|
||||
start_run_core
|
||||
check_core_status
|
||||
sleep 10
|
||||
let TUN_RESTART++
|
||||
done
|
||||
if [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_RESTART" -gt 3 ]; then
|
||||
LOG_OUT "Warning: TUN Interface Start Failed, Please Check The Dependence or Try to Restart Again!"
|
||||
start_fail
|
||||
fi
|
||||
fi
|
||||
|
||||
ip route replace default dev utun table "$PROXY_ROUTE_TABLE"
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE"
|
||||
|
||||
@ -1490,8 +1547,14 @@ if [ -n "$FW4" ]; then
|
||||
if [ "$en_mode_tun" -eq 1 ]; then
|
||||
nft add rule inet fw4 openclash_mangle_output meta l4proto {tcp,udp} th dport { 0-65535 } ip daddr {198.18.0.0/16} mark set "$PROXY_FWMARK" 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_mangle_output meta l4proto {tcp,udp} th dport != @common_ports skuid != 65534 counter return' 2>/dev/null
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle_output skuid != 65534 ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
nft add rule inet fw4 openclash_mangle_output tcp dport { 0-65535 } skuid != 65534 meta mark set "$PROXY_FWMARK" 2>/dev/null
|
||||
else
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle_output skuid != 65534 ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
nft add rule inet fw4 openclash_mangle_output skuid != 65534 udp dport { 0-65535 } ip daddr {198.18.0.0/16} meta mark set "$PROXY_FWMARK" 2>/dev/null
|
||||
fi
|
||||
elif [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -eq 1 ]; then
|
||||
@ -1520,9 +1583,9 @@ if [ -n "$FW4" ]; then
|
||||
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle meta l4proto {tcp,udp} th dport != @common_ports counter return' 2>/dev/null
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
nft 'add rule inet fw4 openclash_mangle ip daddr @china_ip_route ip daddr != @china_ip_route_pass counter return' 2>/dev/null
|
||||
fi
|
||||
nft add rule inet fw4 openclash_mangle meta l4proto {tcp,udp} th dport { 0-65535 } mark set "$PROXY_FWMARK" 2>/dev/null
|
||||
|
||||
@ -1563,6 +1626,12 @@ if [ -n "$FW4" ]; then
|
||||
nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} tcp dport 53 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft insert rule inet fw4 dstnat position 0 meta nfproto {ipv6} udp dport 53 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
fi
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "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 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
|
||||
fi
|
||||
|
||||
if [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then
|
||||
nft 'flush set inet fw4 china_ip6_route'
|
||||
@ -1582,11 +1651,28 @@ if [ -n "$FW4" ]; then
|
||||
echo "}" >>/tmp/openclash_china_ip6_route_pass.list
|
||||
echo 'add element inet fw4 china_ip6_route_pass $china_ip6_route_pass' >>/tmp/openclash_china_ip6_route_pass.list
|
||||
}
|
||||
awk '!/^$/&&!/^#/&&/^(\*?\.?)*[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$/{printf("'${settype}'=/%s/'${nftflag}'china_ip6_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute6_pass.list >>/tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
awk '!/^$/&&!/^#/&&/^(\*?\.?)*[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$/{printf("'${settype}'=/%s/'${nftflag}'china_ip_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute6_pass.list >>/tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
|
||||
nft 'flush set inet fw4 china_ip6_route_pass' 2>/dev/null
|
||||
nft -f '/tmp/openclash_china_ip6_route_pass.list' 2>/dev/null
|
||||
rm -rf /tmp/openclash_china_ip6_route_pass.list 2>/dev/null
|
||||
|
||||
#Prevent domain repeat
|
||||
for i in `grep -wf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf`
|
||||
do
|
||||
if [ -n "$nftflag" ]; then
|
||||
sed -i "s:${i}:${i},6#${nftflag}china_ip6_route_pass:g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf
|
||||
else
|
||||
sed -i "s:${i}:${i},china_ip6_route_pass:g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf
|
||||
fi
|
||||
sed -i 's:'$i':EXCLUSIVE:;/EXCLUSIVE/d' /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf
|
||||
done 2>/dev/null
|
||||
if [ -n "$nftflag" ]; then
|
||||
sed -i "s/\/${nftflag}/\/4#${nftflag}/g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf 2>/dev/null
|
||||
sed -i "s/${nftflag}china_ip_route_pass/6#${nftflag}china_ip6_route_pass/g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
else
|
||||
sed -i "s/china_ip_route_pass/china_ip6_route_pass/g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
#local
|
||||
@ -1670,6 +1756,7 @@ if [ -n "$FW4" ]; then
|
||||
#nft 'delete chain inet fw4 openclash_post_v6' 2>/dev/null
|
||||
nft 'add chain inet fw4 openclash_post_v6' 2>/dev/null
|
||||
nft 'flush chain inet fw4 openclash_post_v6' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_post_v6 ip6 saddr @localnetwork6 meta nfproto {ipv6} sport @lan_ac_black_ports counter return' 2>/dev/null
|
||||
nft add rule inet fw4 openclash_post_v6 meta nfproto {ipv6} meta mark "$PROXY_FWMARK" counter accept 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_post_v6 ip6 daddr @localnetwork6 counter return' 2>/dev/null
|
||||
nft 'add rule inet fw4 openclash_post_v6 meta nfproto {ipv6} fib saddr type != { local } meta skuid != 65534 counter masquerade' 2>/dev/null
|
||||
@ -1712,15 +1799,33 @@ else
|
||||
ipset -! flush china_ip_route_pass 2>/dev/null
|
||||
ipset -! restore </tmp/openclash_china_ip_route_pass.list 2>/dev/null
|
||||
rm -rf /tmp/openclash_china_ip_route_pass.list 2>/dev/null
|
||||
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
cp "$cndomain_path" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
cat "$cndomain_path" |awk -v dns="${custom_china_domain_dns_server}" -F '/' '!/^$/&&!/^#/{print $1"/"$2"/"dns}' >/tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
for i in `awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("%s\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list`
|
||||
do
|
||||
sed -i "/server=\/${i}\//d" /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf 2>/dev/null
|
||||
done 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
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 [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL PREROUTING --line-number |grep 'OpenClash DNS Hijack')"]; then
|
||||
DNSPORT=$(uci -q get dhcp.@dnsmasq[0].port)
|
||||
if [ -z "$DNSPORT" ]; then
|
||||
DNSPORT=$(netstat -nlp |grep -E '127.0.0.1:.*dnsmasq' |awk -F '127.0.0.1:' '{print $2}' |awk '{print $1}' |head -1 || echo "$dns_port")
|
||||
fi
|
||||
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack"
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack"
|
||||
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
fi
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
LOG_OUT "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..."
|
||||
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 5353 -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 5353 -m owner ! --uid-owner 65534 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
fi
|
||||
|
||||
#lan_google_dns_ac
|
||||
@ -1824,10 +1929,11 @@ else
|
||||
if [ "$bypass_gateway_compatible" -eq 1 ]; then
|
||||
iptables -t nat -N openclash_post
|
||||
iptables -t nat -F openclash_post
|
||||
iptables -t nat -A openclash_post -m mark --mark "$PROXY_FWMARK" -m comment --comment "OpenClash Bypass Gateway Compatible" -j ACCEPT
|
||||
iptables -t nat -A openclash_post -m comment --comment "OpenClash Bypass Gateway Compatible" -m set --match-set localnetwork dst -j RETURN
|
||||
iptables -t nat -A openclash_post -m addrtype ! --src-type LOCAL -m owner ! --uid-owner 65534 -m comment --comment "OpenClash Bypass Gateway Compatible" -j MASQUERADE
|
||||
iptables -t nat -A POSTROUTING -j openclash_post
|
||||
iptables -t nat -A openclash_post -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t nat -A openclash_post -m mark --mark "$PROXY_FWMARK" -j ACCEPT
|
||||
iptables -t nat -A openclash_post -m set --match-set localnetwork dst -j RETURN
|
||||
iptables -t nat -A openclash_post -m addrtype ! --src-type LOCAL -m owner ! --uid-owner 65534 -j MASQUERADE
|
||||
iptables -t nat -A POSTROUTING -m comment --comment "OpenClash Bypass Gateway Compatible" -j openclash_post
|
||||
fi
|
||||
|
||||
#intranet allowed
|
||||
@ -1852,7 +1958,7 @@ else
|
||||
if [ -z "$en_mode_tun" ] && [ "$en_mode" = "fake-ip" ]; then
|
||||
iptables -t nat -A openclash -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port"
|
||||
fi
|
||||
iptables -t nat -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t nat -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t nat -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1
|
||||
iptables -t nat -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
|
||||
iptables -t nat -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1
|
||||
@ -1860,9 +1966,9 @@ else
|
||||
iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t nat -A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t nat -A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port"
|
||||
iptables -t nat -A PREROUTING -p tcp -j openclash
|
||||
@ -1882,7 +1988,7 @@ else
|
||||
if [ "$en_mode" = "fake-ip" ]; then
|
||||
iptables -t mangle -A openclash -p udp -d 198.18.0.0/16 -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
|
||||
@ -1890,9 +1996,9 @@ else
|
||||
iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t mangle -A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t mangle -A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$tproxy_port" --tproxy-mark "$PROXY_FWMARK"
|
||||
@ -1926,13 +2032,13 @@ else
|
||||
iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port"
|
||||
fi
|
||||
iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN
|
||||
iptables -t nat -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t nat -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
iptables -t nat -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j REDIRECT --to-ports "$proxy_port"
|
||||
else
|
||||
@ -1940,7 +2046,7 @@ else
|
||||
iptables -t nat -N openclash_output
|
||||
iptables -t nat -F openclash_output
|
||||
iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN
|
||||
iptables -t nat -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t nat -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t nat -A openclash_output -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port"
|
||||
fi
|
||||
fi
|
||||
@ -1951,15 +2057,34 @@ else
|
||||
#TUN模式
|
||||
#启动TUN
|
||||
TUN_WAIT=0
|
||||
TUN_RESTART=1
|
||||
ip link set utun up
|
||||
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] )
|
||||
LOG_OUT "Tip: Waiting for TUN Interface Start..."
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 10 ] )
|
||||
do
|
||||
ip link set utun up
|
||||
let TUN_WAIT++
|
||||
sleep 2
|
||||
done
|
||||
|
||||
if [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -gt 10 ]; then
|
||||
while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_RESTART" -le 3 ] )
|
||||
do
|
||||
LOG_OUT "Warning: TUN Interface Start Failed, Try to Restart Again..."
|
||||
kill_clash
|
||||
sleep 3
|
||||
start_run_core
|
||||
check_core_status
|
||||
sleep 10
|
||||
let TUN_RESTART++
|
||||
done
|
||||
if [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_RESTART" -gt 3 ]; then
|
||||
LOG_OUT "Warning: TUN Interface Start Failed, Please Check The Dependence or Try to Restart Again!"
|
||||
start_fail
|
||||
fi
|
||||
fi
|
||||
|
||||
ip route replace default dev utun table "$PROXY_ROUTE_TABLE"
|
||||
ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE"
|
||||
|
||||
@ -1971,16 +2096,22 @@ else
|
||||
iptables -t mangle -N openclash_output
|
||||
iptables -t mangle -F openclash_output
|
||||
iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN
|
||||
iptables -t mangle -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t mangle -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
if [ "$en_mode_tun" -eq 1 ]; then
|
||||
if [ -z "$_koolshare" ]; then
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK"
|
||||
else
|
||||
iptables -t mangle -A openclash_output -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
elif [ -z "$_koolshare" ]; then
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
|
||||
fi
|
||||
iptables -t mangle -A OUTPUT -j openclash_output
|
||||
@ -1988,7 +2119,7 @@ else
|
||||
iptables -t mangle -N openclash_output
|
||||
iptables -t mangle -F openclash_output
|
||||
iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN
|
||||
iptables -t mangle -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t mangle -A openclash_output -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash_output -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
@ -2004,7 +2135,7 @@ else
|
||||
iptables -t mangle -F openclash_dns_hijack
|
||||
#其他流量
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
iptables -t mangle -A openclash -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
|
||||
iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1
|
||||
@ -2012,9 +2143,9 @@ else
|
||||
iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1
|
||||
if [ "$en_mode" = "redir-host" ]; then
|
||||
iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t mangle -A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
if [ "$china_ip_route" = "1" ]; then
|
||||
iptables -t mangle -A openclash -m set --match-set china_ip_route dst -m set ! --match-set china_ip_route_pass dst -j RETURN >/dev/null 2>&1
|
||||
fi
|
||||
iptables -t mangle -A openclash -j MARK --set-mark "$PROXY_FWMARK"
|
||||
|
||||
@ -2054,8 +2185,14 @@ else
|
||||
#ipv6
|
||||
if [ "$ipv6_enable" -eq 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then
|
||||
if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(ip6tables -t nat -nL PREROUTING --line-number |grep 'DNS Hijack')"]; then
|
||||
ip6tables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack"
|
||||
ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack"
|
||||
ip6tables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
ip6tables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
fi
|
||||
if [ "$en_mode" = "fake-ip" ] && [ "$china_ip_route" = "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
|
||||
fi
|
||||
|
||||
if [ "$china_ip6_route" = "1" ] || [ "$disable_udp_quic" = "1" ]; then
|
||||
@ -2064,10 +2201,18 @@ else
|
||||
mkdir -p /tmp/dnsmasq.d 2>/dev/null
|
||||
echo "create china_ip6_route_pass hash:net family inet6 hashsize 1024 maxelem 1000000" >/tmp/openclash_china_ip6_route_pass.list
|
||||
awk '!/^$/&&!/^#/&&!/^(\*?\.?)*[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$/{printf("add china_ip6_route_pass %s'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute6_pass.list >>/tmp/openclash_china_ip6_route_pass.list 2>/dev/null
|
||||
awk '!/^$/&&!/^#/&&/^(\*?\.?)*[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$/{printf("ipset=/%s/china_ip6_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute6_pass.list >>/tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
awk '!/^$/&&!/^#/&&/^(\*?\.?)*[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$/{printf("ipset=/%s/china_ip_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute6_pass.list >>/tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
ipset -! flush china_ip6_route_pass 2>/dev/null
|
||||
ipset -! restore </tmp/openclash_china_ip6_route_pass.list 2>/dev/null
|
||||
rm -rf /tmp/openclash_china_ip6_route_pass.list 2>/dev/null
|
||||
|
||||
#Prevent domain repeat
|
||||
for i in `grep -wf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf`
|
||||
do
|
||||
sed -i "s:${i}:${i},china_ip6_route_pass:g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf
|
||||
sed -i 's:'$i':EXCLUSIVE:;/EXCLUSIVE/d' /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf
|
||||
done 2>/dev/null
|
||||
sed -i "s/china_ip_route_pass/china_ip6_route_pass/g" /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf 2>/dev/null
|
||||
fi
|
||||
|
||||
#local
|
||||
@ -2117,7 +2262,7 @@ else
|
||||
ip6tables -t mangle -F openclash
|
||||
ip6tables -t mangle -A openclash -m set --match-set localnetwork6 dst -j RETURN
|
||||
ip6tables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1
|
||||
ip6tables -t mangle -A openclash -m set --match-set localnetwork6 src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
ip6tables -t mangle -A openclash -m set --match-set localnetwork6 src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
ip6tables -t mangle -A openclash -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$en_mode" == "redir-host" ]; then
|
||||
ip6tables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1
|
||||
@ -2136,7 +2281,7 @@ else
|
||||
ip6tables -t mangle -N openclash_output
|
||||
ip6tables -t mangle -F openclash_output
|
||||
ip6tables -t mangle -A openclash_output -m set --match-set localnetwork6 dst -j RETURN
|
||||
ip6tables -t mangle -A openclash_output -m set --match-set localnetwork6 src -m set --match-set lan_ac_black_ports src -j RETURN
|
||||
ip6tables -t mangle -A openclash_output -m set --match-set localnetwork6 src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
ip6tables -t mangle -A openclash_output -m set --match-set wan_ac_black_ipv6s dst -j RETURN >/dev/null 2>&1
|
||||
ip6tables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1
|
||||
if [ "$china_ip6_route" = "1" ]; then
|
||||
@ -2160,10 +2305,11 @@ else
|
||||
if [ "$bypass_gateway_compatible" -eq 1 ]; then
|
||||
ip6tables -t nat -N openclash_post
|
||||
ip6tables -t nat -F openclash_post
|
||||
ip6tables -t nat -A openclash_post -m mark --mark "$PROXY_FWMARK" -m comment --comment "OpenClash Bypass Gateway Compatible" -j ACCEPT
|
||||
ip6tables -t nat -A openclash_post -m comment --comment "OpenClash Bypass Gateway Compatible" -m set --match-set localnetwork6 dst -j RETURN
|
||||
ip6tables -t nat -A openclash_post -m addrtype ! --src-type LOCAL -m owner ! --uid-owner 65534 -m comment --comment "OpenClash Bypass Gateway Compatible" -j MASQUERADE
|
||||
ip6tables -t nat -A POSTROUTING -j openclash_post
|
||||
ip6tables -t nat -A openclash_post -m set --match-set localnetwork src -m set --match-set lan_ac_black_ports src -j RETURN >/dev/null 2>&1
|
||||
ip6tables -t nat -A openclash_post -m mark --mark "$PROXY_FWMARK" -j ACCEPT
|
||||
ip6tables -t nat -A openclash_post -m set --match-set localnetwork6 dst -j RETURN
|
||||
ip6tables -t nat -A openclash_post -m addrtype ! --src-type LOCAL -m owner ! --uid-owner 65534 -j MASQUERADE
|
||||
ip6tables -t nat -A POSTROUTING -m comment --comment "OpenClash Bypass Gateway Compatible" -j openclash_post
|
||||
fi
|
||||
|
||||
#google_dns_block
|
||||
@ -2207,6 +2353,7 @@ revert_firewall()
|
||||
rm -rf /var/etc/openclash.include >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf >/dev/null 2>&1
|
||||
|
||||
ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
|
||||
ip route del local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
|
||||
@ -2221,6 +2368,11 @@ revert_firewall()
|
||||
ip link set dev utun down >/dev/null 2>&1
|
||||
ip tuntap del utun mode tun >/dev/null 2>&1
|
||||
|
||||
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 link set dev utun down >/dev/null 2>&1
|
||||
ip -6 tuntap del utun mode tun >/dev/null 2>&1
|
||||
|
||||
if [ -n "$FW4" ]; then
|
||||
for nft in "input" "forward" "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do
|
||||
local handles=$(nft -a list chain inet fw4 ${nft} |grep -E "openclash|OpenClash" |awk -F '# handle ' '{print$2}')
|
||||
@ -2284,6 +2436,7 @@ revert_firewall()
|
||||
ipset destroy lan_block_google_dns_ips >/dev/null 2>&1
|
||||
ipset destroy lan_block_google_dns_macs >/dev/null 2>&1
|
||||
ipset destroy openclash_google_dns_ips >/dev/null 2>&1
|
||||
ipset destroy lan_ac_black_ports >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
@ -2335,6 +2488,8 @@ get_config()
|
||||
enable_geoip_dat=$(uci -q get openclash.config.enable_geoip_dat || echo 0)
|
||||
enable_tcp_concurrent=$(uci -q get openclash.config.enable_tcp_concurrent || echo 0)
|
||||
append_default_dns=$(uci -q get openclash.config.append_default_dns || echo 1)
|
||||
enable_meta_sniffer_pure_ip=$(uci -q get openclash.config.enable_meta_sniffer_pure_ip || echo 1)
|
||||
custom_china_domain_dns_server=$(uci -q get openclash.config.custom_china_domain_dns_server || echo 114.114.114.114)
|
||||
_koolshare=$(cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_RELEASE 2>/dev/null |grep -i koolshare 2>/dev/null)
|
||||
[ -z "$dns_port" ] && dns_port=7874 && uci -q set openclash.config.dns_port=7874
|
||||
uci -q set openclash.config.restricted_mode=0 && uci -q commit openclash
|
||||
@ -2363,7 +2518,7 @@ start()
|
||||
if ! $quick_start; then
|
||||
LOG_OUT "Step 3: Modify The Config File..."
|
||||
config_check
|
||||
/usr/share/openclash/yml_change.sh 2>/dev/null "$en_mode" "$da_password" "$cn_port" "$proxy_port" "$TMP_CONFIG_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$log_level" "$proxy_mode" "$en_mode_tun" "$stack_type" "$dns_port" "$mixed_port" "$tproxy_port" "$ipv6_dns" "$store_fakeip" "$stream_domains_prefetch" "$dns_remote" "$enable_meta_core" "$enable_meta_sniffer" "$enable_geoip_dat" "$geodata_loader" "$enable_meta_sniffer_custom" "$interface_name" "$enable_tcp_concurrent" "$core_type" "$append_default_dns"
|
||||
/usr/share/openclash/yml_change.sh 2>/dev/null "$en_mode" "$da_password" "$cn_port" "$proxy_port" "$TMP_CONFIG_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$log_level" "$proxy_mode" "$en_mode_tun" "$stack_type" "$dns_port" "$mixed_port" "$tproxy_port" "$ipv6_dns" "$store_fakeip" "$stream_domains_prefetch" "$dns_remote" "$enable_meta_core" "$enable_meta_sniffer" "$enable_geoip_dat" "$geodata_loader" "$enable_meta_sniffer_custom" "$interface_name" "$enable_tcp_concurrent" "$core_type" "$append_default_dns" "$enable_meta_sniffer_pure_ip"
|
||||
/usr/share/openclash/yml_rules_change.sh 2>/dev/null "$rule_source" "$enable_custom_clash_rules" "$TMP_CONFIG_FILE" "$enable_rule_proxy" "$CONFIG_NAME" "$router_self_proxy" "$lan_ip" "$proxy_port" "$tproxy_port" "$enable_meta_core"
|
||||
/usr/share/openclash/openclash_server_fake_filter.sh >/dev/null 2>&1
|
||||
/usr/share/openclash/openclash_custom_domain_dns.sh >/dev/null 2>&1
|
||||
@ -2464,6 +2619,7 @@ stop()
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_custom_domain.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute_pass.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_chnroute6_pass.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_accelerated-domains.china.conf >/dev/null 2>&1
|
||||
rm -rf /tmp/openclash_last_version >/dev/null 2>&1
|
||||
rm -rf /tmp/openclash_config.tmp >/dev/null 2>&1
|
||||
rm -rf /tmp/openclash.change >/dev/null 2>&1
|
||||
|
65041
luci-app-openclash/root/etc/openclash/accelerated-domains.china.conf
Normal file
65041
luci-app-openclash/root/etc/openclash/accelerated-domains.china.conf
Normal file
File diff suppressed because it is too large
Load Diff
@ -128,7 +128,6 @@ ff.dorado.sdo.com
|
||||
shark007.net
|
||||
#Mijia
|
||||
Mijia Cloud
|
||||
+.dns.google
|
||||
#招商银行
|
||||
+.cmbchina.com
|
||||
+.cmbimg.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > ABC
|
||||
- DOMAIN-SUFFIX,edgedatg.com
|
||||
- DOMAIN-SUFFIX,go.com
|
||||
- DOMAIN-SUFFIX,go.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > AbemaTV
|
||||
# - USER-AGENT,AbemaTV*
|
||||
- PROCESS-NAME,tv.abema
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Amazon Prime Video
|
||||
# - USER-AGENT,InstantVideo.US*
|
||||
# - USER-AGENT,Prime%20Video*
|
||||
@ -7,28 +7,39 @@ payload:
|
||||
|
||||
- DOMAIN-SUFFIX,aiv-cdn.net
|
||||
- DOMAIN-SUFFIX,aiv-delivery.net
|
||||
- DOMAIN-SUFFIX,amazonvideo.com
|
||||
- DOMAIN-SUFFIX,amazonprimevideos.com
|
||||
- DOMAIN-SUFFIX,amazonvideo.cc
|
||||
- DOMAIN-SUFFIX,amazonvideo.com
|
||||
- DOMAIN-SUFFIX,amazonvideodirect.cc
|
||||
- DOMAIN-SUFFIX,atv-ext.amazon.com
|
||||
- DOMAIN-SUFFIX,atv-ext-eu.amazon.com
|
||||
- DOMAIN-SUFFIX,atv-ext-fe.amazon.com
|
||||
- DOMAIN-SUFFIX,atv-ps.amazon.com
|
||||
- DOMAIN-SUFFIX,atv-ps-eu.amazon.co.uk
|
||||
- DOMAIN-SUFFIX,atv-ps-eu.amazon.com
|
||||
- DOMAIN-SUFFIX,atv-ps-fe.amazon.co.jp
|
||||
- DOMAIN-SUFFIX,atv-ps-fe.amazon.com
|
||||
- DOMAIN-SUFFIX,fls-na.amazon.com
|
||||
- DOMAIN-SUFFIX,media-amazon.com
|
||||
- DOMAIN-SUFFIX,primevideo.cc
|
||||
- DOMAIN-SUFFIX,primevideo.com
|
||||
- DOMAIN-SUFFIX,prime-video.com
|
||||
- DOMAIN-SUFFIX,primevideo.cc
|
||||
- DOMAIN-SUFFIX,primevideo.info
|
||||
- DOMAIN-SUFFIX,primevideo.org
|
||||
- DOMAIN-SUFFIX,primevideo.tv
|
||||
- DOMAIN-SUFFIX,amazonvideodirect.cc
|
||||
- DOMAIN-SUFFIX,amazonprimevideos.com
|
||||
|
||||
- DOMAIN,atv-ps.amazon.com
|
||||
- DOMAIN,fls-na.amazon.com
|
||||
- DOMAIN-SUFFIX,pv-cdn.net
|
||||
- DOMAIN-SUFFIX,video.a2z.com
|
||||
|
||||
- DOMAIN,avodmp4s3ww-a.akamaihd.net
|
||||
- DOMAIN,d1v5ir2lpwr8os.cloudfront.net
|
||||
- DOMAIN,d1y002tclu9djj.cloudfront.net
|
||||
- DOMAIN,d22qjgkvxw22r6.cloudfront.net
|
||||
- DOMAIN,d25xi40x97liuc.cloudfront.net
|
||||
- DOMAIN,dmqdd6hw24ucf.cloudfront.net
|
||||
- DOMAIN,d27xxe7juh1us6.cloudfront.net
|
||||
|
||||
- DOMAIN,dualstack.pefs-alb-266603904.eu-west-1.elb.amazonaws.com
|
||||
|
||||
# // 美区网页版需二选一走代理,如 URL-REGEX 则需 MITM www.amazon.com
|
||||
# // DOMAIN,www.amazon.com
|
||||
# URL-REGEX,^https?:\/\/www\.amazon\.com\/(Amazon-Video|gp\/video)\/
|
||||
# URL-REGEX,^https?:\/\/www\.amazon\.com\/(Amazon-Video|gp\/video)\/
|
||||
|
@ -26,6 +26,7 @@ payload:
|
||||
- IP-CIDR,205.180.175.0/24,no-resolve
|
||||
|
||||
# > Apple News
|
||||
- DOMAIN-SUFFIX,apple.comscoreresearch.com
|
||||
- DOMAIN-SUFFIX,apple.news
|
||||
|
||||
# > Apple Maps
|
||||
|
@ -0,0 +1,16 @@
|
||||
payload:
|
||||
# > Apple Music
|
||||
# - USER-AGENT,Music*
|
||||
- PROCESS-NAME,music
|
||||
- DOMAIN-SUFFIX,applemusic.com
|
||||
- DOMAIN-SUFFIX,blobstore.apple.com
|
||||
- DOMAIN-SUFFIX,music.apple.com
|
||||
- DOMAIN,aod.itunes.apple.com
|
||||
- DOMAIN,aod-ssl.itunes.apple.com
|
||||
- DOMAIN,audio.itunes.apple.com
|
||||
- DOMAIN,audio-ssl.itunes.apple.com
|
||||
- DOMAIN,mvod.itunes.apple.com
|
||||
- DOMAIN,streamingaudio.itunes.apple.com
|
||||
|
||||
# iCloud Music Library
|
||||
- DOMAIN-SUFFIX,blobstore.apple.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Apple News and Apple Map TOMTOM Version
|
||||
# - USER-AGENT,AppleNews*
|
||||
# - USER-AGENT,com.apple.news*
|
||||
|
@ -1,5 +1,5 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Apple TV
|
||||
- DOMAIN,np-edge.itunes.apple.com
|
||||
- DOMAIN,play-edge.itunes.apple.com
|
||||
- DOMAIN-SUFFIX,tv.apple.com
|
||||
- DOMAIN-SUFFIX,tv.apple.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > BBC iPlayer
|
||||
- PROCESS-NAME,bbc.iplayer.android
|
||||
- DOMAIN-KEYWORD,bbcfmt
|
||||
|
@ -1,8 +1,8 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Bahamut
|
||||
# - USER-AGENT,Anime*
|
||||
- PROCESS-NAME,tw.com.gamer.android.animad
|
||||
- DOMAIN-SUFFIX,bahamut.com.tw
|
||||
- DOMAIN-SUFFIX,gamer.com.tw
|
||||
- DOMAIN,gamer-cds.cdn.hinet.net
|
||||
- DOMAIN,gamer2-cds.cdn.hinet.net
|
||||
- DOMAIN,gamer2-cds.cdn.hinet.net
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Bilibili
|
||||
# - USER-AGENT,bili*
|
||||
- DOMAIN-SUFFIX,acg.tv
|
||||
@ -13,4 +13,4 @@ payload:
|
||||
- DOMAIN,upos-hz-mirrorakam.akamaized.net
|
||||
# Hong Kong, Macau, Taiwan
|
||||
# - USER-AGENT,bili-inter*
|
||||
- DOMAIN,apiintl.biliapi.net
|
||||
- DOMAIN,apiintl.biliapi.net
|
||||
|
@ -14,16 +14,12 @@ payload:
|
||||
- DOMAIN-SUFFIX,coinbase.com
|
||||
- DOMAIN-SUFFIX,coincheck.com
|
||||
- DOMAIN-SUFFIX,coinone.co.kr
|
||||
- DOMAIN-SUFFIX,ftx.com
|
||||
- DOMAIN-SUFFIX,gate.io
|
||||
- DOMAIN-SUFFIX,gemini.com
|
||||
- DOMAIN-SUFFIX,korbit.co.kr
|
||||
- DOMAIN-SUFFIX,kraken.com
|
||||
- DOMAIN-SUFFIX,kucoin.com
|
||||
- DOMAIN-SUFFIX,liquid.com
|
||||
- DOMAIN-SUFFIX,poloniex.com
|
||||
- DOMAIN-SUFFIX,sushi.com
|
||||
- DOMAIN-SUFFIX,uniswap.org
|
||||
- DOMAIN-SUFFIX,bitbank.cc
|
||||
- DOMAIN-SUFFIX,bitcoin.org
|
||||
- DOMAIN-SUFFIX,bitquick.co
|
||||
@ -31,6 +27,16 @@ payload:
|
||||
- DOMAIN-SUFFIX,cex.io
|
||||
- DOMAIN-SUFFIX,dogecoin.com
|
||||
- DOMAIN-SUFFIX,paxful.com
|
||||
- DOMAIN-SUFFIX,tether.to
|
||||
- DOMAIN-SUFFIX,dydx.exchange
|
||||
- DOMAIN-SUFFIX,solana.com
|
||||
- DOMAIN-SUFFIX,avax.network
|
||||
- DOMAIN-SUFFIX,optimism.io
|
||||
- DOMAIN-SUFFIX,arbitrum.io
|
||||
- DOMAIN-SUFFIX,poly.network
|
||||
- DOMAIN-SUFFIX,zkscan.io
|
||||
- DOMAIN-SUFFIX,zksync.io
|
||||
- DOMAIN-SUFFIX,boba.network
|
||||
|
||||
# > Binance
|
||||
- DOMAIN-SUFFIX,binance.cc
|
||||
@ -65,7 +71,11 @@ payload:
|
||||
- DOMAIN-SUFFIX,binancezh.pro
|
||||
- DOMAIN-SUFFIX,binancezh.sh
|
||||
- DOMAIN-SUFFIX,binancezh.top
|
||||
|
||||
- DOMAIN-SUFFIX,bnappzh.mobi
|
||||
- DOMAIN-SUFFIX,bsc.getblock.io
|
||||
- DOMAIN-SUFFIX,bscscan.com
|
||||
- PROCESS-NAME,Binance.exe
|
||||
- DOMAIN-KEYWORD,binance
|
||||
|
||||
# > Huobi
|
||||
- DOMAIN-SUFFIX,hbabit.com
|
||||
@ -82,34 +92,58 @@ payload:
|
||||
- DOMAIN-SUFFIX,hbfile.net
|
||||
- DOMAIN-SUFFIX,huobi.br.com
|
||||
- DOMAIN-SUFFIX,bitderiv.com
|
||||
- DOMAIN-SUFFIX,hecochain.com
|
||||
- DOMAIN-SUFFIX,huobi.ws
|
||||
- DOMAIN-SUFFIX,huobi.ug
|
||||
- DOMAIN-SUFFIX,huobi.co.ma
|
||||
- DOMAIN-SUFFIX,huobi.br.com
|
||||
- PROCESS-NAME,Huobi.exe
|
||||
- DOMAIN-KEYWORD,huobi
|
||||
|
||||
# > OKX
|
||||
- DOMAIN-SUFFIX,okex.com
|
||||
- DOMAIN-SUFFIX,okx.com
|
||||
|
||||
- PROCESS-NAME,OKX.exe
|
||||
- DOMAIN-KEYWORD,okx
|
||||
|
||||
# > asproex
|
||||
- DOMAIN-SUFFIX,asproex.com
|
||||
- DOMAIN-SUFFIX,asproexapi.com
|
||||
|
||||
|
||||
# > bitflyer
|
||||
- DOMAIN-SUFFIX,bitflyer.com
|
||||
- DOMAIN-SUFFIX,bitflyer.jp
|
||||
|
||||
|
||||
# > bitsquare
|
||||
- DOMAIN-SUFFIX,bisq.io
|
||||
- DOMAIN-SUFFIX,bisq.network
|
||||
- DOMAIN-SUFFIX,bitsquare.io
|
||||
|
||||
|
||||
# > coinone
|
||||
- DOMAIN-SUFFIX,coinone.co.kr
|
||||
- DOMAIN-SUFFIX,coinonecore.com
|
||||
- DOMAIN-SUFFIX,coinonecorp.com
|
||||
|
||||
|
||||
# > ethereum
|
||||
- DOMAIN-SUFFIX,devcon.org
|
||||
- DOMAIN-SUFFIX,ethereum.foundation
|
||||
- DOMAIN-SUFFIX,ethereum.org
|
||||
|
||||
- DOMAIN-SUFFIX,etherscan.io
|
||||
- DOMAIN-SUFFIX,nansen.ai
|
||||
- DOMAIN-SUFFIX,ethgasstation.info
|
||||
- DOMAIN-SUFFIX,watchtheburn.com
|
||||
- DOMAIN-SUFFIX,flashbots.net
|
||||
- DOMAIN-SUFFIX,cryptofees.info
|
||||
- DOMAIN-SUFFIX,etherscan.io
|
||||
- DOMAIN-SUFFIX,ethereum-magicians.org
|
||||
- DOMAIN-SUFFIX,vitalik.ca
|
||||
- DOMAIN-SUFFIX,ethfans.org
|
||||
- DOMAIN-SUFFIX,ethereum.cn
|
||||
- DOMAIN-SUFFIX,ethereum.stackexchange.com
|
||||
- DOMAIN-SUFFIX,etherscan.com
|
||||
- DOMAIN-SUFFIX,parity.io
|
||||
- DOMAIN-SUFFIX,ethernodes.org
|
||||
|
||||
# > localbitcoins
|
||||
- DOMAIN-SUFFIX,localbitcoins.com
|
||||
- DOMAIN-SUFFIX,localbitcoinschain.com
|
||||
@ -119,10 +153,148 @@ payload:
|
||||
- DOMAIN-SUFFIX,zb.com
|
||||
- DOMAIN-SUFFIX,zb.io
|
||||
- DOMAIN-SUFFIX,zb.live
|
||||
|
||||
# Analysis
|
||||
|
||||
# > Analysis
|
||||
- DOMAIN-SUFFIX,aicoin.com
|
||||
- DOMAIN-SUFFIX,aimoon.com
|
||||
- DOMAIN-SUFFIX,coingecko.com
|
||||
- DOMAIN-SUFFIX,coinmarketcap.com
|
||||
|
||||
- DOMAIN-SUFFIX,glassnode.com
|
||||
- DOMAIN-SUFFIX,coinmetrics.io
|
||||
- DOMAIN-SUFFIX,tokenview.com
|
||||
- DOMAIN-SUFFIX,oklink.com
|
||||
- DOMAIN-SUFFIX,blockchair.com
|
||||
- DOMAIN-SUFFIX,intotheblock.com
|
||||
- DOMAIN-SUFFIX,bytetree.com
|
||||
- DOMAIN-SUFFIX,coin.dance
|
||||
- DOMAIN-SUFFIX,defieye.io
|
||||
- DOMAIN-SUFFIX,duneanalytics.com
|
||||
- DOMAIN-SUFFIX,tokenterminal.com
|
||||
- DOMAIN-SUFFIX,dapp.review
|
||||
- DOMAIN-SUFFIX,dappradar.com
|
||||
- DOMAIN-SUFFIX,stateofthedapps.com
|
||||
- DOMAIN-SUFFIX,thegraph.com
|
||||
- DOMAIN-SUFFIX,debank.com
|
||||
- DOMAIN-SUFFIX,vfat.tools
|
||||
- DOMAIN-SUFFIX,loanscan.io
|
||||
- DOMAIN-SUFFIX,defirate.com
|
||||
- DOMAIN-SUFFIX,defipulse.com
|
||||
- DOMAIN-SUFFIX,apy999.com
|
||||
- DOMAIN-SUFFIX,defieye.io
|
||||
- DOMAIN-SUFFIX,dextools.io
|
||||
- DOMAIN-SUFFIX,tradingview.com
|
||||
- DOMAIN-SUFFIX,dcabtc.com
|
||||
- DOMAIN-SUFFIX,chainalysis.com
|
||||
- DOMAIN-SUFFIX,cryptoquant.com
|
||||
- DOMAIN-SUFFIX,viewbase.com
|
||||
- DOMAIN-SUFFIX,bitcoinity.org
|
||||
- DOMAIN-SUFFIX,cryptocompare.com
|
||||
- DOMAIN-SUFFIX,coincodex.com
|
||||
- DOMAIN-SUFFIX,cointrendz.com
|
||||
- DOMAIN-SUFFIX,coincheckup.com
|
||||
- DOMAIN-SUFFIX,thetie.io
|
||||
- DOMAIN-SUFFIX,cryptorank.io
|
||||
- DOMAIN-SUFFIX,tradeblock.com
|
||||
- DOMAIN-SUFFIX,nyctale.io
|
||||
- DOMAIN-SUFFIX,dovemetrics.com
|
||||
- DOMAIN-SUFFIX,cryptorank.io
|
||||
- DOMAIN-SUFFIX,icodrops.com
|
||||
- DOMAIN-SUFFIX,chainbroker.io
|
||||
- DOMAIN-SUFFIX,crunchbase.com
|
||||
- DOMAIN-SUFFIX,defillama.com
|
||||
- DOMAIN-SUFFIX,coinowo.com
|
||||
- DOMAIN-SUFFIX,earni.fi
|
||||
- DOMAIN-SUFFIX,dropsearn.com
|
||||
- DOMAIN-SUFFIX,bitcoin.it
|
||||
- DOMAIN-SUFFIX,bitcoinmagazine.com
|
||||
- DOMAIN-SUFFIX,blockchain.com
|
||||
- DOMAIN-SUFFIX,tronscan.org
|
||||
|
||||
# > POOL
|
||||
- DOMAIN-SUFFIX,btc.com
|
||||
- DOMAIN-SUFFIX,f2pool.com
|
||||
- DOMAIN-SUFFIX,cbeci.org
|
||||
- DOMAIN-SUFFIX,digiconomist.net
|
||||
- DOMAIN-SUFFIX,1ml.com
|
||||
- DOMAIN-SUFFIX,bitcoinvisuals.com
|
||||
- DOMAIN-SUFFIX,crypto51.app
|
||||
- DOMAIN-SUFFIX,masternodes.online
|
||||
- DOMAIN-SUFFIX,bitnodes.earn.com
|
||||
- DOMAIN-SUFFIX,poolin.com
|
||||
- DOMAIN-SUFFIX,ethermine.org
|
||||
- DOMAIN-SUFFIX,ewapool.net
|
||||
|
||||
# > FTX
|
||||
- DOMAIN-SUFFIX,ftx.com
|
||||
|
||||
# > Metamask
|
||||
- DOMAIN-KEYWORD,metamask
|
||||
- DOMAIN,token-api.metaswap.codefi.network
|
||||
- DOMAIN,min-api.cryptocompare.com
|
||||
|
||||
# > NFT
|
||||
- DOMAIN-SUFFIX,opensea.io
|
||||
- DOMAIN-SUFFIX,nftscan.com
|
||||
- DOMAIN-SUFFIX,makersplace.com
|
||||
- DOMAIN-SUFFIX,nonfungible.com
|
||||
- DOMAIN-SUFFIX,cryptoslam.io
|
||||
- DOMAIN-SUFFIX,cryptoart.io
|
||||
- DOMAIN-SUFFIX,nftcalendar.io
|
||||
- DOMAIN-SUFFIX,nftgo.io
|
||||
|
||||
# > IPFS
|
||||
- DOMAIN-SUFFIX,filecoin.io
|
||||
- DOMAIN-SUFFIX,docs.lotu.sh
|
||||
- DOMAIN-SUFFIX,ipfs.io
|
||||
- DOMAIN-SUFFIX,docs.ipfs.io
|
||||
- DOMAIN-SUFFIX,discuss.ipfs.io
|
||||
|
||||
# > EOS
|
||||
- DOMAIN-SUFFIX,eos.io
|
||||
- DOMAIN-SUFFIX,developers.eos.io
|
||||
- DOMAIN-SUFFIX,block.one
|
||||
- DOMAIN-SUFFIX,eostracker.io
|
||||
- DOMAIN-SUFFIX,eosflare.io
|
||||
- DOMAIN-SUFFIX,eospark.com
|
||||
- DOMAIN-SUFFIX,bloks.io
|
||||
|
||||
# > Lightning
|
||||
- DOMAIN-SUFFIX,lightning.engineering
|
||||
- DOMAIN-SUFFIX,lightning.community
|
||||
- DOMAIN-SUFFIX,acinq.co
|
||||
- DOMAIN-SUFFIX,1ml.com
|
||||
|
||||
# > Token
|
||||
- DOMAIN-SUFFIX,tokenpocket.pro
|
||||
- DOMAIN-SUFFIX,token.im
|
||||
- DOMAIN-SUFFIX,phantom.app
|
||||
- DOMAIN-SUFFIX,tronlink.org
|
||||
- DOMAIN-SUFFIX,myetherwallet.com
|
||||
- DOMAIN-SUFFIX,jaxx.io
|
||||
- DOMAIN-SUFFIX,trustwalletapp.com
|
||||
|
||||
# > Gate
|
||||
- DOMAIN-SUFFIX,gate.ac
|
||||
- DOMAIN-SUFFIX,gate.io
|
||||
|
||||
# > Mexc
|
||||
- DOMAIN-SUFFIX,mexc.com
|
||||
|
||||
# > Dapp
|
||||
- DOMAIN-SUFFIX,sushi.com
|
||||
- DOMAIN-SUFFIX,uniswap.org
|
||||
- DOMAIN-SUFFIX,sunswap.com
|
||||
- DOMAIN-SUFFIX,traderjoexyz.com
|
||||
- DOMAIN-SUFFIX,raydium.io
|
||||
- DOMAIN-SUFFIX,synthetix.io
|
||||
- DOMAIN-SUFFIX,aave.com
|
||||
- DOMAIN-SUFFIX,compound.finance
|
||||
- DOMAIN-SUFFIX,makerdao.com
|
||||
- DOMAIN-SUFFIX,wbtc.network
|
||||
- DOMAIN-SUFFIX,pancakeswap.finance
|
||||
- DOMAIN-SUFFIX,pancakeswap.com
|
||||
- DOMAIN-SUFFIX,mdex.co
|
||||
- DOMAIN-SUFFIX,mdex.one
|
||||
- DOMAIN-SUFFIX,mdex.com
|
||||
- DOMAIN-SUFFIX,mdex.me
|
||||
- DOMAIN-SUFFIX,1inch.io
|
@ -1,12 +1,25 @@
|
||||
payload:
|
||||
payload:
|
||||
# > DAZN
|
||||
# - USER-AGENT,DAZN*
|
||||
|
||||
- PROCESS-NAME,com.dazn
|
||||
|
||||
# - USER-AGENT,DAZN*
|
||||
- DOMAIN-KEYWORD,voddazn
|
||||
- DOMAIN-SUFFIX,dazn-api.com
|
||||
|
||||
- DOMAIN-SUFFIX,dazn.com
|
||||
- DOMAIN-SUFFIX,dazn-api.com
|
||||
- DOMAIN-SUFFIX,dazndn.com
|
||||
- DOMAIN-SUFFIX,daznedge.net
|
||||
- DOMAIN-SUFFIX,daznfeeds.com
|
||||
- DOMAIN-SUFFIX,daznservices.com
|
||||
- DOMAIN-SUFFIX,indazn.com
|
||||
- DOMAIN-SUFFIX,indaznlab.com
|
||||
- DOMAIN,d151l6v8er5bdm.cloudfront.net
|
||||
|
||||
- DOMAIN,daznfeeds.com.edgekey.net
|
||||
- DOMAIN,dca-lm-livedazn.secure.footprint.net
|
||||
- DOMAIN,h-dazn.online-metrix.net
|
||||
- DOMAIN,images-daznservices-com.cdn.ampproject.org
|
||||
- DOMAIN,d151l6v8er5bdm.cloudfront.net
|
||||
|
||||
- IP-CIDR,185.42.236.0/24,no-resolve
|
||||
- IP-CIDR,185.42.238.0/24,no-resolve
|
@ -0,0 +1,8 @@
|
||||
payload:
|
||||
# > Discord
|
||||
- DOMAIN-SUFFIX,discord.com
|
||||
- DOMAIN-SUFFIX,discord.gg
|
||||
- DOMAIN-SUFFIX,discord.media
|
||||
- DOMAIN-SUFFIX,discordapp.com
|
||||
- DOMAIN-SUFFIX,discordapp.net
|
||||
- DOMAIN-SUFFIX,discordstatus.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Discovery Plus
|
||||
- PROCESS-NAME,com.discovery.discoveryplus.mobile
|
||||
- DOMAIN-SUFFIX,content-ause1-ur-discovery1.uplynk.com
|
||||
|
@ -1,13 +1,14 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Disney Plus
|
||||
# - USER-AGENT,Disney*
|
||||
|
||||
- PROCESS-NAME,com.disney.disneyplus
|
||||
|
||||
- DOMAIN-SUFFIX,adobedtm.com
|
||||
- DOMAIN-SUFFIX,bam.nr-date.net
|
||||
- DOMAIN-SUFFIX,bamgrid.com
|
||||
- DOMAIN-SUFFIX,braze.com
|
||||
- DOMAIN-SUFFIX,cdn.optimizely.com
|
||||
- DOMAIN-SUFFIX,cdn.registerdisney.go.com
|
||||
- DOMAIN-SUFFIX,cws.conviva.com
|
||||
- DOMAIN-SUFFIX,d9.flashtalking.com
|
||||
- DOMAIN-SUFFIX,disney.demdex.net
|
||||
- DOMAIN-SUFFIX,disney.my.sentry.io
|
||||
@ -17,5 +18,4 @@ payload:
|
||||
- DOMAIN-SUFFIX,disney-plus.net
|
||||
- DOMAIN-SUFFIX,disney-portal.my.onetrust.com
|
||||
- DOMAIN-SUFFIX,dssott.com
|
||||
- DOMAIN-SUFFIX,execute-api.us-east-1.amazonaws.com
|
||||
- DOMAIN-SUFFIX,js-agent.newrelic.com
|
||||
- DOMAIN-SUFFIX,registerdisney.go.com
|
@ -1,4 +1,40 @@
|
||||
payload:
|
||||
# China Banks
|
||||
# > Agricultural Bank of China
|
||||
- DOMAIN-SUFFIX,abchina.com
|
||||
- DOMAIN-SUFFIX,abchina.com.cn
|
||||
|
||||
# > Bank of China
|
||||
- DOMAIN-SUFFIX,boc.cn
|
||||
|
||||
# > China Citic Bank
|
||||
- DOMAIN-SUFFIX,citicbank.com
|
||||
- DOMAIN-SUFFIX,ecitic.com
|
||||
- DOMAIN-SUFFIX,ecitic.net
|
||||
|
||||
# > China Construction Bank
|
||||
- DOMAIN-SUFFIX,ccb.com
|
||||
- DOMAIN-SUFFIX,ccb.com.cn
|
||||
|
||||
# > China Everbright Bank
|
||||
- DOMAIN-SUFFIX,cebbank.com
|
||||
|
||||
# > China Merchants Bank
|
||||
# - USER-AGENT,cmb*
|
||||
- DOMAIN-SUFFIX,cmbchina.com
|
||||
- DOMAIN-SUFFIX,cmbimg.com
|
||||
- DOMAIN-SUFFIX,cmbt.cn
|
||||
- DOMAIN-SUFFIX,mbcloud.com
|
||||
|
||||
# > Industrial and Commercial Bank of China
|
||||
# - USER-AGENT,%E4%B8%AD%E5%9B%BD%E5%B7%A5%E5%95%86%E9%93%B6%E8%A1%8C*
|
||||
- DOMAIN-SUFFIX,icbc.com.cn
|
||||
|
||||
# > Ping An Bank
|
||||
- DOMAIN-SUFFIX,pingan.com
|
||||
- DOMAIN-SUFFIX,pingan.com.cn
|
||||
|
||||
# Type
|
||||
# > Beplay
|
||||
- DOMAIN-KEYWORD,beplay
|
||||
|
||||
@ -48,10 +84,13 @@ payload:
|
||||
- IP-CIDR,183.128.0.0/11,DIRECT,no-resolve
|
||||
- IP-CIDR,183.131.48.0/20,DIRECT,no-resolve
|
||||
|
||||
- DOMAIN-SUFFIX,10010.com
|
||||
- DOMAIN-SUFFIX,10086.cn
|
||||
- DOMAIN-SUFFIX,12306.cn
|
||||
- DOMAIN-SUFFIX,12306.com
|
||||
- DOMAIN-SUFFIX,126.net
|
||||
- DOMAIN-SUFFIX,163.com
|
||||
- DOMAIN-SUFFIX,189.cn
|
||||
- DOMAIN-SUFFIX,360.cn
|
||||
- DOMAIN-SUFFIX,360.com
|
||||
- DOMAIN-SUFFIX,360buy.com
|
||||
@ -60,6 +99,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,51ym.me
|
||||
- DOMAIN-SUFFIX,58.com
|
||||
- DOMAIN-SUFFIX,8686c.com
|
||||
- DOMAIN-SUFFIX,95516.com
|
||||
- DOMAIN-SUFFIX,abercrombie.com
|
||||
- DOMAIN-SUFFIX,acfun.tv
|
||||
- DOMAIN-SUFFIX,adobesc.com
|
||||
@ -101,6 +141,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,cnbetacdn.com
|
||||
- DOMAIN-SUFFIX,chdbits.co
|
||||
- DOMAIN-SUFFIX,cnlang.org
|
||||
- DOMAIN-SUFFIX,coolapk.com
|
||||
- DOMAIN-SUFFIX,cn88.net
|
||||
- DOMAIN-SUFFIX,dct-cloud.com
|
||||
- DOMAIN-SUFFIX,didialift.com
|
||||
@ -115,8 +156,6 @@ payload:
|
||||
- DOMAIN-SUFFIX,duoshuo.com
|
||||
- DOMAIN-SUFFIX,dytt8.net
|
||||
- DOMAIN-SUFFIX,easou.com
|
||||
- DOMAIN-SUFFIX,ecitic.com
|
||||
- DOMAIN-SUFFIX,ecitic.net
|
||||
- DOMAIN-SUFFIX,eudic.net
|
||||
- DOMAIN-SUFFIX,ewqcxz.com
|
||||
- DOMAIN-SUFFIX,feng.com
|
||||
@ -125,6 +164,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,frdic.com
|
||||
- DOMAIN-SUFFIX,fresh-ideas.cc
|
||||
- DOMAIN-SUFFIX,gameloft.com
|
||||
- DOMAIN-SUFFIX,garmin.com
|
||||
- DOMAIN-SUFFIX,geetest.com
|
||||
- DOMAIN-SUFFIX,godic.net
|
||||
- DOMAIN-SUFFIX,goodread.com
|
||||
@ -263,8 +303,6 @@ payload:
|
||||
- DOMAIN-SUFFIX,xdrig.com
|
||||
- DOMAIN-SUFFIX,xhostfire.com
|
||||
- DOMAIN-SUFFIX,xhscdn.com
|
||||
- DOMAIN-SUFFIX,xiami.com
|
||||
- DOMAIN-SUFFIX,xiami.net
|
||||
- DOMAIN-SUFFIX,xiaohongshu.com
|
||||
- DOMAIN-SUFFIX,xiaojukeji.com
|
||||
- DOMAIN-SUFFIX,xiaomi.com
|
||||
@ -293,4 +331,5 @@ payload:
|
||||
- IP-CIDR,1.255.62.0/24,no-resolve
|
||||
|
||||
# > CN
|
||||
- DOMAIN-SUFFIX,gov.cn
|
||||
- DOMAIN-SUFFIX,cn
|
||||
|
@ -1,8 +0,0 @@
|
||||
payload:
|
||||
# > Douyin
|
||||
- DOMAIN-SUFFIX,amemv.com
|
||||
- DOMAIN-SUFFIX,ixigua.com
|
||||
- DOMAIN-SUFFIX,ixiguavideo.com
|
||||
- DOMAIN-SUFFIX,pstatp.com
|
||||
- DOMAIN-SUFFIX,snssdk.com
|
||||
- DOMAIN-SUFFIX,toutiao.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > F1 TV
|
||||
- DOMAIN,d2n9h2wits23hf.cloudfront.net
|
||||
- DOMAIN,f1prodlive.akamaized.net
|
||||
@ -7,4 +7,4 @@ payload:
|
||||
- DOMAIN-SUFFIX,f1esports.com
|
||||
- DOMAIN-SUFFIX,f1manager.com
|
||||
- DOMAIN-SUFFIX,f1play.com
|
||||
- DOMAIN-SUFFIX,formula1.com
|
||||
- DOMAIN-SUFFIX,formula1.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Fox+ (HK|TW|SG)
|
||||
# - USER-AGENT,FOXPlus*
|
||||
- DOMAIN-SUFFIX,akamaized.net
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Fox Now
|
||||
# - USER-AGENT,FOX%20NOW*
|
||||
- DOMAIN-SUFFIX,fox.com
|
||||
|
@ -1,10 +1,18 @@
|
||||
payload:
|
||||
payload:
|
||||
# > HBO Max
|
||||
# - USER-AGENT,HBO%20GO%20PROD*
|
||||
|
||||
# - DOMAIN-KEYWORD,hboasia
|
||||
- DOMAIN-KEYWORD,hbogoasia
|
||||
|
||||
- DOMAIN-SUFFIX,hboasia.com
|
||||
- DOMAIN-SUFFIX,hbogo.co.th
|
||||
- DOMAIN-SUFFIX,hbogo.com
|
||||
- DOMAIN-SUFFIX,hbogo.eu
|
||||
- DOMAIN-SUFFIX,hbogoasia.com
|
||||
- DOMAIN-SUFFIX,hbogoasia.id
|
||||
- DOMAIN-SUFFIX,hbogoasia.ph
|
||||
|
||||
- DOMAIN,hbolb.onwardsmg.com
|
||||
- DOMAIN,hbounify-prod.evergent.com
|
||||
# - DOMAIN,bcbolthboa-a.akamaihd.net
|
||||
|
@ -1,9 +1,11 @@
|
||||
payload:
|
||||
payload:
|
||||
# > HBO Max
|
||||
# - USER-AGENT,HBOMAX*
|
||||
|
||||
- DOMAIN-SUFFIX,hbo.com
|
||||
# - DOMAIN-SUFFIX,hbogo.com
|
||||
- DOMAIN-SUFFIX,hbonow.com
|
||||
- DOMAIN-SUFFIX,hbomax.com
|
||||
- DOMAIN-SUFFIX,hbomaxcdn.com
|
||||
- DOMAIN-SUFFIX,hbonow.com
|
||||
- DOMAIN-SUFFIX,hbomax.com
|
||||
|
||||
- DOMAIN,execute-api.ap-southeast-1.amazonaws.com
|
@ -1,10 +1,23 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Hulu
|
||||
- PROCESS-NAME,com.hulu.plus
|
||||
- DOMAIN-SUFFIX,cws-hulu.conviva.com
|
||||
|
||||
- DOMAIN-SUFFIX,hulu.com
|
||||
- DOMAIN-SUFFIX,hulu.hb.omtrdc.net
|
||||
- DOMAIN-SUFFIX,hulu.sc.omtrdc.net
|
||||
- DOMAIN-SUFFIX,huluad.com
|
||||
- DOMAIN-SUFFIX,huluim.com
|
||||
- DOMAIN-SUFFIX,hulustream.com
|
||||
- DOMAIN-SUFFIX,hulumail.com
|
||||
- DOMAIN-SUFFIX,huluqa.com
|
||||
- DOMAIN-SUFFIX,hulustream.com
|
||||
|
||||
- DOMAIN,cs428.wpc.edgecastcdn.net
|
||||
- DOMAIN,cws-hulu.conviva.com
|
||||
- DOMAIN,hulu.com.c.footprint.net
|
||||
- DOMAIN,hulu.map.fastly.net
|
||||
|
||||
- IP-CIDR,8.28.124.0/23
|
||||
- IP-CIDR,199.60.116.0/24
|
||||
- IP-CIDR,199.200.48.0/22
|
||||
- IP-CIDR,208.91.156.0/22
|
||||
- IP-CIDR6,2620:100:3000::/40
|
@ -1,8 +1,8 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Hulu(フールー)
|
||||
- PROCESS-NAME,jp.happyon.android
|
||||
- DOMAIN-SUFFIX,happyon.jp
|
||||
- DOMAIN-SUFFIX,hulu.jp
|
||||
- DOMAIN-SUFFIX,prod.hjholdings.tv
|
||||
- DOMAIN-SUFFIX,streaks.jp
|
||||
- DOMAIN-SUFFIX,yb.uncn.jp
|
||||
- DOMAIN-SUFFIX,yb.uncn.jp
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > iQIYI Intl
|
||||
# - USER-AGENT,iQIYI*
|
||||
# - USER-AGENT,QIYIVideo*
|
||||
@ -28,4 +28,4 @@ payload:
|
||||
- IP-CIDR,23.211.15.0/24,no-resolve
|
||||
- IP-CIDR,23.219.172.0/24,no-resolve
|
||||
- IP-CIDR,23.40.242.10/32,no-resolve
|
||||
- IP-CIDR,23.59.252.0/24,no-resolve
|
||||
- IP-CIDR,23.59.252.0/24,no-resolve
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > IQIYI
|
||||
# - USER-AGENT,*QIYI*
|
||||
# - USER-AGENT,iQiYi*
|
||||
@ -9,4 +9,4 @@ payload:
|
||||
- DOMAIN-SUFFIX,gitv.tv
|
||||
- DOMAIN-SUFFIX,71.am
|
||||
- DOMAIN-KEYWORD,qiyi
|
||||
- DOMAIN,cache.video.iqiyi.com
|
||||
- DOMAIN,cache.video.iqiyi.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > JOOX
|
||||
- PROCESS-NAME,com.tencent.ibg.joox
|
||||
- PROCESS-NAME,com.tencent.ibg.jooxtv
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Japonx
|
||||
- DOMAIN-KEYWORD,japonx
|
||||
- DOMAIN-KEYWORD,japronx
|
||||
@ -9,4 +9,4 @@ payload:
|
||||
- DOMAIN-SUFFIX,japronx.com
|
||||
- DOMAIN-SUFFIX,japronx.tv
|
||||
- DOMAIN-SUFFIX,japronx.net
|
||||
- DOMAIN-SUFFIX,japronx.vip
|
||||
- DOMAIN-SUFFIX,japronx.vip
|
||||
|
@ -1,5 +1,5 @@
|
||||
payload:
|
||||
payload:
|
||||
# > KKBOX
|
||||
- DOMAIN-SUFFIX,kkbox.com
|
||||
- DOMAIN-SUFFIX,kkbox.com.tw
|
||||
- DOMAIN-SUFFIX,kfs.io
|
||||
- DOMAIN-SUFFIX,kfs.io
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > KKTV
|
||||
- PROCESS-NAME,com.kktv.kktv
|
||||
- DOMAIN-SUFFIX,kktv.me
|
||||
|
@ -1,3 +1,3 @@
|
||||
payload:
|
||||
payload:
|
||||
# > letv
|
||||
- DOMAIN-SUFFIX,api.mob.app.letv.com
|
||||
- DOMAIN-SUFFIX,api.mob.app.letv.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Line TV
|
||||
# - USER-AGENT,LINE*
|
||||
- DOMAIN-SUFFIX,d3c7rimkq79yfu.cloudfront.net
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Microsoft
|
||||
- DOMAIN-SUFFIX,here.com
|
||||
- DOMAIN-SUFFIX,here.net
|
||||
@ -605,4 +605,4 @@ payload:
|
||||
- DOMAIN-SUFFIX,mwf-service.akamaized.net
|
||||
- DOMAIN-SUFFIX,officecdn-microsoft-com.akamaized.net
|
||||
- DOMAIN-SUFFIX,statics-marketingsites-eus-ms-com.akamaized.net
|
||||
- DOMAIN-SUFFIX,statics-marketingsites-wcus-ms-com.akamaized.net
|
||||
- DOMAIN-SUFFIX,statics-marketingsites-wcus-ms-com.akamaized.net
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Netease Music
|
||||
- DOMAIN-SUFFIX,163yun.com
|
||||
- DOMAIN-SUFFIX,api.iplay.163.com
|
||||
|
@ -1,21 +1,34 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Netflix
|
||||
- DOMAIN-KEYWORD,netflixdnstest
|
||||
- DOMAIN-KEYWORD,dualstack.apiproxy-
|
||||
- DOMAIN-KEYWORD,dualstack.ichnaea-web-
|
||||
- DOMAIN-KEYWORD,apiproxy-device-prod-nlb-
|
||||
|
||||
- DOMAIN,api.fast.com
|
||||
- DOMAIN,netflix.com.edgesuite.net
|
||||
- DOMAIN-SUFFIX,flxvpn.net
|
||||
- DOMAIN-SUFFIX,netflix.ca
|
||||
- DOMAIN-SUFFIX,netflix.com
|
||||
- DOMAIN-SUFFIX,netflix.com.au
|
||||
- DOMAIN-SUFFIX,netflixdnstest10.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest1.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest2.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest3.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest4.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest5.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest6.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest7.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest8.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest9.com
|
||||
- DOMAIN-SUFFIX,netflixinvestor.com
|
||||
- DOMAIN-SUFFIX,netflix.net
|
||||
- DOMAIN-SUFFIX,netflixstudios.com
|
||||
- DOMAIN-SUFFIX,netflixtechblog.com
|
||||
- DOMAIN-SUFFIX,nflxext.com
|
||||
- DOMAIN-SUFFIX,nflximg.com
|
||||
- DOMAIN-SUFFIX,nflximg.net
|
||||
- DOMAIN-SUFFIX,nflxsearch
|
||||
- DOMAIN-SUFFIX,nflxso.net
|
||||
- DOMAIN-SUFFIX,nflxvideo.net
|
||||
|
||||
- DOMAIN-SUFFIX,e13252.dscg.akamaiedge.net
|
||||
- DOMAIN-SUFFIX,h-netflix.online-metrix.net
|
||||
- DOMAIN-SUFFIX,onetrust.com
|
||||
- DOMAIN-SUFFIX,cookielaw.org
|
||||
|
||||
- IP-CIDR,23.246.0.0/18,no-resolve
|
||||
- IP-CIDR,37.77.184.0/21,no-resolve
|
||||
- IP-CIDR,38.72.126.0/24,no-resolve
|
||||
@ -33,4 +46,4 @@ payload:
|
||||
- IP-CIDR,208.75.76.0/22,no-resolve
|
||||
- IP-CIDR,34.210.42.111/32,no-resolve
|
||||
- IP-CIDR,52.89.124.203/32,no-resolve
|
||||
- IP-CIDR,54.148.37.5/32,no-resolve
|
||||
- IP-CIDR,54.148.37.5/32,no-resolve
|
||||
|
11
luci-app-openclash/root/etc/openclash/rule_provider/Niconico
Normal file
11
luci-app-openclash/root/etc/openclash/rule_provider/Niconico
Normal file
@ -0,0 +1,11 @@
|
||||
payload:
|
||||
# > Niconico
|
||||
- DOMAIN-SUFFIX,dmc.nico
|
||||
- DOMAIN-SUFFIX,nicovideo.jp
|
||||
- DOMAIN-SUFFIX,nicodic.jp
|
||||
- DOMAIN-SUFFIX,nicomanga.jp
|
||||
- DOMAIN-SUFFIX,niconico.com
|
||||
- DOMAIN-SUFFIX,nicoseiga.jp
|
||||
- DOMAIN-SUFFIX,nimg.jp
|
||||
- DOMAIN-SUFFIX,simg.jp
|
||||
- DOMAIN-SUFFIX,socdm.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > PBS
|
||||
# - USER-AGENT,PBS*
|
||||
- DOMAIN-SUFFIX,pbs.org
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Pandora
|
||||
- PROCESS-NAME,com.pandora.android
|
||||
- DOMAIN-SUFFIX,pandora.com
|
||||
- DOMAIN-SUFFIX,pandora.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > PayPal
|
||||
# - USER-AGENT,PayPal*
|
||||
- DOMAIN-KEYWORD,paypal
|
||||
|
@ -1,6 +1,6 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Pornhub
|
||||
- DOMAIN-SUFFIX,phncdn.com
|
||||
- DOMAIN-SUFFIX,phprcdn.com
|
||||
- DOMAIN-SUFFIX,pornhub.com
|
||||
- DOMAIN-SUFFIX,pornhubpremium.com
|
||||
- DOMAIN-SUFFIX,pornhubpremium.com
|
||||
|
@ -1,4 +1,10 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Duolingo
|
||||
# - USER-AGENT,Duolingo*
|
||||
- DOMAIN-KEYWORD,duolingo
|
||||
- DOMAIN-SUFFIX,duolingo.cn
|
||||
- DOMAIN-SUFFIX,duolingo.com
|
||||
|
||||
# > Line
|
||||
- DOMAIN-SUFFIX,lin.ee
|
||||
- DOMAIN-SUFFIX,line.me
|
||||
@ -67,7 +73,6 @@ payload:
|
||||
- DOMAIN-SUFFIX,apkpure.com
|
||||
- DOMAIN-SUFFIX,appdownloader.net
|
||||
- DOMAIN-SUFFIX,apple-dns.net
|
||||
- DOMAIN-SUFFIX,app-measurement.com
|
||||
- DOMAIN-SUFFIX,appshopper.com
|
||||
- DOMAIN-SUFFIX,arcgis.com
|
||||
- DOMAIN-SUFFIX,archive.is
|
||||
@ -683,6 +688,10 @@ payload:
|
||||
|
||||
- DOMAIN-KEYWORD,dlercloud
|
||||
|
||||
# > VikACG
|
||||
- DOMAIN-SUFFIX,vikacg.com
|
||||
- DOMAIN-SUFFIX,picjs.xyz
|
||||
|
||||
# > exception
|
||||
- DOMAIN-SUFFIX,wheel-size.cn
|
||||
- DOMAIN-SUFFIX,chalungu.cn
|
||||
|
@ -36,8 +36,8 @@ payload:
|
||||
- DOMAIN-SUFFIX,t7z.cupid.iqiyi.com
|
||||
- DOMAIN-SUFFIX,tracker.sns.iqiyi.com
|
||||
- DOMAIN-SUFFIX,yuedu.iqiyi.com
|
||||
# - URL-REGEX,https?://.+/videos/other/.+
|
||||
# - URL-REGEX,https?://paopao\w?.qiyipic.com
|
||||
# - URL-REGEX,https?:\/\/.+\/videos\/other\/.+
|
||||
# - URL-REGEX,https?:\/\/paopao\w?\.qiyipic\.com
|
||||
- IP-CIDR,101.227.97.240/32
|
||||
- IP-CIDR,101.227.200.11/32
|
||||
- IP-CIDR,101.227.200.28/32
|
||||
@ -102,7 +102,7 @@ payload:
|
||||
- IP-CIDR,223.87.182.102/32
|
||||
- IP-CIDR,223.87.182.11/32
|
||||
- IP-CIDR,223.87.182.52/32
|
||||
# - URL-REGEX,https?:\/\/.+.atm.youku.com
|
||||
# - URL-REGEX,https?:\/\/\.+\.atm\.youku\.com
|
||||
|
||||
# > MGTV
|
||||
- DOMAIN-SUFFIX,ads-api.videojj.com
|
||||
@ -196,7 +196,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,pp2.pptv.com
|
||||
- DOMAIN-SUFFIX,stat.pptv.com
|
||||
- DOMAIN-SUFFIX,static.g.pptv.com
|
||||
# - URL-REGEX,https?://img\w.g.pptv.com
|
||||
# - URL-REGEX,https?:\/\/img\w\.g\.pptv\.com
|
||||
|
||||
# > Site
|
||||
- DOMAIN-SUFFIX,deliver.ifeng.com
|
||||
@ -204,7 +204,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,hxsame.hexun.com
|
||||
- DOMAIN-SUFFIX,itv.hexun.com
|
||||
- DOMAIN-SUFFIX,utrack.hexun.com
|
||||
# - URL-REGEX,https?://h\w{2}.hxsame.hexun.com
|
||||
# - URL-REGEX,https?:\/\/h\w{2}\.hxsame\.hexun\.com
|
||||
|
||||
# > Vod
|
||||
- DOMAIN-SUFFIX,ad.cmvideo.cn
|
||||
@ -8117,7 +8117,6 @@ payload:
|
||||
- DOMAIN-SUFFIX,zhidian3g.cn
|
||||
- DOMAIN-SUFFIX,zhifenjie.com
|
||||
- DOMAIN-SUFFIX,zhihei.com
|
||||
- DOMAIN-SUFFIX,zhihu.xmcimg.com
|
||||
- DOMAIN-SUFFIX,zhiong.net
|
||||
- DOMAIN-SUFFIX,zhiyuanteam.com
|
||||
- DOMAIN-SUFFIX,zhiziyun.com
|
||||
@ -8195,6 +8194,8 @@ payload:
|
||||
- DOMAIN-SUFFIX,zzy1.quyaoya.com
|
||||
- DOMAIN-SUFFIX,zzz7.52896368.com
|
||||
- DOMAIN-SUFFIX,zzzzz4.52896368.com
|
||||
- DOMAIN-SUFFIX,5534edee5a.com
|
||||
- DOMAIN-SUFFIX,ea778a21c7.com
|
||||
|
||||
# > Baidu
|
||||
- DOMAIN-SUFFIX,baidustatic.com
|
||||
@ -8206,26 +8207,25 @@ payload:
|
||||
- DOMAIN,nsclick.baidu.com
|
||||
- DOMAIN,wn.pos.baidu.com
|
||||
- DOMAIN,ps.map.baidu.com
|
||||
- DOMAIN,sv.map.baidu.com
|
||||
- DOMAIN,offnavi.map.baidu.com
|
||||
- DOMAIN,newvector.map.baidu.com
|
||||
- DOMAIN,ulog.imap.baidu.com
|
||||
- DOMAIN,newloc.map.n.shifen.com
|
||||
# - URL-REGEX,^http:\/\/[\s\S]*baidu\.com/.*ad[xs]\.php
|
||||
# - URL-REGEX,^http:\/\/c\.tieba\.baidu\.com\/c\/s\/splashSchedule$
|
||||
# - URL-REGEX,http:\/\/[\s\S]*baidu\.com\/\.*ad[xs]\.php
|
||||
# - URL-REGEX,http:\/\/c\.tieba\.baidu\.com\/c\/s\/splashSchedule
|
||||
|
||||
# > Bilibili
|
||||
- DOMAIN,miniapp.bilibili.com
|
||||
- DOMAIN,thirdparty.biliapi.com
|
||||
# - URL-REGEX,https://app.bilibili.com/x/v2/param
|
||||
# - URL-REGEX,https://app.bilibili.com/x/resource/abtest
|
||||
# - URL-REGEX,http://app.bilibili.com/x/v2/dataflow/report-TINYGIF
|
||||
# - URL-REGEX,https://app.bilibili.com/x/v2/search/(defaultword|hot|recommend|resource)
|
||||
# - URL-REGEX,https://app.bilibili.com/x/v2/rank.*rid=(168|5)
|
||||
# - URL-REGEX,https://api.bilibili.com/pgc/season/rank/cn
|
||||
# - URL-REGEX,https:\/\/app\.bilibili\.com\/x\/v2\/param
|
||||
# - URL-REGEX,https:\/\/app\.bilibili\.com\/x\/resource\/abtest
|
||||
# - URL-REGEX,http:\/\/app\.bilibili\.com\/x\/v2\/dataflow\/report-TINYGIF
|
||||
# - URL-REGEX,https:\/\/app\.bilibili\.com\/x\/v2\/search\/(defaultword|hot|recommend|resource)
|
||||
# - URL-REGEX,https:\/\/app\.bilibili\.com\/x\/v2\/rank\.*rid=(168|5)
|
||||
# - URL-REGEX,https:\/\/api\.bilibili\.com\/pgc\/season\/rank\/cn
|
||||
|
||||
# > Didi
|
||||
# - URL-REGEX,^https:\/\/img-ys011\.didistatic\.com\/static\/ad_oss\/image-\d{4}-\d{4}\/
|
||||
# - URL-REGEX,https:\/\/img-ys011\.didistatic\.com\/static\/ad_oss\/image-\d{4}-\d{4}\/
|
||||
|
||||
# > ele
|
||||
- DOMAIN,log.star.ele.me
|
||||
@ -8247,44 +8247,52 @@ payload:
|
||||
- DOMAIN,rd.da.netease.com
|
||||
- DOMAIN,wr.da.netease.com
|
||||
- DOMAIN,yt-adp.nosdn.127.net
|
||||
# - URL-REGEX,^http:\/\/p\d\.music\.126\.net\/\w+==\/\d+\.jpg$
|
||||
# - URL-REGEX,^http:\/\/iad.*mat\.[a-z]*\.12[67]\.net/\w+\.(jpg|mp4)$
|
||||
# - URL-REGEX,http:\/\/p\d\.music\.126\.net\/\w+==\/\d+\.jpg
|
||||
# - URL-REGEX,http:\/\/iad\.*mat\.[a-z]*\.12[67]\.net\/\w+\.(jpg|mp4)
|
||||
|
||||
# > Zhihu
|
||||
- DOMAIN,appcloud2.in.zhihu.com
|
||||
- DOMAIN,mqtt.zhihu.com
|
||||
- DOMAIN,sugar.zhihu.com
|
||||
- DOMAIN,zhihu-analytics.zhihu.com
|
||||
- DOMAIN,zhihu-web-analytics.zhihu.com
|
||||
- DOMAIN,118.89.204.198
|
||||
- DOMAIN-SUFFIX,xdrig.com
|
||||
# - URL-REGEX,https://api.zhihu.com/(fringe|zst|real_time|ad-style-service|banners|topstory/hot-lists|market/popover|mqtt|me|.*launch|.*featured-comment-ad|search/(top|tabs|preset))
|
||||
# - URL-REGEX,https://api.zhihu.com.*(launch|recommendations)
|
||||
# - URL-REGEX,https://api.zhihu.com/search/(top|tabs|preset)
|
||||
# - URL-REGEX,https://api.zhihu.com/answers/.*/comments/featured-comment-ad
|
||||
- DOMAIN-SUFFIX,zhihu.xmcimg.com
|
||||
|
||||
# - URL-REGEX,https?://(e|m).+/((uu|oo).php.+|\d+.x?html\?$)
|
||||
# - URL-REGEX,https?://[^(apple|10010)]+.(com|cn)\/(a|A)d(s|v)?(/|.js)
|
||||
# - URL-REGEX,https?://[^bbs].tianya\.cn
|
||||
# - URL-REGEX,https?://\w.?up.qingdaonews.com
|
||||
# - URL-REGEX,https?://\w{6}.com1.z0.glb.clouddn.com
|
||||
# - URL-REGEX,https?://\w{8}.logic.cpm.cm.kankan.com
|
||||
# - URL-REGEX,https?://\w+.cloudfront.net/banner
|
||||
# - URL-REGEX,https?://\w+.gdt.qq.com
|
||||
# - URL-REGEX,https?://\w+.kingsoft-office-service.com
|
||||
# - URL-REGEX,https?://9377\w{2}.com
|
||||
# - URL-REGEX,https?://a0b\w{2}.com
|
||||
# - URL-REGEX,https?://(a?d|sax)\d.sina.com
|
||||
# - URL-REGEX,https?://d\d.sinaimg.cn
|
||||
# - URL-REGEX,https?://dl.app.gtja.com/.+\d+.jpg$
|
||||
# - URL-REGEX,https?://impservice.+?youdao.com
|
||||
# - URL-REGEX,https?://mi.gdt.qq.com/gdt_mview.fcg
|
||||
# - URL-REGEX,https?://notice.send-anywhere.com/banner
|
||||
# - URL-REGEX,https?://sax\w?.sina.cn
|
||||
# - URL-REGEX,https?://sax\w?.sina.com.cn
|
||||
# - URL-REGEX,https?://server-\w+.imrworldwide.com
|
||||
# - URL-REGEX,https?://www.bldimg.com/(background|splash)/.+.png$
|
||||
# - URL-REGEX,https:\/\/api\.zhihu\.com\/(fringe|zst|real_time|ad-style-service|banners|topstory/hot-lists|market/popover|mqtt|me|.*launch|.*featured-comment-ad|search/(top|tabs|preset))
|
||||
# - URL-REGEX,https:\/\/api\.zhihu\.com\.*(launch|recommendations)
|
||||
# - URL-REGEX,https:\/\/api\.zhihu\.com\/search\/(top|tabs|preset)
|
||||
# - URL-REGEX,https:\/\/api\.zhihu\.com\/answers\/\.*\/comments\/featured-comment-ad
|
||||
|
||||
# - URL-REGEX,https?:\/\/(e|m).+\/((uu|oo).php.+|\d+.x?html\?$)
|
||||
# - URL-REGEX,https?:\/\/[^(apple|10010)]+.(com|cn)\/(a|A)d(s|v)?(/|.js)
|
||||
# - URL-REGEX,https?:\/\/[^bbs]\.tianya\.cn
|
||||
# - URL-REGEX,https?:\/\/\w.?up\.qingdaonews\.com
|
||||
# - URL-REGEX,https?:\/\/\w{6}\.com1\.z0\.glb\.clouddn\.com
|
||||
# - URL-REGEX,https?:\/\/\w{8}\.logic\.cpm\.cm\.kankan\.com
|
||||
# - URL-REGEX,https?:\/\/\w+\.cloudfront\.net\/banner
|
||||
# - URL-REGEX,https?:\/\/\w+\.gdt\.qq\.com
|
||||
# - URL-REGEX,https?:\/\/\w+\.kingsoft-office-service\.com
|
||||
# - URL-REGEX,https?:\/\/9377\w{2}\.com
|
||||
# - URL-REGEX,https?:\/\/a0b\w{2}\.com
|
||||
# - URL-REGEX,https?:\/\/(a?d|sax)\d\.sina\.com
|
||||
# - URL-REGEX,https?:\/\/d\d\.sinaimg\.cn
|
||||
# - URL-REGEX,https?:\/\/dl\.app\.gtja\.com\/\.+\d+\.jpg
|
||||
# - URL-REGEX,https?:\/\/impservice\.+?youdao\.com
|
||||
# - URL-REGEX,https?:\/\/mi\.gdt\.qq\.com\/gdt_mview\.fcg
|
||||
# - URL-REGEX,https?:\/\/notice\.send-anywhere\.com\/banner
|
||||
# - URL-REGEX,https?:\/\/sax\w?\.sina\.cn
|
||||
# - URL-REGEX,https?:\/\/sax\w?\.sina\.com\.cn
|
||||
# - URL-REGEX,https?:\/\/server-\w+\.imrworldwide\.com
|
||||
# - URL-REGEX,https?:\/\/www\.bldimg\.com\/(background|splash)\/\.+\.png
|
||||
|
||||
- IP-CIDR,39.107.15.115/32
|
||||
- IP-CIDR,47.89.59.182/32
|
||||
- IP-CIDR,103.49.209.27/32
|
||||
- IP-CIDR,118.89.204.198/32
|
||||
- IP-CIDR,123.56.152.96/32
|
||||
- IP-CIDR6,2402:4e00:1200:ed00:0:9089:6dac:96b6/128
|
||||
|
||||
# > China Net
|
||||
- IP-CIDR,61.160.200.223/32
|
||||
|
@ -1,5 +1,8 @@
|
||||
payload:
|
||||
payload:
|
||||
# > SoundCloud
|
||||
# - USER-AGENT,SoundCloud*
|
||||
|
||||
- DOMAIN-SUFFIX,sndcdn.com
|
||||
- DOMAIN-SUFFIX,soundcloud.app.goo.gl
|
||||
- DOMAIN-SUFFIX,soundcloud.com
|
||||
- DOMAIN-SUFFIX,soundcloudmail.com
|
@ -42,10 +42,11 @@ payload:
|
||||
|
||||
# > Steam
|
||||
# - USER-AGENT,Steam*
|
||||
# - DOMAIN,store.steampowered.com
|
||||
- DOMAIN,cm.steampowered.com
|
||||
- DOMAIN,ol.epicgames.com
|
||||
# - DOMAIN,store.steampowered.com
|
||||
- DOMAIN-SUFFIX,steamcontent.com
|
||||
- DOMAIN-SUFFIX,steamserver.net
|
||||
|
||||
- DOMAIN-SUFFIX,steamchina.com
|
||||
|
||||
@ -86,6 +87,9 @@ payload:
|
||||
|
||||
# > UUBooster
|
||||
- PROCESS-NAME,UUBooster
|
||||
|
||||
# > WiFiman
|
||||
- DOMAIN-SUFFIX,app-measurement.com
|
||||
|
||||
# > Xunlei
|
||||
# - USER-AGENT,%E8%BF%85%E9%9B%B7
|
||||
@ -119,6 +123,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,broadcasthe.net
|
||||
- DOMAIN-SUFFIX,chdbits.co
|
||||
- DOMAIN-SUFFIX,classix-unlimited.co.uk
|
||||
- DOMAIN-SUFFIX,dmhy.best
|
||||
- DOMAIN-SUFFIX,empornium.me
|
||||
- DOMAIN-SUFFIX,gazellegames.net
|
||||
- DOMAIN-SUFFIX,hdchina.org
|
||||
|
@ -1,8 +1,18 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Spotify
|
||||
# - USER-AGENT,Spotify*
|
||||
|
||||
- PROCESS-NAME,com.spotify.music
|
||||
|
||||
- DOMAIN-SUFFIX,pscdn.co
|
||||
- DOMAIN-SUFFIX,scdn.co
|
||||
- DOMAIN-SUFFIX,spoti.fi
|
||||
- DOMAIN-SUFFIX,spotify.com
|
||||
- DOMAIN-SUFFIX,spotifycdn.com
|
||||
- DOMAIN-SUFFIX,spotifycdn.net
|
||||
- DOMAIN-SUFFIX,spotifycharts.com
|
||||
- DOMAIN-SUFFIX,spotifycodes.com
|
||||
- DOMAIN-SUFFIX,spotifyjobs.com
|
||||
- DOMAIN-SUFFIX,spotifynewsroom.jp
|
||||
- DOMAIN-SUFFIX,spotilocal.com
|
||||
- DOMAIN-SUFFIX,tospotify.com
|
@ -1,33 +1,41 @@
|
||||
payload:
|
||||
# Streaming Media
|
||||
# (Podcast)
|
||||
# > Himalaya
|
||||
# USER-AGENT,Himalaya*
|
||||
- DOMAIN-SUFFIX,himalaya.com
|
||||
|
||||
# (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
|
||||
# USER-AGENT,Deezer*
|
||||
- PROCESS-NAME,deezer.android.app
|
||||
- DOMAIN-SUFFIX,deezer.com
|
||||
- DOMAIN-SUFFIX,dzcdn.net
|
||||
# > JOOX
|
||||
# USER-AGENT,JOOX*
|
||||
# USER-AGENT,WeMusic*
|
||||
- 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
|
||||
# USER-AGENT,Pandora*
|
||||
- PROCESS-NAME,com.pandora.android
|
||||
- DOMAIN-SUFFIX,pandora.com
|
||||
# > SoundCloud
|
||||
# USER-AGENT,SoundCloud*
|
||||
- PROCESS-NAME,com.soundcloud.android
|
||||
- DOMAIN-SUFFIX,p-cdn.us
|
||||
- DOMAIN-SUFFIX,sndcdn.com
|
||||
- DOMAIN-SUFFIX,soundcloud.com
|
||||
# > Spotify
|
||||
# USER-AGENT,Spotify*
|
||||
- PROCESS-NAME,com.spotify.music
|
||||
- DOMAIN-SUFFIX,pscdn.co
|
||||
- DOMAIN-SUFFIX,scdn.co
|
||||
- DOMAIN-SUFFIX,spotify.com
|
||||
@ -35,154 +43,204 @@ payload:
|
||||
- DOMAIN-KEYWORD,spotify.com
|
||||
- DOMAIN-KEYWORD,-spotify-com
|
||||
# > TIDAL
|
||||
# USER-AGENT,TIDAL*
|
||||
- PROCESS-NAME,com.aspiro.tidal
|
||||
- DOMAIN-SUFFIX,tidal.com
|
||||
# > YouTubeMusic
|
||||
# USER-AGENT,com.google.ios.youtubemusic*
|
||||
# USER-AGENT,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
|
||||
# USER-AGENT,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
|
||||
# USER-AGENT,All4*
|
||||
- PROCESS-NAME,com.channel4.ondemand
|
||||
- DOMAIN-SUFFIX,c4assets.com
|
||||
- DOMAIN-SUFFIX,channel4.com
|
||||
# > Amazon Prime Video
|
||||
# USER-AGENT,InstantVideo.US*
|
||||
# USER-AGENT,Prime%20Video*
|
||||
- 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-SUFFIX,tv.apple.com
|
||||
- DOMAIN,hls.itunes.apple.com
|
||||
- DOMAIN,hls-amt.itunes.apple.com
|
||||
- DOMAIN,linear.tv.apple.com
|
||||
- DOMAIN,play-edge.itunes.apple.com
|
||||
- DOMAIN,uts-api.itunes.apple.com
|
||||
# > Bahamut
|
||||
# USER-AGENT,Anime*
|
||||
- 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
|
||||
# USER-AGENT,BBCiPlayer*
|
||||
- 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
|
||||
# USER-AGENT,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+
|
||||
# USER-AGENT,Disney+*
|
||||
- DOMAIN-SUFFIX,disney-plus.net
|
||||
- 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
|
||||
- DOMAIN,global.edge.bamgrid.com
|
||||
# > DMM
|
||||
- PROCESS-NAME,com.dmm.app.movieplayer
|
||||
- DOMAIN-SUFFIX,dmm.co.jp
|
||||
- DOMAIN-SUFFIX,dmm.com
|
||||
- DOMAIN-SUFFIX,dmm-extension.com
|
||||
# > encoreTVB
|
||||
# USER-AGENT,encoreTVB*
|
||||
- PROCESS-NAME,com.tvbusa.encore
|
||||
- DOMAIN-SUFFIX,encoretvb.com
|
||||
- DOMAIN,edge.api.brightcove.com
|
||||
- DOMAIN,bcbolt446c5271-a.akamaihd.net
|
||||
# > FOX NOW
|
||||
# USER-AGENT,FOX%20NOW*
|
||||
- DOMAIN-SUFFIX,fox.com
|
||||
- DOMAIN-SUFFIX,foxdcg.com
|
||||
- DOMAIN-SUFFIX,theplatform.com
|
||||
- DOMAIN-SUFFIX,uplynk.com
|
||||
# > FOX+
|
||||
- DOMAIN-SUFFIX,foxplus.com
|
||||
# - DOMAIN-SUFFIX,theplatform.com
|
||||
- DOMAIN,cdn-fox-networks-group-green.akamaized.net
|
||||
- DOMAIN,d3cv4a9a9wh0bt.cloudfront.net
|
||||
- DOMAIN,foxsports01-i.akamaihd.net
|
||||
- DOMAIN,foxsports02-i.akamaihd.net
|
||||
- DOMAIN,foxsports03-i.akamaihd.net
|
||||
- DOMAIN,staticasiafox.akamaized.net
|
||||
# > HBO NOW & Max
|
||||
# USER-AGENT,HBO%20NOW*
|
||||
- PROCESS-NAME,com.hbo.hbonow
|
||||
- DOMAIN-SUFFIX,hbo.com
|
||||
- DOMAIN-SUFFIX,hbogo.com
|
||||
- DOMAIN-SUFFIX,hbonow.com
|
||||
# USER-AGENT,HBOMAX*
|
||||
- DOMAIN-SUFFIX,hbomax.com
|
||||
# > HBO GO HKG
|
||||
# USER-AGENT,HBO%20GO%20PROD%20HKG*
|
||||
- DOMAIN-SUFFIX,hbomaxcdn.com
|
||||
# > HBO Asia
|
||||
- PROCESS-NAME,hk.hbo.hbogo
|
||||
- DOMAIN-SUFFIX,hbogoasia.com
|
||||
- DOMAIN-SUFFIX,hbogoasia.hk
|
||||
- DOMAIN,bcbolthboa-a.akamaihd.net
|
||||
- DOMAIN,players.brightcove.net
|
||||
- DOMAIN,s3-ap-southeast-1.amazonaws.com
|
||||
- DOMAIN,dai3fd1oh325y.cloudfront.net
|
||||
- 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,cf-images.ap-southeast-1.prod.boltdns.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
|
||||
# > 华文电视
|
||||
# USER-AGENT,HWTVMobile*
|
||||
- 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
|
||||
# USER-AGENT,ITV_Player*
|
||||
- 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
|
||||
# USER-AGENT,KKTV*
|
||||
# USER-AGENT,com.kktv.ios.kktv*
|
||||
- PROCESS-NAME,com.kktv.kktv
|
||||
- DOMAIN-SUFFIX,kktv.com.tw
|
||||
- DOMAIN-SUFFIX,kktv.me
|
||||
- DOMAIN,kktv-theater.kk.stream
|
||||
# > LINE TV
|
||||
# USER-AGENT,LINE%20TV*
|
||||
- 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
|
||||
# USER-AGENT,My5*
|
||||
- PROCESS-NAME,com.mobileiq.demand5
|
||||
- DOMAIN-SUFFIX,channel5.com
|
||||
- DOMAIN-SUFFIX,my5.tv
|
||||
- DOMAIN,d349g9zuie06uo.cloudfront.net
|
||||
# > myTV SUPER
|
||||
# USER-AGENT,mytv*
|
||||
- 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
|
||||
# USER-AGENT,Argo*
|
||||
- PROCESS-NAME,com.netflix.mediaclient
|
||||
- DOMAIN-SUFFIX,netflix.com
|
||||
- DOMAIN-SUFFIX,netflix.net
|
||||
- DOMAIN-SUFFIX,nflxext.com
|
||||
@ -190,73 +248,85 @@ payload:
|
||||
- DOMAIN-SUFFIX,nflximg.net
|
||||
- DOMAIN-SUFFIX,nflxso.net
|
||||
- DOMAIN-SUFFIX,nflxvideo.net
|
||||
- DOMAIN-SUFFIX,netflixdnstest0.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest1.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest2.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest3.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest4.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest5.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest6.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest7.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest8.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest9.com
|
||||
- IP-CIDR,23.246.0.0/18,no-resolve
|
||||
- IP-CIDR,37.77.184.0/21,no-resolve
|
||||
- IP-CIDR,45.57.0.0/17,no-resolve
|
||||
- IP-CIDR,64.120.128.0/17,no-resolve
|
||||
- IP-CIDR,66.197.128.0/17,no-resolve
|
||||
- IP-CIDR,108.175.32.0/20,no-resolve
|
||||
- IP-CIDR,192.173.64.0/18,no-resolve
|
||||
- IP-CIDR,198.38.96.0/19,no-resolve
|
||||
- IP-CIDR,198.45.48.0/20,no-resolve
|
||||
- DOMAIN-KEYWORD,netflixdnstest
|
||||
- DOMAIN-KEYWORD,apiproxy-device-prod-nlb-
|
||||
- DOMAIN-KEYWORD,dualstack.apiproxy-
|
||||
- GEOIP,NETFLIX,no-resolve
|
||||
# > niconico
|
||||
# USER-AGENT,Niconico*
|
||||
- PROCESS-NAME,jp.nicovideo.android
|
||||
- DOMAIN-SUFFIX,dmc.nico
|
||||
- DOMAIN-SUFFIX,nicovideo.jp
|
||||
- DOMAIN-SUFFIX,nimg.jp
|
||||
- DOMAIN-SUFFIX,socdm.com
|
||||
# > 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
|
||||
# USER-AGENT,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
|
||||
# > 台湾好
|
||||
# USER-AGENT,TaiwanGood*
|
||||
- PROCESS-NAME,com.twgood.android
|
||||
- DOMAIN-SUFFIX,skyking.com.tw
|
||||
- DOMAIN,hamifans.emome.net
|
||||
# > TikTok
|
||||
# USER-AGENT,TikTok*
|
||||
- PROCESS-NAME,com.ss.android.ugc.trill
|
||||
- DOMAIN-SUFFIX,byteoversea.com
|
||||
- DOMAIN-SUFFIX,ibytedtos.com
|
||||
- DOMAIN-SUFFIX,ipstatp.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-com
|
||||
# > Twitch
|
||||
- DOMAIN-SUFFIX,jtvnw.net
|
||||
- DOMAIN-SUFFIX,ttvnw.net
|
||||
- DOMAIN-SUFFIX,twitch.tv
|
||||
- DOMAIN-SUFFIX,twitchcdn.net
|
||||
- DOMAIN-KEYWORD,tiktokcdn-
|
||||
# > TVer
|
||||
- PROCESS-NAME,jp.hamitv.hamiand1
|
||||
- DOMAIN-SUFFIX,tver.jp
|
||||
- DOMAIN,edge.api.brightcove.com
|
||||
# > ViuTV
|
||||
# USER-AGENT,Viu*
|
||||
- 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
|
||||
# USER-AGENT,com.google.ios.youtube*
|
||||
# USER-AGENT,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,youtubei.googleapis.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
|
@ -1,10 +1,20 @@
|
||||
payload:
|
||||
# > bilibili
|
||||
- DOMAIN-SUFFIX,biliapi.net
|
||||
- DOMAIN-SUFFIX,bilibili.com
|
||||
- DOMAIN-KEYWORD,cn-hk-eq-bcache-
|
||||
- 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
|
||||
- IP-CIDR,116.211.202.216/32,no-resolve
|
||||
# > MangoTV(芒果TV国际)
|
||||
- DOMAIN-SUFFIX,api.mgtv.com
|
||||
- DOMAIN,mobileso.bz.mgtv.com
|
@ -7,6 +7,7 @@ payload:
|
||||
- DOMAIN-SUFFIX,telegram.me
|
||||
- DOMAIN-SUFFIX,telegram.org
|
||||
- DOMAIN-SUFFIX,telegram-cdn.org
|
||||
- DOMAIN-SUFFIX,telesco.pe
|
||||
|
||||
- IP-CIDR,91.105.192.0/23,no-resolve
|
||||
- IP-CIDR,91.108.56.0/22,no-resolve
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Tencent Video
|
||||
- DOMAIN-SUFFIX,v.smtcdns.com
|
||||
- DOMAIN-SUFFIX,vv.video.qq.com
|
||||
- DOMAIN-SUFFIX,vv.video.qq.com
|
||||
|
@ -1,15 +1,5 @@
|
||||
payload:
|
||||
# Unbreak
|
||||
# > General
|
||||
# USER-AGENT,archero*
|
||||
# USER-AGENT,coffeecorp*
|
||||
# USER-AGENT,Coffee%20Corp*
|
||||
# USER-AGENT,restaurant-mobile*
|
||||
- DOMAIN,app.adjust.com
|
||||
- DOMAIN,bdtj.tagtic.cn
|
||||
# > Alibaba
|
||||
- DOMAIN,log.mmstat.com
|
||||
- DOMAIN,sycm.mmstat.com
|
||||
# > Google
|
||||
- DOMAIN-SUFFIX,blog.google
|
||||
- DOMAIN-SUFFIX,googletraveladservices.com
|
||||
@ -18,9 +8,6 @@ payload:
|
||||
- DOMAIN,dl.l.google.com
|
||||
- DOMAIN,update.googleapis.com
|
||||
- DOMAIN,translate.googleapis.com
|
||||
# >> Google Fonts API
|
||||
- DOMAIN,fonts.googleapis.com
|
||||
- DOMAIN,fonts.gstatic.com
|
||||
# >> Firebase Cloud Messaging
|
||||
- DOMAIN,mtalk.google.com
|
||||
- DOMAIN,alt1-mtalk.google.com
|
||||
@ -30,15 +17,4 @@ payload:
|
||||
- DOMAIN,alt5-mtalk.google.com
|
||||
- DOMAIN,alt6-mtalk.google.com
|
||||
- DOMAIN,alt7-mtalk.google.com
|
||||
- DOMAIN,alt8-mtalk.google.com
|
||||
# >> Paramount+
|
||||
- DOMAIN,pubads.g.doubleclick.net
|
||||
# > Tencent
|
||||
- DOMAIN,fairplay.l.qq.com
|
||||
- DOMAIN,livew.l.qq.com
|
||||
- DOMAIN,vd.l.qq.com
|
||||
# > Strava
|
||||
- DOMAIN,analytics.strava.com
|
||||
# > Umeng
|
||||
- DOMAIN,msg.umeng.com
|
||||
- DOMAIN,msg.umengcloud.com
|
||||
- DOMAIN,alt8-mtalk.google.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > ViuTV
|
||||
- PROCESS-NAME,com.hktve.viutv
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
payload:
|
||||
payload:
|
||||
# > WeTV
|
||||
- PROCESS-NAME,com.tencent.qqlivei18n
|
||||
- DOMAIN-SUFFIX,wetv.vip
|
||||
- DOMAIN-SUFFIX,wetvinfo.com
|
||||
- DOMAIN-SUFFIX,wetvinfo.com
|
||||
|
@ -1,15 +1,11 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Youtube
|
||||
- PROCESS-NAME,com.google.android.youtube
|
||||
- PROCESS-NAME,com.google.android.youtube.tv
|
||||
- DOMAIN-SUFFIX,ggpht.cn
|
||||
- DOMAIN-SUFFIX,ggpht.com
|
||||
- DOMAIN-SUFFIX,googlevideo.com
|
||||
- DOMAIN-SUFFIX,withyoutube.com
|
||||
- DOMAIN-SUFFIX,gvt1.com
|
||||
- DOMAIN-SUFFIX,video.google.com
|
||||
- DOMAIN-SUFFIX,youtu.be
|
||||
- DOMAIN-SUFFIX,youtube
|
||||
- DOMAIN-SUFFIX,youtube-nocookie.com
|
||||
- DOMAIN-SUFFIX,youtube-ui.l.google.com
|
||||
- DOMAIN-SUFFIX,youtube.ae
|
||||
- DOMAIN-SUFFIX,youtube.al
|
||||
- DOMAIN-SUFFIX,youtube.am
|
||||
@ -164,16 +160,10 @@ payload:
|
||||
- DOMAIN-SUFFIX,youtube.vn
|
||||
- DOMAIN-SUFFIX,youtubeeducation.com
|
||||
- DOMAIN-SUFFIX,youtubeembeddedplayer.googleapis.com
|
||||
- DOMAIN-SUFFIX,youtubefanfest.com
|
||||
- DOMAIN-SUFFIX,youtubegaming.com
|
||||
- DOMAIN-SUFFIX,youtubego.co.id
|
||||
- DOMAIN-SUFFIX,youtubego.co.in
|
||||
- DOMAIN-SUFFIX,youtubego.com
|
||||
- DOMAIN-SUFFIX,youtubego.com.br
|
||||
- DOMAIN-SUFFIX,youtubego.id
|
||||
- DOMAIN-SUFFIX,youtubego.in
|
||||
- DOMAIN-SUFFIX,youtubei.googleapis.com
|
||||
- DOMAIN-SUFFIX,youtubekids.com
|
||||
- DOMAIN-SUFFIX,youtubemobilesupport.com
|
||||
- DOMAIN-SUFFIX,youtube-nocookie.com
|
||||
- DOMAIN-SUFFIX,youtube-ui.l.google.com
|
||||
- DOMAIN-SUFFIX,yt.be
|
||||
- DOMAIN-SUFFIX,ytimg.com
|
||||
- DOMAIN-SUFFIX,yt3.ggpht.com
|
||||
- DOMAIN-SUFFIX,ytimg.com
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > Youku
|
||||
- DOMAIN-SUFFIX,youku.com
|
||||
- IP-CIDR,106.11.0.0/16,no-resolve
|
||||
- IP-CIDR,106.11.0.0/16,no-resolve
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > encoreTVB
|
||||
- PROCESS-NAME,com.tvbusa.encore
|
||||
- DOMAIN-SUFFIX,encoretvb.com
|
||||
|
@ -1,4 +1,4 @@
|
||||
payload:
|
||||
payload:
|
||||
# > myTV_SUPER
|
||||
# - USER-AGENT,mytv*
|
||||
- DOMAIN-KEYWORD,nowtv100
|
||||
|
@ -44,7 +44,7 @@ EOF
|
||||
source "/etc/openwrt_release"
|
||||
case "${DISTRIB_ARCH}" in
|
||||
aarch64_*)
|
||||
CORE_ARCH="linux-armv8"
|
||||
CORE_ARCH="linux-arm64"
|
||||
;;
|
||||
arm_*_neon-vfp*)
|
||||
CORE_ARCH="linux-armv7"
|
||||
@ -166,21 +166,11 @@ EOF
|
||||
fi
|
||||
|
||||
#Set authentication
|
||||
|
||||
auth_info_get()
|
||||
{
|
||||
local section="$1"
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
|
||||
if [ "$enabled" == "1" ]; then
|
||||
auth_cfg=false
|
||||
fi
|
||||
return
|
||||
}
|
||||
|
||||
auth_cfg=true
|
||||
config_load "openclash"
|
||||
config_foreach auth_info_get "authentication"
|
||||
if [ -n "$(uci -q get openclash.@authentication[0].enabled)" ]; then
|
||||
auth_cfg=false
|
||||
else
|
||||
auth_cfg=true
|
||||
fi
|
||||
|
||||
if $auth_cfg; then
|
||||
uci_name_tmp=$(uci add openclash authentication)
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
en_mode=$(uci get openclash.config.en_mode 2>/dev/null)
|
||||
en_mode=$(uci -q get openclash.config.en_mode)
|
||||
|
||||
if pidof clash >/dev/null && [ -z "$(echo "$en_mode" |grep "redir-host")" ]; then
|
||||
rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
set_lock() {
|
||||
exec 884>"/tmp/lock/openclash_clash_version.lock" 2>/dev/null
|
||||
@ -14,28 +14,30 @@ CKTIME=$(date "+%Y-%m-%d-%H")
|
||||
LAST_OPVER="/tmp/clash_last_version"
|
||||
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
set_lock
|
||||
|
||||
if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL -m 10 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL -m 10 https://fastly.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
|
||||
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 -m 10 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core_version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -sL -m 10 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
|
||||
curl -SsL -m 10 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL -m 10 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
|
||||
curl -SsL -m 10 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL -m 10 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
|
||||
curl -SsL -m 10 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
if [ "$?" != "0" ] || [ -n "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
curl -sL -m 10 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER >/dev/null 2>&1
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ] || [ -n "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
curl -SsL -m 10 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core_version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
fi
|
||||
|
||||
if [ "$?" == "0" ] && [ -z "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
if [ "$curl_status" -eq 0 ] && [ -z "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
echo "CheckTime:$CKTIME" >>$LAST_OPVER
|
||||
else
|
||||
rm -rf $LAST_OPVER
|
||||
|
@ -24,8 +24,15 @@ dns_port=$(uci -q get openclash.config.dns_port)
|
||||
enable_redirect_dns=$(uci -q get openclash.config.enable_redirect_dns)
|
||||
disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache)
|
||||
default_resolvfile=$(uci -q get openclash.config.default_resolvfile)
|
||||
en_mode=$(uci -q get openclash.config.en_mode)
|
||||
china_ip_route=$(uci -q get openclash.config.china_ip_route)
|
||||
ipv6_enable=$(uci -q get openclash.config.ipv6_enable)
|
||||
FW4="$(command -v fw4)"
|
||||
if_restart=0
|
||||
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
|
||||
restart=0
|
||||
only_download=0
|
||||
set_lock
|
||||
|
||||
@ -55,15 +62,15 @@ config_download()
|
||||
{
|
||||
if [ -n "$subscribe_url_param" ]; then
|
||||
if [ -n "$c_address" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$c_address""$subscribe_url_param" -o "$CFG_FILE" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$c_address""$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://api.dler.io/sub"$subscribe_url_param" -o "$CFG_FILE" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://api.dler.io/sub"$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
if [ "$?" -ne 0 ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://subconverter.herokuapp.com/sub"$subscribe_url_param" -o "$CFG_FILE" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' https://subconverter.herokuapp.com/sub"$subscribe_url_param" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$subscribe_url" -o "$CFG_FILE" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 -H 'User-Agent: Clash' "$subscribe_url" -o "$CFG_FILE" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$CFG_FILE" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -131,15 +138,13 @@ config_cus_up()
|
||||
uci commit openclash
|
||||
/usr/share/openclash/yml_groups_set.sh
|
||||
if [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then
|
||||
if_restart=1
|
||||
restart=1
|
||||
fi
|
||||
LOG_OUT "Config File【$name】Update Successful!"
|
||||
sleep 3
|
||||
SLOG_CLEAN
|
||||
elif [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then
|
||||
LOG_OUT "Config File【$name】Update Successful!"
|
||||
sleep 3
|
||||
if_restart=1
|
||||
restart=1
|
||||
else
|
||||
LOG_OUT "Config File【$name】Update Successful!"
|
||||
sleep 3
|
||||
@ -148,8 +153,7 @@ config_cus_up()
|
||||
else
|
||||
if [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then
|
||||
LOG_OUT "Config File【$name】Update Successful!"
|
||||
sleep 3
|
||||
if_restart=1
|
||||
restart=1
|
||||
else
|
||||
LOG_OUT "Config File【$name】Update Successful!"
|
||||
sleep 3
|
||||
@ -241,7 +245,7 @@ change_dns()
|
||||
|
||||
if [ -n "$FW4" ]; then
|
||||
for nft in "nat_output" "mangle_output"; do
|
||||
local handles=$(nft -a list chain inet fw4 ${nft} |grep -E "openclash|OpenClash" |awk -F '# handle ' '{print$2}')
|
||||
local handles=$(nft -a list chain inet fw4 ${nft} |grep -E "openclash|OpenClash" |grep -v "OpenClash DNS Hijack" |awk -F '# handle ' '{print$2}')
|
||||
for handle in $handles; do
|
||||
nft delete rule inet fw4 ${nft} handle ${handle}
|
||||
done
|
||||
@ -257,8 +261,10 @@ change_dns()
|
||||
else
|
||||
iptables -t nat -D OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
iptables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
ip6tables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
iptables -t nat -A OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
iptables -t mangle -A OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
ip6tables -t mangle -A OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
fi
|
||||
[ "$(unify_ps_status "openclash_watchdog.sh")" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && nohup /usr/share/openclash/openclash_watchdog.sh &
|
||||
fi
|
||||
@ -332,15 +338,66 @@ EOF
|
||||
nft delete rule inet fw4 ${nft} handle ${handle}
|
||||
done
|
||||
done >/dev/null 2>&1
|
||||
if [ -z "$(echo "$en_mode" |grep "redir-host")" ] && [ "$china_ip_route" -eq 1 ]; then
|
||||
LOG_OUT "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..."
|
||||
handles=$(nft -a list chain inet fw4 dstnat |grep "OpenClash DNS Hijack" |awk -F '# handle ' '{print$2}')
|
||||
for handle in $handles; do
|
||||
nft delete rule inet fw4 dstnat handle ${handle}
|
||||
done >/dev/null 2>&1
|
||||
position=$(nft list chain inet fw4 dstnat |grep "OpenClash" |grep "DNS" |awk -F '# handle ' '{print$2}' |sort -rn |head -1 || ehco 0)
|
||||
nft add rule inet fw4 dstnat position "$position" tcp dport 53 redirect to "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 dstnat position "$position" udp dport 53 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 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 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 tcp dport 5353 meta skuid != 65534 counter redirect to "$DNSPORT" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 nat_output position 0 udp dport 5353 meta skuid != 65534 counter 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 "$dns_port" comment \"OpenClash DNS Hijack\" 2>/dev/null
|
||||
nft add rule inet fw4 dstnat position "$position" meta nfproto {ipv6} udp dport 53 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 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
|
||||
fi
|
||||
fi
|
||||
else
|
||||
iptables -t nat -D OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
iptables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
ip6tables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1
|
||||
if [ -z "$(echo "$en_mode" |grep "redir-host")" ] && [ "$china_ip_route" -eq 1 ]; then
|
||||
LOG_OUT "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..."
|
||||
for ipt in "iptables -nvL OUTPUT -t nat" "iptables -nvL PREROUTING -t nat" "ip6tables -nvL PREROUTING -t nat" "ip6tables -nvL OUTPUT -t nat"; do
|
||||
for comment in "OpenClash DNS Hijack"; do
|
||||
local lines=$($ipt |sed 1,2d |sed -n "/${comment}/=" 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
|
||||
done >/dev/null 2>&1
|
||||
position=$(iptables -nvL PREROUTING -t nat |sed 1,2d |grep "OpenClash" |sed -n "/DNS/=" 2>/dev/null |sort -rn |head -1 || ehco 0)
|
||||
[ "$position" -ne 0 ] && let position++
|
||||
iptables -t nat -I PREROUTING "$position" -p udp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
iptables -t nat -I PREROUTING "$position" -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 5353 -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 5353 -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
|
||||
position=$(ip6tables -nvL PREROUTING -t nat |sed 1,2d |grep "OpenClash" |sed -n "/DNS/=" 2>/dev/null |sort -rn |head -1 || ehco 0)
|
||||
[ "$position" -ne 0 ] && let position++
|
||||
ip6tables -t nat -I PREROUTING "$position" -p udp --dport 53 -j REDIRECT --to-ports "$dns_port" -m comment --comment "OpenClash DNS Hijack" 2>/dev/null
|
||||
ip6tables -t nat -I PREROUTING "$position" -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
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
sleep 3
|
||||
|
||||
config_download
|
||||
|
||||
if [ "$?" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
YAML.load_file('$CFG_FILE');
|
||||
@ -518,7 +575,7 @@ sub_info_get()
|
||||
|
||||
config_download
|
||||
|
||||
if [ "$?" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
YAML.load_file('$CFG_FILE');
|
||||
@ -560,8 +617,15 @@ config_foreach sub_info_get "config_subscribe"
|
||||
uci -q delete openclash.config.config_update_path
|
||||
uci commit openclash
|
||||
|
||||
if [ "$if_restart" -eq 1 ]; then
|
||||
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
|
||||
/etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
uci -q set openclash.config.restart=0
|
||||
uci -q commit openclash
|
||||
elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(find /tmp/lock/ |grep -v "openclash.lock" |grep -c "openclash")" -gt 1 ]; then
|
||||
uci -q set openclash.config.restart=1
|
||||
uci -q commit openclash
|
||||
else
|
||||
sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null
|
||||
[ "$(uci -q get openclash.config.auto_update)" -eq 1 ] && [ "$(uci -q get openclash.config.config_auto_update_mode)" -ne 1 ] && echo "0 $(uci -q get openclash.config.auto_update_time) * * $(uci -q get openclash.config.config_update_week_time) /usr/share/openclash/openclash.sh" >> $CRON_FILE
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/openclash_ps.sh
|
||||
. /usr/share/openclash/log.sh
|
||||
|
||||
@ -14,36 +14,43 @@
|
||||
rm -rf "/tmp/lock/openclash_chn.lock"
|
||||
}
|
||||
|
||||
china_ip_route=$(uci get openclash.config.china_ip_route 2>/dev/null)
|
||||
china_ip6_route=$(uci get openclash.config.china_ip6_route 2>/dev/null)
|
||||
CHNR_CUSTOM_URL=$(uci get openclash.config.chnr_custom_url 2>/dev/null)
|
||||
CHNR6_CUSTOM_URL=$(uci get openclash.config.chnr6_custom_url 2>/dev/null)
|
||||
disable_udp_quic=$(uci get openclash.config.disable_udp_quic 2>/dev/null)
|
||||
small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
|
||||
china_ip_route=$(uci -q get openclash.config.china_ip_route)
|
||||
china_ip6_route=$(uci -q get openclash.config.china_ip6_route)
|
||||
CHNR_CUSTOM_URL=$(uci -q get openclash.config.chnr_custom_url)
|
||||
CHNR6_CUSTOM_URL=$(uci -q get openclash.config.chnr6_custom_url)
|
||||
CNDOMAIN_CUSTOM_URL=$(uci -q get openclash.config.cndomain_custom_url)
|
||||
disable_udp_quic=$(uci -q get openclash.config.disable_udp_quic)
|
||||
small_flash_memory=$(uci -q get openclash.config.small_flash_memory)
|
||||
en_mode=$(uci -q get openclash.config.en_mode)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
restart=0
|
||||
set_lock
|
||||
|
||||
if [ "$small_flash_memory" != "1" ]; then
|
||||
chnr_path="/etc/openclash/china_ip_route.ipset"
|
||||
chnr6_path="/etc/openclash/china_ip6_route.ipset"
|
||||
mkdir -p /etc/openclash
|
||||
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"
|
||||
mkdir -p /tmp/etc/openclash
|
||||
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
|
||||
|
||||
LOG_OUT "Start Downloading The Chnroute Cidr List..."
|
||||
if [ -z "$CHNR_CUSTOM_URL" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn.txt -o /tmp/china_ip_route.txt >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn.txt -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_cidr.txt -o /tmp/china_ip_route.txt >/dev/null 2>&1
|
||||
if [ "${PIPESTATUS[0]}" != "0" ] || ! pidof clash >/dev/null; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_cidr.txt -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR_CUSTOM_URL" -o /tmp/china_ip_route.txt >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR_CUSTOM_URL" -o /tmp/china_ip_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ -s "/tmp/china_ip_route.txt" ]; then
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/china_ip_route.txt" ]; then
|
||||
LOG_OUT "Chnroute Cidr List Download Success, Check Updated..."
|
||||
#预处理
|
||||
if [ -n "$FW4" ]; then
|
||||
@ -61,10 +68,9 @@
|
||||
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
|
||||
[ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
restart=1
|
||||
fi
|
||||
LOG_OUT "Chnroute Cidr List Update Successful!"
|
||||
sleep 3
|
||||
else
|
||||
LOG_OUT "Updated Chnroute Cidr List No Change, Do Nothing..."
|
||||
sleep 3
|
||||
@ -77,11 +83,11 @@
|
||||
#ipv6
|
||||
LOG_OUT "Start Downloading The Chnroute6 Cidr List..."
|
||||
if [ -z "$CHNR6_CUSTOM_URL" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_ipv6.txt -o /tmp/china_ip6_route.txt >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ispip.clang.cn/all_cn_ipv6.txt -o /tmp/china_ip6_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip6_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR6_CUSTOM_URL" -o /tmp/china_ip6_route.txt >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CHNR6_CUSTOM_URL" -o /tmp/china_ip6_route.txt 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/china_ip6_route.txt" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ -s "/tmp/china_ip6_route.txt" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq "0" ] && [ -s "/tmp/china_ip6_route.txt" ]; then
|
||||
LOG_OUT "Chnroute6 Cidr List Download Success, Check Updated..."
|
||||
#预处理
|
||||
if [ -n "$FW4" ]; then
|
||||
@ -99,10 +105,9 @@
|
||||
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
|
||||
[ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
restart=1
|
||||
fi
|
||||
LOG_OUT "Chnroute6 Cidr List Update Successful!"
|
||||
sleep 3
|
||||
else
|
||||
LOG_OUT "Updated Chnroute6 Cidr List No Change, Do Nothing..."
|
||||
sleep 3
|
||||
@ -111,6 +116,56 @@
|
||||
LOG_OUT "Chnroute6 Cidr List Update Error, Please Try Again Later..."
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
#CN DOMAIN
|
||||
LOG_OUT "Start Downloading The CN Domains List..."
|
||||
if [ -n "$CNDOMAIN_CUSTOM_URL" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$CNDOMAIN_CUSTOM_URL" -o "/tmp/china_domains.list" 2>&1 | 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 5 -m 30 --speed-time 15 --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 | 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 5 -m 30 --speed-time 15 --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 | 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 5 -m 30 --speed-time 15 --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 | 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 5 -m 30 --speed-time 15 --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 | 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..."
|
||||
sleep 3
|
||||
fi
|
||||
else
|
||||
LOG_OUT "CN Domains List Update Error, Please Try Again Later..."
|
||||
sleep 3
|
||||
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
|
||||
/etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
uci -q set openclash.config.restart=0
|
||||
uci -q commit openclash
|
||||
elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
|
||||
uci -q set openclash.config.restart=1
|
||||
uci -q commit openclash
|
||||
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
|
||||
del_lock
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /lib/functions.sh
|
||||
. /usr/share/openclash/openclash_ps.sh
|
||||
. /usr/share/openclash/log.sh
|
||||
@ -10,6 +10,7 @@ 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")
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
|
||||
[ ! -f "/tmp/clash_last_version" ] && /usr/share/openclash/clash_version.sh 2>/dev/null
|
||||
if [ ! -f "/tmp/clash_last_version" ]; then
|
||||
@ -59,66 +60,69 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
|
||||
"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/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://fastly.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1
|
||||
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 -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | 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
|
||||
if [ "$?" != "0" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz >/dev/null 2>&1
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/premium/clash-"$CPU_MODEL"-"$CORE_LV".gz -o /tmp/clash_tun.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash_tun.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
fi
|
||||
if [ "$?" == "0" ]; then
|
||||
if [ "$curl_status" -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/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://fastly.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz >/dev/null 2>&1
|
||||
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 -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | 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 [ "$?" != "0" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz >/dev/null 2>&1
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/meta/clash-"$CPU_MODEL".tar.gz -o /tmp/clash_meta.tar.gz 2>&1 | 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"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
fi
|
||||
if [ "$?" == "0" ]; then
|
||||
if [ "$curl_status" -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/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://fastly.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
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 -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | 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 -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | 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 [ "$?" != "0" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
fi
|
||||
if [ "$?" == "0" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/core-lateset/dev/clash-"$CPU_MODEL".tar.gz -o /tmp/clash.tar.gz 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/clash.tar.gz" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
fi
|
||||
if [ "$curl_status" -eq 0 ]; then
|
||||
gzip -t /tmp/clash.tar.gz >/dev/null 2>&1
|
||||
fi
|
||||
esac
|
||||
@ -184,7 +188,7 @@ if [ "$CORE_CV" != "$CORE_LV" ] || [ -z "$CORE_CV" ]; then
|
||||
if [ "$if_restart" -eq 1 ]; then
|
||||
uci -q set openclash.config.config_reload=0
|
||||
uci -q commit openclash
|
||||
if [ -z "$2" ] && [ "$1" != "one_key_update" ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
|
||||
if [ -z "$2" ] && [ "$1" != "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
|
||||
else
|
||||
|
@ -345,7 +345,7 @@ cat >> "$DEBUG_LOG" <<-EOF
|
||||
|
||||
EOF
|
||||
for nft in "input" "forward" "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do
|
||||
nft list chain inet fw4 dstnat >> "$DEBUG_LOG" 2>/dev/null
|
||||
nft list chain inet fw4 "$nft" >> "$DEBUG_LOG" 2>/dev/null
|
||||
done >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
@ -414,7 +414,7 @@ cat >> "$DEBUG_LOG" <<-EOF
|
||||
#===================== 测试本机网络连接 =====================#
|
||||
|
||||
EOF
|
||||
curl -I -m 5 www.baidu.com >> "$DEBUG_LOG" 2>/dev/null
|
||||
curl -SsI -m 5 www.baidu.com >> "$DEBUG_LOG" 2>/dev/null
|
||||
|
||||
cat >> "$DEBUG_LOG" <<-EOF
|
||||
|
||||
@ -423,9 +423,9 @@ cat >> "$DEBUG_LOG" <<-EOF
|
||||
EOF
|
||||
VERSION_URL="https://raw.githubusercontent.com/vernesong/OpenClash/master/version"
|
||||
if pidof clash >/dev/null; then
|
||||
curl -IL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null
|
||||
curl -SsIL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null
|
||||
else
|
||||
curl -IL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null
|
||||
curl -SsIL -m 3 --retry 2 "$VERSION_URL" >> "$DEBUG_LOG" 2>/dev/null
|
||||
fi
|
||||
|
||||
cat >> "$DEBUG_LOG" <<-EOF
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/log.sh
|
||||
. /lib/functions.sh
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
DASH_TYPE="$2"
|
||||
DASH_FILE_DIR="/tmp/dash.zip"
|
||||
DASH_FILE_TMP="/tmp/dash/"
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
if [ "$DASH_NAME" == "Dashboard" ]; then
|
||||
UNPACK_FILE_DIR="/usr/share/openclash/ui/dashboard/"
|
||||
@ -29,9 +30,9 @@
|
||||
fi
|
||||
fi
|
||||
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$DASH_FILE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$DASH_FILE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$DASH_FILE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
|
||||
if [ "$?" -eq "0" ] && [ -s "$DASH_FILE_DIR" ] && [ -z "$(grep "404: Not Found" "$DASH_FILE_DIR")" ] && [ -z "$(grep "Package size exceeded the configured limit" "$DASH_FILE_DIR")" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$DASH_FILE_DIR" ] && [ -z "$(grep "404: Not Found" "$DASH_FILE_DIR")" ] && [ -z "$(grep "Package size exceeded the configured limit" "$DASH_FILE_DIR")" ]; then
|
||||
unzip -qt "$DASH_FILE_DIR" >/dev/null 2>&1
|
||||
if [ "$?" -eq "0" ]; then
|
||||
cp -rf "$UNPACK_FILE_DIR". "$BACKUP_FILE_DIR" >/dev/null 2>&1
|
||||
@ -43,14 +44,14 @@
|
||||
rm -rf "$BACKUP_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1
|
||||
LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Download Successful!" && SLOG_CLEAN
|
||||
return 1
|
||||
exit 1
|
||||
else
|
||||
LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Unzip Error!" && SLOG_CLEAN
|
||||
cp -rf "$BACKUP_FILE_DIR". "$UNPACK_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$DASH_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$BACKUP_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1
|
||||
return 2
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Unzip Error!" && SLOG_CLEAN
|
||||
@ -58,7 +59,7 @@
|
||||
rm -rf "$DASH_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$BACKUP_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1
|
||||
return 2
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
cp -rf "$BACKUP_FILE_DIR". "$UNPACK_FILE_DIR" >/dev/null 2>&1
|
||||
@ -66,5 +67,5 @@
|
||||
rm -rf "$DASH_FILE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$DASH_FILE_TMP" >/dev/null 2>&1
|
||||
LOG_OUT "Control Panel【$DASH_NAME - $DASH_TYPE】Download Error!" && SLOG_CLEAN
|
||||
return 0
|
||||
exit 0
|
||||
fi
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/log.sh
|
||||
. /lib/functions.sh
|
||||
|
||||
@ -13,14 +13,13 @@ urlencode() {
|
||||
}
|
||||
|
||||
RULE_FILE_NAME="$1"
|
||||
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/" ]; then
|
||||
DOWNLOAD_PATH="https://cdn.jsdelivr.net/gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list"
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
DOWNLOAD_PATH="https://fastly.jsdelivr.net/gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Netflix_Domains.list"
|
||||
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
|
||||
@ -34,10 +33,8 @@ urlencode() {
|
||||
RULE_TYPE="netflix"
|
||||
elif [ "$1" == "disney_domains" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
DOWNLOAD_PATH="https://cdn.jsdelivr.net/gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list"
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
DOWNLOAD_PATH="https://fastly.jsdelivr.net/gh/vernesong/OpenClash@$RELEASE_BRANCH/luci-app-openclash/root/usr/share/openclash/res/Disney_Plus_Domains.list"
|
||||
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
|
||||
@ -62,7 +59,7 @@ urlencode() {
|
||||
|
||||
if [ -z "$DOWNLOAD_PATH" ]; then
|
||||
LOG_OUT "Rule File【$RULE_FILE_NAME】Download Error!" && SLOG_CLEAN
|
||||
return 0
|
||||
exit 0
|
||||
fi
|
||||
|
||||
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
|
||||
@ -70,36 +67,36 @@ urlencode() {
|
||||
[ "$RULE_TYPE" != "netflix" ] && [ "$RULE_TYPE" != "disney" ] && DOWNLOAD_PATH=$(urlencode "$DOWNLOAD_PATH")
|
||||
|
||||
if [ "$RULE_TYPE" = "netflix" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | 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 [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/FQrabbit/SSTap-Rule@master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
elif [ "$RULE_TYPE" = "provider" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/"$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/"$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/"$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod""$(echo "$DOWNLOAD_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"/master"$(echo "$DOWNLOAD_PATH" |awk -F 'master' '{print $2}')" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$TMP_RULE_DIR" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$?" -eq "0" ] && [ -s "$TMP_RULE_DIR" ] && [ -z "$(grep "404: Not Found" "$TMP_RULE_DIR")" ] && [ -z "$(grep "Package size exceeded the configured limit" "$TMP_RULE_DIR")" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "$TMP_RULE_DIR" ] && [ -z "$(grep "404: Not Found" "$TMP_RULE_DIR")" ] && [ -z "$(grep "Package size exceeded the configured limit" "$TMP_RULE_DIR")" ]; then
|
||||
if [ "$RULE_TYPE" = "game" ]; then
|
||||
cat "$TMP_RULE_DIR" |sed '/^#/d' 2>/dev/null |sed '/^ *$/d' 2>/dev/null |awk '{print " - "$0}' > "$TMP_RULE_DIR_TMP" 2>/dev/null
|
||||
sed -i '1i\payload:' "$TMP_RULE_DIR_TMP" 2>/dev/null
|
||||
@ -115,15 +112,15 @@ urlencode() {
|
||||
fi
|
||||
rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
LOG_OUT "Rule File【$RULE_FILE_NAME】Download Successful!" && SLOG_CLEAN
|
||||
return 1
|
||||
exit 1
|
||||
else
|
||||
LOG_OUT "Rule File【$RULE_FILE_NAME】No Change, Do Nothing!" && SLOG_CLEAN
|
||||
rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
rm -rf "$TMP_RULE_DIR_TMP" >/dev/null 2>&1
|
||||
return 2
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
rm -rf "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
LOG_OUT "Rule File【$RULE_FILE_NAME】Download Error!" && SLOG_CLEAN
|
||||
return 0
|
||||
exit 0
|
||||
fi
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/openclash_ps.sh
|
||||
. /usr/share/openclash/log.sh
|
||||
|
||||
@ -15,6 +15,8 @@
|
||||
small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
|
||||
GEOIP_CUSTOM_URL=$(uci get openclash.config.geoip_custom_url 2>/dev/null)
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
restart=0
|
||||
set_lock
|
||||
|
||||
if [ "$small_flash_memory" != "1" ]; then
|
||||
@ -27,25 +29,23 @@
|
||||
LOG_OUT "Start Downloading GeoIP Dat..."
|
||||
if [ -z "$GEOIP_CUSTOM_URL" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geoip.dat" -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -ne "0" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geoip.dat" -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geoip.dat" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/GeoIP.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoIP.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ -s "/tmp/GeoIP.dat" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/GeoIP.dat" ]; then
|
||||
LOG_OUT "GeoIP Dat Download Success, Check Updated..."
|
||||
cmp -s /tmp/GeoIP.dat "$geoip_path"
|
||||
if [ "$?" -ne "0" ]; then
|
||||
@ -53,8 +53,7 @@
|
||||
rm -rf "/etc/openclash/geoip.dat"
|
||||
mv /tmp/GeoIP.dat "$geoip_path" >/dev/null 2>&1
|
||||
LOG_OUT "GeoIP Dat Update Successful!"
|
||||
sleep 3
|
||||
[ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
restart=1
|
||||
else
|
||||
LOG_OUT "Updated GeoIP Dat No Change, Do Nothing..."
|
||||
sleep 3
|
||||
@ -63,6 +62,18 @@
|
||||
LOG_OUT "GeoIP Dat Update Error, Please Try Again Later..."
|
||||
sleep 3
|
||||
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
|
||||
/etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
uci -q set openclash.config.restart=0
|
||||
uci -q commit openclash
|
||||
elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
|
||||
uci -q set openclash.config.restart=1
|
||||
uci -q commit openclash
|
||||
fi
|
||||
|
||||
rm -rf /tmp/GeoIP.dat >/dev/null 2>&1
|
||||
SLOG_CLEAN
|
||||
del_lock
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/openclash_ps.sh
|
||||
. /usr/share/openclash/log.sh
|
||||
|
||||
@ -15,6 +15,8 @@
|
||||
small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
|
||||
GEOSITE_CUSTOM_URL=$(uci get openclash.config.geosite_custom_url 2>/dev/null)
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
restart=0
|
||||
set_lock
|
||||
|
||||
if [ "$small_flash_memory" != "1" ]; then
|
||||
@ -27,25 +29,23 @@
|
||||
LOG_OUT "Start Downloading GeoSite Database..."
|
||||
if [ -z "$GEOSITE_CUSTOM_URL" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geosite.dat -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/Loyalsoldier/v2ray-rules-dat/release/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -ne "0" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geosite.dat" -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/v/v2/v2raya/dists/v2ray-rules-dat/geosite.dat" -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOSITE_CUSTOM_URL" -o /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOSITE_CUSTOM_URL" -o /tmp/GeoSite.dat 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/GeoSite.dat" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ -s "/tmp/GeoSite.dat" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/GeoSite.dat" ]; then
|
||||
LOG_OUT "GeoSite Database Download Success, Check Updated..."
|
||||
cmp -s /tmp/GeoSite.dat "$geosite_path"
|
||||
if [ "$?" -ne "0" ]; then
|
||||
@ -53,8 +53,7 @@
|
||||
rm -rf "/etc/openclash/geosite.dat"
|
||||
mv /tmp/GeoSite.dat "$geosite_path" >/dev/null 2>&1
|
||||
LOG_OUT "GeoSite Database Update Successful!"
|
||||
sleep 3
|
||||
[ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
restart=1
|
||||
else
|
||||
LOG_OUT "Updated GeoSite Database No Change, Do Nothing..."
|
||||
sleep 3
|
||||
@ -63,6 +62,18 @@
|
||||
LOG_OUT "GeoSite Database Update Error, Please Try Again Later..."
|
||||
sleep 3
|
||||
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
|
||||
/etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
uci -q set openclash.config.restart=0
|
||||
uci -q commit openclash
|
||||
elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
|
||||
uci -q set openclash.config.restart=1
|
||||
uci -q commit openclash
|
||||
fi
|
||||
|
||||
rm -rf /tmp/GeoSite.dat >/dev/null 2>&1
|
||||
SLOG_CLEAN
|
||||
del_lock
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/openclash_ps.sh
|
||||
. /usr/share/openclash/log.sh
|
||||
|
||||
@ -11,10 +11,12 @@
|
||||
flock -u 880 2>/dev/null
|
||||
rm -rf "/tmp/lock/openclash_ipdb.lock"
|
||||
}
|
||||
|
||||
|
||||
small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
|
||||
GEOIP_CUSTOM_URL=$(uci get openclash.config.geo_custom_url 2>/dev/null)
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
restart=0
|
||||
set_lock
|
||||
|
||||
if [ "$small_flash_memory" != "1" ]; then
|
||||
@ -27,30 +29,27 @@
|
||||
LOG_OUT "Start Downloading Geoip Database..."
|
||||
if [ -z "$GEOIP_CUSTOM_URL" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/Country.mmdb >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$GEOIP_CUSTOM_URL" -o /tmp/Country.mmdb 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/Country.mmdb" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ -s "/tmp/Country.mmdb" ]; then
|
||||
if [ "${PIPESTATUS[0]}" -eq 0 ] && [ -s "/tmp/Country.mmdb" ]; then
|
||||
LOG_OUT "Geoip Database Download Success, Check Updated..."
|
||||
cmp -s /tmp/Country.mmdb "$geoip_path"
|
||||
if [ "$?" -ne "0" ]; then
|
||||
LOG_OUT "Geoip Database Has Been Updated, Starting To Replace The Old Version..."
|
||||
mv /tmp/Country.mmdb "$geoip_path" >/dev/null 2>&1
|
||||
LOG_OUT "Geoip Database Update Successful!"
|
||||
sleep 3
|
||||
[ "$(unify_ps_prevent)" -eq 0 ] && /etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
restart=1
|
||||
else
|
||||
LOG_OUT "Updated Geoip Database No Change, Do Nothing..."
|
||||
sleep 3
|
||||
@ -59,6 +58,18 @@
|
||||
LOG_OUT "Geoip Database Update Error, Please Try Again Later..."
|
||||
sleep 3
|
||||
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
|
||||
/etc/init.d/openclash restart >/dev/null 2>&1 &
|
||||
uci -q set openclash.config.restart=0
|
||||
uci -q commit openclash
|
||||
elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
|
||||
uci -q set openclash.config.restart=1
|
||||
uci -q commit openclash
|
||||
fi
|
||||
|
||||
rm -rf /tmp/Country.mmdb >/dev/null 2>&1
|
||||
SLOG_CLEAN
|
||||
del_lock
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
unify_ps_status() {
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
|
||||
echo "$(ps -efw |grep -v grep |grep -c "$1")"
|
||||
else
|
||||
echo "$(ps -w |grep -v grep |grep -c "$1")"
|
||||
@ -9,7 +9,7 @@ unify_ps_status() {
|
||||
}
|
||||
|
||||
unify_ps_pids() {
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
|
||||
echo "$(ps -efw |grep "$1" |grep -v grep |awk '{print $2}' 2>/dev/null)"
|
||||
else
|
||||
echo "$(ps -w |grep "$1" |grep -v grep |awk '{print $1}' 2>/dev/null)"
|
||||
@ -17,7 +17,7 @@ unify_ps_pids() {
|
||||
}
|
||||
|
||||
unify_ps_prevent() {
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
|
||||
echo "$(ps -efw |grep -v grep |grep -c "/etc/init.d/openclash")"
|
||||
else
|
||||
echo "$(ps -w |grep -v grep |grep -c "/etc/init.d/openclash")"
|
||||
@ -25,7 +25,7 @@ unify_ps_prevent() {
|
||||
}
|
||||
|
||||
unify_ps_cfgname() {
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ];then
|
||||
if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
|
||||
echo "$(ps -efw |grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)"
|
||||
else
|
||||
echo "$(ps -w |grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)"
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/openclash_ps.sh
|
||||
. /lib/functions.sh
|
||||
. /usr/share/openclash/ruby.sh
|
||||
@ -35,51 +35,45 @@
|
||||
LOG_OUT "Start Downloading Third Party Rules in Use..."
|
||||
if [ "$rule_name" = "lhie1" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/dler-io/Rules@master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/dler-io/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml 2>&1 | 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/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Outbound.yaml -o /tmp/rules.yaml 2>&1 | 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/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://cdn.jsdelivr.net/gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://fastly.jsdelivr.net/gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
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 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"gh/DivineEngine/Profiles@master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.fastgit.org/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 "$github_address_mod"https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | 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 -sL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -SsL --connect-timeout 5 -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Inbound.yaml -o /tmp/rules.yaml 2>&1 | 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 [ "$?" -eq "0" ] && [ -s "/tmp/rules.yaml" ]; then
|
||||
if [ -s "/tmp/rules.yaml" ]; then
|
||||
LOG_OUT "Download Successful, Start Preprocessing Rule File..."
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
@ -117,7 +111,7 @@
|
||||
OLD_GROUP = Value['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq;
|
||||
NEW_GROUP = Value_1['rules'].collect{|x| x.split(',')[2] or x.split(',')[1]}.uniq;
|
||||
puts (OLD_GROUP | NEW_GROUP).eql?(OLD_GROUP)
|
||||
")" ; then
|
||||
")" && [ -f "/usr/share/openclash/res/${rule_name}.yaml" ]; then
|
||||
LOG_OUT "Error: Updated Others Rules【$rule_name】Has Incompatible Proxy-Group, Update Exit, Please Wait For OpenClash Update To Adapt..."
|
||||
rm -rf /tmp/rules.yaml >/dev/null 2>&1
|
||||
sleep 3
|
||||
@ -166,7 +160,7 @@
|
||||
|
||||
if [ -z "$CONFIG_FILE" ]; then
|
||||
CONFIG_FILE="/etc/openclash/config/$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}')"
|
||||
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [ -z "$CONFIG_NAME" ]; then
|
||||
@ -180,7 +174,7 @@
|
||||
LOG_OUT "Get Other Rules Settings Faild, Update Stop!"
|
||||
sleep 3
|
||||
fi
|
||||
if [ "$ifrestart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
|
||||
if [ "$ifrestart" -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 &
|
||||
fi
|
||||
fi
|
||||
|
@ -8,7 +8,6 @@ local uci = require("luci.model.uci").cursor()
|
||||
local fs = require "luci.openclash"
|
||||
local json = require "luci.jsonc"
|
||||
local UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
|
||||
local filmId = 70143836
|
||||
local class_type = type
|
||||
local type = arg[1]
|
||||
local all_test
|
||||
@ -16,6 +15,7 @@ local router_self_proxy = tonumber(uci:get("openclash", "config", "router_self_p
|
||||
local now_name, group_name, group_type, group_show, status, ip, port, passwd, group_match_name
|
||||
local groups = {}
|
||||
local proxies = {}
|
||||
local tested_proxy = {}
|
||||
local self_status = luci.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"
|
||||
|
||||
@ -33,16 +33,15 @@ end
|
||||
if arg[2] == "all" then all_test = true else all_test = false end
|
||||
|
||||
function unlock_auto_select()
|
||||
local key_group, region, now, proxy, group_match, proxy_default, auto_get_group, info, group_now
|
||||
local key_group, region, old_region, now, proxy, group_match, proxy_default, auto_get_group, info, group_now
|
||||
local original = {}
|
||||
local other_region_unlock = {}
|
||||
local no_old_region_unlock = {}
|
||||
local full_support_list = {}
|
||||
local tested_proxy = {}
|
||||
local fallback_select = {}
|
||||
local gorup_i18 = "Group:"
|
||||
local no_group_find = "failed to search based on keywords and automatically obtain the group, please confirm the validity of the regex!"
|
||||
local full_support_no_area = "full support."
|
||||
local full_support_no_area = "full support"
|
||||
local full_support = "full support, area:"
|
||||
local only_original = "only support homemade!"
|
||||
local no_unlock = "not support unlock!"
|
||||
@ -58,15 +57,17 @@ function unlock_auto_select()
|
||||
local faild_test_start = "unlock test faild! start auto select unlock proxy..."
|
||||
local area_i18 = ", area:"
|
||||
local select_faild_other_region = "unlock node auto selected failed, no node match the regex, rolled back to other full support node"
|
||||
local other_region_unlock_test = "full support but not match the regex!"
|
||||
local other_region_unlock_no_select = "but not match the regex! the type of group is not select, auto select could not work!"
|
||||
local other_region_unlock_test_start = "full support but not match the regex! start auto select unlock proxy..."
|
||||
local other_region_unlock_test = ", but not match the regex!"
|
||||
local other_region_unlock_no_select = ", but not match the regex! the type of group is not select, auto select could not work!"
|
||||
local other_region_unlock_test_start = ", but not match the regex! start auto select unlock proxy..."
|
||||
local select_all_full_support = "unlock node test finished, rolled back to the full support node"
|
||||
local select_all_other_region = "unlock node test finished, no node match the regex, rolled back to other full support node"
|
||||
local select_all_faild = "unlock node test finished, no node available, rolled back to the"
|
||||
local no_nodes_filter = "no nodes name match the regex!"
|
||||
local select_success_no_old_region = "unlock node auto selected successfully, no node match the old region, rolled back to other full support node"
|
||||
local no_old_region_unlock_test = "full support but not match the old region!"
|
||||
local no_old_region_unlock_old_region = ", but not match the old region:"
|
||||
local no_old_region_unlock_old_region_no_select = ", the type of group is not select, auto select could not work!"
|
||||
local no_old_region_unlock_no_select = "but not match the old region! the type of group is not select, auto select could not work!"
|
||||
local select_all_no_old_region = "unlock node test finished, no node match the old region, rolled back to other full support node"
|
||||
|
||||
@ -140,7 +141,7 @@ function unlock_auto_select()
|
||||
table.insert(tested_proxy, now_name)
|
||||
group_match = true
|
||||
--test now proxy
|
||||
region = proxy_unlock_test()
|
||||
region, old_region = proxy_unlock_test()
|
||||
if table_include(groups, now_name) then
|
||||
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.."】"
|
||||
else
|
||||
@ -148,7 +149,7 @@ function unlock_auto_select()
|
||||
end
|
||||
if status ~= 2 and status ~= 4 then
|
||||
os.execute("sleep 3")
|
||||
region = proxy_unlock_test()
|
||||
region, old_region = proxy_unlock_test()
|
||||
end
|
||||
if status == 2 or status == 4 then
|
||||
if region and region ~= "" then
|
||||
@ -165,6 +166,9 @@ function unlock_auto_select()
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
end
|
||||
if status == 2 and type == "Google" then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), now_name)
|
||||
end
|
||||
break
|
||||
else
|
||||
status = 0
|
||||
@ -176,9 +180,17 @@ function unlock_auto_select()
|
||||
table.insert(other_region_unlock, {value.now, value.now, get_group_now(info, value.now)})
|
||||
end
|
||||
if not all_test then
|
||||
print(now..other_region_unlock_test_start)
|
||||
if region and region ~= "" then
|
||||
print(now..full_support.."【"..region.."】"..other_region_unlock_test_start)
|
||||
else
|
||||
print(now..full_support_no_area..other_region_unlock_test_start)
|
||||
end
|
||||
else
|
||||
print(now..other_region_unlock_test)
|
||||
if region and region ~= "" then
|
||||
print(now..full_support.."【"..region.."】"..other_region_unlock_test)
|
||||
else
|
||||
print(now..full_support_no_area..other_region_unlock_test)
|
||||
end
|
||||
end
|
||||
elseif status == 1 then
|
||||
table.insert(original, {value.now, value.now, get_group_now(info, value.now)})
|
||||
@ -268,7 +280,7 @@ function unlock_auto_select()
|
||||
break
|
||||
else
|
||||
luci.sys.exec(string.format("curl -sL -m 3 --retry 2 -w %%{http_code} -o /dev/null -H 'Authorization: Bearer %s' -H 'Content-Type:application/json' -X PUT -d '{\"name\":\"%s\"}' http://%s:%s/proxies/%s", passwd, proxy, ip, port, urlencode(group_name)))
|
||||
region = proxy_unlock_test()
|
||||
region, old_region = proxy_unlock_test()
|
||||
if status == 2 then
|
||||
if region and region ~= "" then
|
||||
table.insert(full_support_list, {value.all[i], group_name, proxy, region})
|
||||
@ -290,17 +302,20 @@ function unlock_auto_select()
|
||||
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)
|
||||
|
||||
else
|
||||
table.insert(other_region_unlock, {value.all[i], group_name, proxy})
|
||||
print(now..full_support_no_area..other_region_unlock_test)
|
||||
end
|
||||
print(now..other_region_unlock_test)
|
||||
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.."】")
|
||||
else
|
||||
table.insert(no_old_region_unlock, {value.all[i], group_name, proxy})
|
||||
print(now..no_old_region_unlock_test)
|
||||
end
|
||||
print(now..no_old_region_unlock_test)
|
||||
elseif status == 1 then
|
||||
table.insert(original, {value.all[i], group_name, proxy})
|
||||
if type == "Netflix" then
|
||||
@ -332,7 +347,7 @@ function unlock_auto_select()
|
||||
else
|
||||
table.insert(tested_proxy, now_name)
|
||||
end
|
||||
region = proxy_unlock_test()
|
||||
region, old_region = proxy_unlock_test()
|
||||
if table_include(groups, now_name) then
|
||||
now = os.date("%Y-%m-%d %H:%M:%S").." "..type.." "..gorup_i18.."【"..group_show.."】"
|
||||
else
|
||||
@ -359,17 +374,20 @@ function unlock_auto_select()
|
||||
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)
|
||||
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)
|
||||
end
|
||||
print(now..full_support.."【"..region.."】"..other_region_unlock_no_select)
|
||||
|
||||
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)
|
||||
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)
|
||||
end
|
||||
print(now..full_support.."【"..region.."】"..no_old_region_unlock_no_select)
|
||||
elseif status == 1 then
|
||||
table.insert(original, {value.all[i], group_name, value.all[i]})
|
||||
if type == "Netflix" then
|
||||
@ -458,7 +476,7 @@ function unlock_auto_select()
|
||||
end
|
||||
end
|
||||
elseif #nodes_filter(get_group_now(info, value.name), info) ~= 0 then
|
||||
region = proxy_unlock_test()
|
||||
region, old_region = proxy_unlock_test()
|
||||
if status == 2 then
|
||||
if region and region ~= "" then
|
||||
if not all_test then
|
||||
@ -475,9 +493,17 @@ function unlock_auto_select()
|
||||
break
|
||||
end
|
||||
elseif status == 3 then
|
||||
print(now..full_support.."【"..region.."】"..other_region_unlock_no_select)
|
||||
if region and region ~= "" then
|
||||
print(now..full_support.."【"..region.."】"..other_region_unlock_no_select)
|
||||
else
|
||||
print(now..full_support_no_area..other_region_unlock_no_select)
|
||||
end
|
||||
elseif status == 4 then
|
||||
print(now..full_support.."【"..region.."】"..no_old_region_unlock_no_select)
|
||||
if region and region ~= "" then
|
||||
print(now..full_support.."【"..region.."】"..no_old_region_unlock_old_region.."【"..old_region.."】"..no_old_region_unlock_old_region_no_select)
|
||||
else
|
||||
print(now..full_support_no_area..no_old_region_unlock_no_select)
|
||||
end
|
||||
elseif status == 1 then
|
||||
if type == "Netflix" then
|
||||
print(now..original_no_select)
|
||||
@ -518,7 +544,9 @@ function table_rand(t, d)
|
||||
while #t ~= 0 do
|
||||
local n = math.random(0, #t)
|
||||
if t[n] ~= nil then
|
||||
if d ~= nil and table_include(groups, d) and d == t[n] then
|
||||
if type == "YouTube Premium" and fs.isfile("/tmp/openclash_Google_region") and fs.readfile("/tmp/openclash_Google_region") == 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])
|
||||
else
|
||||
table.insert(tab, t[n])
|
||||
@ -566,7 +594,7 @@ function table_sort_by_urltest(t, d)
|
||||
if group_delay then
|
||||
group_delay = json.parse(group_delay)
|
||||
end
|
||||
if group_delay.delay and group_delay.delay ~= 0 then
|
||||
if group_delay and group_delay.delay and group_delay.delay ~= 0 then
|
||||
table.insert(tab, {t[n], group_delay.delay})
|
||||
else
|
||||
table.insert(tab, {t[n], 123456})
|
||||
@ -582,7 +610,9 @@ function table_sort_by_urltest(t, d)
|
||||
end)
|
||||
|
||||
for _, value in pairs(tab) do
|
||||
if d ~= nil and table_include(groups, d) and d == value[1] then
|
||||
if type == "YouTube Premium" and fs.isfile("/tmp/openclash_Google_region") and fs.readfile("/tmp/openclash_Google_region") == 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])
|
||||
else
|
||||
table.insert(result, value[1])
|
||||
@ -712,34 +742,35 @@ function nodes_filter(t, info)
|
||||
end
|
||||
|
||||
function proxy_unlock_test()
|
||||
local region, old_region
|
||||
if type == "Netflix" then
|
||||
region = netflix_unlock_test()
|
||||
region, old_region = netflix_unlock_test()
|
||||
elseif type == "Disney Plus" then
|
||||
region = disney_unlock_test()
|
||||
region, old_region = disney_unlock_test()
|
||||
elseif type == "HBO Now" then
|
||||
region = hbo_now_unlock_test()
|
||||
region, old_region = hbo_now_unlock_test()
|
||||
elseif type == "HBO Max" then
|
||||
region = hbo_max_unlock_test()
|
||||
region, old_region = hbo_max_unlock_test()
|
||||
elseif type == "HBO GO Asia" then
|
||||
region = hbo_go_asia_unlock_test()
|
||||
region, old_region = hbo_go_asia_unlock_test()
|
||||
elseif type == "YouTube Premium" then
|
||||
region = ytb_unlock_test()
|
||||
region, old_region = ytb_unlock_test()
|
||||
elseif type == "TVB Anywhere+" then
|
||||
region = tvb_anywhere_unlock_test()
|
||||
region, old_region = tvb_anywhere_unlock_test()
|
||||
elseif type == "Amazon Prime Video" then
|
||||
region = prime_video_unlock_test()
|
||||
region, old_region = prime_video_unlock_test()
|
||||
elseif type == "DAZN" then
|
||||
region = dazn_unlock_test()
|
||||
region, old_region = dazn_unlock_test()
|
||||
elseif type == "Paramount Plus" then
|
||||
region = paramount_plus_unlock_test()
|
||||
region, old_region = paramount_plus_unlock_test()
|
||||
elseif type == "Discovery Plus" then
|
||||
region = discovery_plus_unlock_test()
|
||||
region, old_region = discovery_plus_unlock_test()
|
||||
elseif type == "Bilibili" then
|
||||
region = bilibili_unlock_test()
|
||||
region, old_region = bilibili_unlock_test()
|
||||
elseif type == "Google" then
|
||||
region = google_not_cn_test()
|
||||
region, old_region = google_not_cn_test()
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
|
||||
function auto_get_policy_group(passwd, ip, port)
|
||||
@ -965,11 +996,13 @@ end
|
||||
|
||||
function netflix_unlock_test()
|
||||
status = 0
|
||||
local filmId = 70143836
|
||||
local url = "https://www.netflix.com/title/"..filmId
|
||||
local headers = "User-Agent: "..UA
|
||||
local info = luci.sys.exec(string.format('curl -sLI --connect-timeout 5 -m 10 --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, old_region
|
||||
local region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_netflix") or ""
|
||||
if info then
|
||||
info = json.parse(info)
|
||||
@ -980,18 +1013,20 @@ function netflix_unlock_test()
|
||||
string.gsub(info.url_effective, '[^/]+', function(w) table.insert(result, w) end)
|
||||
region = string.upper(string.match(result[3], "^%a+"))
|
||||
if region == "TITLE" then region = "US" end
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
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_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)
|
||||
end
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif old_region and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and region ~= old_region and not all_test then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
elseif info.http_code == 404 or info.http_code == 403 then
|
||||
status = 1
|
||||
end
|
||||
@ -1001,14 +1036,15 @@ end
|
||||
|
||||
function disney_unlock_test()
|
||||
status = 0
|
||||
local url = "https://global.edge.bamgrid.com/devices"
|
||||
local url2 = "https://global.edge.bamgrid.com/token"
|
||||
local url = "https://disney.api.edge.bamgrid.com/devices"
|
||||
local url2 = "https://disney.api.edge.bamgrid.com/token"
|
||||
local url3 = "https://disney.api.edge.bamgrid.com/graph/v1/device/graphql"
|
||||
local headers = '-H "Accept-Language: en" -H "Content-Type: application/json" -H "authorization: ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84"'
|
||||
local auth = '-H "authorization: Bearer ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84"'
|
||||
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, old_region, assertion, data, preassertion, disneycookie, tokencontent
|
||||
local region, assertion, data, preassertion, disneycookie, tokencontent
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_disney") or ""
|
||||
local old_region = ""
|
||||
|
||||
preassertion = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --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))
|
||||
|
||||
@ -1042,13 +1078,13 @@ function disney_unlock_test()
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif old_region and not datamatch(region, old_region) and not all_test 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 then
|
||||
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)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
|
||||
if region and region ~= "" and inSupportedLocation then
|
||||
@ -1058,13 +1094,13 @@ function disney_unlock_test()
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif old_region and region ~= old_region and not all_test then
|
||||
elseif old_region ~= "" and not datamatch(region, old_region) and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and region ~= old_region and not all_test then
|
||||
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)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1109,18 +1145,20 @@ function hbo_max_unlock_test()
|
||||
if result[3] then
|
||||
region = string.upper(string.match(result[3], "^%a+"))
|
||||
end
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
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_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)
|
||||
end
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1146,18 +1184,20 @@ function hbo_go_asia_unlock_test()
|
||||
if data.country then
|
||||
region = string.upper(data.country)
|
||||
end
|
||||
if fs.isfile(string.format("/tmp/openclash_%s_region", type)) then
|
||||
old_region = fs.readfile(string.format("/tmp/openclash_%s_region", type))
|
||||
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_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)
|
||||
end
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1195,14 +1235,14 @@ function ytb_unlock_test()
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif region ~= old_region and not all_test then
|
||||
elseif old_region ~= "" and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
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)
|
||||
end
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
|
||||
function tvb_anywhere_unlock_test()
|
||||
@ -1223,20 +1263,22 @@ function tvb_anywhere_unlock_test()
|
||||
if data.country then
|
||||
region = string.upper(data.country)
|
||||
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 region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
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_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)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
|
||||
function prime_video_unlock_test()
|
||||
@ -1244,13 +1286,13 @@ function prime_video_unlock_test()
|
||||
local url = "https://www.primevideo.com"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --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 = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_prime_video") or ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --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
|
||||
region = string.sub(string.match(data, "\"currentTerritory\":\"%a+\""), 21, -2)
|
||||
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
|
||||
@ -1258,13 +1300,13 @@ function prime_video_unlock_test()
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif old_region and region ~= old_region and not all_test then
|
||||
elseif old_region ~= "" and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
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)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1277,7 +1319,7 @@ function dazn_unlock_test()
|
||||
local url2 = "https://startup.core.indazn.com/misl/v5/Startup"
|
||||
local httpcode = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --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 = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_dazn") or ""
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 1
|
||||
@ -1290,27 +1332,29 @@ function dazn_unlock_test()
|
||||
if data.Region.GeolocatedCountry then
|
||||
region = string.upper(data.Region.GeolocatedCountry)
|
||||
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_region and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), region)
|
||||
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_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)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
|
||||
function paramount_plus_unlock_test()
|
||||
status = 0
|
||||
local url = "https://www.paramountplus.com/"
|
||||
local region
|
||||
local old_region
|
||||
local old_region = ""
|
||||
local regex = uci:get("openclash", "config", "stream_auto_select_region_key_paramount_plus") or ""
|
||||
local data = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --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)
|
||||
@ -1326,13 +1370,13 @@ function paramount_plus_unlock_test()
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif old_region and region ~= old_region and not all_test then
|
||||
elseif old_region ~= "" and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
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)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1343,6 +1387,7 @@ 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 regex = uci:get("openclash", "config", "stream_auto_select_region_key_discovery_plus") or ""
|
||||
local token = luci.sys.exec(string.format("curl -sL --connect-timeout 5 -m 10 --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
|
||||
@ -1359,13 +1404,13 @@ function discovery_plus_unlock_test()
|
||||
end
|
||||
if not datamatch(region, regex) then
|
||||
status = 3
|
||||
elseif old_region and region ~= old_region and not all_test then
|
||||
elseif old_region ~= "" and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
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)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1376,6 +1421,7 @@ function bilibili_unlock_test()
|
||||
local randsession = luci.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 = ""
|
||||
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"
|
||||
@ -1398,13 +1444,13 @@ function bilibili_unlock_test()
|
||||
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
|
||||
if old_region ~= "" and region ~= old_region and not all_test then
|
||||
status = 4
|
||||
end
|
||||
if status == 2 and not all_test and region ~= old_region then
|
||||
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)
|
||||
end
|
||||
return region
|
||||
return region, old_region
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1420,6 +1466,9 @@ function google_not_cn_test()
|
||||
if tonumber(httpcode) == 200 then
|
||||
status = 2
|
||||
region = "NOT CN"
|
||||
if not all_test then
|
||||
fs.writefile(string.format("/tmp/openclash_%s_region", type), tested_proxy[-1])
|
||||
end
|
||||
else
|
||||
region = "CN"
|
||||
status = 1
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
. /usr/share/openclash/log.sh
|
||||
|
||||
set_lock() {
|
||||
@ -23,31 +23,33 @@ fi
|
||||
|
||||
LAST_OPVER="/tmp/openclash_last_version"
|
||||
LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g" |tr -d "\n")
|
||||
OP_CV=$(opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F '-' '{print $1}' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F '-' '{print $1}' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
set_lock
|
||||
|
||||
if [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -f "$LAST_OPVER" ]; then
|
||||
if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -f "$LAST_OPVER" ]; then
|
||||
LOG_OUT "Start Downloading【OpenClash - v$LAST_VER】..."
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://fastly.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1
|
||||
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 -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
if [ "$?" != "0" ]; then
|
||||
curl -sL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk >/dev/null 2>&1
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
curl -SsL -m 30 --speed-time 15 --speed-limit 1 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/luci-app-openclash_"$LAST_VER"_all.ipk -o /tmp/openclash.ipk 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="/tmp/openclash.ipk" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
fi
|
||||
if [ "$?" == "0" ] && [ -s "/tmp/openclash.ipk" ]; then
|
||||
if [ "$curl_status" -eq 0 ] && [ -s "/tmp/openclash.ipk" ]; then
|
||||
LOG_OUT "【OpenClash - v$LAST_VER】Download Successful, Start Pre Update Test..."
|
||||
|
||||
if [ -z "$(opkg install /tmp/openclash.ipk --noaction 2>/dev/null |grep 'Upgrading luci-app-openclash on root' 2>/dev/null)" ]; then
|
||||
@ -115,7 +117,7 @@ EOF
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [ ! -f "$LAST_OPVER" ]; then
|
||||
if [ ! -f "$LAST_OPVER" ] || [ -z "$OP_CV" ] || [ -z "$OP_LV" ]; then
|
||||
LOG_OUT "Failed to Get Version Information, Please Try Again Later..."
|
||||
else
|
||||
LOG_OUT "OpenClash Has not Been Updated, Stop Continuing!"
|
||||
|
@ -1,38 +1,40 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
CKTIME=$(date "+%Y-%m-%d-%H")
|
||||
LAST_OPVER="/tmp/openclash_last_version"
|
||||
RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
|
||||
OP_CV=$(opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F '-' '{print $1}' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F '-' '{print $1}' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
|
||||
if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then
|
||||
if [ "$github_address_mod" != "0" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
curl -sL -m 10 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
curl -sL -m 10 https://fastly.jsdelivr.net/gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
|
||||
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 -m 10 "$github_address_mod"gh/vernesong/OpenClash@"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
curl -sL -m 10 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
|
||||
curl -SsL -m 10 https://raw.fastgit.org/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
else
|
||||
curl -sL -m 10 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
|
||||
curl -SsL -m 10 "$github_address_mod"https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
curl -sL -m 10 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
|
||||
curl -SsL -m 10 https://raw.githubusercontent.com/vernesong/OpenClash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
if [ "$?" != "0" ] || [ -n "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
curl -sL -m 10 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/version -o $LAST_OPVER >/dev/null 2>&1
|
||||
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ] || [ -n "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
curl -SsL -m 10 --retry 2 https://ftp.jaist.ac.jp/pub/sourceforge.jp/storage/g/o/op/openclash/"$RELEASE_BRANCH"/version -o $LAST_OPVER 2>&1 | awk -v time="$(date "+%Y-%m-%d %H:%M:%S")" -v file="$LAST_OPVER" '{print time "【" file "】Download Failed:【"$0"】"}' >> "$LOG_FILE"
|
||||
curl_status=${PIPESTATUS[0]}
|
||||
else
|
||||
curl_status=0
|
||||
fi
|
||||
|
||||
if [ "$?" == "0" ] && [ -z "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
|
||||
if [ "$curl_status" -eq 0 ] && [ -z "$(cat $LAST_OPVER |grep '<html>')" ]; then
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
if [ "$(expr "$OP_CV" \>= "$OP_LV")" -eq 1 ]; then
|
||||
sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null
|
||||
sed -i '/^https:/,$d' $LAST_OPVER
|
||||
elif [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -n "$OP_LV" ]; then
|
||||
sed -i "/^https:/i\CheckTime:${CKTIME}" "$LAST_OPVER" 2>/dev/null
|
||||
return 2
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
rm -rf "$LAST_OPVER"
|
||||
@ -41,5 +43,5 @@ elif [ "$(expr "$OP_CV" \>= "$OP_LV")" -eq 1 ]; then
|
||||
sed -i '/^CheckTime:/,$d' $LAST_OPVER
|
||||
echo "CheckTime:$CKTIME" >> $LAST_OPVER
|
||||
elif [ "$(expr "$OP_LV" \> "$OP_CV")" -eq 1 ] && [ -n "$OP_LV" ]; then
|
||||
return 2
|
||||
exit 2
|
||||
fi 2>/dev/null
|
||||
|
@ -20,11 +20,66 @@ 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"
|
||||
_koolshare=$(cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_RELEASE 2>/dev/null |grep -i koolshare 2>/dev/null)
|
||||
china_ip_route=$(uci -q get openclash.config.china_ip_route)
|
||||
en_mode=$(uci -q get openclash.config.en_mode)
|
||||
CRASH_NUM=0
|
||||
CFG_UPDATE_INT=1
|
||||
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 ]; then
|
||||
if [ "$(nslookup www.baidu.com 127.0.0.1:5353 >/dev/null 2>&1 || echo $?)" != "1" ]; 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 [ -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
|
||||
position=$(nft list chain inet fw4 dstnat |grep "OpenClash" |grep "DNS" |awk -F '# handle ' '{print$2}' |sort -rn |head -1 || ehco 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
|
||||
position=$(iptables -nvL PREROUTING -t nat |sed 1,2d |grep "OpenClash" |sed -n "/DNS/=" 2>/dev/null |sort -rn |head -1 || ehco 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 || ehco 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
|
||||
sleep 60
|
||||
|
||||
while :;
|
||||
@ -99,14 +154,14 @@ if [ "$enable" -eq 1 ]; then
|
||||
fi
|
||||
|
||||
## Porxy history
|
||||
/usr/share/openclash/openclash_history_get.sh
|
||||
/usr/share/openclash/openclash_history_get.sh
|
||||
|
||||
## Log File Size Manage:
|
||||
LOGSIZE=`ls -l /tmp/openclash.log |awk '{print int($5/1024)}'`
|
||||
if [ "$LOGSIZE" -gt "$log_size" ]; then
|
||||
: > /tmp/openclash.log
|
||||
LOG_OUT "Watchdog: Log Size Limit, Clean Up All Log Records..."
|
||||
fi
|
||||
LOGSIZE=`ls -l /tmp/openclash.log |awk '{print int($5/1024)}'`
|
||||
if [ "$LOGSIZE" -gt "$log_size" ]; then
|
||||
: > /tmp/openclash.log
|
||||
LOG_OUT "Watchdog: Log Size Limit, Clean Up All Log Records..."
|
||||
fi
|
||||
|
||||
## 端口转发重启
|
||||
last_line=$(iptables -t nat -nL PREROUTING --line-number |awk '{print $1}' 2>/dev/null |awk 'END {print}' |sed -n '$p')
|
||||
@ -120,6 +175,9 @@ fi
|
||||
LOG_OUT "Watchdog: Setting Firewall For Enabling Redirect..."
|
||||
fi
|
||||
|
||||
## 防止 DNSMASQ 加载配置时间过长导致 DNS 无法解析
|
||||
check_dnsmasq
|
||||
|
||||
## Localnetwork 刷新
|
||||
lan_ip_cidrs=$(ip route | grep "/" | awk '{print $1}' | grep -vE "^198.18" 2>/dev/null)
|
||||
lan_ip6_cidrs=$(ip -6 route | grep "/" | awk '{print $1}' | grep -vE "^unreachable" 2>/dev/null)
|
||||
@ -218,6 +276,10 @@ fi
|
||||
LOG_OUT "Tip: Start Auto Select Proxy For Disney Plus Unlock..."
|
||||
/usr/share/openclash/openclash_streaming_unlock.lua "Disney Plus" >> $LOG_FILE
|
||||
fi
|
||||
if [ "$stream_auto_select_google_not_cn" -eq 1 ]; then
|
||||
LOG_OUT "Tip: Start Auto Select Proxy For Google Not CN Unlock..."
|
||||
/usr/share/openclash/openclash_streaming_unlock.lua "Google" >> $LOG_FILE
|
||||
fi
|
||||
if [ "$stream_auto_select_ytb" -eq 1 ]; then
|
||||
LOG_OUT "Tip: Start Auto Select Proxy For YouTube Premium Unlock..."
|
||||
/usr/share/openclash/openclash_streaming_unlock.lua "YouTube Premium" >> $LOG_FILE
|
||||
@ -258,10 +320,6 @@ fi
|
||||
LOG_OUT "Tip: Start Auto Select Proxy For Bilibili Unlock..."
|
||||
/usr/share/openclash/openclash_streaming_unlock.lua "Bilibili" >> $LOG_FILE
|
||||
fi
|
||||
if [ "$stream_auto_select_google_not_cn" -eq 1 ]; then
|
||||
LOG_OUT "Tip: Start Auto Select Proxy For Google Not CN Unlock..."
|
||||
/usr/share/openclash/openclash_streaming_unlock.lua "Google" >> $LOG_FILE
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
STREAM_AUTO_SELECT=$(expr "$STREAM_AUTO_SELECT" + 1)
|
||||
|
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
@ -8,9 +8,9 @@
|
||||
<meta name="description" content="Clash web port" />
|
||||
<!--meta name="external-controller" content="http://secret@example.com:9090"-->
|
||||
<title>Clash</title>
|
||||
<script type="module" crossorigin src="./assets/index.7cc327e0.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="./assets/vendor.8d36e21e.js">
|
||||
<link rel="stylesheet" href="./assets/index.ebec649d.css">
|
||||
<script type="module" crossorigin src="./assets/index.4db75562.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="./assets/vendor.0ded7ffb.js">
|
||||
<link rel="stylesheet" href="./assets/index.7e15a32d.css">
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script>if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}</script></head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
|
@ -1 +1 @@
|
||||
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-74eda642"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.7cc327e0.js",revision:null},{url:"assets/index.ebec649d.css",revision:null},{url:"assets/vendor.8d36e21e.js",revision:null},{url:"index.html",revision:"244b72655b8f5e568d0cec0bb1ba8b28"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||
if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const o=e=>n(e,r),l={module:{uri:r},exports:d,require:o};s[r]=Promise.all(i.map((e=>l[e]||o(e)))).then((e=>(t(...e),d)))}}define(["./workbox-74eda642"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index.4db75562.js",revision:null},{url:"assets/index.7e15a32d.css",revision:null},{url:"assets/vendor.0ded7ffb.js",revision:null},{url:"index.html",revision:"ccb924b96d21db1a3954a64d986da4e2"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
import{j as e,b,h as y,r as l}from"./index.2addc377.js";const F="_spining_4i8sg_1",M="_spining_keyframes_4i8sg_1",j={spining:F,spining_keyframes:M},{useState:v}=y;function B({children:s}){return e("span",{className:j.spining,children:s})}const H={right:10,bottom:10},L=({children:s,...n})=>e("button",{type:"button",...n,className:"rtf--ab",children:s}),E=({children:s,...n})=>e("button",{type:"button",className:"rtf--mb",...n,children:s}),O={bottom:24,right:24},R=({event:s="hover",style:n=O,alwaysShowTitle:i=!1,children:f,icon:g,mainButtonStyles:h,onClick:p,text:d,..._})=>{const[a,r]=v(!1),c=i||!a,u=()=>r(!0),m=()=>r(!1),x=()=>s==="hover"&&u(),k=()=>s==="hover"&&m(),N=t=>p?p(t):(t.persist(),s==="click"?a?m():u():null),$=(t,o)=>{t.persist(),r(!1),setTimeout(()=>{o(t)},1)},C=()=>l.exports.Children.map(f,(t,o)=>l.exports.isValidElement(t)?b("li",{className:`rtf--ab__c ${"top"in n?"top":""}`,children:[l.exports.cloneElement(t,{"data-testid":`action-button-${o}`,"aria-label":t.props.text||`Menu button ${o+1}`,"aria-hidden":c,tabIndex:a?0:-1,...t.props,onClick:I=>{t.props.onClick&&$(I,t.props.onClick)}}),t.props.text&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:t.props.text})]}):null);return e("ul",{onMouseEnter:x,onMouseLeave:k,className:`rtf ${a?"open":"closed"}`,"data-testid":"fab",style:n,..._,children:b("li",{className:"rtf--mb__c",children:[e(E,{onClick:N,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:g}),d&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:d}),e("ul",{children:C()})]})})};export{L as A,R as F,B as I,H as p};
|
||||
import{j as e,b,h as y,r as l}from"./index.1428ab75.js";const F="_spining_4i8sg_1",M="_spining_keyframes_4i8sg_1",j={spining:F,spining_keyframes:M},{useState:v}=y;function B({children:s}){return e("span",{className:j.spining,children:s})}const H={right:10,bottom:10},L=({children:s,...n})=>e("button",{type:"button",...n,className:"rtf--ab",children:s}),E=({children:s,...n})=>e("button",{type:"button",className:"rtf--mb",...n,children:s}),O={bottom:24,right:24},R=({event:s="hover",style:n=O,alwaysShowTitle:i=!1,children:f,icon:g,mainButtonStyles:h,onClick:p,text:d,..._})=>{const[a,r]=v(!1),c=i||!a,u=()=>r(!0),m=()=>r(!1),x=()=>s==="hover"&&u(),k=()=>s==="hover"&&m(),N=t=>p?p(t):(t.persist(),s==="click"?a?m():u():null),$=(t,o)=>{t.persist(),r(!1),setTimeout(()=>{o(t)},1)},C=()=>l.exports.Children.map(f,(t,o)=>l.exports.isValidElement(t)?b("li",{className:`rtf--ab__c ${"top"in n?"top":""}`,children:[l.exports.cloneElement(t,{"data-testid":`action-button-${o}`,"aria-label":t.props.text||`Menu button ${o+1}`,"aria-hidden":c,tabIndex:a?0:-1,...t.props,onClick:I=>{t.props.onClick&&$(I,t.props.onClick)}}),t.props.text&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:t.props.text})]}):null);return e("ul",{onMouseEnter:x,onMouseLeave:k,className:`rtf ${a?"open":"closed"}`,"data-testid":"fab",style:n,..._,children:b("li",{className:"rtf--mb__c",children:[e(E,{onClick:N,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:g}),d&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:d}),e("ul",{children:C()})]})})};export{L as A,R as F,B as I,H as p};
|
@ -1 +1 @@
|
||||
import{r as m,b as l,j as t,i as u,d as y,H as T,J as b,x as L,K as P,u as R,C as N,S as z,L as C,N as W,g as w,O as k,h as j,c as I}from"./index.2addc377.js";import{a as O,F}from"./index.esm.d79e6b4f.js";import{r as M,s as $,f as H}from"./logs.e4cdcb93.js";import{d as A}from"./debounce.c2d20996.js";import{u as B}from"./useRemainingViewPortHeight.4e5a0898.js";import{F as D,p as E}from"./Fab.ac4f3b29.js";import{P as K,a as q}from"./play.f2fb5ccc.js";function J(e,n){if(e==null)return{};var r=V(e,n),a,o;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)a=s[o],!(n.indexOf(a)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,a)||(r[a]=e[a]))}return r}function V(e,n){if(e==null)return{};var r={},a=Object.keys(e),o,s;for(s=0;s<a.length;s++)o=a[s],!(n.indexOf(o)>=0)&&(r[o]=e[o]);return r}var f=m.exports.forwardRef(function(e,n){var r=e.color,a=r===void 0?"currentColor":r,o=e.size,s=o===void 0?24:o,p=J(e,["color","size"]);return l("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:a,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...p,children:[t("circle",{cx:"11",cy:"11",r:"8"}),t("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})});f.propTypes={color:u.exports.string,size:u.exports.oneOfType([u.exports.string,u.exports.number])};f.displayName="Search";const Y=f,G="_RuleSearch_1oz2t_1",Q="_RuleSearchContainer_1oz2t_5",U="_inputWrapper_1oz2t_10",X="_input_1oz2t_10",Z="_iconWrapper_1oz2t_35",g={RuleSearch:G,RuleSearchContainer:Q,inputWrapper:U,input:X,iconWrapper:Z};function ee({dispatch:e,searchText:n,updateSearchText:r}){const[a,o]=m.exports.useState(n),s=m.exports.useCallback(i=>{e(r(i))},[e,r]),p=m.exports.useMemo(()=>A(s,300),[s]),h=i=>{o(i.target.value),p(i.target.value)};return t("div",{className:g.RuleSearch,children:l("div",{className:g.RuleSearchContainer,children:[t("div",{className:g.inputWrapper,children:t("input",{type:"text",value:a,onChange:h,className:g.input})}),t("div",{className:g.iconWrapper,children:t(Y,{size:20})})]})})}const te=e=>({searchText:T(e),updateSearchText:b}),oe=y(te)(ee),re="_logMeta_7a1x3_1",ae="_logType_7a1x3_8",ne="_logTime_7a1x3_18",se="_logText_7a1x3_24",ce="_logsWrapper_7a1x3_37",ie="_logPlaceholder_7a1x3_51",le="_logPlaceholderIcon_7a1x3_64",pe="_search_7a1x3_68",c={logMeta:re,logType:ae,logTime:ne,logText:se,logsWrapper:ce,logPlaceholder:ie,logPlaceholderIcon:le,search:pe},{useCallback:v,memo:ge,useEffect:he}=j,_=30,de={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function ue({time:e,even:n,payload:r,type:a}){const o=I({even:n},"log");return t("div",{className:o,children:l("div",{className:c.logMeta,children:[t("div",{className:c.logTime,children:e}),t("div",{className:c.logType,style:{backgroundColor:de[a]},children:a}),t("div",{className:c.logText,children:r})]})})}function me(e,n){return n[e].id}const _e=ge(({index:e,style:n,data:r})=>{const a=r[e];return t("div",{style:n,children:t(ue,{...a})})},O);function fe({dispatch:e,logLevel:n,apiConfig:r,logs:a,logStreamingPaused:o}){const s=L(),p=v(()=>{o?M({...r,logLevel:n}):$(),s.app.updateAppConfig("logStreamingPaused",!o)},[r,n,o,s.app]),h=v(S=>e(P(S)),[e]);he(()=>{H({...r,logLevel:n},h)},[r,n,h]);const[i,x]=B(),{t:d}=R();return l("div",{children:[t(N,{title:d("Logs")}),t("div",{className:c.search,children:t(oe,{})}),t("div",{ref:i,style:{paddingBottom:_},children:a.length===0?l("div",{className:c.logPlaceholder,style:{height:x-_},children:[t("div",{className:c.logPlaceholderIcon,children:t(z,{width:200,height:200})}),t("div",{children:d("no_logs")})]}):l("div",{className:c.logsWrapper,children:[t(F,{height:x-_,width:"100%",itemCount:a.length,itemSize:80,itemData:a,itemKey:me,children:_e}),t(D,{icon:o?t(K,{size:16}):t(q,{size:16}),mainButtonStyles:o?{background:"#e74c3c"}:{},style:E,text:d(o?"Resume Refresh":"Pause Refresh"),onClick:p})]})})]})}const xe=e=>({logs:C(e),logLevel:W(e),apiConfig:w(e),logStreamingPaused:k(e)}),Re=y(xe)(fe);export{Re as default};
|
||||
import{r as m,b as l,j as t,i as u,d as y,H as T,J as b,x as L,K as P,u as R,C as N,S as z,L as C,N as W,g as w,O as k,h as j,c as I}from"./index.1428ab75.js";import{a as O,F}from"./index.esm.7b716043.js";import{r as M,s as $,f as H}from"./logs.6e20f0cf.js";import{d as A}from"./debounce.c2d20996.js";import{u as B}from"./useRemainingViewPortHeight.2e9a6590.js";import{F as D,p as E}from"./Fab.4f6fab8b.js";import{P as K,a as q}from"./play.59a01dbd.js";function J(e,n){if(e==null)return{};var r=V(e,n),a,o;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o<s.length;o++)a=s[o],!(n.indexOf(a)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,a)||(r[a]=e[a]))}return r}function V(e,n){if(e==null)return{};var r={},a=Object.keys(e),o,s;for(s=0;s<a.length;s++)o=a[s],!(n.indexOf(o)>=0)&&(r[o]=e[o]);return r}var f=m.exports.forwardRef(function(e,n){var r=e.color,a=r===void 0?"currentColor":r,o=e.size,s=o===void 0?24:o,p=J(e,["color","size"]);return l("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:a,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...p,children:[t("circle",{cx:"11",cy:"11",r:"8"}),t("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})});f.propTypes={color:u.exports.string,size:u.exports.oneOfType([u.exports.string,u.exports.number])};f.displayName="Search";const Y=f,G="_RuleSearch_1oz2t_1",Q="_RuleSearchContainer_1oz2t_5",U="_inputWrapper_1oz2t_10",X="_input_1oz2t_10",Z="_iconWrapper_1oz2t_35",g={RuleSearch:G,RuleSearchContainer:Q,inputWrapper:U,input:X,iconWrapper:Z};function ee({dispatch:e,searchText:n,updateSearchText:r}){const[a,o]=m.exports.useState(n),s=m.exports.useCallback(i=>{e(r(i))},[e,r]),p=m.exports.useMemo(()=>A(s,300),[s]),h=i=>{o(i.target.value),p(i.target.value)};return t("div",{className:g.RuleSearch,children:l("div",{className:g.RuleSearchContainer,children:[t("div",{className:g.inputWrapper,children:t("input",{type:"text",value:a,onChange:h,className:g.input})}),t("div",{className:g.iconWrapper,children:t(Y,{size:20})})]})})}const te=e=>({searchText:T(e),updateSearchText:b}),oe=y(te)(ee),re="_logMeta_7a1x3_1",ae="_logType_7a1x3_8",ne="_logTime_7a1x3_18",se="_logText_7a1x3_24",ce="_logsWrapper_7a1x3_37",ie="_logPlaceholder_7a1x3_51",le="_logPlaceholderIcon_7a1x3_64",pe="_search_7a1x3_68",c={logMeta:re,logType:ae,logTime:ne,logText:se,logsWrapper:ce,logPlaceholder:ie,logPlaceholderIcon:le,search:pe},{useCallback:v,memo:ge,useEffect:he}=j,_=30,de={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function ue({time:e,even:n,payload:r,type:a}){const o=I({even:n},"log");return t("div",{className:o,children:l("div",{className:c.logMeta,children:[t("div",{className:c.logTime,children:e}),t("div",{className:c.logType,style:{backgroundColor:de[a]},children:a}),t("div",{className:c.logText,children:r})]})})}function me(e,n){return n[e].id}const _e=ge(({index:e,style:n,data:r})=>{const a=r[e];return t("div",{style:n,children:t(ue,{...a})})},O);function fe({dispatch:e,logLevel:n,apiConfig:r,logs:a,logStreamingPaused:o}){const s=L(),p=v(()=>{o?M({...r,logLevel:n}):$(),s.app.updateAppConfig("logStreamingPaused",!o)},[r,n,o,s.app]),h=v(S=>e(P(S)),[e]);he(()=>{H({...r,logLevel:n},h)},[r,n,h]);const[i,x]=B(),{t:d}=R();return l("div",{children:[t(N,{title:d("Logs")}),t("div",{className:c.search,children:t(oe,{})}),t("div",{ref:i,style:{paddingBottom:_},children:a.length===0?l("div",{className:c.logPlaceholder,style:{height:x-_},children:[t("div",{className:c.logPlaceholderIcon,children:t(z,{width:200,height:200})}),t("div",{children:d("no_logs")})]}):l("div",{className:c.logsWrapper,children:[t(F,{height:x-_,width:"100%",itemCount:a.length,itemSize:80,itemData:a,itemKey:me,children:_e}),t(D,{icon:o?t(K,{size:16}):t(q,{size:16}),mainButtonStyles:o?{background:"#e74c3c"}:{},style:E,text:d(o?"Resume Refresh":"Pause Refresh"),onClick:p})]})})]})}const xe=e=>({logs:C(e),logLevel:W(e),apiConfig:w(e),logStreamingPaused:k(e)}),Re=y(xe)(fe);export{Re as default};
|
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user