update 2022-11-05 20:19:37
@ -368,6 +368,10 @@ function to_check()
|
||||
model = "ipq40xx_generic/mobipromo_cm520-79f"
|
||||
check_update()
|
||||
download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-ipq40xx-generic-mobipromo_cm520-79f-squashfs-nand-sysupgrade.bin"
|
||||
elseif board_name:match("gl%-a1300$") then
|
||||
model = "ipq40xx_generic/glinet_gl-a1300"
|
||||
check_update()
|
||||
download_url = "https://op.supes.top/firmware/" ..model.. "/" ..remote_version.. "-openwrt-ipq40xx-generic-glinet_gl-a1300-squashfs-nand-sysupgrade.bin"
|
||||
elseif board_name:match("rt%-ac88u$") then
|
||||
model = "bcm53xx_generic/asus_rt-ac88u"
|
||||
check_update()
|
||||
|
@ -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,9 +307,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
HTTP.runcheck();
|
||||
IP.getIpifyIP();
|
||||
//IP.getSpeedIP();
|
||||
|
||||
function getPcolIP(data){
|
||||
let pcisp = data.addr.split(' ');
|
||||
@ -327,8 +324,6 @@
|
||||
IP.parseIPIpip(data.ip, 'ip-taobao-geo');
|
||||
};
|
||||
|
||||
window.onload=myip_Load();
|
||||
|
||||
function myip_Load()
|
||||
{
|
||||
var pcip = document.getElementsByTagName('HEAD').item(0);
|
||||
@ -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
|
||||
@ -639,6 +651,10 @@ do_run_file()
|
||||
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
|
||||
if [ "$(date -r $HISTORY_PATH +%s)" -ge "$(date -r $HISTORY_PATH_OLD +%s)" ]; 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
@ -128,7 +128,6 @@ ff.dorado.sdo.com
|
||||
shark007.net
|
||||
#Mijia
|
||||
Mijia Cloud
|
||||
+.dns.google
|
||||
#招商银行
|
||||
+.cmbchina.com
|
||||
+.cmbimg.com
|
@ -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)\/
|
@ -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
|
@ -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,10 +92,19 @@ 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
|
||||
@ -109,6 +128,21 @@ payload:
|
||||
- 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
|
||||
@ -120,9 +154,147 @@ payload:
|
||||
- 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:
|
||||
# > 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,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,13 +1,14 @@
|
||||
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,10 +1,18 @@
|
||||
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:
|
||||
# > 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:
|
||||
# > 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,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,21 +1,34 @@
|
||||
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
|
||||
|
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,10 @@
|
||||
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:
|
||||
# > 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
|
||||
|
||||
@ -87,6 +88,9 @@ payload:
|
||||
# > UUBooster
|
||||
- PROCESS-NAME,UUBooster
|
||||
|
||||
# > WiFiman
|
||||
- DOMAIN-SUFFIX,app-measurement.com
|
||||
|
||||
# > Xunlei
|
||||
# - USER-AGENT,%E8%BF%85%E9%9B%B7
|
||||
- DOMAIN-SUFFIX,xunlei.com
|
||||
@ -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:
|
||||
# > 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-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
|
||||
# > 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,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
|
||||
@ -31,14 +18,3 @@ payload:
|
||||
- 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
|
@ -2,14 +2,10 @@ 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,yt3.ggpht.com
|
||||
- DOMAIN-SUFFIX,ytimg.com
|
@ -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
|
@ -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
|
||||
|
||||
@ -15,6 +15,8 @@
|
||||
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)
|
||||
|
@ -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")))}));
|
||||
|
@ -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};
|
@ -1 +1 @@
|
||||
import{j as s}from"./index.2addc377.js";const o="_select_13zm8_1",r={select:o};function i({options:t,selected:c,onChange:l}){return s("select",{className:r.select,value:c,onChange:l,children:t.map(([e,n])=>s("option",{value:e,children:n},e))})}export{i as S};
|
||||
import{j as s}from"./index.1428ab75.js";const o="_select_13zm8_1",r={select:o};function i({options:t,selected:c,onChange:l}){return s("select",{className:r.select,value:c,onChange:l,children:t.map(([e,n])=>s("option",{value:e,children:n},e))})}export{i as S};
|
@ -1 +1 @@
|
||||
import{r as u,b as g,j as i,i as c,c as f,V as x,h as d}from"./index.2addc377.js";import{d as h}from"./debounce.c2d20996.js";function v(t,n){if(t==null)return{};var o=_(t,n),r,e;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(e=0;e<s.length;e++)r=s[e],!(n.indexOf(r)>=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function _(t,n){if(t==null)return{};var o={},r=Object.keys(t),e,s;for(s=0;s<r.length;s++)e=r[s],!(n.indexOf(e)>=0)&&(o[e]=t[e]);return o}var l=u.exports.forwardRef(function(t,n){var o=t.color,r=o===void 0?"currentColor":o,e=t.size,s=e===void 0?24:e,a=v(t,["color","size"]);return g("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})});l.propTypes={color:c.exports.string,size:c.exports.oneOfType([c.exports.string,c.exports.number])};l.displayName="RotateCw";const b=l,y="_rotate_1dspl_1",m="_isRotating_1dspl_5",R="_rotating_1dspl_1",p={rotate:y,isRotating:m,rotating:R};function P(t){const n=t.size||16,o=f(p.rotate,{[p.isRotating]:t.isRotating});return i("span",{className:o,children:i(b,{size:n})})}const{useCallback:w,useState:j,useMemo:O}=d;function T(t){const[,n]=x(t),[o,r]=j(""),e=O(()=>h(n,300),[n]);return[w(a=>{r(a.target.value),e(a.target.value)},[e]),o]}const k="_input_16a1f_1",C={input:k};function $(t){const[n,o]=T(t.textAtom);return i("input",{className:C.input,type:"text",value:o,onChange:n,placeholder:t.placeholder})}export{P as R,$ as T,b as a};
|
||||
import{r as u,b as g,j as i,i as c,c as f,V as x,h as d}from"./index.1428ab75.js";import{d as h}from"./debounce.c2d20996.js";function v(t,n){if(t==null)return{};var o=_(t,n),r,e;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(e=0;e<s.length;e++)r=s[e],!(n.indexOf(r)>=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function _(t,n){if(t==null)return{};var o={},r=Object.keys(t),e,s;for(s=0;s<r.length;s++)e=r[s],!(n.indexOf(e)>=0)&&(o[e]=t[e]);return o}var l=u.exports.forwardRef(function(t,n){var o=t.color,r=o===void 0?"currentColor":o,e=t.size,s=e===void 0?24:e,a=v(t,["color","size"]);return g("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})});l.propTypes={color:c.exports.string,size:c.exports.oneOfType([c.exports.string,c.exports.number])};l.displayName="RotateCw";const b=l,y="_rotate_1dspl_1",m="_isRotating_1dspl_5",R="_rotating_1dspl_1",p={rotate:y,isRotating:m,rotating:R};function P(t){const n=t.size||16,o=f(p.rotate,{[p.isRotating]:t.isRotating});return i("span",{className:o,children:i(b,{size:n})})}const{useCallback:w,useState:j,useMemo:O}=d;function T(t){const[,n]=x(t),[o,r]=j(""),e=O(()=>h(n,300),[n]);return[w(a=>{r(a.target.value),e(a.target.value)},[e]),o]}const k="_input_16a1f_1",C={input:k};function $(t){const[n,o]=T(t.textAtom);return i("input",{className:C.input,type:"text",value:o,onChange:n,placeholder:t.placeholder})}export{P as R,$ as T,b as a};
|
@ -1 +1 @@
|
||||
import{r as f,j as l,i as s}from"./index.2addc377.js";function c(r,i){if(r==null)return{};var n=v(r,i),o,e;if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);for(e=0;e<t.length;e++)o=t[e],!(i.indexOf(o)>=0)&&(!Object.prototype.propertyIsEnumerable.call(r,o)||(n[o]=r[o]))}return n}function v(r,i){if(r==null)return{};var n={},o=Object.keys(r),e,t;for(t=0;t<o.length;t++)e=o[t],!(i.indexOf(e)>=0)&&(n[e]=r[e]);return n}var p=f.exports.forwardRef(function(r,i){var n=r.color,o=n===void 0?"currentColor":n,e=r.size,t=e===void 0?24:e,a=c(r,["color","size"]);return l("svg",{ref:i,xmlns:"http://www.w3.org/2000/svg",width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:o,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:l("polyline",{points:"6 9 12 15 18 9"})})});p.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};p.displayName="ChevronDown";const u=p;export{u as C};
|
||||
import{r as f,j as l,i as s}from"./index.1428ab75.js";function c(r,i){if(r==null)return{};var n=v(r,i),o,e;if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);for(e=0;e<t.length;e++)o=t[e],!(i.indexOf(o)>=0)&&(!Object.prototype.propertyIsEnumerable.call(r,o)||(n[o]=r[o]))}return n}function v(r,i){if(r==null)return{};var n={},o=Object.keys(r),e,t;for(t=0;t<o.length;t++)e=o[t],!(i.indexOf(e)>=0)&&(n[e]=r[e]);return n}var p=f.exports.forwardRef(function(r,i){var n=r.color,o=n===void 0?"currentColor":n,e=r.size,t=e===void 0?24:e,a=c(r,["color","size"]);return l("svg",{ref:i,xmlns:"http://www.w3.org/2000/svg",width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:o,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:l("polyline",{points:"6 9 12 15 18 9"})})});p.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};p.displayName="ChevronDown";const u=p;export{u as C};
|
@ -1,2 +1,2 @@
|
||||
import{D,E as w,G as u}from"./index.2addc377.js";const v="/logs",L=new TextDecoder("utf-8"),M=()=>Math.floor((1+Math.random())*65536).toString(16);let h=!1,i=!1,f="",s,g;function m(e,n){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=$(r);t.time=l,t.id=+r-0+M(),t.even=h=!h,n(t)}function $(e){const n=e.getFullYear()%100,t=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${n}-${t}-${r} ${l}:${o}:${c}`}function p(e,n){return e.read().then(({done:t,value:r})=>{f+=L.decode(r,{stream:!t});const o=f.split(`
|
||||
import{D,E as w,G as u}from"./index.1428ab75.js";const v="/logs",L=new TextDecoder("utf-8"),M=()=>Math.floor((1+Math.random())*65536).toString(16);let h=!1,i=!1,f="",s,g;function m(e,n){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=$(r);t.time=l,t.id=+r-0+M(),t.even=h=!h,n(t)}function $(e){const n=e.getFullYear()%100,t=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${n}-${t}-${r} ${l}:${o}:${c}`}function p(e,n){return e.read().then(({done:t,value:r})=>{f+=L.decode(r,{stream:!t});const o=f.split(`
|
||||
`),c=o[o.length-1];for(let d=0;d<o.length-1;d++)m(o[d],n);if(t){m(c,n),f="",console.log("GET /logs streaming done"),i=!1;return}else f=c;return p(e,n)})}function S(e){const n=Object.keys(e);return n.sort(),n.map(t=>e[t]).join("|")}let b,a;function k(e,n){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=n;const t=D(e,v);s=new WebSocket(t),s.addEventListener("error",()=>{y(e,n)}),s.addEventListener("message",function(r){m(r.data,n)})}function O(){s.close(),a&&a.abort()}function R(e){!g||!s||(s.close(),i=!1,k(e,g))}function y(e,n){if(a&&S(e)!==b)a.abort();else if(i)return;i=!0,b=S(e),a=new AbortController;const t=a.signal,{url:r,init:l}=w(e);fetch(r+v+"?level="+e.logLevel,{...l,signal:t}).then(o=>{const c=o.body.getReader();p(c,n)},o=>{i=!1,!t.aborted&&console.log("GET /logs error:",o.message)})}export{k as f,R as r,O as s};
|
@ -1 +1 @@
|
||||
import{r as c,b as u,j as p,i as s}from"./index.2addc377.js";function y(e,n){if(e==null)return{};var i=g(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function g(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var l=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=y(e,["color","size"]);return u("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[p("rect",{x:"6",y:"4",width:"4",height:"16"}),p("rect",{x:"14",y:"4",width:"4",height:"16"})]})});l.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};l.displayName="Pause";const d=l;function h(e,n){if(e==null)return{};var i=v(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function v(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var f=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=h(e,["color","size"]);return p("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:p("polygon",{points:"5 3 19 12 5 21 5 3"})})});f.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};f.displayName="Play";const w=f;export{w as P,d as a};
|
||||
import{r as c,b as u,j as p,i as s}from"./index.1428ab75.js";function y(e,n){if(e==null)return{};var i=g(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function g(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var l=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=y(e,["color","size"]);return u("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[p("rect",{x:"6",y:"4",width:"4",height:"16"}),p("rect",{x:"14",y:"4",width:"4",height:"16"})]})});l.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};l.displayName="Pause";const d=l;function h(e,n){if(e==null)return{};var i=v(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],!(n.indexOf(t)>=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function v(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o<t.length;o++)r=t[o],!(n.indexOf(r)>=0)&&(i[r]=e[r]);return i}var f=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=h(e,["color","size"]);return p("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:p("polygon",{points:"5 3 19 12 5 21 5 3"})})});f.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};f.displayName="Play";const w=f;export{w as P,d as a};
|
@ -1 +1 @@
|
||||
import{h as r}from"./index.2addc377.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
|
||||
import{h as r}from"./index.1428ab75.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
|
@ -14,8 +14,8 @@
|
||||
<meta name="application-name" content="yacd" />
|
||||
<meta name="description" content="Yet Another Clash Dashboard" />
|
||||
<title>yacd</title>
|
||||
<script type="module" crossorigin src="./assets/index.2addc377.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index.487e7aa0.css">
|
||||
<script type="module" crossorigin src="./assets/index.1428ab75.js"></script>
|
||||
<link rel="stylesheet" href="./assets/index.b38debfc.css">
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script src="./registerSW.js"></script></head>
|
||||
<body>
|
||||
<div id="app" data-base-url="http://127.0.0.1:9090"></div>
|
||||
|
@ -13,6 +13,9 @@ ipv6_dns=$(uci -q get openclash.config.ipv6_dns || echo 0)
|
||||
tolerance=$(uci -q get openclash.config.tolerance || echo 0)
|
||||
custom_fallback_filter=$(uci -q get openclash.config.custom_fallback_filter || echo 0)
|
||||
enable_meta_core=$(uci -q get openclash.config.enable_meta_core || echo 0)
|
||||
china_ip_route=$(uci -q get openclash.config.china_ip_route || echo 0)
|
||||
|
||||
lan_block_google_dns=$(uci -q get openclash.config.lan_block_google_dns_ips || uci -q get openclash.config.lan_block_google_dns_macs || echo 0)
|
||||
|
||||
if [ -n "$(ruby_read "$5" "['tun']")" ]; then
|
||||
uci -q set openclash.config.config_reload=0
|
||||
@ -65,6 +68,13 @@ fi
|
||||
|
||||
uci commit openclash
|
||||
|
||||
if [ "$1" = "fake-ip" ] && [ "$china_ip_route" = "1" ]; then
|
||||
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
|
||||
echo "$i" >> /tmp/openclash_fake_filter_include
|
||||
done 2>/dev/null
|
||||
fi
|
||||
|
||||
#获取认证信息
|
||||
yml_auth_get()
|
||||
{
|
||||
@ -405,6 +415,16 @@ Thread.new{
|
||||
Value['sniffer']=Value_sniffer['sniffer'];
|
||||
Value_sniffer={'sniffing'=>['tls','http']};
|
||||
Value['sniffer'].merge!(Value_sniffer);
|
||||
if '$1' == 'redir-host' then
|
||||
Value['sniffer']['ForceDnsMapping']=true;
|
||||
else
|
||||
Value['sniffer']['ForceDnsMapping']=false;
|
||||
end;
|
||||
if ${29} == 1 then
|
||||
Value['sniffer']['ParsePureIp']=true;
|
||||
else
|
||||
Value['sniffer']['ParsePureIp']=false;
|
||||
end;
|
||||
if File::exist?('/etc/openclash/custom/openclash_force_sniffing_domain.yaml') and ${24} == 1 then
|
||||
Value_7 = YAML.load_file('/etc/openclash/custom/openclash_force_sniffing_domain.yaml');
|
||||
if Value_7 != false and not Value_7['force-domain'].to_a.empty? then
|
||||
@ -632,6 +652,17 @@ Thread.new{
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if File::exist?('/tmp/openclash_fake_filter_include') then
|
||||
Value_4 = IO.readlines('/tmp/openclash_fake_filter_include');
|
||||
if not Value_4.empty? then
|
||||
Value_4 = Value_4.map!{|x| x.gsub(/#.*$/,'').strip} - ['', nil];
|
||||
if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then
|
||||
Value['dns']['fake-ip-filter'] = Value['dns']['fake-ip-filter'] | Value_4;
|
||||
else
|
||||
Value['dns']['fake-ip-filter'] = Value_4;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if ${18} == 1 then
|
||||
if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then
|
||||
Value['dns']['fake-ip-filter'].insert(-1,'+.nflxvideo.net');
|
||||
@ -641,11 +672,13 @@ Thread.new{
|
||||
Value['dns'].merge!({'fake-ip-filter'=>['+.nflxvideo.net', '+.media.dssott.com']});
|
||||
end;
|
||||
end;
|
||||
if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then
|
||||
Value['dns']['fake-ip-filter'].insert(-1,'+.dns.google');
|
||||
Value['dns']['fake-ip-filter']=Value['dns']['fake-ip-filter'].uniq;
|
||||
else
|
||||
Value['dns'].merge!({'fake-ip-filter'=>['+.dns.google']});
|
||||
if '$lan_block_google_dns' != '0' then
|
||||
if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then
|
||||
Value['dns']['fake-ip-filter'].insert(-1,'+.dns.google');
|
||||
Value['dns']['fake-ip-filter']=Value['dns']['fake-ip-filter'].uniq;
|
||||
else
|
||||
Value['dns'].merge!({'fake-ip-filter'=>['+.dns.google']});
|
||||
end;
|
||||
end;
|
||||
elsif ${19} == 1 then
|
||||
if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then
|
||||
|
@ -21,14 +21,14 @@ CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
UPDATE_CONFIG_FILE=$(uci get openclash.config.config_update_path 2>/dev/null)
|
||||
UPDATE_CONFIG_NAME=$(echo "$UPDATE_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
|
||||
if [ ! -z "$UPDATE_CONFIG_FILE" ]; then
|
||||
if [ -n "$UPDATE_CONFIG_FILE" ]; then
|
||||
CONFIG_FILE="$UPDATE_CONFIG_FILE"
|
||||
CONFIG_NAME="$UPDATE_CONFIG_NAME"
|
||||
fi
|
||||
|
||||
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_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)
|
||||
fi
|
||||
|
||||
if [ -z "$CONFIG_NAME" ]; then
|
||||
@ -38,74 +38,74 @@ fi
|
||||
|
||||
set_groups()
|
||||
{
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$add_for_this" -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
if [ "$add_for_this" -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$1" = "$3" ] || [ "$1" = "all" ]; then
|
||||
set_group=1
|
||||
add_for_this=1
|
||||
echo " - \"${2}\"" >>$GROUP_FILE
|
||||
fi
|
||||
if [ "$1" = "$3" ] || [ "$1" = "all" ]; then
|
||||
set_group=1
|
||||
add_for_this=1
|
||||
echo " - \"${2}\"" >>$GROUP_FILE
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
set_relay_groups()
|
||||
{
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$add_for_this" -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
if [ "$add_for_this" -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$(echo "$1" |grep "#relay#")" ]; then
|
||||
server_relay_num=$(echo "$1" |awk -F '#relay#' '{print $2}')
|
||||
server_group_name=$(echo "$1" |awk -F '#relay#' '{print $1}')
|
||||
fi
|
||||
if [ -n "$(echo "$1" |grep "#relay#")" ]; then
|
||||
server_relay_num=$(echo "$1" |awk -F '#relay#' '{print $2}')
|
||||
server_group_name=$(echo "$1" |awk -F '#relay#' '{print $1}')
|
||||
fi
|
||||
|
||||
if [ ! -z "$server_relay_num" ]; then
|
||||
if [ "$server_group_name" = "$3" ] || [ "$server_group_name" = "all" ]; then
|
||||
set_group=1
|
||||
add_for_this=1
|
||||
echo "$server_relay_num # - \"${2}\"" >>/tmp/relay_server
|
||||
fi
|
||||
fi
|
||||
if [ -n "$server_relay_num" ]; then
|
||||
if [ "$server_group_name" = "$3" ] || [ "$server_group_name" = "all" ]; then
|
||||
set_group=1
|
||||
add_for_this=1
|
||||
echo "$server_relay_num # - \"${2}\"" >>/tmp/relay_server
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#加入节点
|
||||
yml_servers_add()
|
||||
{
|
||||
|
||||
local section="$1"
|
||||
add_for_this=0
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "config" "$section" "config" ""
|
||||
config_get "name" "$section" "name" ""
|
||||
config_get "relay_groups" "$section" "relay_groups" ""
|
||||
local section="$1"
|
||||
add_for_this=0
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "config" "$section" "config" ""
|
||||
config_get "name" "$section" "name" ""
|
||||
config_get "relay_groups" "$section" "relay_groups" ""
|
||||
|
||||
if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$enabled" = "0" ]; then
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
else
|
||||
if [ -z "$4" ] && [ "$3" = "relay" ] && [ ! -z "$relay_groups" ]; then
|
||||
config_list_foreach "$section" "relay_groups" set_relay_groups "$name" "$2"
|
||||
elif [ -z "$4" ]; then
|
||||
config_list_foreach "$section" "groups" set_groups "$name" "$2"
|
||||
fi
|
||||
else
|
||||
if [ -z "$4" ] && [ "$3" = "relay" ] && [ -n "$relay_groups" ]; then
|
||||
config_list_foreach "$section" "relay_groups" set_relay_groups "$name" "$2"
|
||||
elif [ -z "$4" ]; then
|
||||
config_list_foreach "$section" "groups" set_groups "$name" "$2"
|
||||
fi
|
||||
|
||||
if [ ! -z "$if_game_group" ] && [ -z "$(ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); Value['proxies'].each{|x| if x['name'].eql?('$name') then puts x['name'] end}" 2>/dev/null)" ]; then
|
||||
/usr/share/openclash/yml_proxys_set.sh "$name" "proxy"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$if_game_group" ] && [ -z "$(ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); Value['proxies'].each{|x| if x['name'].eql?('$name') then puts x['name'] end}" 2>/dev/null)" ]; then
|
||||
/usr/share/openclash/yml_proxys_set.sh "$name" "proxy"
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
@ -117,50 +117,49 @@ set_other_groups()
|
||||
fi
|
||||
set_group=1
|
||||
echo " - ${1}" >>$GROUP_FILE
|
||||
|
||||
}
|
||||
|
||||
#加入代理集
|
||||
set_proxy_provider()
|
||||
{
|
||||
local section="$1"
|
||||
add_for_this=0
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "config" "$section" "config" ""
|
||||
config_get "name" "$section" "name" ""
|
||||
local section="$1"
|
||||
add_for_this=0
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "config" "$section" "config" ""
|
||||
config_get "name" "$section" "name" ""
|
||||
|
||||
if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$enabled" = "0" ]; then
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
else
|
||||
if [ -z "$3" ]; then
|
||||
config_list_foreach "$section" "groups" set_provider_groups "$name" "$2"
|
||||
fi
|
||||
else
|
||||
if [ -z "$3" ]; then
|
||||
config_list_foreach "$section" "groups" set_provider_groups "$name" "$2"
|
||||
fi
|
||||
|
||||
if [ ! -z "$if_game_group" ] && [ -z "$(ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); Value['proxy-providers'].keys.each{|x| if x.eql?('$name') then puts x end}" 2>/dev/null)" ]; then
|
||||
/usr/share/openclash/yml_proxys_set.sh "$name" "proxy-provider"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$if_game_group" ] && [ -z "$(ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "Value = YAML.load_file('$CONFIG_FILE'); Value['proxy-providers'].keys.each{|x| if x.eql?('$name') then puts x end}" 2>/dev/null)" ]; then
|
||||
/usr/share/openclash/yml_proxys_set.sh "$name" "proxy-provider"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
set_provider_groups()
|
||||
{
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$add_for_this" -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
if [ "$add_for_this" -eq 1 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$1" = "$3" ] || [ "$1" = "all" ]; then
|
||||
set_proxy_provider=1
|
||||
add_for_this=1
|
||||
echo " - ${2}" >>$GROUP_FILE
|
||||
fi
|
||||
if [ "$1" = "$3" ] || [ "$1" = "all" ]; then
|
||||
set_proxy_provider=1
|
||||
add_for_this=1
|
||||
echo " - ${2}" >>$GROUP_FILE
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
@ -187,11 +186,11 @@ yml_groups_set()
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$if_game_group" ] && [ "$if_game_group" != "$name" ]; then
|
||||
if [ -n "$if_game_group" ] && [ "$if_game_group" != "$name" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@ -220,7 +219,7 @@ yml_groups_set()
|
||||
echo " type: $type" >>$GROUP_FILE
|
||||
if [ "$type" = "load-balance" ]; then
|
||||
[ -n "$strategy" ] && {
|
||||
echo " strategy: $strategy" >>$GROUP_FILE
|
||||
echo " strategy: $strategy" >>$GROUP_FILE
|
||||
}
|
||||
fi
|
||||
[ -n "$disable_udp" ] && {
|
||||
@ -230,10 +229,10 @@ yml_groups_set()
|
||||
echo " proxies: $group_name" >>$GROUP_FILE
|
||||
|
||||
#名字变化时处理规则部分
|
||||
if [ "$name" != "$old_name" ] && [ ! -z "$old_name" ]; then
|
||||
sed -i "s/,${old_name}/,${name}#d/g" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "s/: \"${old_name}\"/: \"${name}#d\"/g" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "s/return \"${old_name}\"$/return \"${name}#d\"/g" "$CONFIG_FILE" 2>/dev/null
|
||||
if [ "$name" != "$old_name" ] && [ -n "$old_name" ]; then
|
||||
sed -i "s/,${old_name}/,${name}#delete_/g" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "s/: \"${old_name}\"/: \"${name}#delete_\"/g" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "s/return \"${old_name}\"$/return \"${name}#delete_\"/g" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "s/old_name \'${old_name}\'/old_name \'${name}\'/g" "$CFG_FILE" 2>/dev/null
|
||||
config_load "openclash"
|
||||
fi
|
||||
@ -245,10 +244,10 @@ yml_groups_set()
|
||||
config_foreach yml_servers_add "servers" "$name" "$type" #加入服务器节点
|
||||
|
||||
if [ "$type" = "relay" ] && [ -s "/tmp/relay_server" ]; then
|
||||
cat /tmp/relay_server |sort -k 1 |awk -F '#' '{print $2}' > /tmp/relay_server.list 2>/dev/null
|
||||
sed -i "/^ \{0,\}proxies: ${group_name}/r/tmp/relay_server.list" "$GROUP_FILE" 2>/dev/null
|
||||
rm -rf /tmp/relay_server 2>/dev/null
|
||||
fi
|
||||
cat /tmp/relay_server |sort -k 1 |awk -F '#' '{print $2}' > /tmp/relay_server.list 2>/dev/null
|
||||
sed -i "/^ \{0,\}proxies: ${group_name}/r/tmp/relay_server.list" "$GROUP_FILE" 2>/dev/null
|
||||
rm -rf /tmp/relay_server 2>/dev/null
|
||||
fi
|
||||
|
||||
echo " use: $group_name" >>$GROUP_FILE
|
||||
|
||||
@ -267,7 +266,7 @@ yml_groups_set()
|
||||
fi
|
||||
|
||||
[ -n "$test_url" ] && {
|
||||
echo " url: $test_url" >>$GROUP_FILE
|
||||
echo " url: $test_url" >>$GROUP_FILE
|
||||
}
|
||||
[ -n "$test_interval" ] && {
|
||||
echo " interval: \"$test_interval\"" >>$GROUP_FILE
|
||||
@ -289,7 +288,7 @@ yml_groups_set()
|
||||
create_config=$(uci get openclash.config.create_config 2>/dev/null)
|
||||
servers_if_update=$(uci get openclash.config.servers_if_update 2>/dev/null)
|
||||
if_game_group="$1"
|
||||
if [ "$create_config" = "0" ] || [ "$servers_if_update" = "1" ] || [ ! -z "$if_game_group" ]; then
|
||||
if [ "$create_config" = "0" ] || [ "$servers_if_update" = "1" ] || [ -n "$if_game_group" ]; then
|
||||
/usr/share/openclash/yml_groups_name_get.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
LOG_OUT "Error: Config File【$CONFIG_NAME】Unable To Parse, Please Choose One-key Function To Create Config File..."
|
||||
@ -306,7 +305,7 @@ if [ "$create_config" = "0" ] || [ "$servers_if_update" = "1" ] || [ ! -z "$if_g
|
||||
fi
|
||||
config_load "openclash"
|
||||
config_foreach yml_groups_set "groups"
|
||||
sed -i "s/#d//g" "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i "s/#delete_//g" "$CONFIG_FILE" 2>/dev/null
|
||||
rm -rf /tmp/relay_server.list 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
@ -605,6 +605,38 @@ do
|
||||
end
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
#xudp
|
||||
if Value['proxies'][$count].key?('xudp') then
|
||||
xudp = '${uci_set}xudp=' + Value['proxies'][$count]['xudp'].to_s
|
||||
system(xudp)
|
||||
end
|
||||
}.join;
|
||||
|
||||
Thread.new{
|
||||
#packet_encoding
|
||||
if Value['proxies'][$count].key?('packet-encoding') then
|
||||
packet_encoding = '${uci_set}packet_encoding=' + Value['proxies'][$count]['packet-encoding'].to_s
|
||||
system(packet_encoding)
|
||||
end
|
||||
}.join;
|
||||
|
||||
Thread.new{
|
||||
#GlobalPadding
|
||||
if Value['proxies'][$count].key?('global-padding') then
|
||||
global_padding = '${uci_set}global_padding=' + Value['proxies'][$count]['global-padding'].to_s
|
||||
system(global_padding)
|
||||
end
|
||||
}.join;
|
||||
|
||||
Thread.new{
|
||||
#authenticated_length
|
||||
if Value['proxies'][$count].key?('authenticated-length') then
|
||||
authenticated_length = '${uci_set}authenticated_length=' + Value['proxies'][$count]['authenticated-length'].to_s
|
||||
system(authenticated_length)
|
||||
end
|
||||
}.join;
|
||||
|
||||
Thread.new{
|
||||
#tls
|
||||
if Value['proxies'][$count].key?('tls') then
|
||||
@ -788,9 +820,18 @@ do
|
||||
Thread.new{
|
||||
#alpn
|
||||
if Value['proxies'][$count].key?('alpn') then
|
||||
alpn = '${uci_set}hysteria_alpn=\"' + Value['proxies'][$count]['alpn'].to_s + '\"'
|
||||
system(alpn)
|
||||
end
|
||||
system '${uci_del}hysteria_alpn >/dev/null 2>&1'
|
||||
if Value['proxies'][$count].key?('alpn').class.to_s != 'Array' then
|
||||
alpn = '${uci_add}hysteria_alpn=\"' + Value['proxies'][$count]['alpn'].to_s + '\"'
|
||||
system(alpn)
|
||||
else
|
||||
Value['proxies'][$count]['alpn'].each{
|
||||
|x|
|
||||
alpn = '${uci_add}hysteria_alpn=\"' + x.to_s + '\"'
|
||||
system(alpn)
|
||||
}
|
||||
end
|
||||
end;
|
||||
}.join
|
||||
|
||||
Thread.new{
|
||||
|
@ -251,6 +251,10 @@ yml_servers_set()
|
||||
config_get "recv_window_conn" "$section" "recv_window_conn" ""
|
||||
config_get "recv_window" "$section" "recv_window" ""
|
||||
config_get "disable_mtu_discovery" "$section" "disable_mtu_discovery" ""
|
||||
config_get "xudp" "$section" "xudp" ""
|
||||
config_get "packet_encoding" "$section" "packet_encoding" ""
|
||||
config_get "global_padding" "$section" "global_padding" ""
|
||||
config_get "authenticated_length" "$section" "authenticated_length" ""
|
||||
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
@ -453,6 +457,26 @@ EOF
|
||||
if [ ! -z "$udp" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
udp: $udp
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$xudp" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
xudp: $xudp
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$packet_encoding" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
packet-encoding: "$packet_encoding"
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$global_padding" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
global-padding: $global_padding
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$authenticated_length" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
authenticated-length: $authenticated_length
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$skip_cert_verify" ]; then
|
||||
@ -594,9 +618,17 @@ cat >> "$SERVER_FILE" <<-EOF
|
||||
EOF
|
||||
fi
|
||||
if [ -n "$hysteria_alpn" ]; then
|
||||
if [ -z "$(echo $hysteria_alpn |grep ' ')" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
alpn: "$hysteria_alpn"
|
||||
alpn:
|
||||
- "$hysteria_alpn"
|
||||
EOF
|
||||
else
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
alpn:
|
||||
EOF
|
||||
config_list_foreach "$section" "hysteria_alpn" set_alpn
|
||||
fi
|
||||
fi
|
||||
if [ -n "$hysteria_obfs" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
|
@ -111,10 +111,10 @@ yml_gen_rule_provider_file()
|
||||
if [ "$github_address_mod" -eq 0 ]; then
|
||||
RULE_PROVIDER_FILE_URL="https://raw.githubusercontent.com/${RULE_PROVIDER_FILE_URL_PATH}"
|
||||
else
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ]; then
|
||||
if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
|
||||
RULE_PROVIDER_FILE_URL="https://cdn.jsdelivr.net/gh/"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F 'master' '{print $2}')""
|
||||
elif [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ]; then
|
||||
RULE_PROVIDER_FILE_URL="https://fastly.jsdelivr.net/gh/"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F 'master' '{print $2}')""
|
||||
elif [ "$github_address_mod" == "https://raw.fastgit.org/" ]; then
|
||||
RULE_PROVIDER_FILE_URL="https://raw.fastgit.org/"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"/master"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F 'master' '{print $2}')""
|
||||
else
|
||||
RULE_PROVIDER_FILE_URL="${github_address_mod}https://raw.githubusercontent.com/${RULE_PROVIDER_FILE_URL_PATH}"
|
||||
fi
|
||||
@ -689,52 +689,64 @@ yml_other_set()
|
||||
end;
|
||||
end;
|
||||
#SUB-RULE
|
||||
if ${10} == 1 then
|
||||
if Value.has_key?('sub-rules') and not Value['sub-rules'].to_a.empty? then
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules.list') then
|
||||
Value_1 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules.list');
|
||||
if Value_1 != false then
|
||||
if Value_1.class.to_s == 'Hash' then
|
||||
if not Value_1['sub-rules'].to_a.empty? and Value_1['sub-rules'].class.to_s == 'Hash' then
|
||||
if Value.has_key?('sub-rules') and not Value['sub-rules'].to_a.empty? then
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules.list') then
|
||||
Value_1 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules.list');
|
||||
if Value_1 != false then
|
||||
if Value_1.class.to_s == 'Hash' then
|
||||
if not Value_1['sub-rules'].to_a.empty? and Value_1['sub-rules'].class.to_s == 'Hash' then
|
||||
if ${10} == 1 then
|
||||
Value['sub-rules'] = Value['sub-rules'].merge!(Value_1['sub-rules']);
|
||||
else
|
||||
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【sub-rules】'
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules_2.list') then
|
||||
Value_2 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules_2.list');
|
||||
if Value_2 != false then
|
||||
if Value_2.class.to_s == 'Hash' then
|
||||
if not Value_2['sub-rules'].to_a.empty? and Value_2['sub-rules'].class.to_s == 'Hash' then
|
||||
end;
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules_2.list') then
|
||||
Value_2 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules_2.list');
|
||||
if Value_2 != false then
|
||||
if Value_2.class.to_s == 'Hash' then
|
||||
if not Value_2['sub-rules'].to_a.empty? and Value_2['sub-rules'].class.to_s == 'Hash' then
|
||||
if ${10} == 1 then
|
||||
Value['sub-rules'] = Value['sub-rules'].merge!(Value_2['sub-rules']);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
else
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules.list') then
|
||||
Value_1 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules.list');
|
||||
if Value_1 != false then
|
||||
if Value_1.class.to_s == 'Hash' then
|
||||
if not Value_1['sub-rules'].to_a.empty? and Value_1['sub-rules'].class.to_s == 'Hash' then
|
||||
Value['sub-rules'] = Value_1['sub-rules'];
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules_2.list') then
|
||||
Value_2 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules_2.list');
|
||||
if Value_2 != false then
|
||||
if Value_2.class.to_s == 'Hash' then
|
||||
if not Value_2['sub-rules'].to_a.empty? and Value_2['sub-rules'].class.to_s == 'Hash' then
|
||||
Value['sub-rules'] = Value_2['sub-rules'];
|
||||
else
|
||||
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【sub-rules】'
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
else
|
||||
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【sub-rules】'
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules.list') then
|
||||
Value_1 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules.list');
|
||||
if Value_1 != false then
|
||||
if Value_1.class.to_s == 'Hash' then
|
||||
if not Value_1['sub-rules'].to_a.empty? and Value_1['sub-rules'].class.to_s == 'Hash' then
|
||||
if ${10} == 1 then
|
||||
Value['sub-rules'] = Value_1['sub-rules'];
|
||||
else
|
||||
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【sub-rules】'
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if File::exist?('/etc/openclash/custom/openclash_custom_rules_2.list') then
|
||||
Value_2 = YAML.load_file('/etc/openclash/custom/openclash_custom_rules_2.list');
|
||||
if Value_2 != false then
|
||||
if Value_2.class.to_s == 'Hash' then
|
||||
if not Value_2['sub-rules'].to_a.empty? and Value_2['sub-rules'].class.to_s == 'Hash' then
|
||||
if ${10} == 1 then
|
||||
Value['sub-rules'] = Value_2['sub-rules'];
|
||||
else
|
||||
puts '${LOGTIME} Warning: Skip the Custom Rule that Core not Support【sub-rules】'
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
}.join;
|
||||
@ -777,13 +789,9 @@ yml_other_set()
|
||||
end;
|
||||
#CDN Replace
|
||||
if '$github_address_mod' != '0' then
|
||||
if '$github_address_mod' == 'https://cdn.jsdelivr.net/' then
|
||||
if '$github_address_mod' == 'https://cdn.jsdelivr.net/' or '$github_address_mod' == 'https://fastly.jsdelivr.net/' or '$github_address_mod' == 'https://testingcf.jsdelivr.net/'then
|
||||
if x['url'] and x['url'] =~ /^https:\/\/raw.githubusercontent.com/ then
|
||||
x['url'] = 'https://cdn.jsdelivr.net/gh/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '@' + x['url'].split(x['url'].split('/')[2] + '/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '/')[1];
|
||||
end;
|
||||
elsif '$github_address_mod' == 'https://fastly.jsdelivr.net/' then
|
||||
if x['url'] and x['url'] =~ /^https:\/\/raw.githubusercontent.com/ then
|
||||
x['url'] = 'https://fastly.jsdelivr.net/gh/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '@' + x['url'].split(x['url'].split('/')[2] + '/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '/')[1];
|
||||
x['url'] = '$github_address_mod' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '@' + x['url'].split(x['url'].split('/')[2] + '/' + x['url'].split('/')[3] + '/' + x['url'].split('/')[4] + '/')[1];
|
||||
end;
|
||||
elsif '$github_address_mod' == 'https://raw.fastgit.org/' then
|
||||
if x['url'] and x['url'] =~ /^https:\/\/raw.githubusercontent.com/ then
|
||||
@ -866,50 +874,50 @@ if [ "$1" != "0" ]; then
|
||||
exit 0
|
||||
#判断策略组是否存在
|
||||
elif [ "$rule_name" = "ConnersHua_return" ]; then
|
||||
if [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ];then
|
||||
if [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ];then
|
||||
LOG_OUT "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!"
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
elif [ "$rule_name" = "ConnersHua" ]; then
|
||||
if [ -z "$(grep "$GlobalTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$AsianTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
|| [ -z "$(grep -F "$AsianTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
LOG_OUT "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!"
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}"
|
||||
exit 0
|
||||
fi
|
||||
elif [ "$rule_name" = "lhie1" ]; then
|
||||
if [ -z "$(grep -F "$GlobalTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$AsianTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Youtube" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Bilibili" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Bahamut" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$HBOMax" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$HBOGo" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Pornhub" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Apple" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Scholar" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Netflix" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Disney" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Discovery" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$DAZN" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Spotify" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Steam" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$AdBlock" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Speedtest" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$AsianTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Youtube" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Bilibili" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Bahamut" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$HBOMax" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$HBOGo" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Pornhub" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Apple" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Scholar" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Netflix" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Disney" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Discovery" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$DAZN" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Spotify" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Steam" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$AdBlock" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Speedtest" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Telegram" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Crypto" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Discord" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Microsoft" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$PayPal" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$GoogleFCM" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
|| [ -z "$(grep -F "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$GoogleFCM" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep -F "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
LOG_OUT "Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!"
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}"
|
||||
exit 0
|
||||
@ -920,143 +928,143 @@ if [ "$1" != "0" ]; then
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}"
|
||||
exit 0
|
||||
else
|
||||
if [ "$rule_name" = "lhie1" ]; then
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
Value = YAML.load_file('$3');
|
||||
Value_1 = YAML.load_file('/usr/share/openclash/res/lhie1.yaml');
|
||||
if Value.has_key?('script') then
|
||||
Value.delete('script')
|
||||
end;
|
||||
if Value.has_key?('rules') then
|
||||
Value.delete('rules')
|
||||
end;
|
||||
if Value_1.has_key?('rule-providers') and not Value_1['rule-providers'].to_a.empty? then
|
||||
if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then
|
||||
Value['rule-providers'].merge!(Value_1['rule-providers'])
|
||||
else
|
||||
Value['rule-providers']=Value_1['rule-providers']
|
||||
end
|
||||
end;
|
||||
Value['script']=Value_1['script'];
|
||||
Value['rules']=Value_1['rules'];
|
||||
Value['rules'].to_a.collect!{|x|
|
||||
x.to_s.gsub(/,Bilibili,Asian TV$/, ',Bilibili,$Bilibili#d')
|
||||
.gsub(/,Bahamut,Global TV$/, ',Bahamut,$Bahamut#d')
|
||||
.gsub(/,HBO Max,Global TV$/, ',HBO Max,$HBOMax#d')
|
||||
.gsub(/,HBO Go,Global TV$/, ',HBO Go,$HBOGo#d')
|
||||
.gsub(/,Discovery Plus,Global TV$/, ',Discovery Plus,$Discovery#d')
|
||||
.gsub(/,DAZN,Global TV$/, ',DAZN,$DAZN#d')
|
||||
.gsub(/,Pornhub,Global TV$/, ',Pornhub,$Pornhub#d')
|
||||
.gsub(/,Global TV$/, ',$GlobalTV#d')
|
||||
.gsub(/,Asian TV$/, ',$AsianTV#d')
|
||||
.gsub(/,Proxy$/, ',$Proxy#d')
|
||||
.gsub(/,YouTube$/, ',$Youtube#d')
|
||||
.gsub(/,Apple$/, ',$Apple#d')
|
||||
.gsub(/,Scholar$/, ',$Scholar#d')
|
||||
.gsub(/,Netflix$/, ',$Netflix#d')
|
||||
.gsub(/,Disney$/, ',$Disney#d')
|
||||
.gsub(/,Spotify$/, ',$Spotify#d')
|
||||
.gsub(/,Steam$/, ',$Steam#d')
|
||||
.gsub(/,AdBlock$/, ',$AdBlock#d')
|
||||
.gsub(/,Speedtest$/, ',$Speedtest#d')
|
||||
.gsub(/,Telegram$/, ',$Telegram#d')
|
||||
.gsub(/,Crypto$/, ',$Crypto#d')
|
||||
.gsub(/,Discord$/, ',$Discord#d')
|
||||
.gsub(/,Microsoft$/, ',$Microsoft#d')
|
||||
.to_s.gsub(/,PayPal$/, ',$PayPal#d')
|
||||
.gsub(/,Domestic$/, ',$Domestic#d')
|
||||
.gsub(/,Others$/, ',$Others#d')
|
||||
.gsub(/,Google FCM$/, ',$GoogleFCM#d')
|
||||
.gsub(/#d/, '')
|
||||
};
|
||||
Value['script']['code'].to_s.gsub!(/\"Bilibili\": \"Asian TV\"/,'\"Bilibili\": \"$Bilibili#d\"')
|
||||
.gsub!(/\"Bahamut\": \"Global TV\"/,'\"Bahamut\": \"$Bahamut#d\"')
|
||||
.gsub!(/\"HBO Max\": \"Global TV\"/,'\"HBO Max\": \"$HBOMax#d\"')
|
||||
.gsub!(/\"HBO Go\": \"Global TV\"/,'\"HBO Go\": \"$HBOGo#d\"')
|
||||
.gsub!(/\"Discovery Plus\": \"Global TV\"/,'\"Discovery Plus\": \"$Discovery#d\"')
|
||||
.gsub!(/\"DAZN\": \"Global TV\"/,'\"DAZN\": \"$DAZN#d\"')
|
||||
.gsub!(/\"Pornhub\": \"Global TV\"/,'\"Pornhub\": \"$Pornhub#d\"')
|
||||
.gsub!(/: \"Global TV\"/,': \"$GlobalTV#d\"')
|
||||
.gsub!(/: \"Asian TV\"/,': \"$AsianTV#d\"')
|
||||
.gsub!(/: \"Proxy\"/,': \"$Proxy#d\"')
|
||||
.gsub!(/: \"YouTube\"/,': \"$Youtube#d\"')
|
||||
.gsub!(/: \"Apple\"/,': \"$Apple#d\"')
|
||||
.gsub!(/: \"Scholar\"/,': \"$Scholar#d\"')
|
||||
.gsub!(/: \"Netflix\"/,': \"$Netflix#d\"')
|
||||
.gsub!(/: \"Disney\"/,': \"$Disney#d\"')
|
||||
.gsub!(/: \"Spotify\"/,': \"$Spotify#d\"')
|
||||
.gsub!(/: \"Steam\"/,': \"$Steam#d\"')
|
||||
.gsub!(/: \"AdBlock\"/,': \"$AdBlock#d\"')
|
||||
.gsub!(/: \"Speedtest\"/,': \"$Speedtest#d\"')
|
||||
.gsub!(/: \"Telegram\"/,': \"$Telegram#d\"')
|
||||
.gsub!(/: \"Crypto\"/,': \"$Crypto#d\"')
|
||||
.gsub!(/: \"Discord\"/,': \"$Discord#d\"')
|
||||
.gsub!(/: \"Microsoft\"/,': \"$Microsoft#d\"')
|
||||
.gsub!(/: \"PayPal\"/,': \"$PayPal#d\"')
|
||||
.gsub!(/: \"Domestic\"/,': \"$Domestic#d\"')
|
||||
.gsub!(/: \"Google FCM\"/,': \"$GoogleFCM#d\"')
|
||||
.gsub!(/return \"Domestic\"$/, 'return \"$Domestic#d\"')
|
||||
.gsub!(/return \"Others\"$/, 'return \"$Others#d\"')
|
||||
.gsub!(/#d/, '');
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Set lhie1 Rules Failed,【' + e.message + '】';
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
elif [ "$rule_name" = "ConnersHua" ]; then
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
Value = YAML.load_file('$3');
|
||||
Value_1 = YAML.load_file('/usr/share/openclash/res/ConnersHua.yaml');
|
||||
if Value.has_key?('script') then
|
||||
Value.delete('script')
|
||||
end;
|
||||
if Value.has_key?('rules') then
|
||||
Value.delete('rules')
|
||||
end;
|
||||
if Value_1.has_key?('rule-providers') and not Value_1['rule-providers'].to_a.empty? then
|
||||
if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then
|
||||
Value['rule-providers'].merge!(Value_1['rule-providers'])
|
||||
else
|
||||
Value['rule-providers']=Value_1['rule-providers']
|
||||
end
|
||||
end;
|
||||
Value['rules']=Value_1['rules'];
|
||||
Value['rules'].to_a.collect!{|x|
|
||||
x.to_s.gsub(/,Streaming$/, ',$GlobalTV#d')
|
||||
.gsub(/,StreamingSE$/, ',$AsianTV#d')
|
||||
.gsub(/(,PROXY$|,IP-Blackhole$)/, ',$Proxy#d')
|
||||
.gsub(/,China,DIRECT$/, ',China,$Domestic#d')
|
||||
.gsub(/,ChinaIP,DIRECT$/, ',ChinaIP,$Domestic#d')
|
||||
.gsub(/,CN,DIRECT$/, ',CN,$Domestic#d')
|
||||
.gsub(/,MATCH$/, ',$Others#d')
|
||||
.gsub(/#d/, '')
|
||||
};
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Set ConnersHua Rules Failed,【' + e.message + '】';
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
else
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
Value = YAML.load_file('$3');
|
||||
Value_1 = YAML.load_file('/usr/share/openclash/res/ConnersHua_return.yaml');
|
||||
if Value.has_key?('script') then
|
||||
Value.delete('script')
|
||||
end;
|
||||
if Value.has_key?('rules') then
|
||||
Value.delete('rules')
|
||||
end;
|
||||
Value['rules']=Value_1['rules'];
|
||||
Value['rules'].to_a.collect!{|x|
|
||||
x.to_s.gsub(/,PROXY$/, ',$Proxy#d')
|
||||
.gsub(/MATCH,DIRECT$/, 'MATCH,$Others#d')
|
||||
.gsub(/#d/, '')
|
||||
};
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Set ConnersHua Return Rules Failed,【' + e.message + '】';
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
if [ "$rule_name" = "lhie1" ]; then
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
Value = YAML.load_file('$3');
|
||||
Value_1 = YAML.load_file('/usr/share/openclash/res/lhie1.yaml');
|
||||
if Value.has_key?('script') then
|
||||
Value.delete('script')
|
||||
end;
|
||||
if Value.has_key?('rules') then
|
||||
Value.delete('rules')
|
||||
end;
|
||||
if Value_1.has_key?('rule-providers') and not Value_1['rule-providers'].to_a.empty? then
|
||||
if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then
|
||||
Value['rule-providers'].merge!(Value_1['rule-providers'])
|
||||
else
|
||||
Value['rule-providers']=Value_1['rule-providers']
|
||||
end
|
||||
end;
|
||||
Value['script']=Value_1['script'];
|
||||
Value['rules']=Value_1['rules'];
|
||||
Value['rules'].to_a.collect!{|x|
|
||||
x.to_s.gsub(/,Bilibili,Asian TV$/, ',Bilibili,$Bilibili#delete_')
|
||||
.gsub(/,Bahamut,Global TV$/, ',Bahamut,$Bahamut#delete_')
|
||||
.gsub(/,HBO Max,Global TV$/, ',HBO Max,$HBOMax#delete_')
|
||||
.gsub(/,HBO Go,Global TV$/, ',HBO Go,$HBOGo#delete_')
|
||||
.gsub(/,Discovery Plus,Global TV$/, ',Discovery Plus,$Discovery#delete_')
|
||||
.gsub(/,DAZN,Global TV$/, ',DAZN,$DAZN#delete_')
|
||||
.gsub(/,Pornhub,Global TV$/, ',Pornhub,$Pornhub#delete_')
|
||||
.gsub(/,Global TV$/, ',$GlobalTV#delete_')
|
||||
.gsub(/,Asian TV$/, ',$AsianTV#delete_')
|
||||
.gsub(/,Proxy$/, ',$Proxy#delete_')
|
||||
.gsub(/,YouTube$/, ',$Youtube#delete_')
|
||||
.gsub(/,Apple$/, ',$Apple#delete_')
|
||||
.gsub(/,Scholar$/, ',$Scholar#delete_')
|
||||
.gsub(/,Netflix$/, ',$Netflix#delete_')
|
||||
.gsub(/,Disney$/, ',$Disney#delete_')
|
||||
.gsub(/,Spotify$/, ',$Spotify#delete_')
|
||||
.gsub(/,Steam$/, ',$Steam#delete_')
|
||||
.gsub(/,AdBlock$/, ',$AdBlock#delete_')
|
||||
.gsub(/,Speedtest$/, ',$Speedtest#delete_')
|
||||
.gsub(/,Telegram$/, ',$Telegram#delete_')
|
||||
.gsub(/,Crypto$/, ',$Crypto#delete_')
|
||||
.gsub(/,Discord$/, ',$Discord#delete_')
|
||||
.gsub(/,Microsoft$/, ',$Microsoft#delete_')
|
||||
.to_s.gsub(/,PayPal$/, ',$PayPal#delete_')
|
||||
.gsub(/,Domestic$/, ',$Domestic#delete_')
|
||||
.gsub(/,Others$/, ',$Others#delete_')
|
||||
.gsub(/,Google FCM$/, ',$GoogleFCM#delete_')
|
||||
.gsub(/#delete_/, '')
|
||||
};
|
||||
Value['script']['code'].to_s.gsub!(/\"Bilibili\": \"Asian TV\"/,'\"Bilibili\": \"$Bilibili#delete_\"')
|
||||
.gsub!(/\"Bahamut\": \"Global TV\"/,'\"Bahamut\": \"$Bahamut#delete_\"')
|
||||
.gsub!(/\"HBO Max\": \"Global TV\"/,'\"HBO Max\": \"$HBOMax#delete_\"')
|
||||
.gsub!(/\"HBO Go\": \"Global TV\"/,'\"HBO Go\": \"$HBOGo#delete_\"')
|
||||
.gsub!(/\"Discovery Plus\": \"Global TV\"/,'\"Discovery Plus\": \"$Discovery#delete_\"')
|
||||
.gsub!(/\"DAZN\": \"Global TV\"/,'\"DAZN\": \"$DAZN#delete_\"')
|
||||
.gsub!(/\"Pornhub\": \"Global TV\"/,'\"Pornhub\": \"$Pornhub#delete_\"')
|
||||
.gsub!(/: \"Global TV\"/,': \"$GlobalTV#delete_\"')
|
||||
.gsub!(/: \"Asian TV\"/,': \"$AsianTV#delete_\"')
|
||||
.gsub!(/: \"Proxy\"/,': \"$Proxy#delete_\"')
|
||||
.gsub!(/: \"YouTube\"/,': \"$Youtube#delete_\"')
|
||||
.gsub!(/: \"Apple\"/,': \"$Apple#delete_\"')
|
||||
.gsub!(/: \"Scholar\"/,': \"$Scholar#delete_\"')
|
||||
.gsub!(/: \"Netflix\"/,': \"$Netflix#delete_\"')
|
||||
.gsub!(/: \"Disney\"/,': \"$Disney#delete_\"')
|
||||
.gsub!(/: \"Spotify\"/,': \"$Spotify#delete_\"')
|
||||
.gsub!(/: \"Steam\"/,': \"$Steam#delete_\"')
|
||||
.gsub!(/: \"AdBlock\"/,': \"$AdBlock#delete_\"')
|
||||
.gsub!(/: \"Speedtest\"/,': \"$Speedtest#delete_\"')
|
||||
.gsub!(/: \"Telegram\"/,': \"$Telegram#delete_\"')
|
||||
.gsub!(/: \"Crypto\"/,': \"$Crypto#delete_\"')
|
||||
.gsub!(/: \"Discord\"/,': \"$Discord#delete_\"')
|
||||
.gsub!(/: \"Microsoft\"/,': \"$Microsoft#delete_\"')
|
||||
.gsub!(/: \"PayPal\"/,': \"$PayPal#delete_\"')
|
||||
.gsub!(/: \"Domestic\"/,': \"$Domestic#delete_\"')
|
||||
.gsub!(/: \"Google FCM\"/,': \"$GoogleFCM#delete_\"')
|
||||
.gsub!(/return \"Domestic\"$/, 'return \"$Domestic#delete_\"')
|
||||
.gsub!(/return \"Others\"$/, 'return \"$Others#delete_\"')
|
||||
.gsub!(/#delete_/, '');
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Set lhie1 Rules Failed,【' + e.message + '】';
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
elif [ "$rule_name" = "ConnersHua" ]; then
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
Value = YAML.load_file('$3');
|
||||
Value_1 = YAML.load_file('/usr/share/openclash/res/ConnersHua.yaml');
|
||||
if Value.has_key?('script') then
|
||||
Value.delete('script')
|
||||
end;
|
||||
if Value.has_key?('rules') then
|
||||
Value.delete('rules')
|
||||
end;
|
||||
if Value_1.has_key?('rule-providers') and not Value_1['rule-providers'].to_a.empty? then
|
||||
if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then
|
||||
Value['rule-providers'].merge!(Value_1['rule-providers'])
|
||||
else
|
||||
Value['rule-providers']=Value_1['rule-providers']
|
||||
end
|
||||
end;
|
||||
Value['rules']=Value_1['rules'];
|
||||
Value['rules'].to_a.collect!{|x|
|
||||
x.to_s.gsub(/,Streaming$/, ',$GlobalTV#delete_')
|
||||
.gsub(/,StreamingSE$/, ',$AsianTV#delete_')
|
||||
.gsub(/(,PROXY$|,IP-Blackhole$)/, ',$Proxy#delete_')
|
||||
.gsub(/,China,DIRECT$/, ',China,$Domestic#delete_')
|
||||
.gsub(/,ChinaIP,DIRECT$/, ',ChinaIP,$Domestic#delete_')
|
||||
.gsub(/,CN,DIRECT$/, ',CN,$Domestic#delete_')
|
||||
.gsub(/,MATCH$/, ',$Others#delete_')
|
||||
.gsub(/#delete_/, '')
|
||||
};
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Set ConnersHua Rules Failed,【' + e.message + '】';
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
else
|
||||
ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e "
|
||||
begin
|
||||
Value = YAML.load_file('$3');
|
||||
Value_1 = YAML.load_file('/usr/share/openclash/res/ConnersHua_return.yaml');
|
||||
if Value.has_key?('script') then
|
||||
Value.delete('script')
|
||||
end;
|
||||
if Value.has_key?('rules') then
|
||||
Value.delete('rules')
|
||||
end;
|
||||
Value['rules']=Value_1['rules'];
|
||||
Value['rules'].to_a.collect!{|x|
|
||||
x.to_s.gsub(/,PROXY$/, ',$Proxy#delete_')
|
||||
.gsub(/MATCH,DIRECT$/, 'MATCH,$Others#delete_')
|
||||
.gsub(/#delete_/, '')
|
||||
};
|
||||
File.open('$3','w') {|f| YAML.dump(Value, f)};
|
||||
rescue Exception => e
|
||||
puts '${LOGTIME} Error: Set ConnersHua Return Rules Failed,【' + e.message + '】';
|
||||
end" 2>/dev/null >> $LOG_FILE
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v0.45.59-beta"><title>Current Version: v0.45.59-beta</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="186" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="97" height="20" fill="#555"/><rect x="97" width="89" height="20" fill="#007ec6"/><rect width="186" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="870">Current Version</text><text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="870">Current Version</text><text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="790">v0.45.59-beta</text><text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="790">v0.45.59-beta</text></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186" height="20" role="img" aria-label="Current Version: v0.45.69-beta"><title>Current Version: v0.45.69-beta</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="186" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="97" height="20" fill="#555"/><rect x="97" width="89" height="20" fill="#007ec6"/><rect width="186" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="495" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="870">Current Version</text><text x="495" y="140" transform="scale(.1)" fill="#fff" textLength="870">Current Version</text><text aria-hidden="true" x="1405" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="790">v0.45.69-beta</text><text x="1405" y="140" transform="scale(.1)" fill="#fff" textLength="790">v0.45.69-beta</text></g></svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
27
luci-theme-opentopd/Makefile
Normal file
@ -0,0 +1,27 @@
|
||||
# Copyright (C) 2008-2019 Jerrykuku
|
||||
# Copyright (C) 2019-2021 sirpdboy
|
||||
# http://www.github.com/sirpdboy/luci-theme-opentopd
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
THEME_NAME:=opentopd
|
||||
THEME_TITLE:=opentopd Theme
|
||||
|
||||
PKG_NAME:=luci-theme-$(THEME_NAME)
|
||||
PKG_VERSION:=1.5.0
|
||||
PKG_RELEASE:=20220809
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
define Package/luci-theme-opentopd/postinst
|
||||
#!/bin/sh
|
||||
|
||||
rm -Rf /var/luci-modulecache
|
||||
rm -Rf /var/luci-indexcache
|
||||
exit 0
|
||||
|
||||
endef
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
176
luci-theme-opentopd/README.md
Normal file
@ -0,0 +1,176 @@
|
||||
[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)](#解决-github-网页上图片显示失败的问题) [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ)
|
||||
<a href="#readme">
|
||||
<img src="https://img.vim-cn.com/7f/270400123d9c4385c11d0aed32979f35d80578.png" alt="图飞了😂" title="opentopd" align="right" height="180" />
|
||||
</a>
|
||||
|
||||
![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明1.jpg)
|
||||
|
||||
[luci-theme-opentopd thme openwrt主题](https://github.com/sirpdboy/luci-theme-opentopd)
|
||||
|
||||
|
||||
[![](https://img.shields.io/badge/-目录:-696969.svg)](#readme) [![](https://img.shields.io/badge/-编译说明-F5F5F5.svg)](#编译说明-) [![](https://img.shields.io/badge/-捐助-F5F5F5.svg)](#捐助-)
|
||||
|
||||
请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。
|
||||
|
||||
opentopd是一款基于luci-theme-material构建,使用HTML5、CSS3编写的Luci主题。
|
||||
-
|
||||
|
||||
## 写在前面:
|
||||
|
||||
这个主题是为sirpdboy(基于OpenWrt,专门为家庭使用场景设计的固件)专门设计的,也可以用于OpenWrt其他版本.
|
||||
|
||||
目前兼容Luci18,Luci其他版本计划在此版本稳定后开发。
|
||||
|
||||
## 编译说明 [![](https://img.shields.io/badge/-编译说明-F5F5F5.svg)](#编译说明-)
|
||||
|
||||
将opentopd 主题添加至 LEDE/OpenWRT 源码的方法。
|
||||
|
||||
更新日志:
|
||||
|
||||
2021.12.15 opentopd 1.4.7
|
||||
|
||||
1、修复偶尔加载页面会白屏问题
|
||||
|
||||
2、取消加载动画
|
||||
|
||||
3、优化升级固件页面布局
|
||||
|
||||
4、修复已知所有BUG。
|
||||
|
||||
2021.11.19 opentopd 1.4.2
|
||||
|
||||
1.改回菜单自动收缩功能,方便手机操作菜单。
|
||||
|
||||
2.修复网卡LAN口收缩问题
|
||||
|
||||
3.进一步优化背景等待时间,优化一些重复代码。
|
||||
|
||||
2021.11.15 opentopd 1.4.1
|
||||
|
||||
1.优化装载背景,加快装载速度.
|
||||
|
||||
2.更改进度条图片和背景等图片,使之更美观。
|
||||
|
||||
3.压缩图片文件和LOGO图片大小,使之占用更小的空间。原LOGO图片120k,压缩后1.9K;原ICO图片66K,压缩后4.8K;原进度条图片6.4K,压缩后不到1/4K;登陆背景图片原来4000K,压缩后290K.全部文件大小只占用490K左右。
|
||||
|
||||
2021.11.10: opentopd 1.4.0
|
||||
|
||||
1. 加入在线动态壁纸功能
|
||||
|
||||
2. 自定义壁纸目录在/www/luci-static/opentopd/background/ 拷入图片后随机选择一张。
|
||||
|
||||
2021.10.19: opentopd 1.3.9
|
||||
|
||||
1.优化UI,更精致。
|
||||
|
||||
2.修复LAN口修改配置收缩的BUG。
|
||||
|
||||
3.优化登陆窗口,手机上登陆更美观。
|
||||
|
||||
2021.10.18: opentopd 1.3.8
|
||||
|
||||
1.取消自动更新壁纸。
|
||||
|
||||
2.修复HELLOWORLD被档住应用无法点击按钮问题。
|
||||
|
||||
3.修复新版按钮选择无箭头问题。
|
||||
|
||||
4.全新整理优化UI,使之更适合手机操控。
|
||||
|
||||
2021.10.16: opentopd 1.3.6
|
||||
|
||||
1.取消自动更新壁纸问题。
|
||||
|
||||
2.专项优化手机浏览布局等不合理问题,目前测试所有功能完美手机操控。
|
||||
|
||||
2021.9.19: opentopd 1.3.0
|
||||
|
||||
1、美化登陆窗口。
|
||||
|
||||
2、修复AdGuard Home 下载链接文本框太小的问题。
|
||||
|
||||
3、修复插件多个项目超出后隐藏看不到问题。
|
||||
|
||||
4、优化背景图主题占用空间更少.
|
||||
|
||||
2020.5.25: opentopd 1.2.4 更新背景等
|
||||
|
||||
2019.10.5: opentopd 1.0.0 在前人大神的基础上,自制字体发布首版本。
|
||||
|
||||
## 下载源码方法一:
|
||||
编辑源码文件夹根目录feeds.conf.default并加入如下内容:
|
||||
|
||||
```Brach
|
||||
# feeds获取源码:
|
||||
src-git opentopd https://github.com/sirpdboy/luci-theme-opentopd
|
||||
```
|
||||
```Brach
|
||||
# 更新feeds,并安装主题:
|
||||
scripts/feeds update opentopd
|
||||
scripts/feeds install luci-theme-opentopd
|
||||
```
|
||||
|
||||
## 下载源码方法二:
|
||||
```Brach
|
||||
# 下载源码
|
||||
|
||||
git clone https://github.com/sirpdboy/luci-theme-opentopd package/luci-theme-opentopd
|
||||
|
||||
make menuconfig
|
||||
```
|
||||
## 配置菜单
|
||||
```Brach
|
||||
make menuconfig
|
||||
# 找到 LuCI -> Themes, 选择 luci-theme-opentopd, 保存后退出。
|
||||
```
|
||||
## 编译
|
||||
```Brach
|
||||
# 编译固件
|
||||
make package/luci-app-opentopd/{clean,compile} V=s
|
||||
```
|
||||
![xm1](doc/登陆界面2.jpg)
|
||||
![xm2](doc/预览界面.jpg)
|
||||
![xm3](doc/高级设置.jpg)
|
||||
![xm3](doc/网络共享.jpg)
|
||||
![xm3](doc/合并图.jpg)
|
||||
|
||||
## 说明 [![](https://img.shields.io/badge/-说明-F5F5F5.svg)](#说明-)
|
||||
|
||||
源码来源:https://github.com/sirpdboy/luci-theme-opentopd
|
||||
|
||||
![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明2.jpg)
|
||||
|
||||
### 你可以随意使用其中的源码,但请注明出处。
|
||||
|
||||
|
||||
# My other project
|
||||
|
||||
网络速度测试 :https://github.com/sirpdboy/NetSpeedTest
|
||||
|
||||
定时设置插件 : https://github.com/sirpdboy/luci-app-autotimeset
|
||||
|
||||
关机功能插件 : https://github.com/sirpdboy/luci-app-poweroffdevice
|
||||
|
||||
opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd
|
||||
|
||||
opentoks 主题: https://github.com/sirpdboy/luci-theme-opentoks [仿KOOLSAHRE主题]
|
||||
|
||||
btmob 主题: https://github.com/sirpdboy/luci-theme-btmob
|
||||
|
||||
系统高级设置 : https://github.com/sirpdboy/luci-app-advanced
|
||||
|
||||
ddns-go动态域名: https://github.com/sirpdboy/luci-app-ddns-go
|
||||
|
||||
|
||||
## 捐助
|
||||
|
||||
![screenshots](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/说明3.jpg)
|
||||
|
||||
| <img src="https://img.shields.io/badge/-支付宝-F5F5F5.svg" href="#赞助支持本项目-" height="25" alt="图飞了😂"/> | <img src="https://img.shields.io/badge/-微信-F5F5F5.svg" height="25" alt="图飞了😂" href="#赞助支持本项目-"/> |
|
||||
| :-----------------: | :-------------: |
|
||||
|![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/支付宝.png) | ![xm1](https://raw.githubusercontent.com/sirpdboy/openwrt/master/doc/微信.png) |
|
||||
|
||||
<a href="#readme">
|
||||
<img src="https://img.shields.io/badge/-返回顶部-orange.svg" alt="图飞了😂" title="返回顶部" align="right"/>
|
||||
</a>
|
||||
|
100
luci-theme-opentopd/doc/index.md
Normal file
@ -0,0 +1,100 @@
|
||||
[![若部分图片无法正常显示,请挂上机场浏览或点这里到末尾看修复教程](https://visitor-badge.glitch.me/badge?page_id=sirpdboy-visitor-badge)](#解决-github-网页上图片显示失败的问题) [![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ)
|
||||
<a href="#readme">
|
||||
<img src="https://img.vim-cn.com/7f/270400123d9c4385c11d0aed32979f35d80578.png" alt="图飞了😂" title="opentopd" align="right" height="180" />
|
||||
</a>
|
||||
|
||||
[luci-theme-opentopd thme openwrt主题](https://github.com/sirpdboy/luci-theme-opentopd)
|
||||
======================
|
||||
|
||||
[![](https://img.shields.io/badge/-目录:-696969.svg)](#readme) [![](https://img.shields.io/badge/-编译说明-F5F5F5.svg)](#编译说明-) [![](https://img.shields.io/badge/-捐助-F5F5F5.svg)](#捐助-)
|
||||
|
||||
请 **认真阅读完毕** 本页面,本页面包含注意事项和如何使用。
|
||||
|
||||
opentopd 是一款基于luci-theme-material构建的,使用HTML5、CSS3编写的Luci主题。
|
||||
-
|
||||
|
||||
## 写在前面:
|
||||
|
||||
这个主题是为sirpdboy(基于OpenWrt,专门为家庭使用场景设计的固件)专门设计的,也可以用于OpenWrt其他版本.
|
||||
|
||||
目前兼容Luci18,Luci其他版本计划在此版本稳定后开发。
|
||||
|
||||
## 编译说明 [![](https://img.shields.io/badge/-编译说明-F5F5F5.svg)](#编译说明-)
|
||||
|
||||
将opentopd 主题添加至 LEDE/OpenWRT 源码的方法。
|
||||
|
||||
## 下载源码方法一:
|
||||
编辑源码文件夹根目录feeds.conf.default并加入如下内容:
|
||||
|
||||
```Brach
|
||||
# feeds获取源码:
|
||||
src-git opentopd https://github.com/sirpdboy/luci-theme-opentopd
|
||||
```
|
||||
```Brach
|
||||
# 更新feeds,并安装主题:
|
||||
scripts/feeds update opentopd
|
||||
scripts/feeds install luci-theme-opentopd
|
||||
```
|
||||
|
||||
## 下载源码方法二:
|
||||
```Brach
|
||||
# 下载源码
|
||||
|
||||
git clone https://github.com/sirpdboy/luci-theme-opentopd package/luci-theme-opentopd
|
||||
|
||||
make menuconfig
|
||||
```
|
||||
## 配置菜单
|
||||
```Brach
|
||||
make menuconfig
|
||||
# 找到 LuCI -> Themes, 选择 luci-theme-opentopd, 保存后退出。
|
||||
```
|
||||
## 编译
|
||||
```Brach
|
||||
# 编译固件
|
||||
make package/luci-app-opentopd/{clean,compile} V=s
|
||||
```
|
||||
![xm1](doc/登陆页面.jpg)
|
||||
![xm2](doc/实时监控.jpg)
|
||||
![xm3](doc/手机画面.jpg)
|
||||
|
||||
### 你可以随意使用其中的源码,但请注明出处。
|
||||
|
||||
# My other project
|
||||
网络速度测试 :https://github.com/sirpdboy/NetSpeedTest
|
||||
|
||||
定时关机重启 : https://github.com/sirpdboy/luci-app-autopoweroff
|
||||
|
||||
opentopd主题 : https://github.com/sirpdboy/luci-theme-opentopd
|
||||
|
||||
btmob 主题: https://github.com/sirpdboy/luci-theme-btmob
|
||||
|
||||
系统高级设置 : https://github.com/sirpdboy/luci-app-advanced
|
||||
|
||||
|
||||
## 说明 [![](https://img.shields.io/badge/-说明-F5F5F5.svg)](#说明-)
|
||||
|
||||
源码来源:https://github.com/sirpdboy/luci-theme-opentopd
|
||||
|
||||
|
||||
|
||||
## 捐助 [![](https://img.shields.io/badge/-捐助-F5F5F5.svg)](#捐助-)
|
||||
|
||||
**如果你觉得此项目对你有帮助,请捐助我们,以使项目能持续发展,更加完善。··请作者喝杯咖啡~~~**
|
||||
|
||||
**你们的支持就是我的动力!**
|
||||
|
||||
### 捐助方式
|
||||
|
||||
| <img src="https://img.shields.io/badge/-支付宝-F5F5F5.svg" href="#赞助支持本项目-" height="25" alt="图飞了😂"/> | <img src="https://img.shields.io/badge/-微信-F5F5F5.svg" height="25" alt="图飞了😂" href="#赞助支持本项目-"/> |
|
||||
| :-----------------: | :-------------: |
|
||||
|<img src="https://img.vim-cn.com/fd/8e2793362ac3510094961b04407beec569b2b4.png" width="150" height="150" alt="图飞了😂" href="#赞助支持本项目-"/>|<img src="https://img.vim-cn.com/c7/675730a88accebf37a97d9e84e33529322b6e9.png" width="150" height="150" alt="图飞了😂" href="#赞助支持本项目-"/>|
|
||||
|
||||
<a href="#readme">
|
||||
<img src="https://img.shields.io/badge/-返回顶部-orange.svg" alt="图飞了😂" title="返回顶部" align="right"/>
|
||||
</a>
|
||||
|
||||
###### [解决 Github 网页上图片显示失败的问题](https://blog.csdn.net/qq_38232598/article/details/91346392)
|
||||
|
||||
[![](https://img.shields.io/badge/TG群-点击加入-FFFFFF.svg)](https://t.me/joinchat/AAAAAEpRF88NfOK5vBXGBQ)
|
||||
|
BIN
luci-theme-opentopd/doc/合并图.jpg
Normal file
After Width: | Height: | Size: 260 KiB |
BIN
luci-theme-opentopd/doc/实时监控.jpg
Normal file
After Width: | Height: | Size: 178 KiB |
BIN
luci-theme-opentopd/doc/手机画面.jpg
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
luci-theme-opentopd/doc/登陆界面2.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
luci-theme-opentopd/doc/登陆页面.jpg
Normal file
After Width: | Height: | Size: 400 KiB |
BIN
luci-theme-opentopd/doc/网络共享.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
luci-theme-opentopd/doc/预览界面.jpg
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
luci-theme-opentopd/doc/高级设置.jpg
Normal file
After Width: | Height: | Size: 100 KiB |
@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Opentopd is a clean HTML5 theme for LuCI. It is based on luci-theme-material and Argon Template
|
||||
* https://github.com/sirpdboy/luci-theme-opentopd
|
||||
*
|
||||
* Copyright 2020-2021 sirpdboy
|
||||
* luci-theme-material:
|
||||
* https://github.com/LuttyYang/luci-theme-material/
|
||||
*
|
||||
*/
|
||||
@font-face{font-family:'sirpdboy';src:url('../fonts/sirpdboy.eot?uaho9q');src:url('../fonts/sirpdboy.eot?uaho9q#iefix') format('embedded-opentype'),url('../fonts/sirpdboy.ttf?uaho9q') format('truetype'),url('../fonts/sirpdboy.woff?uaho9q') format('woff'),url('../fonts/sirpdboy.svg?uaho9q#sirpdboy') format('svg');font-weight:normal;font-style:normal;font-display:block}[class^="icon-"],[class*=" icon-"]{font-family:'sirpdboy' !important;speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-vpn:before{content:"\e900"}.icon-info:before{content:"\e901"}.icon-docker:before{content:"\e902"}.icon-pasword:before{content:"\e90c"}.icon-service:before{content:"\e904"}.icon-nas:before{content:"\e905"}.icon-home:before{content:"\e906"}.icon-password2:before{content:"\e90d"}.icon-network:before{content:"\e908"}.icon-user:before{content:"\e909"}.icon-cheveron-right:before{content:"\e90a"}.icon-system:before{content:"\e90b"}.icon-Network:before{content:"\e911"}.icon-cheveron-down:before{content:"\e20b"}.icon-cheveron-up:before{content:"\e20a"}.icon-spinner:before{content:"\e903"}.icon-spinner2:before{content:"\e603"}.icon-menu:before{content:"\e20e"}.icon-exit:before{content:"\e907"}.icon-checkmark:before{content:"\e90e"}.icon-cancel:before{content:"\e90f"}.icon-stats:before{content:"\e910"}.icon-question:before{content:"\f059"}
|