luci-app-clash: sync with upstream source

This commit is contained in:
CN_SZTL 2020-07-05 20:02:07 +08:00
parent 24372890a9
commit 39b956115e
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
112 changed files with 2834 additions and 92935 deletions

View File

@ -1,13 +1,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-clash
PKG_VERSION:=1.7.3.2
PKG_VERSION:=v1.7.5.4
PKG_MAINTAINER:=frainzy1477
include $(INCLUDE_DIR)/package.mk
define Package/luci-app-clash
define Package/$(PKG_NAME)
SECTION:=luci
CATEGORY:=LuCI
SUBMENU:=3. Applications
@ -17,7 +16,7 @@ define Package/luci-app-clash
MAINTAINER:=frainzy1477
endef
define Package/luci-app-clash/description
define Package/$(PKG_NAME)/description
Luci Interface for clash.
endef
@ -68,7 +67,7 @@ if [ -z "$${IPKG_INSTROOT}" ]; then
mv /usr/share/clash/config/sub/config.yaml /usr/share/clashbackup/config.bak1 2>/dev/null
mv /usr/share/clash/config/upload/config.yaml /usr/share/clashbackup/config.bak2 2>/dev/null
mv /usr/share/clash/config/custom/config.yaml /usr/share/clashbackup/config.bak3 2>/dev/null
mv /usr/share/clash/rule.yaml /usr/share/clashbackup/rule.bak 2>/dev/null
fi
exit 0
@ -83,8 +82,8 @@ if [ -z "$${IPKG_INSTROOT}" ]; then
mv /usr/share/clashbackup/config.bak1 /usr/share/clash/config/sub/config.yaml 2>/dev/null
mv /usr/share/clashbackup/config.bak2 /usr/share/clash/config/upload/config.yaml 2>/dev/null
mv /usr/share/clashbackup/config.bak3 /usr/share/clash/config/custom/config.yaml 2>/dev/null
mv /usr/share/clashbackup/rule.bak /usr/share/clash/rule.yaml 2>/dev/null
/etc/init.d/clash disable 2>/dev/null
uci set clash.config.p_mode="Rule" && uci set clash.config.auto_clear_log="1" && uci set clash.config.auto_update="1" && uci set clash.config.auto_update_time="12" && uci set clash.config.clear_time="12" && uci commit clash 2>/dev/null
fi
exit 0
@ -93,7 +92,15 @@ endef
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/provider
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/config
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/dns
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/client
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/game
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/geoip
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/logs
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/clash/update
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/clash
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n
$(INSTALL_DIR) $(1)/etc/init.d
@ -112,7 +119,7 @@ define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/etc/clash/dtun
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_DIR) $(1)/usr/share/clashbackup
$(INSTALL_DIR) $(1)/usr/share/clash/provider
$(INSTALL_DIR) $(1)/usr/share/clash/create
$(INSTALL_DIR) $(1)/etc/clash/provider
$(INSTALL_DIR) $(1)/etc/clash/proxyprovider
$(INSTALL_DIR) $(1)/etc/clash/ruleprovider
@ -124,36 +131,38 @@ define Package/$(PKG_NAME)/install
$(INSTALL_BIN) ./root/etc/init.d/clash $(1)/etc/init.d/clash
$(INSTALL_CONF) ./root/etc/config/clash $(1)/etc/config/clash
$(INSTALL_CONF) ./root/etc/clash/Country.mmdb $(1)/etc/clash/
$(INSTALL_CONF) ./root/etc/clash/ruleprovider/* $(1)/etc/clash/ruleprovider/
$(INSTALL_BIN) ./root/usr/share/clash/provider/* $(1)/usr/share/clash/provider/
$(INSTALL_BIN) ./root/usr/share/clash/*.sh $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/dns.yaml $(1)/usr/share/clash/
$(INSTALL_CONF) ./root/etc/clash/Country.mmdb $(1)/etc/clash
$(INSTALL_BIN) ./root/usr/share/clash/create/* $(1)/usr/share/clash/create
$(INSTALL_BIN) ./root/usr/share/clash/*.sh $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/rules/g_rules/Steam.rules $(1)/usr/share/clash/rules/g_rules
$(INSTALL_BIN) ./root//usr/share/clash/rules/rules.list $(1)/usr/share/clash/rules
$(INSTALL_BIN) ./root/usr/share/clash/tundns.yaml $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/custom_rule.yaml $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/luci_version $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/server.list $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/clash_real.txt $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/logstatus_check $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/clash.txt $(1)/usr/share/clash/
$(INSTALL_BIN) ./root/usr/share/clash/luci_version $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/rule.yaml $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/server.list $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/clash_real.txt $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/logstatus_check $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/clash.txt $(1)/usr/share/clash
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/index.html $(1)/etc/clash/dashboard/
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.24f6f4760d8c66faaa74.css $(1)/etc/clash/dashboard/
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/img/ffac0fa1d89f15922b4594863b8b32e9.png $(1)/etc/clash/dashboard/img/
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/1.bundle.24f6f4760d8c66faaa74.min.js $(1)/etc/clash/dashboard/js/
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/bundle.24f6f4760d8c66faaa74.min.js $(1)/etc/clash/dashboard/js/
$(INSTALL_BIN) ./root/usr/share/clash/yacd/* $(1)/usr/share/clash/yacd/
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/index.html $(1)/etc/clash/dashboard
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.4563da698059d88c08dc.css $(1)/etc/clash/dashboard
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/img/ffac0fa1d89f15922b4594863b8b32e9.png $(1)/etc/clash/dashboard/img
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/1.bundle.4563da698059d88c08dc.min.js $(1)/etc/clash/dashboard/js
$(INSTALL_BIN) ./root/usr/share/clash/dashboard/js/bundle.4563da698059d88c08dc.min.js $(1)/etc/clash/dashboard/js
$(INSTALL_BIN) ./root/usr/share/clash/yacd/* $(1)/usr/share/clash/yacd
$(INSTALL_DATA) ./luasrc/clash.lua $(1)/usr/lib/lua/luci/
$(INSTALL_DATA) ./luasrc/controller/*.lua $(1)/usr/lib/lua/luci/controller/
$(INSTALL_DATA) ./luasrc/model/cbi/clash/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/
$(INSTALL_DATA) ./luasrc/model/cbi/clash/provider/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/provider/
$(INSTALL_DATA) ./luasrc/view/clash/* $(1)/usr/lib/lua/luci/view/clash/
$(INSTALL_DATA) ./po/zh-cn/clash.zh-cn.lmo $(1)/usr/lib/lua/luci/i18n/
$(INSTALL_DATA) ./luasrc/clash.lua $(1)/usr/lib/lua/luci
$(INSTALL_DATA) ./luasrc/controller/*.lua $(1)/usr/lib/lua/luci/controller
$(INSTALL_DATA) ./luasrc/model/cbi/clash/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash
$(INSTALL_DATA) ./luasrc/model/cbi/clash/config/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/config
$(INSTALL_DATA) ./luasrc/model/cbi/clash/client/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/client
$(INSTALL_DATA) ./luasrc/model/cbi/clash/dns/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/dns
$(INSTALL_DATA) ./luasrc/model/cbi/clash/game/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/game
$(INSTALL_DATA) ./luasrc/model/cbi/clash/geoip/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/geoip
$(INSTALL_DATA) ./luasrc/model/cbi/clash/logs/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/logs
$(INSTALL_DATA) ./luasrc/model/cbi/clash/update/*.lua $(1)/usr/lib/lua/luci/model/cbi/clash/update
$(INSTALL_DATA) ./luasrc/view/clash/* $(1)/usr/lib/lua/luci/view/clash
$(INSTALL_DATA) ./po/zh-cn/clash.zh-cn.lmo $(1)/usr/lib/lua/luci/i18n
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

View File

@ -16,45 +16,42 @@ function index()
page.acl_depends = {"luci-app-clash"}
entry({"admin", "services", "clash", "overview"},cbi("clash/overview"),_("Overview"), 10).leaf = true
entry({"admin", "services", "clash", "client"},cbi("clash/client"),_("Client"), 20).leaf = true
entry({"admin", "services", "clash", "client"},cbi("clash/client/client"),_("Client"), 20).leaf = true
entry({"admin", "services", "clash", "config"}, firstchild(),_("Config"), 25)
entry({"admin", "services", "clash", "config", "import"},cbi("clash/import"),_("Import Config"), 25).leaf = true
entry({"admin", "services", "clash", "config", "config"},cbi("clash/config"),_("Select Config"), 30).leaf = true
entry({"admin", "services", "clash", "config", "import"},cbi("clash/config/import"),_("Import Config"), 25).leaf = true
entry({"admin", "services", "clash", "config", "config"},cbi("clash/config/config"),_("Select Config"), 30).leaf = true
entry({"admin", "services", "clash", "config", "create"},cbi("clash/config/create"),_("Create Config"), 35).leaf = true
entry({"admin", "services", "clash", "proxyprovider"},cbi("clash/config/proxy_provider"), nil).leaf = true
entry({"admin", "services", "clash", "servers"},cbi("clash/config/servers-config"), nil).leaf = true
entry({"admin", "services", "clash", "ruleprovider"},cbi("clash/config/rule_provider"), nil).leaf = true
entry({"admin", "services", "clash", "rules"},cbi("clash/config/rules"), nil).leaf = true
entry({"admin", "services", "clash", "pgroups"},cbi("clash/config/groups"), nil).leaf = true
entry({"admin", "services", "clash", "rulemanager"},cbi("clash/config/ruleprovider_manager"), nil).leaf = true
entry({"admin", "services", "clash", "config", "create"},cbi("clash/create"),_("Standard Config"), 35).leaf = true
entry({"admin", "services", "clash", "servers"},cbi("clash/servers-config"), nil).leaf = true
entry({"admin", "services", "clash", "provider"},cbi("clash/provider-config"), nil).leaf = true
entry({"admin", "services", "clash", "groups"},cbi("clash/groups"), nil).leaf = true
entry({"admin", "services", "clash", "config", "providers"},cbi("clash/provider/providers"),_("Provider Config"), 40).leaf = true
entry({"admin", "services", "clash", "proxyprovider"},cbi("clash/provider/proxy_provider"), nil).leaf = true
entry({"admin", "services", "clash", "ruleprovider"},cbi("clash/provider/rule_provider"), nil).leaf = true
entry({"admin", "services", "clash", "rules"},cbi("clash/provider/rules"), nil).leaf = true
entry({"admin", "services", "clash", "pgroups"},cbi("clash/provider/groups"), nil).leaf = true
entry({"admin", "services", "clash", "settings"}, firstchild(),_("Settings"), 50)
entry({"admin", "services", "clash", "settings", "port"},cbi("clash/port"),_("Proxy Ports"), 60).leaf = true
entry({"admin", "services", "clash", "settings", "dns"},cbi("clash/dns"),_("DNS Settings"), 70).leaf = true
entry({"admin", "services", "clash", "settings", "geoip"},cbi("clash/geoip"),_("Update GeoIP"), 80).leaf = true
entry({"admin", "services", "clash", "settings", "list"},cbi("clash/list"),_("Custom List"), 90).leaf = true
entry({"admin", "services", "clash", "settings", "grules"},cbi("clash/game-settings"),_("Game Rules"), 91).dependent = false
entry({"admin", "services", "clash", "g-rules"},cbi("clash/game-rule"), nil).leaf = true
entry({"admin", "services", "clash", "settings"}, firstchild(),_("Settings"), 40)
entry({"admin", "services", "clash", "settings", "port"},cbi("clash/dns/port"),_("Proxy Ports"), 60).leaf = true
entry({"admin", "services", "clash", "settings", "geoip"},cbi("clash/geoip/geoip"),_("Update GeoIP"), 80).leaf = true
entry({"admin", "services", "clash", "settings", "grules"},cbi("clash/game/game-settings"),_("Game Rules"), 91).dependent = false
entry({"admin", "services", "clash", "g-rules"},cbi("clash/game/game-rule"), nil).leaf = true
entry({"admin", "services", "clash", "settings", "other"},cbi("clash/other"),_("Other Settings"), 92).leaf = true
entry({"admin", "services", "clash", "ip-rules"},cbi("clash/ip-rules"), nil).leaf = true
entry({"admin", "services", "clash", "ip-rules"},cbi("clash/config/ip-rules"), nil).leaf = true
entry({"admin", "services", "clash", "settings", "dns"},firstchild(),_("DNS Settings"), 65)
entry({"admin", "services", "clash", "settings", "dns", "dns"},cbi("clash/dns/dns"),_("Clash DNS"), 70).leaf = true
entry({"admin", "services", "clash", "settings", "dns", "advance"},cbi("clash/dns/advance"),_("Advance DNS"), 75).leaf = true
entry({"admin", "services", "clash", "update"},cbi("clash/update/update"),_("Update"), 45).leaf = true
entry({"admin", "services", "clash", "log"},cbi("clash/logs/log"),_("Log"), 50).leaf = true
entry({"admin","services","clash","status"},call("action_status")).leaf=true
entry({"admin", "services", "clash", "log"},cbi("clash/log"),_("Log"), 150).leaf = true
entry({"admin", "services", "clash", "update"},cbi("clash/update"),_("Update"), 160).leaf = true
entry({"admin","services","clash","check_status"},call("check_status")).leaf=true
entry({"admin", "services", "clash", "ping"}, call("act_ping")).leaf=true
entry({"admin", "services", "clash", "readlog"},call("action_read")).leaf=true
entry({"admin","services","clash", "status"},call("action_status")).leaf=true
entry({"admin", "services", "clash", "check"}, call("check_update_log")).leaf=true
entry({"admin", "services", "clash", "doupdate"}, call("do_update")).leaf=true
entry({"admin", "services", "clash", "start"}, call("do_start")).leaf=true
@ -67,12 +64,28 @@ function index()
entry({"admin", "services", "clash", "conf"},call("action_conf")).leaf=true
entry({"admin", "services", "clash", "update_config"},call("action_update")).leaf=true
entry({"admin", "services", "clash", "game_rule"},call("action_update_rule")).leaf=true
entry({"admin", "services", "clash", "ruleproviders"},call("action_update_rule_providers")).leaf=true
entry({"admin", "services", "clash", "ping_check"},call("action_ping_status")).leaf=true
end
local fss = require "luci.clash"
local function download_rule_provider()
local filename = luci.http.formvalue("filename")
local status = luci.sys.call(string.format('/usr/share/clash/create/clash_rule_provider.sh "%s" >/dev/null 2>&1',filename))
return status
end
function action_update_rule_providers()
luci.http.prepare_content("application/json")
luci.http.write_json({
rulep = download_rule_provider();
})
end
local function uhttp_port()
local uhttp_port = luci.sys.exec("uci get uhttpd.main.listen_http |awk -F ':' '{print $NF}'")
if uhttp_port ~= "80" then
@ -193,6 +206,14 @@ local function new_clashtun_core_version()
return luci.sys.exec("sed -n 1p /usr/share/clash/new_clashtun_core_version")
end
local function check_dtun_core()
return luci.sys.call(string.format("sh /usr/share/clash/check_dtun_core_version.sh"))
end
local function new_dtun_core()
return luci.sys.exec("sed -n 1p /usr/share/clash/new_clashdtun_core_version")
end
local function e_mode()
return luci.sys.exec("egrep '^ {0,}enhanced-mode' /etc/clash/config.yaml |grep enhanced-mode: |awk -F ': ' '{print $2}'")
end
@ -242,7 +263,12 @@ end
local function dtun_core()
if nixio.fs.access("/etc/clash/dtun/clash") then
return luci.sys.exec("/etc/clash/dtun/clash -v 2>/dev/null |awk -F ' ' '{print $2}'")
local tun=luci.sys.exec("/etc/clash/dtun/clash -v 2>/dev/null |awk -F ' ' '{print $2}'")
if tun ~= "" then
return luci.sys.exec("/etc/clash/dtun/clash -v 2>/dev/null |awk -F ' ' '{print $2}'")
else
return luci.sys.exec("sed -n 1p /usr/share/clash/dtun_core_version")
end
else
return "0"
end
@ -312,6 +338,8 @@ function check_status()
new_clashr_core_version = new_clashr_core_version(),
clash_core = clash_core(),
clashr_core = clashr_core(),
check_dtun_core = check_dtun_core(),
new_dtun_core = new_dtun_core(),
clashtun_core = clashtun_core(),
dtun_core = dtun_core(),
new_core_version = new_core_version(),
@ -329,6 +357,11 @@ function action_status()
localip = localip(),
dash_port = dash_port(),
current_version = current_version(),
new_dtun_core = new_dtun_core(),
new_core_version = new_core_version(),
new_clashtun_core_version =new_clashtun_core_version(),
new_version = new_version(),
new_clashr_core_version = new_clashr_core_version(),
clash_core = clash_core(),
clashr_core = clashr_core(),
dtun_core = dtun_core(),

View File

@ -1,3 +1,4 @@
local clash = "clash"
local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local HTTP = require "luci.http"
@ -6,41 +7,67 @@ local UTIL = require "luci.util"
local fs = require "luci.clash"
local uci = require "luci.model.uci".cursor()
local s, o, krk, z, r
local clash = "clash"
local http = luci.http
font_blue = [[<font color="blue">]]
font_off = [[</font>]]
bold_on = [[<strong>]]
bold_off = [[</strong>]]
krk = Map(clash)
s = krk:section(TypedSection, "clash", translate("Provider Config"))
s = krk:section(TypedSection, "clash", translate("Create Config"))
s.anonymous = true
krk.pageaction = false
--krk.pageaction = false
o = s:option(Flag, "provider_config", translate("Enable Create"))
o.default = 1
o.description = translate("Enable to create configuration")
o = s:option(Flag, "prox", translate("Use Proxy"))
o.description = translate("Use Proxy")
o = s:option(Flag, "ppro", translate("Use Proxy Provider"))
o.description = translate("Use Proxy Provider")
o = s:option(Flag, "rulprp", translate("Use Rule Provider"))
o.description = translate("Use Rule Provider")
o:depends("orul", 0)
o = s:option(Flag, "rul", translate("Use Rules"))
o.description = translate("Use Rules")
o:depends("orul", 0)
o = s:option(Flag, "orul", translate("Use Other Rules"))
o.description = translate("Use Other Rules")
o:depends("rul", 0)
o = s:option(Flag, "script", translate("Use Script"))
o.description = translate("Use Script")
o:depends("rul", 1)
o:depends("rulprp", 1)
o = s:option(Value, "name_tag")
o.title = translate("Config Name")
o.rmempty = true
o.description = translate("Give a name for your config")
cc = s:option(Flag, "same_tag", translate("Force Same Name"))
cc.default = 1
cc.description = translate("Enable to overwrite config file")
o = s:option(Button,"Manager")
o.title = translate("Rule Providers Manager")
o.inputtitle = translate("Rule Providers Manager")
o.inputstyle = "reload"
o.write = function()
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "rulemanager"))
end
local t = {
{Creat_Config, Apply, Delete_Groups, Delete_ProxyPro, Delete_RulePro,Delete_Rules}
{Creat_Config, Delete_Groups, Delete_ProxyPro, Delete_RulePro,Delete_Rules}
}
b = krk:section(Table, t)
@ -51,16 +78,16 @@ o.inputtitle = translate("Create Config")
o.inputstyle = "apply"
o.write = function()
krk.uci:commit("clash")
luci.sys.call("bash /usr/share/clash/provider/provider.sh >/dev/null 2>&1 &")
luci.sys.call("bash /usr/share/clash/create/create.sh >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash"))
end
o = b:option(Button,"Apply")
o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
o = b:option(Button,"Delete Severs")
o.inputtitle = translate("Delete Severs")
o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "servers", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
end
o = b:option(Button,"Delete_ProxyPro")
@ -69,7 +96,6 @@ o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "proxyprovider", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
end
o = b:option(Button,"Delete_RulePro")
@ -78,7 +104,6 @@ o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "ruleprovider", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
end
@ -88,7 +113,6 @@ o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "rules", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
end
o = b:option(Button,"Delete_Groups")
@ -97,11 +121,60 @@ o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "pgroups", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
-- [[ Proxies ]]--
s = krk:section(TypedSection, "servers", translate("Proxies"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.extedit = luci.dispatcher.build_url("admin/services/clash/servers/%s")
function s.create(...)
local sid = TypedSection.create(...)
if sid then
luci.http.redirect(s.extedit % sid)
return
end
end
o = s:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = s:option(DummyValue, "type", translate("Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "name", translate("Alias"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "server", translate("Server Address"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "port", translate("Server Port"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "server" ,translate("Latency"))
o.template="clash/ping"
o.width="10%"
-- [[ Groups Manage ]]--
x = krk:section(TypedSection, "pgroups", translate("Policy Groups"))
x.description = font_blue..bold_on..translate(" https://lancellc.gitbook.io/clash/clash-config-file/proxy-groups")..bold_off..font_off..' '
x.anonymous = true
x.addremove = true
x.sortable = true
@ -115,6 +188,13 @@ function x.create(...)
end
end
o = x:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = x:option(DummyValue, "type", translate("Group Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
@ -129,6 +209,7 @@ end
-- [[ Proxy-Provider Manage ]]--
z = krk:section(TypedSection, "proxyprovider", translate("Proxy Provider"))
z.description = font_blue..bold_on..translate(" https://lancellc.gitbook.io/clash/clash-config-file/proxy-provider")..bold_off..font_off..' '
z.anonymous = true
z.addremove = true
z.sortable = true
@ -142,6 +223,12 @@ function z.create(...)
end
end
o = z:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = z:option(DummyValue, "name", translate("Provider Name"))
function o.cfgvalue(...)
@ -155,10 +242,9 @@ end
-- [[ Rule-Provider Manage ]]--
r = krk:section(TypedSection, "ruleprovider", translate("Rule Provider"))
r.description = font_blue..bold_on..translate(" https://lancellc.gitbook.io/clash/clash-config-file/rule-provider")..bold_off..font_off..' '
r.anonymous = true
r.addremove = true
r.sortable = true
@ -172,6 +258,13 @@ function r.create(...)
end
end
o = r:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = r:option(DummyValue, "name", translate("Provider Name"))
function o.cfgvalue(...)
@ -191,6 +284,7 @@ end
-- [[ Rule Manage ]]--
q = krk:section(TypedSection, "rules", translate("Rules"))
q.description = font_blue..bold_on..translate(" https://lancellc.gitbook.io/clash/clash-config-file/rules")..bold_off..font_off..' '
q.anonymous = true
q.addremove = true
q.sortable = true
@ -204,6 +298,13 @@ function q.create(...)
end
end
o = q:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = q:option(DummyValue, "type", translate("Rule Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
@ -225,11 +326,11 @@ m = Map("clash")
y = m:section(TypedSection, "clash" , translate("Script"))
y.anonymous = true
y.addremove=false
m.pageaction = false
local script="/usr/share/clash/provider/script.yaml"
local script="/usr/share/clash/create/script.yaml"
sev = y:option(TextValue, "scriptt")
sev.description = translate("NB: Set Clash Mode to Script if want to use")
sev.description =translate("NB: Set Clash Mode to Script if want to use")..font_blue..bold_on..translate(" https://lancellc.gitbook.io/clash/clash-config-file/script")..bold_off..font_off..' '
sev.rows = 10
sev.wrap = "off"
sev.cfgvalue = function(self, section)
@ -239,13 +340,47 @@ sev.write = function(self, section, value)
NXFS.writefile(script, value:gsub("\r\n", "\n"))
end
o = y:option(Button,"Apply")
o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
l = Map("clash")
v = l:section(TypedSection, "clash" , translate("Other Rules"))
v.anonymous = true
v.addremove=false
o = v:option(Value, "rule_url")
o.title = translate("Custom Rule Url")
o.description = translate("Insert your custom rule Url and click download")
o.rmempty = true
o = v:option(Button,"rule_update")
o.title = translate("Download Rule")
o.inputtitle = translate("Download Rule")
o.description = translate("Download Rule")
o.inputstyle = "reload"
o.write = function()
m.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
uci:commit("clash")
luci.sys.call("bash /usr/share/clash/rule.sh >>/usr/share/clash/clash.txt >/dev/null 2>&1 &")
end
return krk,m
local rule = "/usr/share/clash/rule.yaml"
sev = v:option(TextValue, "rule")
sev.description = translate("NB: Attention to Proxy Group and Rule when making changes to this section")
sev.rows = 20
sev.wrap = "off"
sev.cfgvalue = function(self, section)
return NXFS.readfile(rule) or ""
end
sev.write = function(self, section, value)
NXFS.writefile(rule, value:gsub("\r\n", "\n"))
end
o = v:option(Button,"del_rule")
o.inputtitle = translate("Delete Rule")
o.write = function()
SYS.call("rm -rf /usr/share/clash/rule.yaml >/dev/null 2>&1 &")
end
krk:append(Template("clash/list"))
return krk,m,l

View File

@ -9,7 +9,7 @@ local sid = arg[1]
m = Map(clash, translate("Edit Group"))
m.pageaction = false
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/providers")
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/create")
if m.uci:get(clash, sid) ~= "pgroups" then
luci.http.redirect(m.redirect)
return
@ -49,13 +49,19 @@ o:depends("type", "load-balance")
o = s:option(DynamicList, "other_group", translate("Other Group"))
o.rmempty = true
o.description = translate("Proxy Groups Must Exist In Rule")
o:value("", translate("None"))
o:value("ALL", translate("All Servers"))
uci:foreach("clash", "pgroups",
function(s)
if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(clash, sid, "name") then
o:value(s.name)
end
end)
uci:foreach("clash", "servers",
function(s)
if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(clash, sid, "name") then
o:value(s.name)
end
end)
o:value("DIRECT")
o:value("REJECT")
@ -71,8 +77,8 @@ o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
o.write = function()
m.uci:commit("clash")
sys.call("/usr/share/clash/provider/pgroups.sh start >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
sys.call("/usr/share/clash/create/pgroups.sh start >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Return")

View File

@ -27,9 +27,11 @@ o:value("DST-PORT", translate("DST-PORT"))
o:value("SRC-PORT", translate("SRC-PORT"))
o:value("SRC-IP-CIDR", translate("SRC-IP-CIDR"))
o:value("IP-CIDR", translate("IP-CIDR"))
o:value("IP-CIDR6", translate("IP-CIDR6"))
o:value("DOMAIN", translate("DOMAIN"))
o:value("DOMAIN-KEYWORD", translate("DOMAIN-KEYWORD"))
o:value("DOMAIN-SUFFIX", translate("DOMAIN-SUFFIX"))
o:value("GEOIP", translate("GEOIP"))
o = s:option(ListValue, "pgroup", translate("Select Proxy Group"))
@ -50,5 +52,8 @@ o.rmempty = false
o = s:option(Flag, "res", translate("No Resolve"))
o.default = 0
o:depends("type", "IP-CIDR")
o:depends("type", "IP-CIDR6")
o:depends("type", "GEOIP")
return m

View File

@ -22,7 +22,7 @@ end
m = Map(clash, translate("Edit Proxy Provider"))
m.pageaction = false
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/providers")
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/create")
if m.uci:get(clash, sid) ~= "proxyprovider" then
luci.http.redirect(m.redirect)
return
@ -144,7 +144,7 @@ o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
o.write = function()
m.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Return")

View File

@ -27,7 +27,7 @@ end
m = Map(clash, translate("Edit Rule Provider"))
m.pageaction = false
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/providers")
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/create")
if m.uci:get(clash, sid) ~= "ruleprovider" then
luci.http.redirect(m.redirect)
return
@ -52,7 +52,7 @@ o.rmempty = false
o.description = translate("ipcidr # or domain")
o:value("ipcidr")
o:value("domain")
o:value("classical")
o = s:option(FileUpload, "",translate("Upload Provider File"))
o.title = translate("Provider File")
@ -134,7 +134,7 @@ o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
o.write = function()
m.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Return")

View File

@ -0,0 +1,96 @@
local f, s, o
local clash = "clash"
local uci = luci.model.uci.cursor()
local fs = require "nixio.fs"
local sys = require "luci.sys"
local sid = arg[1]
local http = luci.http
local fss = require "luci.clash"
local NXFS = require "nixio.fs"
local HTTP = require "luci.http"
local DISP = require "luci.dispatcher"
local UTIL = require "luci.util"
m = Map("clash", translate("Rule Providers List"))
m.reset = false
m.submit = false
local t = {
{Apply}
}
a = m:section(Table, t)
o = a:option(Button, "Apply")
o.inputtitle = translate("Back to Overview")
o.inputstyle = "reset"
o.write = function()
HTTP.redirect(DISP.build_url("admin", "services", "clash", "config", "create"))
end
sys.call("awk -F ',' '{print $4}' /usr/share/clash/create/rule_provider.list > /tmp/rule_providers 2>/dev/null")
file = io.open("/tmp/rule_providers", "r");
local e={},a,o,t
a=nixio.fs.access("/tmp/rule_providers")
if a then
for o in file:lines() do
table.insert(e,o)
end
for t,o in ipairs(e) do
e[t]={}
e[t].num=string.format(t)
e[t].name=string.sub(luci.sys.exec(string.format("grep -F ',%s' /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $1}' 2>/dev/null",o)),1,-2)
e[t].behaviour=string.sub(luci.sys.exec(string.format("grep -F ',%s' /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $2}' 2>/dev/null",o)),1,-2)
e[t].filename=string.sub(luci.sys.exec(string.format("grep -F '%s,' /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $4}' 2>/dev/null",o)),1,-2)
if e[t].filename == "" then
e[t].filename=o
end
RULE_FILE="/etc/clash/ruleprovider/".. e[t].filename
if fss.mtime(RULE_FILE) then
e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fss.mtime(RULE_FILE))
else
e[t].mtime="/"
end
if fss.isfile(RULE_FILE) then
e[t].exist=translate("Exist")
else
e[t].exist=translate("Not Exist")
end
e[t].remove=0
end
end
file:close()
f=Form("filelist")
tb=f:section(Table,e)
nu=tb:option(DummyValue,"num",translate("Order Number"))
st=tb:option(DummyValue,"exist",translate("State"))
nm=tb:option(DummyValue,"name",translate("Rule Name"))
tp=tb:option(DummyValue,"behaviour",translate("Type"))
fm=tb:option(DummyValue,"filename",translate("File Name"))
mt=tb:option(DummyValue,"mtime",translate("Update Time"))
btnis=tb:option(DummyValue,"filename",translate("Download Rule"))
btnis.template="clash/rulep"
btnrm=tb:option(Button,"remove",translate("Remove"))
btnrm.render=function(e,t,a)
e.inputstyle="reset"
Button.render(e,t,a)
end
btnrm.write=function(a,t)
local a=fs.unlink("/etc/clash/ruleprovider/"..e[t].filename)
HTTP.redirect(luci.dispatcher.build_url("admin", "services", "clash", "rulemanager"))
end
return m, f

View File

@ -8,7 +8,7 @@ local sid = arg[1]
m = Map(clash, translate("Edit Rules"))
--m.pageaction = false
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/providers")
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/create")
if m.uci:get(clash, sid) ~= "rules" then
luci.http.redirect(m.redirect)
return
@ -28,6 +28,7 @@ o:value("DST-PORT", translate("DST-PORT"))
o:value("SRC-PORT", translate("SRC-PORT"))
o:value("SRC-IP-CIDR", translate("SRC-IP-CIDR"))
o:value("IP-CIDR", translate("IP-CIDR"))
o:value("IP-CIDR6", translate("IP-CIDR6"))
o:value("DOMAIN", translate("DOMAIN"))
o:value("DOMAIN-KEYWORD", translate("DOMAIN-KEYWORD"))
o:value("DOMAIN-SUFFIX", translate("DOMAIN-SUFFIX"))
@ -68,20 +69,14 @@ o:depends("type", "DOMAIN")
o:depends("type", "DOMAIN-KEYWORD")
o:depends("type", "DOMAIN-SUFFIX")
o:depends("type", "GEOIP")
o:depends("type", "IP-CIDR6")
o = s:option(Flag, "res", translate("No Resolve"))
o.default = 0
--o:value("RULE-SET", translate("RULE-SET"))
o:depends("type", "DST-PORT")
o:depends("type", "SRC-PORT")
o:depends("type", "SRC-IP-CIDR")
o:depends("type", "IP-CIDR")
o:depends("type", "DOMAIN")
o:depends("type", "DOMAIN-KEYWORD")
o:depends("type", "DOMAIN-SUFFIX")
o:depends("type", "IP-CIDR6")
o:depends("type", "GEOIP")
local t = {
{Apply, Return}
}
@ -93,8 +88,8 @@ o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
o.write = function()
m.uci:commit("clash")
sys.call("/usr/share/clash/provider/rules.sh start >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "providers"))
sys.call("/usr/share/clash/create/rules.sh start >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Return")

View File

@ -80,7 +80,7 @@ local obfs_ssr_list = {
}
m = Map(clash, translate("Edit Server"))
m.redirect = luci.dispatcher.build_url("admin/services/clash/create")
m.redirect = luci.dispatcher.build_url("admin/services/clash/config/create")
if m.uci:get(clash, sid) ~= "servers" then
luci.http.redirect(m.redirect)
return
@ -298,6 +298,11 @@ o:depends("obfs_vmess", "http")
o:depends("type", "socks5")
o:depends("type", "http")
o = s:option(Value, "servername", translate("Custom TLS Host"))
o.rmempty = true
o.placeholder = translate("example.com")
o:depends("obfs_vmess", "websocket")
-- [[ sni ]]--
o = s:option(Value, "sni", translate("sni"))
o.datatype = "host"
@ -306,12 +311,13 @@ o.rmempty = true
o:depends("type", "trojan")
-- [[ alpn ]]--
o = s:option(DynamicList, "alpn", translate("alpn"))
o.default = "http/1.1"
o:value("h2")
o:value("http/1.1")
o = s:option(Flag, "alpn_h2", translate("alpn-h2"))
o:depends("type", "trojan")
o = s:option(Flag, "alpn_http", translate("alpn-http/1.1"))
o:depends("type", "trojan")
local apply = luci.http.formvalue("cbi.apply")
if apply then
m.uci:commit("clash")

View File

@ -1,252 +0,0 @@
local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local HTTP = require "luci.http"
local DISP = require "luci.dispatcher"
local UTIL = require "luci.util"
local fs = require "luci.clash"
local uci = require "luci.model.uci".cursor()
local m, s, o, krk
local clash = "clash"
local http = luci.http
m = Map("clash")
s = m:section(TypedSection, "clash" , translate("Rule"))
s.anonymous = true
s.addremove=false
m.pageaction = false
o = s:option(Value, "rule_url")
o.title = translate("Custom Rule Url")
o.description = translate("Insert your custom rule Url and click download")
o.rmempty = true
o = s:option(Button,"rule_update")
o.title = translate("Download Rule")
o.inputtitle = translate("Download Rule")
o.description = translate("Download Rule")
o.inputstyle = "reload"
o.write = function()
uci:commit("clash")
luci.sys.call("bash /usr/share/clash/rule.sh >>/usr/share/clash/clash.txt >/dev/null 2>&1 &")
end
local rule = "/usr/share/clash/custom_rule.yaml"
sev = s:option(TextValue, "rule")
sev.description = translate("NB: Attention to Proxy Group and Rule when making changes to this section")
sev.rows = 20
sev.wrap = "off"
sev.cfgvalue = function(self, section)
return NXFS.readfile(rule) or ""
end
sev.write = function(self, section, value)
NXFS.writefile(rule, value:gsub("\r\n", "\n"))
end
o = s:option(Button,"del_rule")
o.inputtitle = translate("Delete Rule")
o.write = function()
SYS.call("rm -rf /usr/share/clash/custom_rule.yaml >/dev/null 2>&1 &")
end
krk = Map(clash)
s = krk:section(TypedSection, "clash", translate("Load Config"))
s.anonymous = true
cc = s:option(Flag, "create", translate("Enable Create"))
cc.default = 1
cc.description = translate("Enable to create configuration")
o = s:option(Value, "create_tag")
o.title = translate("Config Name")
o.rmempty = true
o.description = translate("Give a name for your config")
cc = s:option(Flag, "same_tag", translate("Force Same Name"))
cc.default = 1
cc.description = translate("Enable to overwrite config file")
o = s:option(ListValue, "loadservers", translate("Load Servers"))
o:value("1", translate("enabled"))
o:value("0", translate("disabled"))
o.description = translate("Enable to read servers")
o = s:option(ListValue, "loadgroups", translate("Load Groups"))
o:value("1", translate("enabled"))
o:value("0", translate("disabled"))
o.description = translate("Enable to read policy group")
o = s:option(ListValue, "loadprovider", translate("Load Provider"))
o:value("1", translate("enabled"))
o:value("0", translate("disabled"))
o.description = translate("Enable to read Proxy Provider")
local t = {
{Load_Config, Creat_Config, Apply, Delete_Severs, Delete_Groups}
}
b = krk:section(Table, t)
o = b:option(Button,"Load_Config")
o.inputtitle = translate("Load Config")
o.inputstyle = "apply"
o.write = function()
krk.uci:commit("clash")
luci.sys.call("bash /usr/share/clash/load.sh >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash"))
end
o = b:option(Button,"Creat_Config")
o.inputtitle = translate("Create Config")
o.inputstyle = "apply"
o.write = function()
krk.uci:commit("clash")
luci.sys.call("bash /usr/share/clash/proxy.sh >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash"))
end
o = b:option(Button,"Apply")
o.inputtitle = translate("Save & Apply")
o.inputstyle = "apply"
o.write = function()
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Delete_Severs")
o.inputtitle = translate("Delete Severs")
o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "servers", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Delete_Provider")
o.inputtitle = translate("Delete Provider")
o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "provider", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
o = b:option(Button,"Delete_Groups")
o.inputtitle = translate("Delete Groups")
o.inputstyle = "reset"
o.write = function()
krk.uci:delete_all("clash", "groups", function(s) return true end)
krk.uci:commit("clash")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash", "config", "create"))
end
s = krk:section(TypedSection, "servers", translate("Proxies"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.extedit = luci.dispatcher.build_url("admin/services/clash/servers/%s")
function s.create(...)
local sid = TypedSection.create(...)
if sid then
luci.http.redirect(s.extedit % sid)
return
end
end
o = s:option(DummyValue, "type", translate("Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "name", translate("Alias"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "server", translate("Server Address"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "port", translate("Server Port"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "server" ,translate("Latency"))
o.template="clash/ping"
o.width="10%"
-- [[ Proxy-Provider Manage ]]--
s = krk:section(TypedSection, "provider", translate("Proxy Provider"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.extedit = luci.dispatcher.build_url("admin/services/clash/provider/%s")
function s.create(...)
local sid = TypedSection.create(...)
if sid then
luci.http.redirect(s.extedit % sid)
return
end
end
o = s:option(DummyValue, "name", translate("Provider Name"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = s:option(DummyValue, "type", translate("Provider Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
r = krk:section(TypedSection, "groups", translate("Policy Groups"))
r.anonymous = true
r.addremove = true
s.sortable = false
r.template = "cbi/tblsection"
r.extedit = luci.dispatcher.build_url("admin/services/clash/groups/%s")
function r.create(...)
local sid = TypedSection.create(...)
if sid then
luci.http.redirect(r.extedit % sid)
return
end
end
o = r:option(DummyValue, "type", translate("Group Type"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
o = r:option(DummyValue, "name", translate("Group Name"))
function o.cfgvalue(...)
return Value.cfgvalue(...) or translate("None")
end
krk:append(Template("clash/list"))
return krk, m

View File

@ -1,4 +1,3 @@
local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local HTTP = require "luci.http"
@ -15,12 +14,12 @@ m.pageaction = false
s.anonymous = true
s.addremove=false
y = s:option(ListValue, "dnsforwader", translate("DNS Forwarding"))
y:value("0", translate("disabled"))
y:value("1", translate("enabled"))
y.description = translate("Set custom DNS forwarder in DHCP and DNS Settings and forward all dns traffic to clash")
y = s:option(ListValue, "dnscache", translate("DNS Cache"))
y:value("0", translate("disabled"))
y:value("1", translate("enabled"))
@ -31,27 +30,12 @@ y:value("0", translate("disabled"))
y:value("1", translate("enabled"))
y.description = translate("Enable udp traffic ,make sure your server support udp")
deldns = s:option(Flag, "delan", translate("Remove Lan DNS"))
deldns.description = translate("Remove Lan custom DNS Servers when client is disabled")
cdns = s:option(Flag, "culan", translate("Enable Lan DNS"))
cdns.default = 1
cdns.description = translate("Enabling will set custom DNS Servers for Lan")
dns = s:option(DynamicList, "landns", translate("Lan DNS servers"))
dns.description = translate("Set custom DNS Servers for Lan")
dns.datatype = "ipaddr"
dns.cast = "string"
dns:depends("culan", 1)
y = s:option(ListValue, "access_control", translate("Access Control"))
y:value("0", translate("disabled"))
y:value("1", translate("Whitelist IPs"))
y:value("2", translate("Blacklist Ips"))
y.description = translate("Whitelist or Blacklist IPs to use Clash ( Only support enhanced-mode: redir-host )")
o = s:option(DynamicList, "proxy_lan_ips", translate("Proxy Lan List"))
o.datatype = "ipaddr"
o.description = translate("Only selected IPs will be proxied")
@ -74,53 +58,6 @@ end)
o:depends("access_control", 2)
md = s:option(Flag, "tun_mode", translate("Tun Mode DNS"))
md.default = 0
md.description = translate("Enable Tun custom DNS and make sure you are using tun supported core")
md:depends("mode", 0)
y = s:option(ListValue, "ipv6", translate("Enable ipv6"))
y:value("0", translate("disabled"))
y:value("1", translate("enabled"))
y.description = translate("Allow ipv6 traffic through clash")
md = s:option(Flag, "mode", translate("Custom DNS"))
md.default = 1
md.description = translate("Enabling Custom DNS will Overwrite your config.yaml dns section")
md:depends("tun_mode", 0)
local dns = "/usr/share/clash/dns.yaml"
o = s:option(TextValue, "dns",translate("Modify yaml DNS"))
o.template = "clash/tvalue"
o.rows = 26
o.wrap = "off"
o.cfgvalue = function(self, section)
return NXFS.readfile(dns) or ""
end
o.write = function(self, section, value)
NXFS.writefile(dns, value:gsub("\r\n", "\n"))
end
o.description = translate("NB: press ENTER to create a blank line at the end of input.")
o:depends("mode", 1)
local dns2 = "/usr/share/clash/tundns.yaml"
o = s:option(TextValue, "dns2",translate("Modify Tun DNS"))
o.template = "clash/tvalue"
o.rows = 26
o.wrap = "off"
o.cfgvalue = function(self, section)
return NXFS.readfile(dns2) or ""
end
o.write = function(self, section, value)
NXFS.writefile(dns2, value:gsub("\r\n", "\n"))
end
o.description = translate("NB: press ENTER to create a blank line at the end of input.")
o:depends("tun_mode", 1)
o = s:option(Button, "Apply")
o.title = luci.util.pcdata(translate("Save & Apply"))
o.inputtitle = translate("Save & Apply")
@ -131,10 +68,8 @@ if luci.sys.call("pidof clash >/dev/null") == 0 then
SYS.call("/etc/init.d/clash restart >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash"))
else
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash" , "settings", "dns"))
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash" , "settings", "dns", "advance"))
end
end
return m
return m

View File

@ -0,0 +1,189 @@
local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local HTTP = require "luci.http"
local DISP = require "luci.dispatcher"
local UTIL = require "luci.util"
local uci = require("luci.model.uci").cursor()
local clash = "clash"
local http = luci.http
m = Map("clash")
s = m:section(TypedSection, "clash")
--m.pageaction = false
s.anonymous = true
s.addremove=false
y = s:option(Flag, "interf", translate("Interface Name"))
y.default = 1
y.description = translate("Enable Interface Name")
y = s:option(Value, "interf_name", translate("Set Interface Name"))
y.description = translate("Set Interface Name")
y:depends("interf", 1)
y = s:option(Flag, "tun_mode", translate("Tun Mode"))
y.default = 0
y.description = translate("Enable Tun and make sure you are using tun supported core")
y = s:option(ListValue, "stack", translate("Stack"))
y:value("system", translate("system"))
y:value("gvisor", translate("gvisor"))
y.description = translate("Select Stack Mode")
y:depends("tun_mode", 1)
y = s:option(Flag, "enable_dns", translate("Enable Clash DNS"))
y.default = 1
y.description = translate("Enable Clash DNS")
y = s:option(Value, "listen_port", translate("DNS Listen Port"))
y.description = translate("Set DNS Listen Port")
y.default = "5300"
y = s:option(DynamicList, "default_nameserver", translate("Default NameServer"))
y.description = translate("Default Nameserver List")
y = s:option(ListValue, "enhanced_mode", translate("Enhanced Mode"))
y:value("redir-host", translate("Redir Host"))
y:value("fake-ip", translate("Fake IP"))
y.description = translate("Select Enhanced Mode")
y = s:option(Value, "fake_ip_range", translate("Fake IP Range"))
y.description = translate("Set Fake IP Range")
y.default = "198.18.0.1/16"
y:depends("enhanced_mode", "fake-ip")
y = s:option(DynamicList, "fake_ip_filter", translate("Fake IP Filter"))
y.description = translate("Fake IP Filter List")
y.default = "*.lan"
y:depends("enhanced_mode", "fake-ip")
s = m:section(TypedSection, "dnshijack", translate("DNS Hijack"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.rmempty = false
o = s:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = s:option(ListValue, "type", translate("Protocol"))
o:value("none", translate("No Protocol"))
o:value("tcp://", translate("TCP"))
o:value("udp://", translate("UDP"))
o:value("tls://", translate("TLS"))
o:value("https://", translate("HTTPS"))
o.default = "none"
o.rempty = false
o = s:option(Value, "ip", translate("Address"))
o.placeholder = translate("Not Null")
o.datatype = "or(host, string)"
o.rmempty = true
o = s:option(Value, "port", translate("Port"))
o.datatype = "port"
o.rempty = true
s = m:section(TypedSection, "authentication", translate("Authentication"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.rmempty = false
o = s:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = s:option(Value, "username", translate("Username"))
o.placeholder = translate("Cannot be Empty")
o.rempty = true
o = s:option(Value, "password", translate("Password"))
o.placeholder = translate("Cannot be Empty")
o.rmempty = true
s = m:section(TypedSection, "hosts", translate("Hosts"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.rmempty = false
o = s:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = s:option(Value, "address", translate("Address"))
o.placeholder = translate("Cannot be Empty")
o.rempty = true
o = s:option(Value, "ip", translate("IP"))
o.placeholder = translate("Cannot be Empty")
o.rmempty = true
s = m:section(TypedSection, "dnsservers", translate("Nameservers & Fallback"))
s.anonymous = true
s.addremove = true
s.sortable = false
s.template = "cbi/tblsection"
s.rmempty = false
o = s:option(Flag, "enabled", translate("Enable"))
o.rmempty = false
o.default = o.enabled
o.cfgvalue = function(...)
return Flag.cfgvalue(...) or "1"
end
o = s:option(ListValue, "ser_type", translate("Type"))
o:value("nameserver", translate("NameServer"))
o:value("fallback", translate("FallBack"))
o = s:option(ListValue, "protocol", translate("Protocol"))
o:value("none", translate("No Protocol"))
o:value("tcp://", translate("TCP"))
o:value("udp://", translate("UDP"))
o:value("tls://", translate("TLS"))
o:value("https://", translate("HTTPS"))
o = s:option(Value, "ser_address", translate("Address"))
o.placeholder = translate("Not Empty")
o.rmempty = false
o = s:option(Value, "ser_port", translate("Port"))
local apply = luci.http.formvalue("cbi.apply")
if apply then
m.uci:commit("clash")
if luci.sys.call("pidof clash >/dev/null") == 0 then
SYS.call("/etc/init.d/clash restart >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash"))
end
end
return m

View File

@ -31,6 +31,12 @@ o.datatype = "port"
o.rmempty = false
o.description = translate("Redir Port")
o = s:option(Value, "mixed_port")
o.title = translate("Mixed Port")
o.default = 7893
o.datatype = "port"
o.rmempty = false
o.description = translate("Mixed Port")
o = s:option(ListValue, "allow_lan")
o.title = translate("Allow Lan")
@ -40,6 +46,13 @@ o:value("true", "true")
o:value("false", "false")
o.description = translate("Allow Lan")
o = s:option(ListValue, "enable_ipv6")
o.title = translate("Enable IPv6")
o.default = false
o.rmempty = false
o:value("true", "true")
o:value("false", "false")
o.description = translate("Enable IPv6")
o = s:option(Value, "bind_addr")
o.title = translate("Bind Address")
@ -60,7 +73,7 @@ o:depends("allow_lan", "true")
o = s:option(Value, "dash_port")
o.title = translate("Dashboard Port")
o.default = 9191
o.default = 9090
o.datatype = "port"
o.rmempty = false
o.description = translate("Dashboard Port")
@ -73,10 +86,10 @@ o.description = translate("Dashboard Secret")
o = s:option(ListValue, "p_mode", translate("Proxy Mode"))
o.description = translate("Choose proxy mode")
o:value("Rule", translate("RULE"))
o:value("Global", translate("GLOBAL"))
o:value("rule", translate("RULE"))
o:value("global", translate("GLOBAL"))
o:value("Script", translate("SCRIPT"))
o:value("Direct", translate("DIRECT"))
o:value("direct", translate("DIRECT"))
o.default = "Rule"
o = s:option(ListValue, "level", translate("Log level"))

View File

@ -1,76 +0,0 @@
local m, s, o
local clash = "clash"
local uci = luci.model.uci.cursor()
local fs = require "nixio.fs"
local sys = require "luci.sys"
local sid = arg[1]
m = Map(clash, translate("Edit Group"))
--m.pageaction = false
m.redirect = luci.dispatcher.build_url("admin/services/clash/create")
if m.uci:get(clash, sid) ~= "groups" then
luci.http.redirect(m.redirect)
return
end
-- [[ Groups Setting ]]--
s = m:section(NamedSection, sid, "groups")
s.anonymous = true
s.addremove = false
o = s:option(ListValue, "type", translate("Group Type"))
o.rmempty = true
o.description = translate("Choose The Operation Mode")
o:value("select", translate("Select"))
o:value("url-test", translate("URL-Test"))
o:value("fallback", translate("Fallback"))
o:value("load-balance", translate("Load-Balance"))
o:value("relay", translate("Relay"))
o = s:option(Value, "name", translate("Group Name"))
o.rmempty = false
o = s:option(Value, "test_url", translate("Test URL"))
o.default = "http://www.gstatic.com/generate_204"
o.rmempty = true
o:depends("type", "url-test")
o:depends("type", "fallback")
o:depends("type", "load-balance")
o = s:option(Value, "test_interval", translate("Test Interval(s)"))
o.default = "300"
o.rmempty = true
o:depends("type", "url-test")
o:depends("type", "fallback")
o:depends("type", "load-balance")
o = s:option(DynamicList, "other_group", translate("Other Group"))
o.rmempty = true
o.description = translate("Proxy Groups Must Exist In Rule")
o:value("ALL", translate("All Servers"))
uci:foreach("clash", "servers",
function(s)
if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(clash, sid, "name") then
o:value(s.name)
end
end)
uci:foreach("clash", "groups",
function(s)
if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(clash, sid, "name") then
o:value(s.name)
end
end)
o:value("DIRECT")
o:value("REJECT")
local apply = luci.http.formvalue("cbi.apply")
if apply then
m.uci:commit(clash, sid)
sys.call("sh /usr/share/clash/groups.sh start")
end
return m

View File

@ -1,59 +0,0 @@
local NXFS = require "nixio.fs"
local SYS = require "luci.sys"
local HTTP = require "luci.http"
local DISP = require "luci.dispatcher"
local UTIL = require "luci.util"
local uci = require("luci.model.uci").cursor()
local fs = require "luci.clash"
local clash = "clash"
m = Map("clash")
s = m:section(TypedSection, "clash")
m.pageaction = false
s.anonymous = true
y = s:option(ListValue, "cus_list", translate("Status"))
y.default = 0
y:value("0", translate("disabled"))
y:value("1", translate("enabled"))
o = s:option(Value, "custom_dns", translate("Custom List DNS"))
o:value("114.114.114.114", "114.114.114.114")
o:value("114.114.115.115", "114.114.115.115")
o:value("119.29.29.29", "119.29.29.29")
o:value("4.2.2.1", "4.2.2.1")
o:value("4.2.2.2", "4.2.2.2")
o:value("4.2.2.3", "4.2.2.3")
o:value("4.2.2.4", "4.2.2.4")
o:depends("cus_list", "1")
o = s:option(Button, "Apply")
o.title = translate("Apply Custom List")
o.inputtitle = translate("Apply Custom List")
o.inputstyle = "apply"
o.write = function()
m.uci:commit("clash")
if luci.sys.call("pidof clash >/dev/null") == 0 then
SYS.call("/etc/init.d/clash restart >/dev/null 2>&1 &")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash"))
end
end
local conffile = "/usr/share/clash/server.list"
sev = s:option(TextValue, "conffile")
sev.rows = 20
sev.wrap = "off"
sev.cfgvalue = function(self, section)
return NXFS.readfile(conffile) or ""
end
sev.write = function(self, section, value)
NXFS.writefile(conffile, value:gsub("\r\n", "\n"))
end
return m

View File

@ -1,141 +0,0 @@
local m, s, o
local clash = "clash"
local uci = luci.model.uci.cursor()
local fs = require "nixio.fs"
local sys = require "luci.sys"
local sid = arg[1]
local http = luci.http
local fss = require "luci.clash"
function IsYamlFile(e)
e=e or""
local e=string.lower(string.sub(e,-5,-1))
return e == ".yaml"
end
function IsYmlFile(e)
e=e or""
local e=string.lower(string.sub(e,-4,-1))
return e == ".yml"
end
m = Map(clash, translate("Edit Proxy Provider"))
m.redirect = luci.dispatcher.build_url("admin/services/clash/create")
if m.uci:get(clash, sid) ~= "provider" then
luci.http.redirect(m.redirect)
return
end
s = m:section(NamedSection, sid, "provider")
s.anonymous = true
s.addremove = false
o = s:option(ListValue, "type", translate("Provider Type"))
o.rmempty = false
o.description = translate("Provider Type")
o:value("http")
o:value("file")
o = s:option(FileUpload, "",translate("Upload Provider File"))
o.title = translate("Provider File")
o.template = "clash/clash_upload"
o:depends("type", "file")
um = s:option(DummyValue, "", nil)
um.template = "clash/clash_dvalue"
local dir, fd
dir = "/etc/clash/provider/"
http.setfilehandler(
function(meta, chunk, eof)
if not fd then
if not meta then return end
if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end
if not fd then
um.value = translate("upload file error.")
return
end
end
if chunk and fd then
fd:write(chunk)
end
if eof and fd then
fd:close()
fd = nil
um.value = translate("File saved to") .. ' "/etc/clash/provider/"'
end
end
)
if luci.http.formvalue("upload") then
local f = luci.http.formvalue("ulfile")
if #f <= 0 then
um.value = translate("No specify upload file.")
end
end
o = s:option(Value, "name", translate("Provider Name"))
o.rmempty = false
o = s:option(ListValue, "pathh", translate("Provider Path"))
o.description = translate("Upload Provider File If Empty")
local p,h={}
for t,f in ipairs(fss.glob("/etc/clash/provider/*"))do
h=fss.stat(f)
if h then
p[t]={}
p[t].name=fss.basename(f)
if IsYamlFile(p[t].name) or IsYmlFile(p[t].name) then
o:value("./provider/"..p[t].name)
end
end
end
o.rmempty = false
o:depends("type", "file")
o = s:option(Value, "path", translate("Provider Path"))
o.description = translate("./hk.yaml")
o.rmempty = true
o:depends("type", "http")
o = s:option(Value, "provider_url", translate("Provider URL"))
o.description = translate("【HTTP】./hk.yaml")
o.rmempty = true
o:depends("type", "http")
o = s:option(Value, "provider_interval", translate("Provider Interval"))
o.default = "3600"
o.rmempty = true
o:depends("type", "http")
o = s:option(ListValue, "health_check", translate("Provider Health Check"))
o:value("false", translate("Disable"))
o:value("true", translate("Enable"))
o.default=true
o = s:option(Value, "health_check_url", translate("Health Check URL"))
o.default = "http://www.gstatic.com/generate_204"
o.rmempty = true
o = s:option(Value, "health_check_interval", translate("Health Check Interval"))
o.default = "300"
o.rmempty = true
o = s:option(DynamicList, "groups", translate("Policy Group"))
o.rmempty = true
m.uci:foreach("clash", "groups",
function(s)
if s.name ~= "" and s.name ~= nil and s.type ~= "relay" then
o:value(s.name)
end
end)
return m

View File

@ -117,7 +117,8 @@ o = s:option(ListValue, "dcore", translate("Core Type"))
o.default = "clashcore"
o:value("1", translate("Clash"))
o:value("2", translate("Clashr"))
--o:value("3", translate("Clash(ctun)"))
o:value("3", translate("Clash(ctun)"))
o:value("4", translate("Clash(dtun)"))
o.description = translate("Select core, clashr support ssr while clash does not.")

View File

@ -0,0 +1,41 @@
<%+cbi/valueheader%>
<script type="text/javascript">//<![CDATA[
function act_download_rule(btn,filename)
{
btn.disabled = true;
btn.value = '<%:Downloading...%> ';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash","ruleproviders")%>',
{
filename: filename
},
function(x,status)
{
if ( x && x.status == 200 ) {
if(status.rulep=="0")
{
btn.value = '<%:Error%>';
}
else if (status.rulep=="1")
{
btn.value = '<%:Successful%>';
window.location.reload();
}else if (status.rulep=="2")
{
btn.value = '<%:Not Updated%>';
}
}
else {
btn.value = '<%:Timeout%>';
}
}
);
btn.disabled = false;
return false;
}
//]]></script>
<input type="button" class="cbi-button cbi-input-reload" value="<%:Update Rule Providers%>" onclick="return act_download_rule(this,'<%=self:cfgvalue(section)%>')" />
<%+cbi/valuefooter%>

View File

@ -156,7 +156,7 @@
url0 = ssu[1]
}
var sstr = url0;
var name = ssu[1].split('#');
var name = ssrurl.split('#');
document.getElementById('cbid.clash.' + sid + '.type').value = "trojan";
document.getElementById('cbid.clash.' + sid + '.type').dispatchEvent(event);
var team = sstr.split('@');
@ -173,18 +173,15 @@
queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
}
}
document.getElementById('cbid.clash.' + sid + '.name').value = name[1];
document.getElementById('cbid.clash.' + sid + '.server').value = serverPart[0];
document.getElementById('cbid.clash.' + sid + '.port').value = port;
document.getElementById('cbid.clash.' + sid + '.password').value = password;
//document.getElementById('cbid.clash.' + sid + '.tls').checked = true;
//document.getElementById('cbid.clash.' + sid + '.tls').dispatchEvent(event);
//document.getElementById('cbid.clash.' + sid + '.tls_host').value = queryParam.peer || '';
//document.getElementById('cbid.clash.' + sid + '.insecure').checked = queryParam.allowInsecure === '1';
document.getElementById('cbid.clash.' + sid + '.alpn').select = "http/1.1";
//document.getElementById('cbid.clash.' + sid + '.alpn').dispatchEvent(event);
document.getElementById('cbid.clash.' + sid + '.sni').value = serverPart[0];
document.getElementById('cbid.clash.' + sid + '.alpn_http').checked = true;
document.getElementById('cbid.clash.' + sid + '.alpn_h2').checked = false;
document.getElementById('cbid.clash.' + sid + '.name').value = decodeURIComponent(name[1]);
s.innerHTML = "<font color='green'><%:Import Trojan config info successful%></font>";
return false;

File diff suppressed because one or more lines are too long

View File

@ -3,27 +3,27 @@
<thead align="center">
<tr>
<th align="center"><%:App Name%></th>
<th align="center"><%:Version%></th>
<th align="center"><%:Check Update%></th>
<th align="center"><%:Installed Version%></th>
<th align="center"><%:New Version%></th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" width="35%">clash</td> <td align="center" width="35%" id="_core"><%:Collecting data...%></td> <td width="35%" align="center" id="_corebutt"></td>
<td align="center" width="35%">clash</td> <td align="center" width="35%" id="_core"><%:Collecting data...%></td> <td width="35%" align="center" id="_corebutt"><font color="red"><%:Checking...%></font> </td>
</tr>
<tr>
<td align="center" width="35%">clashr</td> <td align="center" width="35%" id="_corer"><%:Collecting data...%></td> <td width="35%" align="center" id="_corerbutt"></td>
<td align="center" width="35%">clashr</td> <td align="center" width="35%" id="_corer"><%:Collecting data...%></td> <td width="35%" align="center" id="_corerbutt"><font color="red"><%:Checking...%></font> </td>
</tr>
<tr>
<td align="center" width="35%">clash(ctun)</td> <td align="center" width="35%" id="_coretun"><%:Collecting data...%></td> <td width="35%" align="center" id="_coretunbutt"></td>
<td align="center" width="35%">clash(ctun)</td> <td align="center" width="35%" id="_coretun"><%:Collecting data...%></td> <td width="35%" align="center" id="_coretunbutt"><font color="red"><%:Checking...%></font> </td>
</tr>
<tr>
<td align="center" width="35%">clash(dtun)</td> <td align="center" width="35%" id="_coredtun"><%:Collecting data...%></td> <td width="35%" align="center" id="_coredtunbutt"></td>
<td align="center" width="35%">clash(dtun)</td> <td align="center" width="35%" id="_coredtun"><%:Collecting data...%></td> <td width="35%" align="center" id="_coredtunbutt"><font color="red"><%:Checking...%></font> </td>
</tr>
<tr>
<td align="center" width="35%">luci-app-clash</td> <td align="center" width="35%" id="_version"><%:Collecting data...%> </td> <td width="35%" align="center" id="_versionbutt"></td>
<td align="center" width="35%">luci-app-clash</td> <td align="center" width="35%" id="_version"><%:Collecting data...%> </td> <td width="35%" align="center" id="_versionbutt"><font color="red"><%:Checking...%></font> </td>
</tr>
@ -70,183 +70,29 @@
}else{
coredtun.innerHTML = status.dtun_core ? '<b><font color="green">'+status.dtun_core+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
}
version.innerHTML = status.current_version ? '<b><font color="green">v'+status.current_version+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
version.innerHTML = status.current_version ? '<b><font color="green">'+status.current_version+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
}
});
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', null, function(x, status) {
XHR.poll(5,'<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {});
XHR.poll(1,'<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
version_butt.innerHTML = status.current_version ? '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return version_check(this)"/></center>' : '<em></em>';
core_butt.innerHTML = status.current_version ? '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return core_check(this)"/></center>' : '<em></em>';
corer_butt.innerHTML = status.current_version ? '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return clashr_core_check(this)"/></center>' : '<em></em>';
coretun_butt.innerHTML = status.current_version ? '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return clashtun_core_check(this)"/></center>' : '<em></em>';
coredtun_butt.innerHTML = status.current_version ? '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return clashdtun_core_check(this)"/></center>' : '<em></em>';
version_butt.innerHTML = status.current_version ? '<b><font color="green">'+status.new_version+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
core_butt.innerHTML = status.current_version ? '<b><font color="green">'+status.new_core_version+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
corer_butt.innerHTML = status.current_version ? '<b><font color="green">'+status.new_clashr_core_version+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
coretun_butt.innerHTML = status.current_version ? '<b><font color="green">'+status.new_clashtun_core_version+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
coredtun_butt.innerHTML = status.current_version ? '<b><font color="green">'+status.new_dtun_core+'</font> </b>' : '<em><b><font color="red"><%:Checking...%></font></b></em>';
}
});
function version_check(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {
if(status.new_version > status.current_version)
{
version_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-apply" value="<%:Download%>" onclick="return download_update(this)"/>' + '&nbsp;&nbsp;&nbsp;' + '<input type="button" class="cbi-button cbi-button-reset" value="<%:Return%>" onclick="return check_return(this)"/></center>';
}
else if(status.new_version==0)
{
version_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:Error Occured |Return%>" onclick="return check_return(this)"/></center>';
}
else if(status.current_version >= status.new_version)
{
version_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:No Update | Return%>" onclick="return check_return(this)"/></center>';
}
return false;
});
}
function core_check(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {
if(status.new_core_version > status.clash_core)
{
core_butt.innerHTML ='<center><b><font color="green"><%:New Version :%>'+status.new_core_version+'</font> </b></center>';
}
else if(status.new_core_version==0)
{
core_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:Error Occured |Return%>" onclick="return core_return(this)"/></center>';
}
else if(status.clash_core >= status.new_core_version)
{
core_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:No Update | Return%>" onclick="return core_return(this)"/></center>';
}
return false;
});
}
function clashr_core_check(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {
if(status.new_clashr_core_version > status.clashr_core)
{
corer_butt.innerHTML ='<center><b><font color="green"><%:New Version :%>'+status.new_clashr_core_version+'</font> </b></center>';
}
else if(status.new_clashr_core_version==0)
{
corer_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:Error Occured |Return%>" onclick="return clashr_core_return(this)"/></center>';
}
else if(status.clashr_core >= status.new_clashr_core_version)
{
corer_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:No Update | Return%>" onclick="return clashr_core_return(this)"/></center>';
}
return false;
});
}
function clashdtun_core_check(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {
url='https://github.com/Dreamacro/clash/releases/tag/TUN';
window.open(url);
return false;
});
}
function clashtun_core_check(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {
if(status.new_clashtun_core_version > status.clashtun_core)
{
coretun_butt.innerHTML ='<center><b><font color="green"><%:New Version :%>'+status.new_clashtun_core_version+'</font> </b></center>';
}
else if(status.new_clashtun_core_version==0)
{
coretun_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:Error Occured |Return%>" onclick="return clashtun_core_return(this)"/></center>';
}
else if(status.clashtun_core >= status.new_clashtun_core_version)
{
coretun_butt.innerHTML ='<center><input type="button" class="cbi-button cbi-button-reset" value="<%:No Update | Return%>" onclick="return clashtun_core_return(this)"/></center>';
}
return false;
});
}
function download_update(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) {
btn.disabled = true;
btn.value = '<%:Download%>';
url='https://github.com/frainzy1477/luci-app-clash/releases/download/v'+status.new_version+'/luci-app-clash_'+status.new_version+'_all.ipk';
window.open(url);
btn.disabled = false;
return false;
});
}
function check_return(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', status.current_version, function(x, status) {
btn.disabled = true;
btn.value = '<%:Return Check%>';
version_butt.innerHTML = '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return version_check(this)"/></center>';
});
}
function core_return(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', status.clash_core, function(x, status) {
btn.disabled = true;
btn.value = '<%:Return Check%>';
core_butt.innerHTML = '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return core_check(this)"/></center>';
});
}
function clashr_core_return(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', status.clashr_core, function(x, status) {
btn.disabled = true;
btn.value = '<%:Return Check%>';
corer_butt.innerHTML = '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return clashr_core_check(this)"/></center>';
});
}
function clashtun_core_return(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', status.clashtun_core, function(x, status) {
btn.disabled = true;
btn.value = '<%:Return Check%>';
coretun_butt.innerHTML = '<center><input type="button" class="cbi-button cbi-button-reload" value="<%:Check%>" onclick="return clashtun_core_check(this)"/></center>';
});
}
//]]></script>

View File

@ -1,17 +1,9 @@
msgid "Do not edit Policy Group with Group Name Proxy or proxy and or 🔑Proxy and it's other policy group"
msgstr "不要编辑策略组别名Proxy或proxy或🔑proxy和它的其他策略组"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
msgid "Enable Lan DNS"
msgstr "启用局域网DNS"
msgid "Enabling will set custom DNS Servers for Lan"
msgstr "启用将为自定义局域网DNS服务器"
msgid "Lan DNS servers"
msgstr "局域网DNS服务器"
msgid "Set custom DNS Servers for Lan"
msgstr "设置自定义局域网DNS服务器"
msgid "Custom TLS Host"
msgstr "自定义TLS主机"
msgid "Cache DNS"
msgstr "缓存的DNS"
@ -1128,4 +1120,154 @@ msgid "Blacklist Ips"
msgstr "启用黑名单IP"
msgid "Whitelist or Blacklist IPs to use Clash ( Only support enhanced-mode: redir-host )"
msgstr "启用白名单或黑名单IP ( 仅支持enhanced-mode: redir-host )"
msgstr "启用白名单或黑名单IP ( 仅支持enhanced-mode: redir-host )"
msgid "Rule Providers Manager"
msgstr "规则集经理"
msgid "Rule Providers List"
msgstr "规则集表"
msgid "Type"
msgstr "规则类型"
msgid "Not Updated"
msgstr "规则没更新"
msgid "Update Rule Providers"
msgstr "更新规则集"
msgid "Proxy Groups"
msgstr "代理组"
msgid "Use Proxy"
msgstr "启用代理"
msgid "Other Rules"
msgstr "其他规则"
msgid "Use Other Rule"
msgstr "启用其他规则"
msgid "Delete Proxy Provider"
msgstr "删除代理集"
msgid "All Servers"
msgstr "所有节点"
msgid "Interface Name"
msgstr "接口名称"
msgid "Enable Interface Name"
msgstr "启用接口名称"
msgid "Set Interface Name"
msgstr "设置接口名称"
msgid "Tun Mode"
msgstr "Tun模式"
msgid "Enable Tun and make sure you are using tun supported core"
msgstr "启用Tun并确保您使用的是Tun支持的核心"
msgid "Stack"
msgstr "Stack"
msgid "Select Stack Mode"
msgstr "选择Stack模式"
msgid "Enable Clash DNS"
msgstr "启用Clash DNS"
msgid "DNS Listen Port"
msgstr "DNS监听端口"
msgid "Set DNS Listen Port"
msgstr "设置DNS侦听端口"
msgid "Default NameServer"
msgstr "默认名称服务器"
msgid "Default Nameserver List"
msgstr "默认名称服务器列表"
msgid "Enhanced Mode"
msgstr "增强模式"
msgid "Select Enhanced Mode"
msgstr "选择增强模式"
msgid "Fake IP Range"
msgstr "假IP范围"
msgid "Set Fake IP Range"
msgstr "设置假IP范围"
msgid "Fake IP Filter List"
msgstr "假IP过滤器列表"
msgid "Fake IP Filter"
msgstr "假IP过滤器"
msgid "DNS Hijack"
msgstr "DNS劫持"
msgid "Enable"
msgstr "启用"
msgid "Protocol"
msgstr "协议"
msgid "Address"
msgstr "地址"
msgid "Port"
msgstr "端口"
msgid "Authentication"
msgstr "HTTP(S)和SOCKS5认证方式"
msgid "Username"
msgstr "用户名"
msgid "Password"
msgstr "密码"
msgid "Hosts"
msgstr "主机"
msgid "IP"
msgstr "IP"
msgid "Nameservers & Fallback"
msgstr "自定义上游DNS服务器"
msgid "Type"
msgstr "类型"
msgid "Advance DNS"
msgstr "高级DNS设置"
msgid "Clash DNS"
msgstr "配置DNS设置"
msgid "Mixed Port"
msgstr "HTTP(S)和SOCKS5同一端口上"
msgid "Enable IPv6"
msgstr "启用IPv6"
msgid "Filter List"
msgstr "自定义过滤器列表"
msgid "Installed Version"
msgstr "当前内核版本"
msgid "New Version"
msgstr "最新内核版本"
msgid "Download Update"
msgstr "下载最新版本客户端"
msgid "No Protocol"
msgstr "不带协议"

View File

@ -1,177 +0,0 @@
# 2020-05-20 03:00
payload:
- '1.3.0.10/32'
- '10.72.25.0/24'
- '23.42.186.24/32'
- '23.66.147.48/32'
- '23.235.156.167/32'
- '27.255.67.120/32'
- '42.51.146.207/32'
- '45.34.240.72/32'
- '46.165.197.153/32'
- '46.165.197.231/32'
- '47.89.59.182/32'
- '47.90.50.177/32'
- '47.93.103.196/32'
- '47.94.89.32/32'
- '47.96.162.122/32'
- '58.215.179.159/32'
- '58.221.28.166/32'
- '60.19.29.21/28'
- '60.190.139.164/32'
- '60.191.124.196/32'
- '60.210.17.12/24'
- '61.129.70.132/32'
- '61.132.216.232/32'
- '61.132.221.146/32'
- '61.132.255.212/32'
- '61.132.255.222/25'
- '61.147.184.18/32'
- '61.152.223.15/32'
- '61.160.200.223/32'
- '61.160.200.242/32'
- '61.160.200.252/32'
- '61.174.50.167/25'
- '61.191.12.74/32'
- '61.191.206.4/32'
- '67.229.224.28/32'
- '69.28.57.245/32'
- '74.117.182.77/32'
- '78.140.131.214/32'
- '101.201.29.182/32'
- '101.227.97.240/32'
- '101.227.200.11/32'
- '101.227.200.28/32'
- '101.251.211.235/32'
- '103.249.254.113/32'
- '104.195.62.12/32'
- '104.197.140.120/32'
- '104.198.198.188/32'
- '106.187.95.251/32'
- '106.75.65.90/32'
- '106.75.65.92/32'
- '107.21.113.76/32'
- '108.171.248.234/32'
- '111.175.220.160/29'
- '111.175.220.164/32'
- '111.206.22.0/24'
- '111.30.135.167/32'
- '111.63.135.0/24'
- '111.73.45.147/32'
- '112.124.115.215/32'
- '112.74.95.46/32'
- '113.207.57.24/32'
- '113.57.230.88/32'
- '114.247.28.96/32'
- '114.55.123.44/32'
- '114.95.102.77/32'
- '115.182.16.79/32'
- '115.29.141.121/32'
- '115.29.247.48/32'
- '116.206.22.7/32'
- '116.55.227.242/32'
- '117.25.133.209/32'
- '117.144.242.32/32'
- '117.177.248.17/32'
- '117.177.248.41/32'
- '118.144.88.126/32'
- '118.144.88.215/28'
- '118.144.88.215/32'
- '119.188.13.0/24'
- '119.4.249.166/32'
- '120.132.57.41/32'
- '120.132.63.203/32'
- '120.197.89.239/32'
- '120.198.116.0/24'
- '120.26.151.246/32'
- '120.27.34.156/32'
- '120.55.199.139/32'
- '120.76.189.132/32'
- '120.80.57.123/32'
- '121.15.207.243/32'
- '121.199.73.185/32'
- '121.201.108.2/32'
- '121.201.11.95/32'
- '121.251.255.0/24'
- '121.43.75.169/32'
- '122.225.103.120/32'
- '122.226.223.163/32'
- '122.227.254.195/32'
- '122.228.236.165/32'
- '123.125.111.0/24'
- '123.139.154.201/24'
- '123.56.152.96/32'
- '123.57.162.39/32'
- '123.57.94.184/32'
- '123.59.152.170/32'
- '123.59.78.229/32'
- '124.192.153.42/32'
- '223.87.176.139/32'
- '223.87.176.176/32'
- '223.87.177.180/32'
- '223.87.177.182/32'
- '223.87.177.184/32'
- '223.87.177.43/32'
- '223.87.177.47/32'
- '223.87.177.80/32'
- '223.87.182.101/32'
- '223.87.182.102/32'
- '223.87.182.11/32'
- '223.87.182.52/32'
- '124.14.21.147/32'
- '124.14.21.151/32'
- '124.160.194.11/32'
- '124.232.160.178/32'
- '125.46.61.28/32'
- '125.89.69.5/32'
- '139.159.32.82/32'
- '139.196.239.52/32'
- '139.224.26.92/32'
- '139.224.74.148/32'
- '146.148.85.61/32'
- '162.212.181.32/32'
- '173.208.177.227/32'
- '175.6.223.15/32'
- '180.166.52.24/32'
- '180.76.155.58/32'
- '180.76.162.60/32'
- '180.76.171.28/32'
- '180.76.172.149/32'
- '180.76.181.213/32'
- '182.92.81.104/32'
- '183.131.79.130/32'
- '183.131.79.30/32'
- '183.59.53.187/29'
- '183.59.53.237/32'
- '183.6.188.226/29'
- '198.40.52.11/32'
- '202.104.1.27/32'
- '202.105.165.202/32'
- '205.209.138.102/32'
- '211.103.159.32/32'
- '211.137.132.89/32'
- '211.139.178.49/32'
- '211.149.225.23/32'
- '211.167.105.131/32'
- '211.98.71.195/29'
- '218.25.246.118/32'
- '218.93.127.37/32'
- '219.234.83.60/32'
- '220.115.251.25/32'
- '220.196.52.141/32'
- '221.179.140.0/24'
- '221.179.183.0/24'
- '221.179.191.0/24'
- '221.179.46.190/25'
- '221.204.213.222/32'
- '221.228.17.152/32'
- '221.228.214.101/32'
- '221.231.6.79/32'
- '222.186.61.91/32'
- '222.186.61.95/32'
- '222.186.61.96/32'
- '222.186.61.97/32'
- '222.187.226.96/32'
- '222.73.156.235/32'
- '223.6.255.99/32'
- '14.29.40.3/32'

View File

@ -1,33 +0,0 @@
# 2020-05-20 03:00
payload:
# > Apple_API
- '.aaplimg.com'
- '.apple.co'
- '.apple.com'
- '.apple-cloudkit.com'
- '.appsto.re'
- '.cdn-apple.com'
- '.icloud.com'
- '.icloud-content.com'
- '.itunes.com'
- '.me.com'
- 'ocsp.apple.com'
- '.digicert.com'
- '.entrust.net'
- 'ocsp.verisign.net'
- 'blobstore.apple.com'
# > TestFlight
- 'testflight.apple.com'
# > Apple URL Shortener
- '.appsto.re'
# > iBooks Store download
- 'books.itunes.apple.com'
# > iTunes Store Moveis Trailers
- 'hls.itunes.apple.com'
# > App Store Preview
- 'apps.apple.com'
- 'itunes.apple.com'
# > Spotlight
- 'api-glb-sea.smoot.apple.com'
# > Dictionary
- 'lookup-api.apple.com'

View File

@ -1,14 +0,0 @@
# 2020-05-20 03:00
payload:
# > Apple_API
- '139.178.128.0/18'
- '144.178.0.0/19'
- '144.178.36.0/22'
- '144.178.48.0/20'
- '17.0.0.0/8'
- '192.35.50.0/24'
- '198.183.17.0/24'
- '205.180.175.0/24'
- '205.180.175.0/24'
- '63.92.224.0/19'
- '65.199.22.0/23'

View File

@ -1,22 +0,0 @@
# 2020-05-20 03:00
payload:
# > Apple itunes
- 'aod.itunes.apple.com'
- 'api.smoot.apple.cn'
- 'music.apple.com'
- 'mvod.itunes.apple.com'
# > App Store
- '.storedownloadd.'
- '.mzstatic.com'
- 'iosapps.itunes.apple.com'
- 'osxapps.itunes.apple.com'
# > Update
- 'supportdownload.apple.com'
- 'appldnld.apple.com'
- 'swcdn.apple.com'
- 'apptrailers.itunes.apple.com'
- 'updates-http.cdn-apple.com'
# > Map
- 'ls.apple.com'
- '.ls.apple.com'
- 'gs-loc-cn.apple.com'

View File

@ -1,17 +0,0 @@
# 2020-05-20 03:00
payload:
# > Apple tv
- 'np-edge.itunes.apple.com'
- 'play-edge.itunes.apple.com'
- 'tv.apple.com'
- '.tv.apple.com'
# > Apple News and Apple Map TOMTOM Version
- 'apple.comscoreresearch.com'
- 'gspe1-ssl.ls.apple.com'
- 'gateway.icloud.com'
- 'news-client.apple.com'
- 'news-edge.apple.com'
- 'news-events.apple.com'
- 'apple.news'
- '.apple.news'

View File

@ -1,42 +0,0 @@
# 2020-05-20 03:00
payload:
# > bilibili
- '.Bilibili.'
- '.acg.tv'
- '.acgvideo.com'
- '.b23.tv'
- '.biliapi.com'
- '.biliapi.net'
- '.bilibili.com'
- '.biligame.com'
- '.biligame.net'
- '.bilivideo.com'
- '.hdslb.com'
- '.im9.com'
- 'api.bilibili.com'
- 'upos-hz-mirrorakam.akamaized.net'
- '.api.bilibili.com'
- '.upos-hz-mirrorakam.akamaized.net'
# > iqiyi
- '.qiyi.*'
- '.iqiyi.*'
- '.iqiyi.com'
- '.iqiyipic.com'
- '.ppsimg.com'
- '.qiyi.com'
- '.qiyipic.com'
- '.71.am.com'
- '71.am.com'
- '.71edge'
- '.qy.net'
- 'cache.video.iqiyi.com'
- '.cache.video.iqiyi.com'
# > letv
- '.letv.com'
- '.api.mob.app.letv.com'
- 'api.mob.app.letv.com'
# > tencent
- '.vv.video.qq.com'
- 'vv.video.qq.com'

View File

@ -1,11 +0,0 @@
# 2020-05-20 03:00
payload:
# > iqiyi
- '101.227.0.0/16'
- '101.224.0.0/13'
- '119.176.0.0/12'
# > Youku
- '106.11.0.0/16'
# > Tencent
- '182.254.116.0/24'

View File

@ -1,166 +0,0 @@
# 2020-05-20 03:00
payload:
# > Binance Start
- 'resource.binance.com'
- 'binance.com'
- 'bin.bnbstatic.com'
- 'ex.bnbstatic.com'
- 'stream.binance.com'
- 'stream2.binance.com'
- 'api.binance.com'
- 'ftp.binance.com'
- 'sftp.binance.com'
- 'info.binance.com'
- 'support.binance.com'
- 'labs.binance.com'
- 'launchpad.binance.com'
- 'binance.zendesk.com'
- 'de908tco66xxm.cloudfront.net'
- 'd1eipm3vz40hy0.cloudfront.net'
- '.resource.binance.com'
- '.binance.com'
- '.bin.bnbstatic.com'
- '.ex.bnbstatic.com'
- '.stream.binance.com'
- '.stream2.binance.com'
- '.api.binance.com'
- '.ftp.binance.com'
- '.sftp.binance.com'
- '.info.binance.com'
- '.support.binance.com'
- '.labs.binance.com'
- '.launchpad.binance.com'
- '.binance.zendesk.com'
- '.de908tco66xxm.cloudfront.net'
- '.d1eipm3vz40hy0.cloudfront.net'
- 'binance.cloud'
- '.binance.cloud'
- 'zopim.com'
- '.zopim.com'
- 'bnbstatic.com'
- '.bnbstatic.com'
- 'binance.co'
- '.binance.co'
# > Huobi Start
- 'hbg.com'
- 'm.hbg.com'
- 'otc.hbg.com'
- 'blog.hbg.com'
- 'otc-api.hbg.com'
- 'huobi.br.com'
- 'dm.huobi.br.com'
- 'huobiasia.vip'
- 'hbdm.com'
- '.hbg.com'
- '.m.hbg.com'
- '.otc.hbg.com'
- '.blog.hbg.com'
- '.otc-api.hbg.com'
- '.huobi.br.com'
- '.dm.huobi.br.com'
- '.huobiasia.vip'
- 'huobi.com'
- '.huobi.com'
- 'huobiglobal.zendesk.com'
- '.huobiglobal.zendesk.com'
- 'hbabit.com'
- '.hbabit.com'
- 'mtalk.google.com'
- '.mtalk.google.com'
# > OTC Start
- 'localbitcoins.com'
- 'chain.localbitcoins.com'
- 'otcbtc.com'
- 'assets3.otcbtc.com'
- 'assets2.otcbtc.com'
- 'assets1.otcbtc.com'
- 'assets0.otcbtc.com'
- 'bb.otcbtc.com'
- 'career.otcbtc.com'
- 'support.otcbtc.com'
- 'localbitcoins.com'
- '.chain.localbitcoins.com'
- '.otcbtc.com'
- '.assets3.otcbtc.com'
- '.assets2.otcbtc.com'
- '.assets1.otcbtc.com'
- '.assets0.otcbtc.com'
- '.bb.otcbtc.com'
- '.career.otcbtc.com'
- '.support.otcbtc.com'
# > Kucoin Start
- 'kucoin.com'
- 'assets-v2.kucoin.com'
- 'kitchen-v2.kucoin.com'
- 'pangu.kucoin.com'
- 'kcs.kucoin.com'
- 'fd.kucoin.com'
- 'support.kucoin.com'
- 'kucoin.zendesk.com'
- 'sentry.kucoin.com'
- 'news.kucoin.com'
- 'kucoinn.tumblr.com'
- '.kucoin.com'
- '.assets-v2.kucoin.com'
- '.kitchen-v2.kucoin.com'
- '.pangu.kucoin.com'
- '.kcs.kucoin.com'
- '.fd.kucoin.com'
- '.support.kucoin.com'
- '.kucoin.zendesk.com'
- '.sentry.kucoin.com'
- '.news.kucoin.com'
- '.kucoinn.tumblr.com'
# > Bitfinex Start
- 'bitfinex.com'
- 'api.bitfinex.com'
- 'blog.bitfinex.com'
- 'support.bitfinex.com'
- '.bitfinex.com'
- '.api.bitfinex.com'
- '.blog.bitfinex.com'
- '.support.bitfinex.com'
# > Bitmex Start
- 'bitmex.com'
- 'blog.bitmex.com'
- 'testnet.bitmex.com'
- 'sentry.bitmex.com'
- 'testnet-static.bitmex.com'
- 'static.bitmex.com'
- '.bitmex.com'
- '.blog.bitmex.com'
- '.testnet.bitmex.com'
- '.sentry.bitmex.com'
- '.testnet-static.bitmex.com'
- '.static.bitmex.com'
# > Hitbtc Start
- 'hitbtc.com'
- 'auth.hitbtc.com'
- 'support.hitbtc.com'
- 'mt.hitbtc.com'
- 'blog.hitbtc.com'
- '.hitbtc.com'
- '.auth.hitbtc.com'
- '.support.hitbtc.com'
- '.mt.hitbtc.com'
- '.blog.hitbtc.com'
# > Okex Start
- 'okex.com'
- 'blog.okex.com'
- 'www.okex.com'
- 'support.okex.com'
- '.okex.com'
- '.blog.okex.com'
- '.www.okex.com'
- '.support.okex.com'
# > Gate Start
- 'gate.io'
- 'web02.gate.io'
- 'support.gate.io'
- 'data.gate.io'
- 'jp.gate.io'
- '.gate.io'
- '.web02.gate.io'
- '.support.gate.io'
- '.data.gate.io'
- '.jp.gate.io'

View File

@ -1,18 +0,0 @@
# 2020-05-20 03:00
payload:
# > DisneyPlus
- '.Disney*.'
- '.Disney+*.'
- 'cdn.cdn.unid.go.com'
- 'cdn.registerdisney.go.com'
- '.bamgrid.com'
- '.braze.com'
- '.conviva.com'
- '.disney-plus.net'
- '.disney.demdex.net'
- '.disneyplus.com'
- '.dssott.com'
- '.execute-api.us-east-1.amazonaws.com'

View File

@ -1,837 +0,0 @@
#2020.5.23 21:45
payload:
# > keyword
- '.alicdn.'
- '.alipay.'
- '.taobao.'
- '.officecdn.'
- '.baidu.'
- '.YYeTs*.'
- '.12306.'
- '.hearthstone*.'
- '.alimama.'
- '.appzapp.'
- '.baidupcs.'
- '.ccgslb.'
- '.chinacache.'
- '.duobao.'
- '.duolingo.'
- '.jdpay.'
- '.moke.'
- '.qhimg.'
- '.vpimg.'
- '.xiami.'
- '.xiaomi.'
- '.announce.'
- '.torrent.'
- '.tracker.'
# > 360
- '.360.com'
- '.360in.com'
- '.360kuai.com'
- '.360safe.com'
- '.dhrest.com'
- '.qhres.com'
- '.qhstatic.com'
- '.qhupdate.com'
- '.so.com'
# > 4399
- '.4399.com'
- '.4399pk.com'
- '.5054399.com'
- '.img4399.com'
# > Alibaba
- '.1688.com'
- '.aliapp.org'
- '.alibaba.com'
- '.alibabacloud.com'
- '.alibabausercontent.com'
- '.alicdn.com'
- '.aliexpress.com'
- '.aliimg.com'
- '.alikunlun.com'
- '.alipay.com'
- '.alipayobjects.com'
- '.alisoft.com'
- '.aliyun.com'
- '.aliyuncdn.com'
- '.aliyuncs.com'
- '.amap.com'
- '.autonavi.com'
- '.dingtalk.com'
- '.ele.me'
- '.hichina.com'
- '.mmstat.com'
- '.mxhichina.com'
- '.soku.com'
- '.taobao.com'
- '.taobaocdn.com'
- '.tbcache.com'
- '.tbcdn.com'
- '.tmall.com'
- '.tmall.hk'
- '.ucweb.com'
- '.xiami.com'
- '.xiami.net'
- '.ykimg.com'
- '.youku.com'
# > Baidu
- '.baidu.com'
- '.baidubcr.com'
- '.baidupcs.com'
- '.baidustatic.com'
- '.bcebos.com'
- '.bdimg.com'
- '.bdstatic.com'
- '.bdurl.net'
- '.hao123.com'
- '.hao123img.com'
- '.jomodns.com'
- '.yunjiasu-cdn.net'
# > Prior
- 'client.amplifi.com'
- 'ip.bjango.com'
- '.alphassl.com'
- '.edu.cn'
# > ByteDance
- '.bytedance.com'
- '.bytedance.net'
- '.bytedns.net'
- '.byteimg.com'
- '.feiliao.com'
- '.gifshow.com'
- '.huoshan.com'
- '.iesdouyin.com'
- '.ixigua.com'
- '.kspkg.com'
- '.pstatp.com'
- '.snssdk.com'
- '.toutiao.com'
- '.toutiao13.com'
- '.toutiaocdn.com'
- '.toutiaocdn.net'
- '.toutiaocloud.com'
- '.toutiaohao.com'
- '.toutiaohao.net'
- '.toutiaoimg.com'
- '.toutiaopage.com'
- '.wukong.com'
- '.zijieimg.com'
- '.zjbyte.com'
- '.zjcdn.com'
# > CCTV
- '.cctv.com'
- '.cctvpic.com'
- '.livechina.com'
# > ChinaNet
- '.21cn.com'
# > DiDi
- '.didialift.com'
- '.didiglobal.com'
- '.udache.com'
# > Douyu 斗鱼
- '.douyu.com'
- '.douyu.tv'
- '.douyutv.com'
# > 蛋蛋赞
- '.343480.com'
- '.baduziyuan.com'
- '.com-hs-hkdy.com'
- '.czybjz.com'
- '.dandanzan.com'
- '.fjhps.com'
- '.kuyunbo.club'
# > Gameloft
- '.gameloft.com'
# > HuaWei
- '.dbankcdn.com'
- '.hc-cdn.com'
- '.hicloud.com'
- '.huawei.com'
- '.huaweicloud.com'
- '.huaweishop.net'
- '.hwccpc.com'
- '.vmall.com'
- '.vmallres.com'
# > Iflytek 科大讯飞
- '.iflyink.com'
- '.iflyrec.com'
- '.iflytek.com'
# > HunanTV
- '.hitv.com'
- '.mgtv.com'
# > JD
- '.360buy.com'
- '.360buyimg.com'
- '.jcloudcs.com'
- '.jd.com'
- '.jd.hk'
- '.jdcloud.com'
- '.jdpay.com'
- '.paipai.com'
# > Kingsoft
- '.iciba.com'
- '.ksosoft.com'
- '.ksyun.com'
# > Meitu
- '.meitu.com'
- '.meitudata.com'
- '.meitustat.com'
- '.meipai.com'
# > MI
- '.duokan.com'
- '.mi-img.com'
- '.miui.com'
- '.miwifi.com'
- '.xiaomi.com'
- '.xiaomi.net'
- '.xiaomicp.com'
# > NetEase
- '.163.com'
- '.126.net'
- '.126.com'
- '.127.net'
- '.163yun.com'
- '.lofter.com'
- '.netease.com'
- '.ydstatic.com'
- '.youdao.com'
# > Sina
- '.leju.com'
- '.miaopai.com'
- '.sina.com'
- '.sinaapp.com'
- '.sinaimg.com'
- '.weibo.com'
- '.weibocdn.com'
- '.weibo.cn'
- '.weico.cc'
- '.xiaoka.tv'
# > Sohu
- '.sohuno.com'
- '.sohurdc.com'
- '.sohu.com'
- '.sohucs.com'
- '.sohu-inc.com'
- '.v-56.com'
# > Sogo
- '.go2map.com'
- '.sogo.com'
- '.sogou.com'
- '.sogoucdn.com'
# > Tencent
- '.foxmail.com'
- '.gtimg.com'
- '.idqqimg.com'
- '.igamecj.com'
- '.myapp.com'
- '.myqcloud.com'
- '.qq.com'
- '.qqmail.com'
- '.qqurl.com'
- '.smtcdns.com'
- '.smtcdns.net'
- '.soso.com'
- '.tencent-cloud.net'
- '.tencent.com'
- '.tencentmind.com'
- '.tenpay.com'
- '.wechat.com'
- '.weixin.com'
- '.weiyun.com'
- '.servicewechat.com'
- 'file-igamecj.akamaized.net'
# > 唯品会
- '.appsimg.com'
- '.appvipshop.com'
- '.vip.com'
- '.vipstatic.com'
# > Ximalaya
- '.ximalaya.com'
- '.xmcdn.com'
# > Xunlei
- '.00cdn.com'
- '.88cdn.com'
- '.kanimg.com'
- '.kankan.com'
- '.p2cdn.com'
- '.sandai.net'
- '.thundercdn.com'
- '.xunlei.com'
# > ulike
- '.byteoversea.com'
- '.faceu.mobi'
- '.ibytedtos.com'
# > YYeTs
- '.got001.com'
- '.jstucdn.com'
- '.zimuzu.io'
- '.zimuzu.tv'
- '.zmz001.com'
- '.zmz002.com'
- '.zmz003.com'
- '.zmz004.com'
- '.zmz2019.com'
- '.zmzapi.com'
- '.zmzapi.net'
- '.zmzfile.com'
# > Content Delivery Network
- '.ccgslb.com'
- '.ccgslb.net'
- '.chinanetcenter.com'
- '.meixincdn.com'
- '.ourdvs.com'
- '.staticdn.net'
- '.wangsu.com'
# > IP Query
- '.ipip.net'
- '.ip.la'
- '.ip-cdn.com'
- '.ipv6-test.com'
- '.test-ipv6.com'
- '.whatismyip.com'
# > Private Tracker
- '.awesome-hd.me'
- '.broadcasthe.net'
- '.chdbits.co'
- '.classix-unlimited.co.uk'
- '.empornium.me'
- '.gazellegames.net'
- '.hdchina.org'
- '.hdsky.me'
- '.icetorrent.org'
- '.jpopsuki.eu'
- '.keepfrds.com'
- '.madsrevolution.net'
- '.m-team.cc'
- '.nanyangpt.com'
- '.ncore.cc'
- '.open.cd'
- '.ourbits.club'
- '.passthepopcorn.me'
- '.privatehd.to'
- '.redacted.ch'
- '.springsunday.net'
- '.tjupt.org'
- '.totheglory.im'
# > Scholar
- '.acm.org'
- '.acs.org'
- '.aip.org'
- '.ams.org'
- '.annualreviews.org'
- '.aps.org'
- '.ascelibrary.org'
- '.asm.org'
- '.asme.org'
- '.astm.org'
- '.bmj.com'
- '.cambridge.org'
- '.cas.org'
- '.clarivate.com'
- '.ebscohost.com'
- '.emerald.com'
- '.engineeringvillage.com'
- '.icevirtuallibrary.com'
- '.ieee.org'
- '.imf.org'
- '.iop.org'
- '.jamanetwork.com'
- '.jhu.edu'
- '.jstor.org'
- '.karger.com'
- '.libguides.com'
- '.madsrevolution.net'
- '.mpg.de'
- '.myilibrary.com'
- '.nature.com'
- '.oecd-ilibrary.org'
- '.osapublishing.org'
- '.oup.com'
- '.ovid.com'
- '.oxfordartonline.com'
- '.oxfordbibliographies.com'
- '.oxfordmusiconline.com'
- '.pnas.org'
- '.proquest.com'
- '.rsc.org'
- '.sagepub.com'
- '.sciencedirect.com'
- '.sciencemag.org'
- '.scopus.com'
- '.siam.org'
- '.spiedigitallibrary.org'
- '.springer.com'
- '.springerlink.com'
- '.tandfonline.com'
- '.un.org'
- '.uni-bielefeld.de'
- '.webofknowledge.com'
- '.westlaw.com'
- '.wiley.com'
- '.worldbank.org'
- '.worldscientific.com'
# > manhuagui
- 'manhuagui.com'
- '.manhuagui.com'
- 'hamreus.com'
- '.hamreus.com'
# > mytoken
- '.mytoken.io'
- 'mytoken.io'
- '.mytoken.com'
- 'mytoken.com'
- '.mytokencap.com'
- 'mytokencap.com'
- '.mytokenapi.com'
- 'mytokenapi.com'
- '.mytoken.org'
- 'mytoken.org'
- '.mytokencap.com'
- 'mytokencap.com'
# > Plex Media Server
- '.plex.tv'
# > TeamViewer
- '.teamviewer.com'
# > Private Tracker
- '.animetorrents.me'
- '.awesome-hd.me'
- '.beitai.pt'
- '.bittorrent.com'
- '.broadcasthe.net'
- '.chdbits.co'
- '.classix-unlimited.co.uk'
- '.empornium.me'
- '.gazellegames.net'
- '.hd4fans.org'
- '.hdchina.org'
- '.hdhome.org'
- '.hdsky.me'
- '.hdtime.org'
- '.hdzone.me'
- '.icetorrent.org'
- '.jpopsuki.eu'
- '.keepfrds.com'
- '.leaguehd.com'
- '.m-team.cc'
- '.madsrevolution.net'
- '.msg.vg'
- '.nanyangpt.com'
- '.ncore.cc'
- '.open.cd'
- '.ourbits.club'
- '.passthepopcorn.me'
- '.privatehd.to'
- '.pthome.net'
- '.redacted.ch'
- '.springsunday.net'
- '.tjupt.org'
- '.totheglory.im'
- '.trontv.com'
# > Public Direct CDN 公共直连
- '.code.jquery.com'
- '.baomitu.com'
- '.bootcss.com'
- '.jiasule.com'
- '.jsdelivr.net'
- '.staticfile.org'
- '.upaiyun.com'
# > pdd
- '.pinduoduo.com'
- '.yangkeduo.com'
# > logite
- '.logitech.com'
- 'logitech.com'
- '.logitech.com.cn'
- 'logitech.com.cn'
- '.logi.com'
- 'download01.logi.com'
# > smzdm
- 'smzdm01.wt-cn01.net'
# > Other
- '.12306.cn'
- '.12306.com'
- '.17173.com'
- '.178.com'
- '.17jita.com'
- '.17k.com'
- '.360doc.com'
- '.36kr.com'
- '.3dmgame.com'
- '.51cto.com'
- '.51job.com'
- '.51jobcdn.com'
- '.51ym.me'
- '.56.com'
- '.58.com'
- '.5ihome.net'
- '.8686c.com'
- '.abchina.com'
- '.abercrombie.com'
- '.accuweather.com'
- '.acfun.tv'
- '.adobesc.com'
- '.aicoinstorge.com'
- '.air-matters.com'
- '.air-matters.io'
- '.aixifan.com'
- '.algocasts.io'
- '.amd.com'
- '.apache.org'
- '.api.crisp.chat'
- '.appshike.com'
- '.appstore.com'
- '.aweme.snssdk.com'
- '.b612.net'
- '.bababian.com'
- '.babytree.com'
- '.babytreeimg.com'
- '.baicizhan.com'
- '.baidupan.com'
- '.baike.com'
- '.battlenet.com'
- '.bdatu.com'
- '.beatsbydre.com'
- '.beitaichufang.com'
- '.beplay'
- '.bet365.com'
- '.bilibili.com'
- '.bilivideo.com'
- '.biqudu.com'
- '.biquge.com'
- '.bitauto.com'
- '.bjango.com'
- '.booking.com'
- '.bstatic.com'
- '.c-ctrip.com'
- '.cailianpress.com'
- '.caiyunapp.com'
- '.camera360.com'
- '.cdnmama.com'
- '.cdp.cloud.unity3d.com'
- '.chaoxing.com'
- '.che168.com'
- '.chinacache.net'
- '.chinaso.com'
- '.chinaz.com'
- '.chinaz.net'
- '.chua.pro'
- '.chuimg.com'
- '.chunbo.com'
- '.chunboimg.com'
- '.chunyu.mobi'
- '.chushou.tv'
- '.cibntv.net'
- '.clashroyaleapp.com'
- '.client.amplifi.com'
- '.clouddn.com'
- '.cloudsigma.com'
- '.cloudxns.net'
- '.cmbchina.com'
- '.cmbimg.com'
- '.cmct.tv'
- '.cmfu.com'
- '.cn'
- '.cn163.net'
- '.cnbeta.com'
- '.cnbetacdn.com'
- '.cnblogs.com'
- '.cnki.net'
- '.cnlang.org'
- '.cnmstl.net'
- '.coolapk.com'
- '.coolapkmarket.com'
- '.cootekservice.com'
- '.csdn.net'
- '.ctrip.com'
- '.culturedcode.com'
- '.dangdang.com'
- '.dct-cloud.com'
- '.dfcfw.com'
- '.dgtle.com'
- '.dianping.com'
- '.digicert.com'
- '.dn.angruo.com'
- '.docschina.org'
- '.douban.com'
- '.doubanio.com'
- '.douyin.com'
- '.dpfile.com'
- '.duoshuo.com'
- '.duowan.com'
- '.dxycdn.com'
- '.dytt8.net'
- '.easou.com'
- '.eastday.com'
- '.eastmoney.com'
- '.ecitic.com'
- '.ecitic.net'
- '.eclipse.org'
- '.eudic.net'
- '.ewqcxz.com'
- '.fang.com'
- '.fantasy.tv'
- '.feng.com'
- '.fengkongcloud.com'
- '.fir.im'
- '.firefox.com'
- '.frdic.com'
- '.fresh-ideas.cc'
- '.futu5.com'
- '.futunn.com'
- '.g-cores.com'
- '.gandi.net'
- '.ganji.com'
- '.ganjistatic1.com'
- '.geetest.com'
- '.geilicdn.com'
- '.getpricetag.com'
- '.ghpym.com'
- '.godic.net'
- '.goodread.com'
- '.google.cn'
- '.gravatar.com'
- '.guazi.com'
- '.gwdang.com'
- '.gzlzfm.com'
- '.haibian.com'
- '.haosou.com'
- '.hdcmct.org'
- '.hkserversolution.com'
- '.hollisterco.com'
- '.hongxiu.com'
- '.hostbuf.com'
- '.huajiao.com'
- '.hupu.com'
- '.huxiucdn.com'
- '.huya.com'
- '.hxcdn.net'
- '.icedropper.com'
- '.ifeng.com'
- '.ifengimg.com'
- '.images-amazon.com'
- '.img4me.com'
- '.infinitynewtab.com'
- '.infzm.com'
- '.it168.com'
- '.ithome.com'
- '.ixdzs.com'
- '.iyingdi.com'
- '.java.com'
- '.jianguoyun.com'
- '.jianshu.com'
- '.jianshu.io'
- '.jianshuapi.com'
- '.jiathis.com'
- '.jidian.im'
- '.jmstatic.com'
- '.jsboxbbs.com'
- '.jumei.com'
- '.kaiyanapp.com'
- '.kaola.com'
- '.kaspersky-labs.com'
- '.keepcdn.com'
- '.kkmh.com'
- '.knewone.com'
- '.koowo.com'
- '.ksyungslb.com'
- '.kuaidi100.com'
- '.kugou.com'
- '.lancdns.com'
- '.landiannews.com'
- '.lanzou.com'
- '.le.com'
- '.lecloud.com'
- '.lemicp.com'
- '.letitfly.me'
- '.letv.com'
- '.letvcloud.com'
- '.licdn.com'
- '.linkedin.com'
- '.lizhi.fm'
- '.lizhi.io'
- '.lizhifm.com'
- '.localizecdn.com'
- '.loli.net'
- '.lucifr.com'
- '.luojilab.com'
- '.luoo.net'
- '.lvmama.com'
- '.lxdns.com'
- '.mai.tn'
- '.maoyan.com'
- '.maoyun.tv'
- '.meilishuo.com'
- '.meituan.com'
- '.meituan.net'
- '.meizu.com'
- '.mi.com'
- '.migucloud.com'
- '.miguvideo.com'
- '.mob.com'
- '.mobike.com'
- '.mogu.com'
- '.mogucdn.com'
- '.mogujie.com'
- '.moji.com'
- '.moke.com'
- '.msstatic.com'
- '.mubu.com'
- '.myunlu.com'
- '.myzaker.com'
- '.nalytics.strava.com'
- '.nfoservers.com'
- '.ngabbs.com'
- '.nim-lang-cn.org'
- '.novipnoad.com'
- '.nruan.com'
- '.nssurge.com'
- '.nuomi.com'
- '.nvidia.com'
- '.office.com'
- '.onedns.net'
- '.onlinedown.net'
- '.oracle.com'
- '.oschina.net'
- '.overcast.fm'
- '.ownload.jetbrains.com'
- '.paypal.com'
- '.paypalobjects.com'
- '.pgyer.com'
- '.pniao.com'
- '.polyv.net'
- '.ppsimg.com'
- '.qbox.me'
- '.qcloud.com'
- '.qcloudcdn.com'
- '.qdaily.com'
- '.qdmm.com'
- '.qhimg.com'
- '.qianqian.com'
- '.qidian.com'
- '.qihucdn.com'
- '.qin.io'
- '.qingmang.me'
- '.qingmang.mobi'
- '.qiniu.com'
- '.qiniucdn.com'
- '.qiniudn.com'
- '.qiushibaike.com'
- '.qiyipic.com'
- '.quanmin.tv'
- '.qunar.com'
- '.qunarzz.com'
- '.qyer.com'
- '.qyerstatic.com'
- '.rarbg.to'
- '.raychase.net'
- '.repaik.com'
- '.ronghub.com'
- '.rrmj.tv'
- '.ruguoapp.com'
- '.runoob.com'
- '.s-reader.com'
- '.sankuai.com'
- '.scomper.me'
- '.seafile.com'
- '.segmentfault.com'
- '.sf-express.com'
- '.shumilou.net'
- '.simplecd.me'
- '.sinaimg.cn'
- '.sinaimg.com'
- '.sm.ms'
- '.smtp.*'
- '.smzdm.com'
- '.snapdrop.net'
- '.snwx.com'
- '.soufunimg.com'
- '.ssl-images-amazon.com'
- '.sspai.com'
- '.startssl.com'
- '.store.steampowered.com'
- '.suning.com'
- '.symcd.com'
- '.taihe.com'
- '.takungpao.com'
- '.tawk.link'
- '.tawk.to'
- '.teamviewer.com'
- '.th-sjy.com'
- '.tianqi.com'
- '.tianqistatic.com'
- '.tianyancha.com'
- '.tianyaui.com'
- '.tietuku.com'
- '.tiexue.net'
- '.tmiaoo.com'
- '.tmzvps.com'
- '.tophub.today'
- '.trello.com'
- '.trellocdn.com'
- '.trip.com'
- '.ttmeiju.com'
- '.tudou.com'
- '.tuniu.com'
- '.tuniucdn.com'
- '.udacity.com'
- '.umengcloud.com'
- '.umetrip.com'
- '.uning.com'
- '.unity3d.com'
- '.upyun.com'
- '.uxengine.net'
- '.veryzhun.com'
- '.videocc.net'
- '.vmware.com'
- '.wandoujia.com'
- '.weather.bjango.com'
- '.weather.com'
- '.webqxs.com'
- '.weidian.com'
- '.weiphone.com'
- '.weiphone.net'
- '.wenku8.net'
- '.werewolf.53site.com'
- '.windowsupdate.com'
- '.wkcdn.com'
- '.womai.com'
- '.workflowy.com'
- '.wscdns.com'
- '.xdrig.com'
- '.xhostfire.com'
- '.xhscdn.com'
- '.xiachufang.com'
- '.xiaohongshu.com'
- '.xiaojukeji.com'
- '.xinhuanet.com'
- '.xip.io'
- '.xitek.com'
- '.xiumi.us'
- '.xslb.net'
- '.xueqiu.com'
- '.yach.me'
- '.yangkeduo.com'
- '.yeepay.com'
- '.yhd.com'
- '.yihaodianimg.com'
- '.yinxiang.com'
- '.yinyuetai.com'
- '.yixia.com'
- '.ys168.com'
- '.yuewen.com'
- '.yy.com'
- '.yystatic.com'
- '.zealer.com'
- '.zgslb.net'
- '.zhangzishi.cc'
- '.zhanqi.tv'
- '.zhaopin.com'
- '.zhihu.com'
- '.zhimg.com'
- '.zhongsou.com'
- '.zhuihd.com'
- '.zoho.com'
- 'cdn.angruo.com'
- 'download.jetbrains.com'
- 'images-cn.ssl-images-amazon.com'

View File

@ -1,25 +0,0 @@
# 2020-05-20 03:00
payload:
# > Tencent
- '182.254.116.0/24'
- '203.205.252.0/23'
- '203.205.254.0/23'
# > TeamViewer
- '109.239.140.0/24'
- '139.220.243.27/32'
- '172.16.102.56/32'
- '185.188.32.1/28'
- '185.188.32.0/24'
- '185.188.33.0/24'
- '185.188.34.0/24'
- '185.188.35.0/24'
- '221.226.128.146/32'
# > aliyun
- '120.79.75.0/24'
- '120.79.75.225/24'
# > Other
- '185.188.32.0/24'
- '185.188.33.0/24'
- '185.188.34.0/24'
- '185.188.35.0/24'

View File

@ -1,22 +0,0 @@
# 2020-05-20 03:00
payload:
# > Steam
- '.fanatical.com'
- '.humblebundle.com'
- '.steamcommunity.com'
- '.steampowered.com'
- '.steamstatic.com'
# > xbox
- '.xbox.com'
- '.xboxlive.com'
# > Sony
- '.playstation.com'
- '.playstation.net'
- '.playstationnetwork.com'
- '.sonyentertainmentnetwork.com'
# > Blizzard
- '.blizzard.com'
- '.battle.net'
- '.battlenet.com'
- 'blzddist1-a.akamaihd.net'
- 'cdp.cloud.unity3d.com'

View File

@ -1,179 +0,0 @@
# 2020-05-20 03:00
payload:
# music
# > Deezer
- '.deezer.com'
- '.dzcdn.net'
# > KKBOX
- '.kkbox.com'
- '.kkbox.com.tw'
- '.kfs.io'
# > JOOX
- '.joox.com'
# > Pandora
- '.pandora.com'
# > SoundCloud
- '.p-cdn.us'
- '.sndcdn.com'
- '.soundcloud.com'
# > Spotify
- '.pscdn.co'
- '.scdn.co'
- '.spotify.com'
- '.spoti.fi'
- '.spotify.com'
- '.*spotify-com'
# > TIDAL
- '.tidal.com'
# video
# > All4
- '.c4assets.com'
- '.channel4.com'
# > ABC
- '.edgedatg.com'
- '.go.com'
# > AbemaTV
- '.abema.io'
- '.abema.tv'
- '.ameba.jp'
- '.akamaized.net'
- '.hayabusa.io'
- 'abematv.akamaized.net'
- 'ds-linear-abematv.akamaized.net'
- 'ds-vod-abematv.akamaized.net'
- 'linear-abematv.akamaized.net'
# > Amazon Prime Video
- '.avoddashs.'
- '.GlobalMedia.'
- '.aiv-cdn.net'
- '.aiv-delivery.net'
- '.amazonvideo.com'
- '.amazonaws.co.uk'
- '.amazonaws.com'
- '.primevideo.com'
- 'avodmp4s3ww-a.akamaihd.net'
- 'd25xi40x97liuc.cloudfront.net'
- 'dmqdd6hw24ucf.cloudfront.net'
- 'd22qjgkvxw22r6.cloudfront.net'
- 'd1v5ir2lpwr8os.cloudfront.net'
- '.llnwd.net'
# > BBCiPlayer
- '.bbcfmt.'
- '.GlobalTV.'
- '.uk-live.'
- 'aod-dash-uk-live.akamaized.net'
- 'aod-hls-uk-live.akamaized.net'
- 'vod-dash-uk-live.akamaized.net'
- 'vod-thumb-uk-live.akamaized.net'
# > DAZN
- '.voddazn.'
- 'd151l6v8er5bdm.cloudfront.net'
- '.dazn.com'
- '.dazn-api.com'
- '.dazndn.com'
- '.indazn.com'
- '.intercom.io'
# > DisneyPlus
- '.Disney*.'
- '.Disney+*.'
- 'cdn.cdn.unid.go.com'
- 'cdn.registerdisney.go.com'
- '.bamgrid.com'
- '.braze.com'
- '.conviva.com'
- '.disney-plus.net'
- '.disney.demdex.net'
- '.disneyplus.com'
- '.dssott.com'
- '.execute-api.us-east-1.amazonaws.com'
# > encoreTVB
- '.encoretvb.com'
- '.content.jwplatform.com'
- '.videos-f.jwpsrv.com'
- 'bcbolt446c5271-a.akamaihd.net'
- 'content.jwplatform.com'
- 'edge.api.brightcove.com'
- 'videos-f.jwpsrv.com'
# > FoxNow
- '.fox.com'
- '.foxdcg.com'
- '.theplatform.com'
- '.uplynk.com'
# > Fox+ HK
- '.akamaized.net'
- '.foxplus.com'
- '.theplatform.com'
# > Hulu
- 'hulu.com'
- 'huluim.com'
- 'hulustream.com'
- '.hulu.com'
- '.huluim.com'
- '.hulustream.com'
# > HuluJapan
- '.happyon.jp'
- '.hulu.jp'
# > ITV
- '.itv.com'
- '.itvstatic.com'
- 'itvpnpmobile-a.akamaihd.net'
# > JOOX
- '.joox.com'
# > Japonx
- '.japonx.'
- '.japronx.'
- '.japonx.com'
- '.japonx.tv'
- '.japonx.net'
- '.japonx.vip'
- '.japronx.com'
- '.japronx.tv'
- '.japronx.net'
- '.japronx.vip'
# > KKBOX
- '.kkbox.com'
- '.kkbox.com.tw'
- '.kfs.io'
# > KKTV
- 'kktv.com.tw'
- 'kktv-theater.kk.stream'
- '.kktv.me'
- '.kktv.com.tw'
- '.kktv-theater.kk.stream'
# > LiTV
- '.litv.tv'
- 'litvfreemobile-hichannel.cdn.hinet.net'
# > LineTV
- 'd3c7rimkq79yfu.cloudfront.net'
- '.linetv.tw'
# > My5
- '.channel5.com'
- '.my5.tv'
- 'd349g9zuie06uo.cloudfront.net'
# > PBS
- '.pbs.org'
# > ViuTV
- 'cognito-identity.us-east-1.amazonaws.com'
- 'mobileanalytics.us-east-1.amazonaws.com'
- 'viu.now.com'
- '.firebaseio.com'
- '.nowe.com'
- '.viu.com'
- '.viu.tv'
- '.viu.now.com'
# > niconico
- '.dmc.nico'
- '.nicovideo.jp'
- '.nimg.jp'
- '.socdm.com'
# > TikTok
- '.tiktokcdn.'
- '.muscdn.com'
- '.musical.ly'
- '.tiktokv.com'
- '.tiktokcdn.com'
# > feiliuTV
- '.neulion.com.'
- '.icntv.xyz.'
- '.flzbcdn.xyz.'

View File

@ -1,22 +0,0 @@
# 2020-05-20 03:00
payload:
# > Amazon Prime Video
- '13.32.0.0/15'
- '13.32.0.0/16'
- '13.33.0.0/16'
- '13.35.0.0/17'
- '18.184.0.0/15'
- '18.194.0.0/15'
- '18.208.0.0/13'
- '18.232.0.0/14'
- '52.200.0.0/13'
- '52.58.0.0/15'
- '52.74.0.0/16'
- '52.77.0.0/16'
- '52.84.0.0/15'
- '54.156.0.0/14'
- '54.226.0.0/15'
- '54.230.156.0/22'
- '54.93.0.0/16'
- '54.93.0.0/16'

View File

@ -1,29 +0,0 @@
# 2020-05-20 03:00
payload:
# > HBO NOW
- '.HBO%20NOW*.'
- '.hbo.com'
- '.hboasia.com'
- '.hbogo.com'
- '.hbonow.com'
- '.hbomax.com'
- 'execute-api.ap-southeast-1.amazonaws.com'
# > HBO GO HKG
- '.HBO%20GO%20PROD%20HKG*.'
- '.hbogoasia.com'
- '.hbogoasia.hk'
- 'bcbolthboa-a.akamaihd.net'
- 'players.brightcove.net'
- 's3-ap-southeast-1.amazonaws.com'
- 'dai3fd1oh325y.cloudfront.net'
- '44wilhpljf.execute-api.ap-southeast-1.amazonaws.com'
- 'hboasia1-i.akamaihd.net'
- 'hboasia2-i.akamaihd.net'
- 'hboasia3-i.akamaihd.net'
- 'hboasia4-i.akamaihd.net'
- 'hboasia5-i.akamaihd.net'
- 'cf-images.ap-southeast-1.prod.boltdns.net'
- 'hbolb.onwardsmg.com'
- 'api-hboprod.onwardsmg.com'
- 'hboprod.onwardsmg.com'

View File

@ -1,31 +0,0 @@
# 2020-05-20 03:00
payload:
# > bahamut
- '.bahamut.com'
- '.bahamut.com.tw'
- 'bahamut.com.tw'
- '.gamer.com.tw'
- 'gamer.com.tw'
- '.gamer.com'
- 'gamer-cds.cdn.hinet.net'
- 'gamer2-cds.cdn.hinet.net'
- '.hinet.net'
- '.ipify.org'
# > hwtv
- '.5itv.tv'
- '.ocnttv.com'
# > myTV SUPER
- '.mytv.'
- '.nowtv100.'
- '.rthklive.'
- '.mytvsuper.com'
- '.tvb.com'
# > twhao
- '.skyking.com.tw'
- 'hamifans.emome.net'
# > Twitch
- '.twitch.tv'
- '.twitchcdn.net'
- '.ttvnw.net'
- '.jtvnw.net'

View File

@ -1,60 +0,0 @@
#2020.5.23 14:05
payload:
# > Microsoft keyword
- '.onedrive.'
- '.skydrive.'
- '.1drv.'
- '.microsoft.'
# > Microsoft
- '.microsoft.com'
- '.s-microsoft.com'
- '.microsoftonline.com'
- '.microsoft-tst.com'
- '.azure.com'
- '.azureedge.net'
- '.fabric.io'
- '.files.1drv.com'
- '.hotmail.com'
- '.onenote.com'
- '.live.com'
- '.live.net'
- '.outlook.com'
- '.azure.com'
- '.edgesuite.net'
- '.msedge.net'
- '.windows.com'
- '.windows.net'
- '.bing.com'
- 'bing.com'
- '.bing.net'
- '.livefilestore.com'
- '.mesh.com'
- '.msn.com'
- '.office.com'
- '.office.net'
- '.office365.com'
- '.onedrive.com'
- '.sfx.ms'
- '.sharepoint.com'
- '.sharepointonline.com'
- '.skype.com'
- '.akamaihd.net'
- '.aspnetcdn.com'
- '.cloudapp.net'
- '.trafficmanager.net'
- '.visualstudio.com'
- 'dc.services.visualstudio.com'
- '.msecnd.net'

View File

@ -1,19 +0,0 @@
# 2020-05-20 03:00
payload:
- '.163yun.com'
- '.music.163.com'
- 'music.163.com'
- '.music.126.net'
- 'music.126.net'
- '.nosdn.127.net'
- 'nosdn.127.net'
- 'netease.com'
- '.netease.com'
- '.iplay.163.com'
- '.iplay.163.com'
- '.yjs2635.xyz'
- 'yjs2635.xyz'
- 'apm.music.163.com'
- 'apm3.music.163.com'
- 'interface.music.163.com'
- 'interface3.music.163.com'

View File

@ -1,21 +0,0 @@
# 2020-05-20 03:00
payload:
- '101.71.154.241/32'
- '103.126.92.132/32'
- '103.126.92.133/32'
- '112.13.119.17/32'
- '112.13.122.1/32'
- '115.236.118.33/32'
- '115.236.121.1/32'
- '118.24.63.156/32'
- '193.112.159.225/32'
- '223.252.199.66/32'
- '223.252.199.67/32'
- '39.105.63.80/32'
- '45.254.48.1/32'
- '47.100.127.239/32'
- '59.111.160.195/32'
- '59.111.160.197/32'
- '59.111.181.35/32'
- '59.111.181.38/32'
- '59.111.181.60/32'

View File

@ -1,24 +0,0 @@
# 2020-05-20 03:00
payload:
# > Netflix
- '.fast.com'
- '.netflix.'
- '.nflximg.'
- '.netflix.com'
- '.netflix.net'
- '.nflxext.com'
- '.nflximg.com'
- '.nflximg.net'
- '.nflxso.net'
- '.nflxvideo.net'
- '.netflixdnstest0.com'
- '.netflixdnstest1.com'
- '.netflixdnstest2.com'
- '.netflixdnstest3.com'
- '.netflixdnstest4.com'
- '.netflixdnstest5.com'
- '.netflixdnstest6.com'
- '.netflixdnstest7.com'
- '.netflixdnstest8.com'
- '.netflixdnstest9.com'

View File

@ -1,925 +0,0 @@
# 2020-05-20 03:00
payload:
# > Netflix
- '1.37.35.6/32'
- '101.100.179.242/32'
- '101.100.179.250/32'
- '105.187.240.196/32'
- '105.187.240.197/32'
- '105.187.243.5/32'
- '105.187.243.6/32'
- '112.198.26.2/32'
- '122.155.238.138/32'
- '122.155.238.142/32'
- '122.155.238.146/32'
- '122.155.238.150/32'
- '139.45.192.1/32'
- '139.45.206.1/32'
- '139.45.234.1/32'
- '14.136.135.180/32'
- '14.136.135.196/32'
- '14.136.137.68/32'
- '14.136.139.164/32'
- '140.197.247.84/32'
- '144.208.211.67/32'
- '145.253.34.129/32'
- '145.253.34.139/32'
- '145.253.34.141/32'
- '145.253.34.143/32'
- '145.253.34.145/32'
- '145.253.34.151/32'
- '145.253.34.153/32'
- '145.253.34.155/32'
- '145.253.34.157/32'
- '145.253.34.21/32'
- '145.253.34.55/32'
- '145.253.34.63/32'
- '146.115.2.226/32'
- '146.115.2.234/32'
- '146.115.2.238/32'
- '146.115.2.50/32'
- '146.115.2.62/32'
- '147.75.112.66/32'
- '147.75.112.67/32'
- '149.165.180.133/32'
- '149.165.180.134/32'
- '149.255.128.1/32'
- '151.5.17.19/32'
- '151.5.17.43/32'
- '161.0.157.195/32'
- '161.0.157.73/32'
- '162.212.12.52/32'
- '162.220.138.2/32'
- '162.223.18.131/32'
- '164.113.254.234/32'
- '167.142.14.130/32'
- '167.142.14.134/32'
- '167.142.14.138/32'
- '167.142.208.146/32'
- '170.238.0.198/32'
- '170.238.0.202/32'
- '170.238.0.206/32'
- '170.249.156.82/32'
- '170.249.179.114/32'
- '170.52.52.130/32'
- '172.56.128.126/32'
- '172.56.128.126/32'
- '172.56.132.126/32'
- '172.56.132.126/32'
- '172.56.133.126/32'
- '172.56.133.126/32'
- '172.56.138.126/32'
- '172.56.138.126/32'
- '172.56.139.126/32'
- '172.56.139.126/32'
- '172.56.140.126/32'
- '172.56.140.126/32'
- '172.56.141.126/32'
- '172.56.141.126/32'
- '172.56.143.126/32'
- '172.56.143.126/32'
- '172.56.145.66/32'
- '172.56.145.66/32'
- '173.219.132.226/32'
- '173.219.132.229/32'
- '173.219.194.149/32'
- '173.219.194.49/32'
- '173.219.222.237/32'
- '173.219.237.165/32'
- '173.219.75.17/32'
- '173.219.75.19/32'
- '173.235.1.133/32'
- '173.244.134.58/32'
- '181.188.0.162/32'
- '181.188.0.166/32'
- '181.36.10.194/32'
- '181.36.10.198/32'
- '181.36.10.202/32'
- '181.36.10.206/32'
- '181.36.10.210/32'
- '181.36.10.214/32'
- '181.36.10.234/32'
- '181.36.10.238/32'
- '181.36.10.242/32'
- '181.36.10.246/32'
- '181.36.10.38/32'
- '181.36.10.4/32'
- '181.36.10.42/32'
- '181.39.188.10/32'
- '181.39.188.13/32'
- '181.39.188.14/32'
- '181.39.188.18/32'
- '181.39.188.19/32'
- '181.39.188.20/32'
- '181.39.44.170/32'
- '181.39.44.174/32'
- '181.39.44.178/32'
- '181.39.44.179/32'
- '181.39.44.180/32'
- '181.39.44.181/32'
- '181.39.44.182/32'
- '181.39.44.183/32'
- '182.50.85.101/32'
- '182.50.85.102/32'
- '182.50.85.110/32'
- '182.50.85.117/32'
- '182.50.85.118/32'
- '182.50.85.126/32'
- '182.79.164.10/32'
- '182.79.164.136/32'
- '182.79.164.14/32'
- '182.79.164.140/32'
- '182.79.164.142/32'
- '182.79.164.144/32'
- '182.79.164.2/32'
- '182.79.164.6/32'
- '182.79.223.230/32'
- '182.79.223.234/32'
- '182.79.223.238/32'
- '182.79.223.242/32'
- '182.79.223.246/32'
- '182.79.223.250/32'
- '184.150.14.101/32'
- '184.150.14.103/32'
- '184.150.14.11/32'
- '184.150.14.129/32'
- '184.150.14.13/32'
- '184.150.14.131/32'
- '184.150.14.133/32'
- '184.150.14.135/32'
- '184.150.14.137/32'
- '184.150.14.139/32'
- '184.150.14.141/32'
- '184.150.14.143/32'
- '184.150.14.145/32'
- '184.150.14.147/32'
- '184.150.14.149/32'
- '184.150.14.15/32'
- '184.150.14.151/32'
- '184.150.14.153/32'
- '184.150.14.155/32'
- '184.150.14.157/32'
- '184.150.14.159/32'
- '184.150.14.161/32'
- '184.150.14.163/32'
- '184.150.14.165/32'
- '184.150.14.17/32'
- '184.150.14.19/32'
- '184.150.14.193/32'
- '184.150.14.195/32'
- '184.150.14.197/32'
- '184.150.14.199/32'
- '184.150.14.201/32'
- '184.150.14.203/32'
- '184.150.14.205/32'
- '184.150.14.207/32'
- '184.150.14.209/32'
- '184.150.14.21/32'
- '184.150.14.211/32'
- '184.150.14.213/32'
- '184.150.14.215/32'
- '184.150.14.217/32'
- '184.150.14.219/32'
- '184.150.14.221/32'
- '184.150.14.223/32'
- '184.150.14.225/32'
- '184.150.14.227/32'
- '184.150.14.229/32'
- '184.150.14.23/32'
- '184.150.14.25/32'
- '184.150.14.27/32'
- '184.150.14.29/32'
- '184.150.14.3/32'
- '184.150.14.31/32'
- '184.150.14.33/32'
- '184.150.14.35/32'
- '184.150.14.37/32'
- '184.150.14.39/32'
- '184.150.14.5/32'
- '184.150.14.65/32'
- '184.150.14.67/32'
- '184.150.14.69/32'
- '184.150.14.7/32'
- '184.150.14.71/32'
- '184.150.14.73/32'
- '184.150.14.75/32'
- '184.150.14.77/32'
- '184.150.14.79/32'
- '184.150.14.81/32'
- '184.150.14.83/32'
- '184.150.14.85/32'
- '184.150.14.87/32'
- '184.150.14.89/32'
- '184.150.14.9/32'
- '184.150.14.91/32'
- '184.150.14.93/32'
- '184.150.14.95/32'
- '184.150.14.97/32'
- '184.150.14.99/32'
- '184.150.15.1/32'
- '184.150.15.101/32'
- '184.150.15.11/32'
- '184.150.15.13/32'
- '184.150.15.15/32'
- '184.150.15.21/32'
- '184.150.15.23/32'
- '184.150.15.25/32'
- '184.150.15.27/32'
- '184.150.15.29/32'
- '184.150.15.3/32'
- '184.150.15.31/32'
- '184.150.15.33/32'
- '184.150.15.35/32'
- '184.150.15.37/32'
- '184.150.15.39/32'
- '184.150.15.5/32'
- '184.150.15.7/32'
- '184.150.15.85/32'
- '184.150.15.87/32'
- '184.150.15.89/32'
- '184.150.15.9/32'
- '184.150.15.91/32'
- '184.150.15.93/32'
- '184.150.15.95/32'
- '184.150.15.97/32'
- '184.150.15.99/32'
- '184.175.190.38/32'
- '185.43.181.232/32'
- '185.43.181.232/32'
- '185.43.181.234/32'
- '185.43.181.236/32'
- '185.43.181.238/32'
- '185.43.181.240/32'
- '185.43.181.240/32'
- '185.43.181.246/32'
- '185.97.110.36/32'
- '186.15.229.194/32'
- '186.15.234.18/32'
- '186.176.224.18/32'
- '186.177.100.2/32'
- '186.177.66.50/32'
- '186.179.71.154/32'
- '186.96.222.38/32'
- '188.47.194.235/32'
- '188.47.194.243/32'
- '188.47.194.244/32'
- '188.47.194.245/32'
- '188.47.194.252/32'
- '188.47.194.253/32'
- '188.47.196.228/32'
- '188.47.196.252/32'
- '188.47.196.253/32'
- '188.47.208.242/32'
- '188.47.208.242/32'
- '189.194.232.193/32'
- '189.194.232.194/32'
- '189.194.232.195/32'
- '189.194.232.196/32'
- '189.216.4.67/32'
- '189.216.4.69/32'
- '190.98.134.128/32'
- '190.98.134.130/32'
- '190.98.134.132/32'
- '190.98.134.134/32'
- '190.98.134.136/32'
- '190.98.134.138/32'
- '190.98.134.140/32'
- '190.98.134.144/32'
- '190.98.134.146/32'
- '190.98.156.141/32'
- '190.98.156.141/32'
- '190.98.156.149/32'
- '190.98.156.149/32'
- '190.98.156.183/32'
- '190.98.156.183/32'
- '192.148.237.10/32'
- '192.148.237.130/32'
- '192.148.237.138/32'
- '192.148.237.146/32'
- '192.148.237.18/32'
- '192.148.237.2/32'
- '193.109.100.131/32'
- '193.212.179.102/32'
- '193.212.179.106/32'
- '193.212.179.110/32'
- '193.212.179.114/32'
- '193.212.179.118/32'
- '193.212.179.122/32'
- '193.212.179.126/32'
- '193.212.179.130/32'
- '193.212.179.146/32'
- '193.212.179.82/32'
- '193.212.179.98/32'
- '193.247.193.100/32'
- '193.247.193.100/32'
- '193.247.193.38/32'
- '193.247.193.72/32'
- '193.247.193.74/32'
- '193.247.193.74/32'
- '193.247.193.99/32'
- '193.247.193.99/32'
- '194.228.248.66/32'
- '194.228.248.66/32'
- '195.121.126.132/32'
- '195.121.126.139/32'
- '195.121.126.144/32'
- '195.121.126.164/32'
- '195.121.126.175/32'
- '195.121.126.177/32'
- '195.121.126.197/32'
- '195.121.126.202/32'
- '195.121.126.228/32'
- '195.121.126.235/32'
- '195.202.131.98/32'
- '195.8.12.194/32'
- '195.8.12.202/32'
- '195.8.12.206/32'
- '195.8.12.225/32'
- '195.8.12.227/32'
- '197.149.149.194/32'
- '197.230.237.209/32'
- '197.230.37.209/32'
- '198.32.232.82/32'
- '198.7.237.134/32'
- '200.107.255.198/32'
- '200.107.255.202/32'
- '200.107.255.206/32'
- '200.114.32.130/32'
- '200.114.32.194/32'
- '200.114.32.2/32'
- '200.114.32.66/32'
- '200.114.33.130/32'
- '200.114.33.194/32'
- '200.114.33.66/32'
- '200.114.34.130/32'
- '200.114.34.194/32'
- '200.114.34.2/32'
- '200.114.34.66/32'
- '200.114.35.130/32'
- '200.114.35.194/32'
- '200.114.35.2/32'
- '200.114.35.66/32'
- '200.114.60.34/32'
- '201.148.100.94/32'
- '201.148.101.122/32'
- '201.148.101.126/32'
- '201.148.101.194/32'
- '201.148.101.198/32'
- '201.148.101.250/32'
- '201.148.101.42/32'
- '201.148.101.50/32'
- '201.148.101.54/32'
- '201.148.103.10/32'
- '201.148.103.14/32'
- '201.172.162.1/32'
- '201.172.162.7/32'
- '201.174.112.54/32'
- '201.174.146.142/32'
- '201.174.146.18/32'
- '201.174.249.18/32'
- '201.174.249.34/32'
- '201.174.48.130/32'
- '202.188.117.43/32'
- '202.188.117.45/32'
- '203.116.200.130/32'
- '203.116.200.131/32'
- '203.116.200.134/32'
- '203.116.200.134/32'
- '203.116.200.135/32'
- '203.116.200.136/32'
- '203.116.200.136/32'
- '203.116.200.137/32'
- '203.116.210.132/32'
- '203.116.210.133/32'
- '203.116.210.133/32'
- '203.116.210.134/32'
- '203.116.210.135/32'
- '203.116.210.136/32'
- '203.116.210.137/32'
- '203.116.210.196/32'
- '203.116.210.196/32'
- '203.116.210.197/32'
- '203.116.210.198/32'
- '203.116.210.198/32'
- '203.116.210.199/32'
- '203.116.210.199/32'
- '203.116.210.200/32'
- '203.116.210.200/32'
- '203.116.210.201/32'
- '203.177.54.2/32'
- '204.17.140.250/32'
- '205.185.100.38/32'
- '206.192.244.33/32'
- '206.196.177.135/32'
- '206.71.231.34/32'
- '206.71.231.38/32'
- '206.71.231.46/32'
- '206.71.231.50/32'
- '207.172.195.178/32'
- '207.172.195.182/32'
- '207.172.195.190/32'
- '207.172.195.50/32'
- '207.172.61.142/32'
- '207.172.61.146/32'
- '207.172.69.202/32'
- '207.172.69.206/32'
- '207.181.192.194/32'
- '207.181.192.198/32'
- '207.181.192.205/32'
- '207.181.192.210/32'
- '207.228.148.78/32'
- '207.237.69.34/32'
- '207.44.120.194/32'
- '207.44.120.198/32'
- '207.44.120.202/32'
- '207.44.120.210/32'
- '207.44.120.214/32'
- '207.44.123.18/32'
- '207.44.123.254/32'
- '207.44.123.42/32'
- '207.44.123.46/32'
- '207.44.123.50/32'
- '207.44.123.54/32'
- '207.44.123.58/32'
- '207.44.123.62/32'
- '207.44.124.234/32'
- '208.104.1.158/32'
- '208.104.243.122/32'
- '208.104.243.134/32'
- '208.180.184.241/32'
- '208.180.184.243/32'
- '208.180.185.13/32'
- '208.180.59.229/32'
- '208.54.16.65/32'
- '208.54.2.3/32'
- '208.54.2.3/32'
- '208.54.37.30/32'
- '208.54.37.30/32'
- '208.54.66.30/32'
- '208.54.67.30/32'
- '208.54.67.30/32'
- '208.54.70.30/32'
- '208.54.70.30/32'
- '208.54.80.30/32'
- '208.54.80.30/32'
- '208.54.85.30/32'
- '208.54.85.30/32'
- '208.76.186.5/32'
- '208.76.186.50/32'
- '208.76.186.58/32'
- '208.76.186.62/32'
- '208.76.186.7/32'
- '209.166.100.18/32'
- '209.166.100.22/32'
- '211.25.221.90/32'
- '211.25.221.94/32'
- '212.113.160.242/32'
- '212.230.122.34/32'
- '212.6.80.20/32'
- '212.6.80.4/32'
- '213.140.51.111/32'
- '213.158.201.180/32'
- '216.183.33.177/32'
- '216.239.1.102/32'
- '216.248.75.146/32'
- '216.248.75.150/32'
- '216.68.10.42/32'
- '216.68.10.46/32'
- '216.68.10.50/32'
- '216.68.10.54/32'
- '216.68.10.62/32'
- '216.68.248.166/32'
- '216.68.248.170/32'
- '216.68.248.174/32'
- '216.68.248.178/32'
- '216.68.248.182/32'
- '216.68.248.190/32'
- '216.70.1.54/32'
- '23.228.129.239/32'
- '23.228.129.247/32'
- '23.228.129.65/32'
- '23.228.129.67/32'
- '23.228.129.75/32'
- '23.228.129.77/32'
- '23.228.129.79/32'
- '23.228.129.81/32'
- '23.228.131.233/32'
- '23.228.131.235/32'
- '23.228.131.237/32'
- '23.228.131.239/32'
- '24.101.22.50/32'
- '24.101.22.54/32'
- '24.101.91.13/32'
- '24.101.91.15/32'
- '24.124.3.52/32'
- '24.124.7.106/32'
- '24.200.239.66/32'
- '24.200.239.70/32'
- '24.200.239.74/32'
- '24.200.239.78/32'
- '24.200.239.86/32'
- '24.215.101.170/32'
- '24.220.183.136/32'
- '24.220.183.137/32'
- '24.220.183.138/32'
- '24.220.183.139/32'
- '24.220.183.140/32'
- '24.220.183.141/32'
- '24.220.183.142/32'
- '24.220.183.152/32'
- '24.220.183.153/32'
- '24.220.183.154/32'
- '24.220.183.155/32'
- '24.220.183.156/32'
- '24.220.183.157/32'
- '24.220.183.158/32'
- '24.222.87.162/32'
- '37.143.80.10/32'
- '37.143.80.14/32'
- '37.143.80.6/32'
- '37.143.86.34/32'
- '37.143.86.50/32'
- '37.143.86.66/32'
- '37.143.86.82/32'
- '40.129.34.173/32'
- '40.129.34.175/32'
- '40.129.34.177/32'
- '40.133.138.47/32'
- '40.133.138.57/32'
- '43.245.105.1/32'
- '43.245.105.1/32'
- '43.245.105.11/32'
- '43.245.105.11/32'
- '43.245.105.129/32'
- '43.245.105.13/32'
- '43.245.105.9/32'
- '43.245.105.9/32'
- '45.121.219.34/32'
- '45.57.56.130/32'
- '49.231.114.6/32'
- '49.231.121.6/32'
- '50.125.239.30/32'
- '50.125.68.250/32'
- '50.27.152.107/32'
- '50.27.152.119/32'
- '50.46.97.70/32'
- '51.148.80.10/32'
- '51.148.80.18/32'
- '51.148.80.22/32'
- '51.148.80.6/32'
- '58.27.11.201/32'
- '58.27.11.201/32'
- '58.27.38.199/32'
- '62.127.102.10/32'
- '62.127.102.14/32'
- '62.127.102.18/32'
- '62.127.102.2/32'
- '62.127.102.22/32'
- '62.127.102.26/32'
- '62.127.102.30/32'
- '62.127.102.34/32'
- '62.127.102.38/32'
- '62.127.102.42/32'
- '62.127.102.46/32'
- '62.127.102.54/32'
- '62.127.102.58/32'
- '62.127.102.6/32'
- '62.127.102.62/32'
- '62.252.213.64/32'
- '62.252.213.68/32'
- '62.252.213.70/32'
- '62.252.213.72/32'
- '62.252.213.74/32'
- '62.252.213.76/32'
- '62.252.213.78/32'
- '62.252.213.80/32'
- '62.252.213.84/32'
- '62.252.213.86/32'
- '62.252.213.88/32'
- '62.253.139.0/32'
- '62.253.139.11/32'
- '62.253.139.129/32'
- '62.253.139.13/32'
- '62.253.139.131/32'
- '62.253.139.133/32'
- '62.253.139.135/32'
- '62.253.139.137/32'
- '62.253.139.139/32'
- '62.253.139.141/32'
- '62.253.139.3/32'
- '62.253.139.5/32'
- '62.253.139.7/32'
- '62.253.139.9/32'
- '62.254.47.0/32'
- '62.254.47.128/32'
- '62.254.47.130/32'
- '62.254.47.132/32'
- '62.254.47.2/32'
- '62.254.47.4/32'
- '62.255.44.0/32'
- '62.255.44.128/32'
- '62.255.44.130/32'
- '62.255.44.132/32'
- '62.255.44.2/32'
- '62.255.44.4/32'
- '62.4.253.129/32'
- '62.4.253.131/32'
- '62.4.253.133/32'
- '62.4.253.135/32'
- '62.4.253.137/32'
- '62.4.253.139/32'
- '62.4.253.143/32'
- '62.4.253.145/32'
- '62.4.253.147/32'
- '62.4.253.149/32'
- '62.4.253.151/32'
- '62.4.253.153/32'
- '62.4.253.155/32'
- '62.4.253.157/32'
- '62.4.253.159/32'
- '62.4.253.161/32'
- '62.4.253.163/32'
- '62.4.253.165/32'
- '62.4.253.167/32'
- '62.4.253.169/32'
- '62.4.253.171/32'
- '62.4.253.173/32'
- '62.4.253.175/32'
- '62.4.253.177/32'
- '62.4.253.179/32'
- '62.4.253.181/32'
- '62.4.253.183/32'
- '62.4.253.185/32'
- '62.4.253.187/32'
- '62.4.253.189/32'
- '62.4.253.191/32'
- '62.75.21.17/32'
- '62.75.21.18/32'
- '62.75.21.19/32'
- '62.75.21.20/32'
- '62.75.21.3/32'
- '62.75.21.33/32'
- '62.75.21.4/32'
- '64.126.2.110/32'
- '64.126.2.246/32'
- '64.136.255.34/32'
- '64.189.192.66/32'
- '64.30.98.210/32'
- '64.30.98.214/32'
- '64.33.157.254/32'
- '64.4.89.225/32'
- '64.4.89.227/32'
- '64.4.89.229/32'
- '64.4.89.231/32'
- '64.4.89.233/32'
- '64.4.89.235/32'
- '64.4.89.237/32'
- '64.4.89.239/32'
- '64.4.91.113/32'
- '64.4.91.115/32'
- '64.4.91.116/32'
- '64.4.91.118/32'
- '64.50.224.130/32'
- '64.50.228.250/32'
- '64.50.228.254/32'
- '64.53.14.5/32'
- '64.53.14.6/32'
- '64.53.14.7/32'
- '64.53.14.70/32'
- '64.53.14.71/32'
- '65.48.147.74/32'
- '65.75.64.210/32'
- '65.75.64.211/32'
- '66.18.33.62/32'
- '66.18.34.46/32'
- '66.18.34.50/32'
- '66.232.66.130/32'
- '66.232.66.134/32'
- '66.232.66.154/32'
- '66.35.4.54/32'
- '66.44.84.130/32'
- '66.44.84.134/32'
- '66.44.84.178/32'
- '66.44.84.182/32'
- '66.44.84.186/32'
- '66.60.128.139/32'
- '66.60.128.46/32'
- '66.76.204.81/32'
- '66.76.32.17/32'
- '66.76.32.19/32'
- '66.76.35.241/32'
- '66.90.138.0/32'
- '66.90.138.10/32'
- '66.90.138.12/32'
- '66.90.138.15/32'
- '66.90.138.17/32'
- '66.90.138.2/32'
- '66.90.138.82/32'
- '66.90.138.86/32'
- '66.90.138.88/32'
- '66.90.138.94/32'
- '66.90.139.90/32'
- '67.218.93.89/32'
- '67.218.93.91/32'
- '67.221.221.17/32'
- '67.221.221.29/32'
- '67.221.221.31/32'
- '68.65.44.186/32'
- '68.65.44.190/32'
- '69.147.194.190/32'
- '69.160.211.50/32'
- '70.33.57.75/32'
- '71.169.136.4/32'
- '71.169.136.5/32'
- '71.169.136.6/32'
- '71.169.136.7/32'
- '71.169.137.4/32'
- '71.169.137.6/32'
- '71.169.137.7/32'
- '71.33.48.107/32'
- '71.33.48.109/32'
- '71.33.48.113/32'
- '71.33.48.115/32'
- '71.33.48.121/32'
- '71.33.48.123/32'
- '71.33.48.37/32'
- '71.33.48.39/32'
- '71.33.48.43/32'
- '71.33.48.65/32'
- '71.33.48.67/32'
- '71.33.48.69/32'
- '71.33.48.7/32'
- '71.33.48.71/32'
- '71.33.48.73/32'
- '71.33.48.75/32'
- '71.33.48.77/32'
- '71.33.48.79/32'
- '71.33.48.89/32'
- '71.33.48.91/32'
- '71.33.48.93/32'
- '71.33.48.95/32'
- '71.33.48.97/32'
- '71.33.48.99/32'
- '71.33.49.1/32'
- '71.33.49.17/32'
- '71.33.49.21/32'
- '71.33.49.27/32'
- '71.33.49.29/32'
- '71.33.49.3/32'
- '71.33.49.31/32'
- '71.33.49.33/32'
- '71.33.49.35/32'
- '71.33.49.5/32'
- '71.33.49.7/32'
- '71.33.49.9/32'
- '71.33.50.129/32'
- '71.33.50.131/32'
- '71.33.50.133/32'
- '71.33.50.225/32'
- '71.33.50.241/32'
- '71.33.50.69/32'
- '71.33.50.71/32'
- '71.33.50.85/32'
- '71.33.50.87/32'
- '71.33.50.89/32'
- '72.22.30.34/32'
- '72.23.10.194/32'
- '72.23.10.198/32'
- '72.240.7.141/32'
- '72.252.113.189/32'
- '74.204.125.22/32'
- '74.81.99.178/32'
- '74.81.99.182/32'
- '74.81.99.186/32'
- '74.85.65.115/32'
- '76.165.16.66/32'
- '76.78.67.118/32'
- '78.146.119.11/32'
- '78.146.119.141/32'
- '78.146.119.143/32'
- '78.146.119.207/32'
- '78.146.119.39/32'
- '78.146.119.41/32'
- '78.146.119.47/32'
- '78.146.119.7/32'
- '80.64.176.144/32'
- '80.64.176.146/32'
- '80.64.176.148/32'
- '81.244.254.129/32'
- '81.244.254.131/32'
- '81.3.201.194/32'
- '81.3.201.202/32'
- '81.3.201.203/32'
- '81.45.152.0/32'
- '81.45.152.10/32'
- '81.45.152.12/32'
- '81.45.152.122/32'
- '81.45.152.124/32'
- '81.45.152.126/32'
- '81.45.152.14/32'
- '81.45.152.16/32'
- '81.45.152.18/32'
- '81.45.152.2/32'
- '81.45.152.20/32'
- '81.45.152.22/32'
- '81.45.152.4/32'
- '81.45.152.58/32'
- '81.45.152.6/32'
- '81.45.152.60/32'
- '81.45.152.62/32'
- '81.45.152.64/32'
- '81.45.152.66/32'
- '81.45.152.68/32'
- '81.45.152.70/32'
- '81.45.152.72/32'
- '81.45.152.74/32'
- '81.45.152.76/32'
- '81.45.152.78/32'
- '81.45.152.8/32'
- '81.45.152.80/32'
- '81.45.152.82/32'
- '81.45.152.84/32'
- '81.45.152.86/32'
- '81.91.205.193/32'
- '82.149.120.162/32'
- '87.79.22.170/32'
- '89.184.160.146/32'
- '89.184.160.147/32'
- '89.27.129.56/32'
- '89.27.129.68/32'
- '89.27.129.72/32'
- '89.27.129.90/32'
- '89.27.129.91/32'
- '89.27.129.92/32'
- '89.27.129.93/32'
- '89.27.129.94/32'
- '89.27.244.121/32'
- '89.27.244.123/32'
- '89.27.244.125/32'
- '89.27.244.127/32'
- '89.27.244.131/32'
- '89.27.244.133/32'
- '89.27.244.135/32'
- '89.96.194.106/32'
- '89.96.194.114/32'
- '89.96.194.118/32'
- '89.96.194.2/32'
- '89.96.194.6/32'
- '89.96.194.90/32'
- '89.96.194.94/32'
- '90.255.251.226/32'
- '90.255.251.230/32'
- '90.255.251.234/32'
- '90.255.254.130/32'
- '90.255.254.134/32'
- '90.255.254.138/32'
- '90.255.254.142/32'
- '90.255.254.146/32'
- '90.255.254.150/32'
- '90.255.254.194/32'
- '90.255.254.2/32'
- '90.255.254.202/32'
- '90.255.254.206/32'
- '90.255.254.210/32'
- '90.255.254.214/32'
- '90.255.254.6/32'
- '90.255.254.66/32'
- '90.255.254.70/32'
- '94.245.201.194/32'
- '94.245.201.202/32'
- '94.245.201.203/32'
- '94.245.201.218/32'
- '96.20.0.66/32'
- '96.20.0.70/32'
- '96.20.0.74/32'
- '96.20.0.78/32'
- '96.20.0.82/32'
- '96.21.0.66/32'
- '96.21.0.70/32'
- '96.21.0.74/32'
- '96.21.0.78/32'
- '96.22.15.66/32'
- '96.22.15.70/32'
- '96.22.15.74/32'
- '96.22.15.78/32'
- '96.23.20.66/32'
- '96.23.20.70/32'
- '96.23.20.74/32'
- '96.23.20.78/32'
- '96.4.63.99/32'
- '8.41.4.0/24'
- '23.246.0.0/18'
- '37.77.184.0/21'
- '45.57.0.0/17'
- '45.64.0.0/17'
- '64.120.128.0/17'
- '66.197.128.0/17'
- '69.53.224.0/19'
- '108.175.32.0/20'
- '185.2.220.0/22'
- '185.9.188.0/22'
- '192.173.64.0/18'
- '198.38.96.0/19'
- '198.45.48.0/20'
- '207.45.72.0/22'
- '208.75.76.0/22'

View File

@ -1,8 +0,0 @@
# 2020-05-20 03:00
payload:
- 'paypal.*'
- '.paypal.'
- 'paypal.com'
- 'paypalobjects.com'
- '.paypal.com'
- '.paypalobjects.com'

View File

@ -1,57 +0,0 @@
# 2020-05-20 03:00
payload:
# > Facebook
- '74.125.0.0/16'
- '74.119.76.0/22'
- '69.63.176.0/20'
- '69.171.224.0/19'
- '66.220.144.0/20'
- '45.64.40.0/22'
- '31.13.85.8/16'
- '31.13.64.0/18'
- '31.13.24.0/21'
- '204.15.20.0/22'
- '185.60.216.0/22'
- '179.60.192.0/22'
- '173.252.96.0/19'
- '173.252.64.0/19'
- '173.194.0.0/16'
- '157.240.0.0/17'
- '129.134.0.0/17'
- '103.4.96.0/22'
- '74.119.76.0/22'
- '69.63.176.0/20'
- '69.171.224.0/19'
- '66.220.144.0/20'
- '45.64.40.0/22'
- '31.13.64.0/18'
- '31.13.24.0/21'
- '204.15.20.0/22'
- '185.60.216.0/22'
- '179.60.192.0/22'
- '173.252.64.0/18'
- '157.240.0.0/17'
- '129.134.0.0/17'
- '103.4.96.0/22'
# > Potato Chat
- '13.251.24.157/24'
- '13.251.41.203/24'
- '17.252.156.147/24'
- '17.252.157.26/24'
# > SoftLayer
- '74.86.0.0/16'
- '75.126.0.0/16'
- '174.37.0.0/16'
- '208.43.0.0/16'
# > TeamViewer
- '109.239.140.0/24'
- '139.220.243.27/32'
- '172.16.102.56/32'
- '185.188.32.1/28'
- '221.226.128.146/32'
# > google
- '173.194.0.0/16'
- '74.125.0.0/16'
- '196.55.192.0/18'
- '104.16.0.0/12'

View File

@ -1,11 +0,0 @@
#2020.5.21 16:40
payload:
# > speedtest
- '.speedtest.'
- '.ooklaserver.net'
- '.speedtest.net'
- '.netspeedtestmaster.com'
- '.speedtestcustom.com'
- '.fdcservers.net'
- '.hgc.com'
- 'ookla-speedtest.hgconair.hgc.com.hk'

View File

@ -1,53 +0,0 @@
# 2020-05-20 03:00
payload:
# > Discord
- '.discord.gg'
- '.discord.media'
- '.discordapp.com'
- '.discordapp.net'
# > KaKaoTalk
- '.KakaoTalk*.'
- '.kakao.com'
- '.kakao.co.kr'
- '.kakaocdn.net'
# > LINE
- '.scdn.co'
- '.lin.ee'
- '.line.naver.jp'
- 'line.naver.jp'
- '.line.me'
- '.line-apps.com'
- '.line-cdn.net'
- '.line-scdn.net'
- '.line-apps.com'
- '.line-cdn.net'
- '.line-scdn.net'
- '.nhncorp.jp'
# > Pinterest
- '.Pinterest*.'
- '.pinimg.com'
- '.pinterest.com'
# > Pinterest
- '.Slack*.'
- '.slack-edge.com'
- '.slack.com'
- '.slack-msgs.com'
# > Whatsapp
- '.whatsapp.com'
- '.whatsapp.net'
# > Instagram
- '.cdninstagram.com'
- '.instagram.com'
- '.instagr.am'
- '.akamaihd.net'
# > Telegram
- 't.me'
- '.t.me'
- 'tdesktop.com'
- '.tdesktop.com'
- 'telegra.ph'
- '.telegra.ph'
- 'telegram.me'
- '.telegram.me'
- 'telegram.org'
- '.telegram.org'

View File

@ -1,109 +0,0 @@
# 2020-05-20 03:00
payload:
# > LINE
- '103.2.28.0/24'
- '103.2.30.0/23'
- '103.2.30.0/24'
- '103.2.31.0/24'
- '119.235.224.0/24'
- '119.235.232.0/24'
- '119.235.235.0/24'
- '119.235.236.0/23'
- '119.235.236.0/24'
- '119.235.237.0/24'
- '147.92.128.0/17'
- '147.92.128.0/24'
- '147.92.129.0/24'
- '147.92.130.0/24'
- '147.92.131.0/24'
- '147.92.132.0/24'
- '147.92.133.0/24'
- '147.92.134.0/24'
- '147.92.135.0/24'
- '147.92.248.0/21'
- '203.104.128.0/20'
- '203.104.128.0/24'
- '203.104.129.0/24'
- '203.104.130.0/24'
- '203.104.131.0/24'
- '203.104.132.0/24'
- '203.104.133.0/24'
- '203.104.134.0/24'
- '203.104.135.0/24'
- '203.104.136.0/24'
- '203.104.137.0/24'
- '203.104.138.0/24'
- '203.104.139.0/24'
- '203.104.140.0/24'
- '203.104.141.0/24'
- '203.104.142.0/24'
- '203.104.143.0/24'
- '203.104.144.0/21'
- '203.104.144.0/24'
- '203.104.145.0/24'
- '203.104.146.0/24'
- '203.104.147.0/24'
- '203.104.148.0/24'
- '203.104.149.0/24'
- '203.104.150.0/24'
- '203.104.151.0/24'
- '203.104.152.0/22'
- '203.104.152.0/24'
- '203.104.153.0/24'
- '203.104.154.0/24'
- '203.104.155.0/24'
- '203.104.156.0/23'
- '203.104.156.0/24'
- '203.104.157.0/24'
- '203.104.158.0/24'
# > Kakao Talk
- '1.201.0.0/24'
- '103.246.56.0/22'
- '103.27.148.0/22'
- '110.76.140.0/22'
- '113.61.104.0/22'
- '27.0.236.0/22'
- '18.194.0.0/15'
- '34.224.0.0/12'
- '50.22.198.204/30'
- '54.242.0.0/15'
- '69.171.235.0/16'
- '75.126.150.0/16'
- '108.168.174.0/16'
- '158.85.5.192/27'
- '158.85.46.128/27'
- '158.85.224.160/27'
- '173.192.222.160/27'
- '173.192.231.32/27'
- '174.37.243.0/16'
- '184.173.128.0/17'
- '208.43.122.128/27'
# > Whatsapp
- '18.194.0.0/15'
- '34.224.0.0/12'
- '50.22.198.204/30'
- '54.242.0.0/15'
- '69.171.235.0/16'
- '75.126.150.0/16'
- '108.168.174.0/16'
- '158.85.5.192/27'
- '158.85.46.128/27'
- '158.85.224.160/27'
- '173.192.222.160/27'
- '173.192.231.32/27'
- '174.37.243.0/16'
- '184.173.128.0/17'
- '208.43.122.128/27'
# > Telegram
- '91.108.4.0/22'
- '91.108.8.0/21'
- '91.108.12.0/22'
- '91.108.16.0/21'
- '91.108.56.0/22'
- '91.108.56.0/23'
- '95.161.64.0/20'
- '109.239.140.0/24'
- '149.154.160.0/22'
- '149.154.164.0/22'
- '149.154.168.0/22'
- '149.154.172.0/22'

View File

@ -1,18 +0,0 @@
# 2020-05-23 14:55
payload:
# > Youtube
- '.youtube.'
- 'youtu.be'
- '.youtu.be'
- '.youtube.com'
- 'youtubei.googleapis.com'
- '.youtube-nocookie.com'
- '.googlevideo.com'
- '.gvt2.com'
- 'l.google.com'
- '.l.google.com'
- '.arubanetworks.com'
- '.ytimg.com'
- '.ggpht.com'

View File

@ -1,18 +0,0 @@
# 2020-05-20 03:00
payload:
# > YouTubeMusic
- 'YouTubeMusic.com'
- '.YouTubeMusic.com'
- 'google.YouTubeMusic.com'
- '.google.YouTubeMusic.com'
- 'ios.google.YouTubeMusic.com'
- '.ios.google.YouTubeMusic.com'
- 'android.google.YouTubeMusic.com'
- '.android.google.YouTubeMusic.com'
- 'music.youtube.com'
- '.music.youtube.com'
# > YouTube kids
- 'youtubekids.com'
- '.youtubekids.com'

View File

@ -2,7 +2,8 @@ config clash 'config'
option redir_port '7892'
option http_port '7890'
option socks_port '7891'
option mode '0'
option mixed_port '7893'
option enable_ipv6 'false'
option tun_mode '0'
option enable '0'
option dash_port '9090'
@ -15,371 +16,101 @@ config clash 'config'
option bind_addr '*'
option dnsforwader '1'
option subcri 'clash'
option cus_list '1'
option custom_dns '114.114.114.114'
option cusrule '0'
option loadservers '1'
option loadgroups '1'
option dnscache '0'
option config_type '1'
option p_mode 'Rule'
option p_mode 'rule'
option auto_clear_log '1'
option auto_update '1'
option auto_update_time '12'
option clear_time '12'
option append_rules '0'
option enable_udp '0'
option ping_enable '1'
option dnscache '0'
option stack 'system'
option enhanced_mode 'fake-ip'
option fake_ip_range '198.18.0.1/16'
list fake_ip_filter '*.lan'
list fake_ip_filter 'localhost.ptlogin2.qq.com'
list defaul_nameserver '114.114.114.114'
list defaul_nameserver '8.8.8.8'
option listen_port '5300'
option interf '0'
option enable_dns '1'
config proxyprovider
option type 'http'
option name 'ABCD'
option provider_interval '3600'
option health_check 'true'
option health_check_url 'http://www.gstatic.com/generate_204'
option health_check_interval '300'
list groups 'Global'
option provider_url 'https://www.abcd.net/link/trFxWDLxIKtbQdsZ?list=clash'
config dnshijack
option enabled '1'
option ip '8.8.8.8'
option port '53'
option type 'tcp://'
config dnshijack
option enabled '1'
option ip '8.8.8.8'
option port '53'
option type 'udp://'
config hosts
option enabled '0'
option adress '*.clash.dev'
option ip '127.0.0.1'
config hosts
option enabled '0'
option adress 'alpha.clash.dev'
option ip '::1'
config ruleprovider
option behavior 'domain'
option type 'http'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/AppleTV.list'
option interval '3600'
option name 'AppleTV'
config dnsservers
option enabled '1'
option ser_type 'nameserver'
option ser_address '114.114.114.114'
option protocol 'udp://'
config ruleprovider
option name 'Chinesemedia'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/Chinesemedia.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_port '853'
option protocol 'tls://'
option ser_type 'nameserver'
option ser_address '47.96.179.163'
config ruleprovider
option name 'Chinesemediaip'
option type 'http'
option behavior 'ipcidr'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/Chinesemediaip.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_type 'nameserver'
option ser_address '118.89.110.78'
option ser_port '853'
option protocol 'tls://'
config ruleprovider
option name 'Disney'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/Disney.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_type 'nameserver'
option ser_address '8.8.8.8'
option ser_port '53'
option protocol 'udp://'
config ruleprovider
option behavior 'domain'
option name 'GlobalMedia'
option type 'http'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/GlobalMedia.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_type 'nameserver'
option ser_address '1.1.1.1'
option ser_port '853'
option protocol 'tls://'
config ruleprovider
option behavior 'ipcidr'
option name 'GlobalMediaip'
option type 'http'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/GlobalMediaip.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_type 'fallback'
option ser_address '114.114.114.114'
option protocol 'udp://'
config ruleprovider
option name 'HBO'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/HBO.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_type 'fallback'
option ser_address '118.89.110.78'
option ser_port '853'
option protocol 'tls://'
config ruleprovider
option name 'HMTmedia'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/HMTmedia.list'
option interval '3600'
config dnsservers
option enabled '1'
option ser_type 'fallback'
option ser_address '1.1.1.1'
option protocol 'tcp://'
config ruleprovider
option name 'Netflix'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/Netflix.list'
option interval '3600'
config ruleprovider
option name 'NetflixIP'
option type 'http'
option behavior 'ipcidr'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/NetflixIP.list'
option interval '3600'
config ruleprovider
option name 'YouTube'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/YouTube.list'
option interval '3600'
config ruleprovider
option name 'Youtube Music'
option type 'http'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/MEDIA/Youtube%20Music.list'
option interval '3600'
option behavior 'domain'
config ruleprovider
option name 'AppleAP'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/AppleAP.list'
option interval '3600'
config ruleprovider
option name 'AppleAPIP'
option type 'http'
option behavior 'ipcidr'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/AppleAPIP.list'
option interval '3600'
config ruleprovider
option name 'AppleCN'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/AppleCN.list'
option interval '3600'
config ruleprovider
option name 'Digital'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/Digital.list'
option interval '3600'
config ruleprovider
option name 'Microsoft'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/Microsoft.list'
option interval '3600'
config ruleprovider
option name 'Paypal'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/Paypal.list'
option interval '3600'
config ruleprovider
option name 'Speedtest'
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/Speedtest.list'
option interval '3600'
config ruleprovider
option name 'Telegram'
option type 'http'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/Telegram.list'
option interval '3600'
option behavior 'domain'
config ruleprovider
option name 'TelegramIP'
option type 'http'
option behavior 'ipcidr'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/TelegramIP.list'
option interval '3600'
config ruleprovider
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/gameline.list'
option interval '3600'
option name 'Game'
config ruleprovider
option type 'http'
option behavior 'ipcidr'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/wyy%20ip.list'
option interval '3600'
option name 'NeteaseIp'
config ruleprovider
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/SERVICES/wyy.list'
option interval '3600'
option name 'Netease'
config ruleprovider
option type 'http'
option behavior 'domain'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/ADS/AdBlock.list'
option interval '3600'
option name 'Adblock'
config ruleprovider
option type 'http'
option behavior 'ipcidr'
option url 'https://raw.githubusercontent.com/frainzy1477/clashruleset/master/ADS/AdBlockIP.list'
option interval '3600'
option name 'AdblockIP'
config rules
option type 'RULE-SET'
option rulegroups 'Global'
option rulename 'AppleTV'
config rules
option type 'RULE-SET'
option rulegroups 'Global'
option rulename 'Chinesemedia'
config rules
option type 'RULE-SET'
option rulegroups 'Global'
option rulename 'Chinesemediaip'
config rules
option type 'RULE-SET'
option rulegroups 'Global'
option rulename 'Disney'
config rules
option type 'RULE-SET'
option rulename 'GlobalMedia'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'GlobalMediaip'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'HBO'
option rulegroups 'Global'
config rules
option rulegroups 'Global'
option type 'RULE-SET'
option rulename 'HMTmedia'
config rules
option type 'RULE-SET'
option rulename 'Netflix'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'NetflixIP'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'YouTube'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Youtube Music'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'AppleAP'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'AppleAPIP'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'AppleCN'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Digital'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Microsoft'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Paypal'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Speedtest'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Telegram'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'TelegramIP'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Game'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'NeteaseIp'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Netease'
option rulegroups 'Global'
config rules
option type 'RULE-SET'
option rulename 'Adblock'
option rulegroups 'REJECT'
config rules
option type 'RULE-SET'
option rulename 'AdblockIP'
option rulegroups 'REJECT'
config rules
option type 'GEOIP'
option rulenamee 'CN'
option res '0'
option rulegroups 'DIRECT'
option rulename 'CN'
config rules
option type 'MATCH'
option rulegroups 'Others'
config pgroups
option type 'select'
option name 'Others'
option old_name_cfg 'Others'
option old_name 'Others'
list other_group 'Global'
list other_group 'DIRECT'
list other_group 'REJECT'
config pgroups
option type 'select'
option old_name_cfg 'Global'
option old_name 'Global'
option name 'Global'

View File

@ -10,7 +10,7 @@ CLASHD="/etc/clash/dtun/clash"
CLASH_CONFIG="/etc/clash"
CRON_FILE="/etc/crontabs/root"
CONFIG_YAML="/etc/clash/config.yaml"
CONFIG_YAML_PATH=$(uci get clash.config.use_config 2>/dev/null)
CONFIG_YAML_PATH=$(uci get clash.config.use_config 2>/dev/null)
CUSLIST="/tmp/dnsmasq.d/custom_list.conf"
CUSLITT="/tmp/dnsmasq.clash"
@ -80,9 +80,9 @@ select_config(){
#===========================================================================================================================
config_type=$(uci get clash.config.config_type 2>/dev/null)
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Checking Config file..." >$REAL_LOG
echo "Checking Config file" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "正在检查配置文件。。。" >$REAL_LOG
echo "正在检查配置文件" >$REAL_LOG
fi
if [ -f $CONFIG_YAML_PATH ] && [ "$(ls -l $CONFIG_YAML_PATH|awk '{print int($5)}')" -ne 0 ];then
@ -209,6 +209,7 @@ check(){
sed -i 's/^proxy-provider:/proxy-providers:/g' "$CONFIG_YAML"
sed -i 's/^Proxy:/proxies:/g' "$CONFIG_YAML"
sed -i 's/^Rule:/rules:/g' "$CONFIG_YAML"
sed -i 's/^rule-provider:/rule-providers:/g' "$CONFIG_YAML"
}
@ -218,7 +219,7 @@ rules(){
dns_port=$(grep listen: $CONFIG_YAML |awk -F ':' '{print $3}' |tr -cd "[0-9]")
redir_port=$(uci get clash.config.redir_port 2>/dev/null)
#fake_ip_range=$(uci get clash.config.fake_ip_range 2>/dev/null)
ipv6=$(uci get clash.config.ipv6 2>/dev/null)
ipv6=$(uci get clash.config.enable_ipv6 2>/dev/null)
core=$(uci get clash.config.core 2>/dev/null)
tun_mode=$(uci get clash.config.tun_mode 2>/dev/null)
#lan_ip=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
@ -264,6 +265,8 @@ rules(){
done
fi
if [ "$(iptables -t nat -nL PREROUTING --line-number |grep "udp dpt:53" |grep "0.0.0.0/0 \{0,\}0.0.0.0/0" |wc -l)" -gt 1 ] && [ "$dnsforwader" -eq "1" ]; then
pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/0.0.0.0\/0 \{0,\}0.0.0.0\/0 \{0,\}udp dpt:53/=' 2>/dev/null |sort -rn)
for pre_line in $pre_lines; do
@ -337,7 +340,7 @@ rules(){
fi
if [ "${ipv6}" -eq 1 ]; then
if [ "${ipv6}" == "true" ]; then
ip6tables -t nat -N clash
if [ -n "${ip6}" ]; then
for lan_ip6s in $ip6; do
@ -351,6 +354,10 @@ rules(){
elif [ "${core}" -eq 3 ] || [ "${core}" -eq 4 ];then
natr=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/tcp dpt:53/=' | sort -r)
for natx in $natr; do
iptables -t nat -D PREROUTING $natx >/dev/null 2>&1
done
TUN_DEVICE=$(egrep '^ {0,}device-url:' /etc/clash/config.yaml |grep device-url: |awk -F '//' '{print $2}')
if [ -z $TUN_DEVICE ];then
@ -412,74 +419,11 @@ restore() {
}
use_dns(){
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Checking Dns Mode " >$REAL_LOG
fi
if [ "$core" -eq 1 ] || [ "$core" -eq 2 ];then
if [ "$mode" -eq 1 ] || [ "$tun_mode" -eq 1 ] ;then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Enabling Custom Dns Mode " >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启用自定义Dns模式" >$REAL_LOG
fi
uci set clash.config.mode="1" && uci del clash.config.tun_mode && uci commit clash
elif [ -z "$mode" ] || [ "$mode" -eq 0 ];then
if [ ! -z "$(grep "^ \{0,\}tun:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}listen:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}enhanced-mode:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}enable:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}dns:" $CONFIG_YAML)" ] ;then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Enabling Custom Dns Mode " >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启用自定义Dns模式" >$REAL_LOG
fi
uci set clash.config.mode="1" && uci del clash.config.tun_mode && uci commit clash
fi
fi
fi
if [ "$core" -eq 3 ] || [ "$core" -eq 4 ];then
if [ "$tun_mode" -eq 1 ] || [ "$mode" -eq 1 ];then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Enabling Tun Dns Mode " >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启用自定义Tun Dns模式" >$REAL_LOG
fi
uci del clash.config.mode && uci set clash.config.tun_mode="1" && uci commit clash
elif [ -z "$tun_mode" ] || [ "$tun_mode" -eq 0 ];then
if [ -z "$(grep "^ \{0,\}tun:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}listen:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}enhanced-mode:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}enable:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}dns:" $CONFIG_YAML)" ] ;then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Enabling Tun Dns Mode " >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启用自定义Tun Dns模式" >$REAL_LOG
fi
uci del clash.config.mode && uci set clash.config.tun_mode="1" && uci commit clash
fi
fi
fi
}
start(){
#===========================================================================================================================
lang=$(uci get luci.main.lang 2>/dev/null)
landns=$(uci get clash.config.landns 2>/dev/null)
enable=$(uci get clash.config.enable 2>/dev/null)
core=$(uci get clash.config.core 2>/dev/null)
mode=$(uci get clash.config.mode 2>/dev/null)
@ -493,15 +437,14 @@ fi
if [ "${enable}" -eq 1 ]; then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Starting Client.. " >$REAL_LOG
echo "Starting Client" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启动客户端..." >$REAL_LOG
echo "启动客户端" >$REAL_LOG
fi
sleep 1
select_config >/dev/null 2>&1
sleep 1
use_dns >/dev/null 2>&1
sleep 1
if [ "${core}" -eq 1 ] && [ ! -f /etc/clash/clash ]; then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
@ -554,6 +497,78 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5)}')" -ne
custom_list >/dev/null 2>&1
if [ "$core" -eq 4 ] || [ "$core" -eq 3 ];then
if [ $tun_mode -eq 0 ];then
uci set clash.config.tun_mode="1" && uci set clash.config.stack="system" && uci commit clash
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Enabling TUN" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启用TUN" >$REAL_LOG
fi
fi
fi
sleep 1
enable_dns=$(uci get clash.config.enable_dns 2>/dev/null)
if [ -z "$(grep "^ {0,}listen:" /etc/clash/config.yaml)" ] || [ -z "$(grep "^ {0,}enhanced-mode:" /etc/clash/config.yaml)" ] || [ -z "$(grep "^ {0,}dns:" /etc/clash/config.yaml)" ];then
if [ $enable_dns -eq 0 ];then
uci set clash.config.enable_dns="1" && uci commit clash
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Enabling Custom Dns" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "启用自定义DNS" >$REAL_LOG
fi
fi
fi
if [ ! -z "$(egrep '^ {0,}rule-providers:' "/etc/clash/config.yaml")" ] && [ "$(uci get clash.config.core)" -ne 4 ];then
if [ -f /etc/clash/dtun/clash ];then
uci set clash.config.core="4" && uci commit clash
sleep 1
else
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Your Current Config only support Clash Core(dtun)" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "你在使用配置不支持Clash内核仅支持Clash(dtun)h内核" >$REAL_LOG
fi
remove_mark >/dev/null 2>&1
sleep 1
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
fi
fi
if [ ! -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ] && [ "$(uci get clash.config.core)" -ne 4 ];then
if [ -f /etc/clash/dtun/clash ];then
uci set clash.config.core="4" && uci commit clash
sleep 1
else
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Your Current Config only support Clash Core(dtun)" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "你在使用配置不支持Clash内核仅支持Clash(dtun)h内核" >$REAL_LOG
fi
remove_mark >/dev/null 2>&1
sleep 1
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
fi
fi
if [ ! -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ] && [ "$(uci get clash.config.p_mode 2>/dev/null)" != "Script" ];then
uci set clash.config.p_mode="Script"&& uci commit clash
elif [ "$(uci get clash.config.p_mode)" == "Script" ] && [ -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ];then
uci set clash.config.p_mode="rule" && uci commit clash
fi
sleep 1
yml_change >/dev/null 2>&1
@ -571,15 +586,6 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5)}')" -ne
exit 0
fi
if [ ! -z "${landns}" ];then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Setting up Custom lan dns server " >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "设置自定义lan dns服务器" >$REAL_LOG
fi
uci set network.lan.dns="${landns}" && uci commit network && /etc/init.d/network reload >/dev/null 2>&1
fi
if [ ! -f /etc/clash/Country.mmdb ];then
@ -611,41 +617,8 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5)}')" -ne
ip_rules >/dev/null 2>&1
if [ ! -z "$(egrep '^ {0,}rule-providers:' "/etc/clash/config.yaml")" ] && [ "${core}" -ne 4 ];then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Your Current Config only support Clash Core(dtun)" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "你在使用配置不支持Clash内核仅支持Clash(dtun)h内核" >$REAL_LOG
fi
remove_mark >/dev/null 2>&1
sleep 1
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
fi
if [ ! -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ] && [ "${core}" -ne 4 ];then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Your Current Config only support Clash Core(dtun)" >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "你在使用配置不支持Clash内核仅支持Clash(dtun)h内核" >$REAL_LOG
fi
remove_mark >/dev/null 2>&1
sleep 1
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
fi
if [ ! -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ] && [ "$(uci get clash.config.p_mode 2>/dev/null)" != "Script" ];then
uci set clash.config.p_mode="Script"&& uci commit clash
elif [ "$(uci get clash.config.p_mode )" == "Script" ] && [ -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ];then
uci set clash.config.p_mode="Rule" && uci commit clash
fi
if [ "${core}" -eq 1 ];then
if [ "$(uci get clash.config.core)" -eq 1 ];then
nohup $CLASH -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 &
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
@ -654,7 +627,7 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5)}')" -ne
echo "Clash 计划任务,启动进程守护程序..." >$REAL_LOG
fi
elif [ "${core}" -eq 3 ];then
elif [ "$(uci get clash.config.core)" -eq 3 ];then
nohup $CLASHT -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 &
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
@ -662,7 +635,7 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5)}')" -ne
elif [ "${lang}" == "zh_cn" ];then
echo "Clash 计划任务,启动进程守护程序..." >$REAL_LOG
fi
elif [ "${core}" -eq 4 ];then
elif [ "$(uci get clash.config.core)" -eq 4 ];then
nohup $CLASHD -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 &
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
@ -670,7 +643,7 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5)}')" -ne
elif [ "${lang}" == "zh_cn" ];then
echo "Clash 计划任务,启动进程守护程序..." >$REAL_LOG
fi
elif [ "${core}" -eq 2 ];then
elif [ "$(uci get clash.config.core)" -eq 2 ];then
nohup $CLASHR -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 &
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
@ -763,7 +736,7 @@ remove_mark(){
rm -rf /var/etc/clash.include 2>/dev/null
core=$(uci get clash.config.core 2>/dev/null)
ipv6=$(uci get clash.config.ipv6 2>/dev/null)
ipv6=$(uci get clash.config.enable_ipv6 2>/dev/null)
dns_port=$(grep "^ \{0,\}listen:" $CONFIG_YAML |awk -F ':' '{print $3}' 2>/dev/null)
PROXY_FWMARK="0x162" 2>/dev/null
PROXY_ROUTE_TABLE="0x162" 2>/dev/null
@ -807,7 +780,7 @@ remove_mark(){
iptables -t nat -D PREROUTING -p tcp --dport 53 -j ACCEPT >/dev/null 2>&1
iptables -t nat -D PREROUTING -p udp --dport 53 -j DNAT --to "127.0.0.1:$dns_port"
if [ "${ipv6}" -eq 1 ]; then
if [ "${ipv6}" == "true" ]; then
ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" 2>/dev/null
fi
@ -906,15 +879,7 @@ remove_mark(){
done
iptables -t nat -I PREROUTING -p tcp --dport 53 -j ACCEPT
if [ ! -z "${delandns}" ];then
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
echo "Removing Custom lan dns server " >$REAL_LOG
elif [ "${lang}" == "zh_cn" ];then
echo "删除自定义lan dns服务器" >$REAL_LOG
fi
uci delete network.lan.dns && uci commit network && /etc/init.d/network reload >/dev/null 2>&1
fi
revert_dns >/dev/null 2>&1
if [ "${lang}" == "en" ] || [ $lang == "auto" ];then
@ -926,11 +891,10 @@ remove_mark(){
stop(){
#===========================================================================================================================
delandns=$(uci get clash.config.delan 2>/dev/null)
landns=$(uci get clash.config.landns 2>/dev/null)
lang=$(uci get luci.main.lang 2>/dev/null)
tun_mode=$(uci get clash.config.tun_mode 2>/dev/null)
ipv6=$(uci get clash.config.ipv6 2>/dev/null)
#ipv6=$(uci get clash.config.enable_ipv6 2>/dev/null)
core=$(uci get clash.config.core 2>/dev/null)
LIST="/usr/share/clash/server.list"

View File

@ -11,9 +11,11 @@ PORT=$(uci get clash.config.dash_port 2>/dev/null)
curl -m 5 --retry 2 -w %{http_code}"\n" -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X GET http://"$LAN_IP":"$PORT"/proxies > "$CURL_CACHE" 2>/dev/null
if [ "$(sed -n '$p' "$CURL_CACHE" 2>/dev/null)" = "200" ]; then
mkdir -p /etc/openclash/history 2>/dev/null
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["name"]' > "$CURL_GROUP_CACHE" 2>/dev/null
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["now"]' > "$CURL_NOW_CACHE" 2>/dev/null
if [ ! -d /usr/share/clashbackup ];then
mkdir -p /usr/share/clashbackup 2>/dev/null
fi
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["name"]' > "$CURL_GROUP_CACHE" 2>/dev/null
cat "$CURL_CACHE" |jsonfilter -e '@["proxies"][@.type="Selector"]["now"]' > "$CURL_NOW_CACHE" 2>/dev/null
awk 'NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]"#*#"$0;j++}' "$CURL_GROUP_CACHE" "$CURL_NOW_CACHE" > "$HISTORY_PATH" 2>/dev/null
fi
rm -rf /usr/share/clashbackup/clash_*.json 2>/dev/null

View File

@ -1,11 +1,12 @@
#!/bin/sh
if [ -f /usr/share/clash/new_clashr_core_version ];then
rm -rf /usr/share/clash/new_clashr_core_version
fi
new_clashr_core_version=`wget -qO- "https://github.com/frainzy1477/clashrdev/tags"| grep "/frainzy1477/clashrdev/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
new_clashr_core_version=`curl -sL "https://github.com/frainzy1477/clashrdev/tags"| grep "/frainzy1477/clashrdev/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ "$?" -eq "0" ]; then
rm -rf /usr/share/clash/new_clashr_core_version
if [ $new_clashr_core_version ]; then
echo $new_clashr_core_version > /usr/share/clash/new_clashr_core_version 2>&1 & >/dev/null
elif [ $new_clashr_core_version =="" ]; then
echo 0 > /usr/share/clash/new_clashr_core_version 2>&1 & >/dev/null
fi
fi

View File

@ -1,12 +1,13 @@
#!/bin/sh
if [ -f /usr/share/clash/new_clashtun_core_version ];then
new_clashtun_core_version=`curl -sL "https://github.com/frainzy1477/clashtun/tags"| grep "/frainzy1477/clashtun/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ "$?" -eq "0" ]; then
rm -rf /usr/share/clash/new_clashtun_core_version
fi
new_clashtun_core_version=`wget -qO- "https://github.com/frainzy1477/clashtun/tags"| grep "/frainzy1477/clashtun/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
if [ $new_clashtun_core_version ]; then
echo $new_clashtun_core_version > /usr/share/clash/new_clashtun_core_version 2>&1 & >/dev/null
elif [ $new_clashtun_core_version =="" ]; then
echo 0 > /usr/share/clash/new_clashtun_core_version 2>&1 & >/dev/null
fi
fi

View File

@ -1,11 +1,12 @@
#!/bin/sh
if [ -f /usr/share/clash/new_core_version ];then
new_core_version=`curl -sL "https://github.com/frainzy1477/clash_dev/tags"| grep "/frainzy1477/clash_dev/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ "$?" -eq "0" ]; then
rm -rf /usr/share/clash/new_core_version
fi
new_core_version=`wget -qO- "https://github.com/frainzy1477/clash_dev/tags"| grep "/frainzy1477/clash_dev/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
if [ $new_core_version ]; then
echo $new_core_version > /usr/share/clash/new_core_version 2>&1 & >/dev/null
elif [ $new_core_version =="" ]; then
echo 0 > /usr/share/clash/new_core_version 2>&1 & >/dev/null
fi
fi

View File

@ -0,0 +1,12 @@
#!/bin/sh
new_clashdtun_core_version=`curl -sL "https://github.com/frainzy1477/clashdtun/tags"| grep "/frainzy1477/clashdtun/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
sleep 2
if [ "$?" -eq "0" ]; then
rm -rf /usr/share/clash/new_clashdtun_core_version
if [ $new_clashdtun_core_version ]; then
echo $new_clashdtun_core_version > /usr/share/clash/new_clashdtun_core_version 2>&1 & >/dev/null
elif [ $new_clashdtun_core_version =="" ]; then
echo 0 > /usr/share/clash/new_clashdtun_core_version 2>&1 & >/dev/null
fi
fi

View File

@ -1,11 +1,12 @@
#!/bin/sh
if [ -f /usr/share/clash/new_luci_version ];then
new_version=`curl -sL "https://github.com/frainzy1477/luci-app-clash/tags"| grep "/frainzy1477/luci-app-clash/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ "$?" -eq "0" ]; then
rm -rf /usr/share/clash/new_luci_version
fi
new_version=`wget -qO- "https://github.com/frainzy1477/luci-app-clash/tags"| grep "/frainzy1477/luci-app-clash/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
if [ $new_version ]; then
echo $new_version > /usr/share/clash/new_luci_version 2>&1 & >/dev/null
elif [ $new_version =="" ]; then
echo 0 > /usr/share/clash/new_luci_version 2>&1 & >/dev/null
fi
fi

View File

@ -14,6 +14,30 @@ if [ -f /usr/share/clash/core_down_complete ];then
rm -rf /usr/share/clash/core_down_complete 2>/dev/null
fi
if [ $CORETYPE -eq 4 ];then
if [ -f /usr/share/clash/download_dtun_version ];then
rm -rf /usr/share/clash/download_dtun_version
fi
if [ $lang == "zh_cn" ];then
echo " ${LOGTIME} - 正在检查最新版本。。" >$LOG_FILE
elif [ $lang == "en" ] || [ $lang == "auto" ];then
echo " ${LOGTIME} - Checking latest version.." >$LOG_FILE
fi
new_clashdtun_core_version=`wget -qO- "https://github.com/frainzy1477/clashdtun/tags"| grep "/frainzy1477/clashdtun/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ $new_clashdtun_core_version ]; then
echo $new_clashdtun_core_version > /usr/share/clash/download_dtun_version 2>&1 & >/dev/null
elif [ $new_clashdtun_core_version =="" ]; then
echo 0 > /usr/share/clash/download_dtun_version 2>&1 & >/dev/null
fi
sleep 5
if [ -f /usr/share/clash/download_dtun_version ];then
CLASHDTUNC=$(sed -n 1p /usr/share/clash/download_dtun_version 2>/dev/null)
fi
fi
if [ $CORETYPE -eq 3 ];then
if [ -f /usr/share/clash/download_tun_version ];then
rm -rf /usr/share/clash/download_tun_version
@ -23,14 +47,14 @@ fi
elif [ $lang == "en" ] || [ $lang == "auto" ];then
echo " ${LOGTIME} - Checking latest version.." >$LOG_FILE
fi
new_clashtun_core_version=`wget -qO- "https://github.com/frainzy1477/clashtun/tags"| grep "/frainzy1477/clashtun/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
new_clashtun_core_version=`wget -qO- "https://github.com/frainzy1477/clashtun/tags"| grep "/frainzy1477/clashtun/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ $new_clashtun_core_version ]; then
echo $new_clashtun_core_version > /usr/share/clash/download_tun_version 2>&1 & >/dev/null
elif [ $new_clashtun_core_version =="" ]; then
echo 0 > /usr/share/clash/download_tun_version 2>&1 & >/dev/null
fi
sleep 8
sleep 5
if [ -f /usr/share/clash/download_tun_version ];then
CLASHTUN=$(sed -n 1p /usr/share/clash/download_tun_version 2>/dev/null)
fi
@ -46,14 +70,14 @@ fi
elif [ $lang == "en" ] || [ $lang == "auto" ];then
echo " ${LOGTIME} - Checking latest version.." >$LOG_FILE
fi
new_clashr_core_version=`wget -qO- "https://github.com/frainzy1477/clashrdev/tags"| grep "/frainzy1477/clashrdev/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
new_clashr_core_version=`wget -qO- "https://github.com/frainzy1477/clashrdev/tags"| grep "/frainzy1477/clashrdev/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ $new_clashr_core_version ]; then
echo $new_clashr_core_version > /usr/share/clash/download_corer_version 2>&1 & >/dev/null
elif [ $new_clashr_core_version =="" ]; then
echo 0 > /usr/share/clash/download_corer_version 2>&1 & >/dev/null
fi
sleep 8
sleep 5
if [ -f /usr/share/clash/download_corer_version ];then
CLASHRVER=$(sed -n 1p /usr/share/clash/download_corer_version 2>/dev/null)
fi
@ -68,14 +92,14 @@ fi
elif [ $lang == "en" ] || [ $lang == "auto" ];then
echo " ${LOGTIME} - Checking latest version.." >$LOG_FILE
fi
new_clashr_core_version=`wget -qO- "https://github.com/frainzy1477/clash_dev/tags"| grep "/frainzy1477/clash_dev/releases/tag/"| head -n 1| awk -F "/tag/v" '{print $2}'| sed 's/\">//'`
new_clashr_core_version=`wget -qO- "https://github.com/frainzy1477/clash_dev/tags"| grep "/frainzy1477/clash_dev/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//'`
if [ $new_clashr_core_version ]; then
echo $new_clashr_core_version > /usr/share/clash/download_core_version 2>&1 & >/dev/null
elif [ $new_clashr_core_version =="" ]; then
echo 0 > /usr/share/clash/download_core_version 2>&1 & >/dev/null
fi
sleep 8
sleep 5
if [ -f /usr/share/clash/download_core_version ];then
CLASHVER=$(sed -n 1p /usr/share/clash/download_core_version 2>/dev/null)
fi
@ -93,11 +117,13 @@ update(){
echo " ${LOGTIME} - Starting Clash Core download" >$LOG_FILE
fi
if [ $CORETYPE -eq 1 ];then
wget --no-check-certificate https://github.com/frainzy1477/clash_dev/releases/download/v"$CLASHVER"/clash-"$MODELTYPE"-v"$CLASHVER".gz -O 2>&1 >1 /tmp/clash.gz
wget --no-check-certificate https://github.com/frainzy1477/clash_dev/releases/download/"$CLASHVER"/clash-"$MODELTYPE".gz -O 2>&1 >1 /tmp/clash.gz
elif [ $CORETYPE -eq 2 ];then
wget --no-check-certificate https://github.com/frainzy1477/clashrdev/releases/download/v"$CLASHRVER"/clashr-"$MODELTYPE"-v"$CLASHRVER".gz -O 2>&1 >1 /tmp/clash.gz
wget --no-check-certificate https://github.com/frainzy1477/clashrdev/releases/download/"$CLASHRVER"/clashr-"$MODELTYPE".gz -O 2>&1 >1 /tmp/clash.gz
elif [ $CORETYPE -eq 3 ];then
wget --no-check-certificate https://github.com/frainzy1477/clashtun/releases/download/v"$CLASHTUN"/clash-"$MODELTYPE".gz -O 2>&1 >1 /tmp/clash.gz
wget --no-check-certificate https://github.com/frainzy1477/clashtun/releases/download/"$CLASHTUN"/clash-"$MODELTYPE".gz -O 2>&1 >1 /tmp/clash.gz
elif [ $CORETYPE -eq 4 ];then
wget --no-check-certificate https://github.com/frainzy1477/clashdtun/releases/download/"$CLASHDTUNC"/clash-"$MODELTYPE".gz -O 2>&1 >1 /tmp/clash.gz
fi
if [ "$?" -eq "0" ] && [ "$(ls -l /tmp/clash.gz |awk '{print int($5)}')" -ne 0 ]; then
@ -181,7 +207,7 @@ update(){
fi
}
if [ $CORETYPE -eq 1 ] || [ $CORETYPE -eq 2 ] || [ $CORETYPE -eq 3 ]; then
if [ $CORETYPE -eq 1 ] || [ $CORETYPE -eq 2 ] || [ $CORETYPE -eq 3 ] || [ $CORETYPE -eq 4 ]; then
update
fi

View File

@ -0,0 +1,48 @@
#!/bin/sh
RULE_FILE_NAME="$1"
if [ -z "$(grep ",$RULE_FILE_NAME" /usr/share/clash/create/rule_provider.list 2>/dev/null)" ]; then
DOWNLOAD_PATH=$(grep -F "$RULE_FILE_NAME" /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $3$4}' 2>/dev/null)
else
DOWNLOAD_PATH=$(grep -F ",$RULE_FILE_NAME" /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $3$4}' 2>/dev/null)
fi
RULE_FILE_DIR="/etc/clash/ruleprovider/$RULE_FILE_NAME"
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
LOG_FILE="/usr/share/clash/clash.txt"
REAL_LOG="/usr/share/clash/clash_real.txt"
url="https://raw.githubusercontent.com/$DOWNLOAD_PATH"
behavior=$(grep -F $RULE_FILE_NAME /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $2}' 2>/dev/null)
namee=$(grep -F ",$RULE_FILE_NAME" /usr/share/clash/create/rule_provider.list |awk -F ',' '{print $4}' | awk -F '.' '{print $1}' 2>/dev/null)
path="./ruleprovider/"$RULE_FILE_NAME""
curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
if [ "$?" -eq "0" ] && [ -s "$TMP_RULE_DIR" ] && [ -z "$(grep "404: Not Found" "$TMP_RULE_DIR")" ]; then
cmp -s $TMP_RULE_DIR $RULE_FILE_DIR
if [ "$?" -ne "0" ]; then
mv $TMP_RULE_DIR $RULE_FILE_DIR >/dev/null 2>&1\
&& rm -rf $TMP_RULE_DIR >/dev/null 2>&1
name=clash
uci_name_tmp=$(uci add $name ruleprovider)
uci_set="uci -q set $name.$uci_name_tmp."
uci_add="uci -q add_list $name.$uci_name_tmp."
${uci_set}type="http"
${uci_set}name="$namee"
${uci_set}path="$path"
${uci_set}behavior="$behavior"
${uci_set}url="$url"
${uci_set}interval="86400"
uci commit clash
return 1
else
rm -rf $TMP_RULE_DIR >/dev/null 2>&1
return 2
fi
else
rm -rf $TMP_RULE_DIR >/dev/null 2>&1
return 0
fi

File diff suppressed because it is too large Load Diff

View File

@ -37,7 +37,7 @@ cfg_groups_set()
}
start(){
status=$(ps|grep -c /usr/share/clash/provider/pgroups.sh)
status=$(ps|grep -c /usr/share/clash/create/pgroups.sh)
[ "$status" -gt "3" ] && exit 0
config_load "clash"

View File

@ -0,0 +1,76 @@
All-4,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,All-4.yaml
BBC-iPlayer,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,BBC-iPlayer.yaml
Bahamut,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Bahamut.yaml
DAZN,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,DAZN.yaml
DisneyPlus,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,DisneyPlus.yaml
FOX,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,FOX.yaml
HBO-GO-HKG,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,HBO-GO-HKG.yaml
HBO,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,HBO.yaml
HWTV,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,HWTV.yaml
Hulu-JPN,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Hulu-JPN.yaml
Hulu,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Hulu.yaml
ITV,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,ITV.yaml
KKTV,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,KKTV.yaml
LINE-TV,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,LINE-TV.yaml
LiTV,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,LiTV.yaml
My5,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,My5.yaml
Netflix,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Netflix.yaml
Now-E,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Now-E.yaml
PBS,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,PBS.yaml
Pornhub,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Pornhub.yaml
Prime-Video,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,Prime-Video.yaml
TaiwanGood,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,TaiwanGood.yaml
TikTok,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,TikTok.yaml
ViuTV,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,ViuTV.yaml
YouTube,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,YouTube.yaml
encoreTVB,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,encoreTVB.yaml
myTV-SUPER,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,myTV-SUPER.yaml
niconico,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Video/,niconico.yaml
Himalaya,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Podcast/,Himalaya.yaml
Deezer,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,Deezer.yaml
Instagram,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,Instagram.yaml
JOOX,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,JOOX.yaml
KKBOX,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,KKBOX.yaml
Pandora,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,Pandora.yaml
SoundCloud,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,SoundCloud.yaml
Spotify,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,Spotify.yaml
TIDAL,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Music/,TIDAL.yaml
Twitch,classical,frainzy1477/clashrules/master/Clash/RuleSet/StreamingMedia/Live/,Twitch.yaml
Advertising,classical,frainzy1477/clashrules/master/Clash/RuleSet/Guard/,Advertising.yaml
Hijacking,classical,frainzy1477/clashrules/master/Clash/RuleSet/Guard/,Hijacking.yaml
Privacy,classical,frainzy1477/clashrules/master/Clash/RuleSet/Guard/,Privacy.yaml
ChinaIP,ipcidr,frainzy1477/clashrules/master/Clash/RuleSet/Extra/,ChinaIP.yaml
IPBlackhole,ipcidr,frainzy1477/clashrules/master/Clash/RuleSet/Extra/,IP-Blackhole.yaml
PayPal,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/,PayPal.yaml
Scholar,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/,Scholar.yaml
AppStore,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,AppStore.yaml
Apple,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,Apple.yaml
AppStoreConnect,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,AppStoreConnect.yaml
Apple-FindMy,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,FindMy.yaml
Apple-Mail,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,Mail.yaml
Apple-Music,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,Music.yaml
Apple-News,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,News.yaml
Apple-Siri,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,Siri.yaml
Apple-SoftwareUpdate,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,SoftwareUpdate.yaml
Apple-TV,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,TV.yaml
Apple-TestFlight,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,TestFlight.yaml
Apple-iCloud,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Apple/,iCloud.yaml
Steam,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Game/,Steam.yaml
Blizzard,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Game/,Blizzard.yaml
GoogleDrive,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Google/,GoogleDrive.yaml
GoogleSearch,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Google/,GoogleSearch.yaml
OneDrive,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Microsoft/,OneDrive.yaml
Telegram,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Telegram/,Telegram.yaml
TelegramNL,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Telegram/,TelegramNL.yaml
TelegramSG,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Telegram/,TelegramSG.yaml
TelegramUS,classical,frainzy1477/clashrules/master/Clash/RuleSet/Extra/Telegram/,TelegramUS.yaml
广告IP合集,ipcidr,frainzy1477/Clash-Ruleset/master/,Reject_IP.yaml
广告(域名合集,domain,frainzy1477/Clash-Ruleset/master/,Reject_Domain.yaml
网易云音乐域名,domain,frainzy1477/Clash-Ruleset/master/,Netease_Music_Domains.yaml
苹果服务合集,domain,frainzy1477/Clash-Ruleset/master/,Apple_Domain.yaml
国外流媒体IP合集,ipcidr,frainzy1477/Clash-Ruleset/master/,Stream_IP.yaml
国外流媒体(域名合集,domain,frainzy1477/Clash-Ruleset/master/,Stream_Domain.yaml
国外IP代理合集,ipcidr,frainzy1477/Clash-Ruleset/master/,Global_IP.yaml
国外域名代理合集,domain,frainzy1477/Clash-Ruleset/master/,Global_Domain.yaml
国内IP合集,ipcidr,frainzy1477/Clash-Ruleset/master/,Domestic_IP.yaml
国内常用域名,domain,frainzy1477/Clash-Ruleset/master/,Domestic_Domain.yaml

View File

@ -1 +1 @@
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash</title><link href="main.24f6f4760d8c66faaa74.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.24f6f4760d8c66faaa74.min.js"></script><script src="js/bundle.24f6f4760d8c66faaa74.min.js"></script></body></html>
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash Dashboard</title><link href="main.4563da698059d88c08dc.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.4563da698059d88c08dc.min.js"></script><script src="js/bundle.4563da698059d88c08dc.min.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,39 +0,0 @@
experimental:
ignore-resolve-fail: true
# interface-name: eth0
#authentication:
# - "user1:pass1"
#hosts:
# '*.clash.dev': 127.0.0.1
# 'alpha.clash.dev': '::1'
dns:
enable: true
listen: 0.0.0.0:5300
# # default-nameserver:
# # - 114.114.114.114
# # - 8.8.8.8
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
#fake-ip-filter:
# - '*.lan'
# - localhost.ptlogin2.qq.com
nameserver:
- udp://114.114.114.114
- tls://118.89.110.78:853
- tls://47.96.179.163:853
- udp://8.8.8.8:53
- udp://8.8.4.4:53
- tcp://1.1.1.1
fallback:
- tls://118.89.110.78:853
- tls://47.96.179.163:853
- tcp://1.1.1.1
- tcp://8.8.8.8
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4

View File

@ -1,98 +0,0 @@
#!/bin/bash /etc/rc.common
. /lib/functions.sh
#ping=$(uci get clash.config.ping_enable 2>/dev/null)
enable_list=$(uci get clash.config.cus_list 2>/dev/null)
if [ $enable_list -eq 1 ];then
add_address(){
servers_get()
{
local section="$1"
config_get "server" "$section" "server" ""
echo "$server" >>/tmp/server.conf
}
config_load clash
config_foreach servers_get "servers"
count=$(grep -c '' /tmp/server.conf)
count_num=1
while [[ $count_num -le $count ]]
do
line=$(sed -n "$count_num"p /tmp/server.conf)
check_addr=$(grep -F "$line" "/usr/share/clash/server.list")
if [ -z $check_addr ];then
echo $line >>/usr/share/clashbackup/address.list
fi
count_num=$(( $count_num + 1))
done
sed -i "1i\#START" /usr/share/clashbackup/address.list 2>/dev/null
sed -i -e "\$a#END" /usr/share/clashbackup/address.list 2>/dev/null
cat /usr/share/clashbackup/address.list /usr/share/clash/server.list > /usr/share/clash/me.list
rm -rf /usr/share/clash/server.list
mv /usr/share/clash/me.list /usr/share/clash/server.list
chmod 755 /usr/share/clash/server.list
rm -rf /tmp/server.conf /usr/share/clashbackup/address.list >/dev/null 2>&1
}
#if [ $ping -eq 1 ];then
add_address >/dev/null 2>&1
#fi
if [ -d /tmp/dnsmasq.clash ];then
rm -rf /tmp/dnsmasq.clash
fi
if [ -f /tmp/dnsmasq.d/custom_list.conf ];then
rm -rf /tmp/dnsmasq.d/custom_list.conf
fi
cutom_dns=$(uci get clash.config.custom_dns 2>/dev/null)
if [ ! -d /tmp/dnsmasq.d ];then
mkdir -p /tmp/dnsmasq.d
fi
if [ ! -d /tmp/dnsmasq.clash ];then
mkdir -p /tmp/dnsmasq.clash
fi
awk '!/^$/&&!/^#/{printf("server=/%s/'"$cutom_dns"'\n",$0)}' /usr/share/clash/server.list >> /tmp/dnsmasq.clash/custom_list.conf
ln -s /tmp/dnsmasq.clash/custom_list.conf /tmp/dnsmasq.d/custom_list.conf
fi
core=$(uci get clash.config.core 2>/dev/null)
if [ "${core}" -eq 3 ] || [ "${core}" -eq 4 ];then
fake_ip=$(egrep '^ {0,}enhanced-mode' /usr/share/clash/tundns.yaml |grep enhanced-mode: |awk -F ': ' '{print $2}')
elif [ "$core" -eq 1 ] || [ "$core" -eq 2 ];then
fake_ip=$(egrep '^ {0,}enhanced-mode' /usr/share/clash/dns.yaml |grep enhanced-mode: |awk -F ': ' '{print $2}')
fi
if [ "${fake_ip}" == "fake-ip" ];then
CUSTOM_FILE="/usr/share/clash/server.list"
FAKE_FILTER_FILE="/usr/share/clash/fake_filter.list"
num=$(grep -c '' /usr/share/clash/server.list 2>/dev/null)
rm -rf "$FAKE_FILTER_FILE" 2>/dev/null
if [ -s "$CUSTOM_FILE" ]; then
count_num=1
while [[ $count_num -le $num ]]
do
line=$(sed -n "$count_num"p /usr/share/clash/server.list)
echo " - '$line'" >> "$FAKE_FILTER_FILE"
count_num=$(( $count_num + 1))
done
fi
fi

View File

@ -1,703 +0,0 @@
#!/bin/bash /etc/rc.common
lang=$(uci get luci.main.lang 2>/dev/null)
loadgroups=$(uci get clash.config.loadgroups 2>/dev/null)
loadservers=$(uci get clash.config.loadservers 2>/dev/null)
loadprovider=$(uci get clash.config.loadprovider 2>/dev/null)
run_load(){
load="/etc/clash/config.yaml"
CONFIG_YAML_PATH=$(uci get clash.config.use_config 2>/dev/null)
if [ -f $CONFIG_YAML_PATH ] && [ "$(ls -l $CONFIG_YAML_PATH|awk '{print int($5)}')" -ne 0 ];then
cp $CONFIG_YAML_PATH $load 2>/dev/null
fi
if [ ! -f $load ] || [ "$(ls -l $load|awk '{print int($5)}')" -eq 0 ]; then
exit 0
fi
CFG_FILE="/etc/config/clash"
REAL_LOG="/usr/share/clash/clash_real.txt"
if [ ! -z "$(egrep '^ {0,}script:' "/etc/clash/config.yaml")" ] || [ ! -z "$(egrep '^ {0,}rule-providers:' "/etc/clash/config.yaml")" ];then
exit 0
fi
rm -rf /tmp/Proxy_Group /tmp/servers.yaml /tmp/yaml_proxy.yaml /tmp/group_*.yaml /tmp/yaml_group.yaml /tmp/match_servers.list /tmp/yaml_provider.yaml /tmp/provider.yaml /tmp/provider_gen.yaml /tmp/provider_che.yaml /tmp/match_provider.list 2>/dev/null
sed -i "/^ \{0,\}proxy-groups:/c\Proxy Group:" "$load" 2>/dev/null
sed -i "/^ \{0,\}proxy-providers:/c\proxy-provider:" "$load" 2>/dev/null
sed -i "s/^proxies:/Proxy:/" "$load" 2>/dev/null
sed -i "/^ \{0,\}rules:/c\Rule:" "$load" 2>/dev/null
[ ! -z "$(grep "^ \{0,\}'Proxy':" "$load")" ] || [ ! -z "$(grep '^ \{0,\}"Proxy":' "$load")" ] && {
sed -i "/^ \{0,\}\'Proxy\':/c\Proxy:" "$load"
sed -i '/^ \{0,\}\"Proxy\":/c\Proxy:' "$load"
}
[ ! -z "$(grep "^ \{0,\}'proxy-provider':" "$load")" ] || [ ! -z "$(grep '^ \{0,\}"proxy-provider":' "$load")" ] && {
sed -i "/^ \{0,\}\'proxy-provider\:'/c\proxy-provider:" "$load"
sed -i '/^ \{0,\}\"proxy-provider\":/c\proxy-provider:' "$load"
}
[ ! -z "$(grep "^ \{0,\}'Proxy Group':" "$load")" ] || [ ! -z "$(grep '^ \{0,\}"Proxy Group":' "$load")" ] && {
sed -i "/^ \{0,\}\'Proxy Group\':/c\Proxy Group:" "$load"
sed -i '/^ \{0,\}\"Proxy Group\":/c\Proxy Group:' "$load"
}
[ ! -z "$(grep "^ \{0,\}'Rule':" "$load")" ] || [ ! -z "$(grep '^ \{0,\}"Rule":' "$load")" ] && {
sed -i "/^ \{0,\}\'Rule\':/c\Rule:" "$load"
sed -i '/^ \{0,\}\"Rule\":/c\Rule:' "$load"
}
[ ! -z "$(grep "^ \{0,\}'dns':" "$load")" ] || [ ! -z "$(grep '^ \{0,\}"dns":' "$load")" ] && {
sed -i "/^ \{0,\}\'dns\':/c\dns:" "$load"
sed -i '/^ \{0,\}\"dns\":/c\dns:' "$load"
}
#awk '/Proxy:/,/Rule:/{print}' $load 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed 's/\t/ /g' 2>/dev/null |grep name: |awk -F 'name:' '{print $2}' |sed 's/,.*//' |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null >/tmp/Proxy_Group 2>&1
group_len=$(sed -n '/^ \{0,\}Proxy Group:/=' "$load" 2>/dev/null)
provider_len=$(sed -n '/^ \{0,\}proxy-provider:/=' "$load" 2>/dev/null)
if [ "$provider_len" -ge "$group_len" ]; then
awk '/Proxy:/,/proxy-provider:/{print}' "$load" 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed 's/\t/ /g' 2>/dev/null |grep name: |awk -F 'name:' '{print $2}' |sed 's/,.*//' |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null >/tmp/Proxy_Group 2>&1
sed -i "s/proxy-provider://g" /tmp/Proxy_Group 2>&1
else
awk '/Proxy:/,/Rule:/{print}' "$load" 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed 's/\t/ /g' 2>/dev/null |grep name: |awk -F 'name:' '{print $2}' |sed 's/,.*//' |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null >/tmp/Proxy_Group 2>&1
fi
if [ "$?" -eq "0" ]; then
echo 'DIRECT' >>/tmp/Proxy_Group
echo 'REJECT' >>/tmp/Proxy_Group
else
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Read error, configuration file exception!" >/tmp/Proxy_Group
elif [ $lang == "zh_cn" ];then
echo '读取错误,配置文件异常!' >/tmp/Proxy_Group
fi
fi
#awk '/Proxy Group:/,/Rule:/{print}' $load 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_group.yaml 2>&1
group_len=$(sed -n '/^ \{0,\}Proxy Group:/=' "$load" 2>/dev/null)
provider_len=$(sed -n '/^ \{0,\}proxy-provider:/=' "$load" 2>/dev/null)
if [ "$provider_len" -ge "$group_len" ]; then
awk '/Proxy Group:/,/proxy-provider:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_group.yaml 2>&1
sed -i "s/proxy-provider://g" /tmp/yaml_group.yaml 2>&1
else
awk '/Proxy Group:/,/Rule:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_group.yaml 2>&1
fi
#######READ GROUPS START
if [ $loadgroups -eq 1 ];then
if [ -f /tmp/yaml_group.yaml ];then
while [[ "$( grep -c "config groups" $CFG_FILE )" -ne 0 ]]
do
uci delete clash.@groups[0] && uci commit clash >/dev/null 2>&1
done
count=1
file_count=1
match_group_file="/tmp/Proxy_Group"
group_file="/tmp/yaml_group.yaml"
line=$(sed -n '/name:/=' $group_file)
num=$(grep -c "name:" $group_file)
cfg_get()
{
echo "$(grep "$1" "$2" 2>/dev/null |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null)"
}
for n in $line
do
single_group="/tmp/group_$file_count.yaml"
[ "$count" -eq 1 ] && {
startLine="$n"
}
count=$(expr "$count" + 1)
if [ "$count" -gt "$num" ]; then
endLine=$(sed -n '$=' $group_file)
else
endLine=$(expr $(echo "$line" | sed -n "${count}p") - 1)
fi
sed -n "${startLine},${endLine}p" $group_file >$single_group
startLine=$(expr "$endLine" + 1)
#type
group_type="$(cfg_get "type:" "$single_group")"
#name
group_name="$(cfg_get "name:" "$single_group")"
#test_url
group_test_url="$(cfg_get "url:" "$single_group")"
#test_interval
group_test_interval="$(cfg_get "interval:" "$single_group")"
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Now Reading 【$group_type】-【$group_name】 Policy Group..." >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "正在读取【$group_type】-【$group_name】策略组配置..." >$REAL_LOG
fi
name=clash
uci_name_tmp=$(uci add $name groups)
uci_set="uci -q set $name.$uci_name_tmp."
uci_add="uci -q add_list $name.$uci_name_tmp."
${uci_set}name="$group_name"
${uci_set}old_name="$group_name"
${uci_set}old_name_cfg="$group_name"
${uci_set}type="$group_type"
${uci_set}test_url="$group_test_url"
${uci_set}test_interval="$group_test_interval"
#other_group
cat $single_group |while read line
do
if [ -z "$(echo "$line" |grep "^ \{0,\}-")" ]; then
continue
fi
group_name1=$(echo "$line" |grep -v "name:" 2>/dev/null |grep "^ \{0,\}-" 2>/dev/null |awk -F '^ \{0,\}-' '{print $2}' 2>/dev/null |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null)
group_name2=$(echo "$line" |awk -F 'proxies: \\[' '{print $2}' 2>/dev/null |sed 's/].*//' 2>/dev/null |sed 's/^ \{0,\}//' 2>/dev/null |sed 's/ \{0,\}$//' 2>/dev/null |sed 's/ \{0,\}, \{0,\}/#,#/g' 2>/dev/null)
proxies_len=$(sed -n '/proxies:/=' $single_group 2>/dev/null)
use_len=$(sed -n '/use:/=' $single_group 2>/dev/null)
name1_len=$(sed -n "/${group_name1}/=" $single_group 2>/dev/null)
name2_len=$(sed -n "/${group_name2}/=" $single_group 2>/dev/null)
if [ -z "$group_name1" ] && [ -z "$group_name2" ]; then
continue
fi
if [ ! -z "$group_name1" ] && [ -z "$group_name2" ]; then
if [ "$proxies_len" -le "$use_len" ]; then
if [ "$name1_len" -le "$use_len" ] && [ ! -z "$(grep -F "$group_name1" $match_group_file)" ] && [ "$group_name1" != "$group_name" ]; then
${uci_add}other_group="$group_name1"
fi
else
if [ "$name1_len" -ge "$proxies_len" ] && [ ! -z "$(grep -F "$group_name1" $match_group_file)" ] && [ "$group_name1" != "$group_name" ]; then
${uci_add}other_group="$group_name1"
fi
fi
elif [ -z "$group_name1" ] && [ ! -z "$group_name2" ]; then
group_num=$(( $(echo "$group_name2" | grep -o '#,#' | wc -l) + 1))
if [ "$group_num" -le 1 ]; then
if [ ! -z "$(grep -F "$group_name2" $match_group_file)" ] && [ "$group_name2" != "$group_name" ]; then
${uci_add}other_group="$group_name2"
fi
else
group_nums=1
while [[ $group_nums -le $group_num ]]
do
other_group_name=$(echo "$group_name2" |awk -v t="${group_nums}" -F '#,#' '{print $t}' 2>/dev/null)
if [ ! -z "$(grep -F "$other_group_name" $match_group_file 2>/dev/null)" ] && [ "$other_group_name" != "$group_name" ]; then
${uci_add}other_group="$other_group_name"
fi
group_nums=$(( $group_nums + 1))
done
fi
fi
done
file_count=$(( $file_count + 1))
done
uci commit clash
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Reading Policy Group Completed" >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "读取策略组配置完成" >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
fi
awk '/^ {0,}Rule:/,/^ {0,}##END/{print}' $load 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/rule.yaml 2>&1
rm -rf /usr/shar/clash/custom_rule.yaml 2>/dev/null
mv /tmp/rule.yaml /usr/share/clash/custom_rule.yaml 2>/dev/null
rm -rf /tmp/rule.yaml 2>&1
fi
fi
#######READ GROUPS END
#awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' $load 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
proxy_len=$(sed -n '/^ \{0,\}Proxy:/=' $load 2>/dev/null)
group_len=$(sed -n '/^ \{0,\}Proxy Group:/=' "$load" 2>/dev/null)
provider_len=$(sed -n '/^ \{0,\}proxy-provider:/=' $load 2>/dev/null)
if [ ! -z "$provider_len" ] && [ "$provider_len" -ge "$proxy_len" ] && [ "$provider_len" -le "$group_len" ]; then
awk '/^ {0,}Proxy:/,/^ {0,}proxy-provider:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
awk '/^ {0,}proxy-provider:/,/^ {0,}Proxy Group:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
sed -i '/proxy-provider:/,$d' /tmp/yaml_proxy.yaml 2>&1
sed -i '/Proxy Group:/,$d' /tmp/yaml_provider.yaml 2>&1
elif [ ! -z "$provider_len" ] && [ "$provider_len" -le "$proxy_len" ] && [ "$provider_len" -le "$group_len" ]; then
awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
awk '/^ {0,}proxy-provider:/,/^ {0,}Proxy:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
sed -i '/Proxy:/,$d' /tmp/yaml_provider.yaml 2>&1
sed -i '/Proxy Group:/,$d' /tmp/yaml_proxy.yaml 2>&1
elif [ ! -z "$provider_len" ] && [ "$provider_len" -ge "$group_len" ]; then
awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
awk '/^ {0,}proxy-provider:/,/^ {0,}Rule:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_provider.yaml 2>&1
sed -i '/Proxy Group:/,$d' /tmp/yaml_proxy.yaml 2>&1
sed -i '/Rule:/,$d' /tmp/yaml_provider.yaml 2>&1
else
awk '/^ {0,}Proxy:/,/^ {0,}Proxy Group:/{print}' "$load" 2>/dev/null |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null >/tmp/yaml_proxy.yaml 2>&1
sed -i '/Proxy Group:/,$d' /tmp/yaml_proxy.yaml 2>&1
fi
match_provider="/tmp/match_provider.list"
single_provider="/tmp/provider.yaml"
single_provider_gen="/tmp/provider_gen.yaml"
single_provider_che="/tmp/provider_che.yaml"
provider_file="/tmp/yaml_provider.yaml"
group_num=$(grep -c "name:" /tmp/yaml_group.yaml)
match_servers="/tmp/match_servers.list"
server_file="/tmp/yaml_proxy.yaml"
single_server="/tmp/servers.yaml"
line=$(sed -n '/name:/=' $server_file 2>/dev/null)
num=$(grep -c "name:" $server_file 2>/dev/null)
count=1
sed -i '/^ *$/d' $provider_file 2>/dev/null
sed -i '/^ \{0,\}#/d' $provider_file 2>/dev/null
sed -i 's/\t/ /g' $provider_file 2>/dev/null
provider_line=$(awk '{print $0"#*#"FNR}' $provider_file |grep -v '^ \{0,\}proxy-provider:\|^ \{0,\}Proxy:\|^ \{0,\}Proxy Group:\|^ \{0,\}Rule:\|^ \{0,\}type:\|^ \{0,\}path:\|^ \{0,\}url:\|^ \{0,\}interval:\|^ \{0,\}health-check:\|^ \{0,\}enable:' |awk -F '#*#' '{print $3}')
provider_num=$(grep -c "^ \{0,\}type:" $provider_file)
provider_count=1
cfg_get_dyn()
{
echo "$(grep "^ \{0,\}$1" "$2" 2>/dev/null |grep -v "^ \{0,\}- name:" |grep -v "^ \{0,\}- keep-alive" |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/\}.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)"
}
cfg_get()
{
echo "$(grep "$1" "$2" 2>/dev/null |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null)"
}
cfg_gett()
{
echo "$(grep "$1" $single_server 2>/dev/null |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null |sed 's/ \{0,\}\}\{0,\}$//g' 2>/dev/null)"
}
if [ $loadservers -eq 1 ];then
#######READ SERVERS START
if [ -f /tmp/yaml_proxy.yaml ];then
while [[ "$( grep -c "config servers" $CFG_FILE )" -ne 0 ]]
do
uci delete clash.@servers[0] && uci commit clash >/dev/null 2>&1
done
for n in $line
do
[ "$count" -eq 1 ] && {
startLine="$n"
}
count=$(expr "$count" + 1)
if [ "$count" -gt "$num" ]; then
endLine=$(sed -n '$=' $server_file)
else
endLine=$(expr $(echo "$line" | sed -n "${count}p") - 1)
fi
sed -n "${startLine},${endLine}p" $server_file >$single_server
startLine=$(expr "$endLine" + 1)
#type
server_type="$(cfg_gett "type:")"
#name
server_name="$(cfg_gett "name:")"
#server
server="$(cfg_gett "server:")"
#port
port="$(cfg_gett "port:")"
#cipher
cipher="$(cfg_gett "cipher:")"
#password
password="$(cfg_gett "password:")"
#protocol
protocol="$(cfg_gett "protocol:")"
#protocolparam
protocolparam="$(cfg_gett "protocolparam:")"
#obfsparam
obfsparam="$(cfg_gett "obfsparam:")"
#udp
udp="$(cfg_gett "udp:")"
#plugin:
plugin="$(cfg_gett "plugin:")"
#plugin-opts:
plugin_opts="$(cfg_gett "plugin-opts:")"
#obfs:
obfs="$(cfg_gett "obfs:")"
#obfs-host:
obfs_host="$(cfg_gett "obfs-host:")"
#psk:
psk="$(cfg_gett "psk:")"
#mode:
mode="$(cfg_gett "mode:")"
#tls:
tls="$(cfg_gett "tls:")"
#skip-cert-verify:
verify="$(cfg_gett "skip-cert-verify:")"
#mux:
mux="$(cfg_gett "mux:")"
#host:
host="$(cfg_gett "host:")"
#Host:
Host="$(cfg_gett "Host:")"
#path:
path="$(cfg_gett "path:")"
#ws-path:
ws_path="$(cfg_gett "ws-path:")"
#headers_custom:
headers="$(cfg_gett "custom:")"
#uuid:
uuid="$(cfg_gett "uuid:")"
#alterId:
alterId="$(cfg_gett "alterId:")"
#network
network="$(cfg_gett "network:")"
#username
username="$(cfg_gett "username:")"
#tls_custom:
tls_custom="$(cfg_gett "tls:")"
#sni:
sni="$(cfg_gett "sni:")"
#alpn:
alpns="$(cfg_get_dyn "-" "$single_server")"
#http_paths:
http_paths="$(cfg_get_dyn "-" "$single_server")"
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Now Reading 【$server_type】-【$server_name】 Proxies..." >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "正在读取【$server_type】-【$server_name】代理配置..." >$REAL_LOG
fi
name=clash
uci_name_tmp=$(uci add $name servers)
uci_set="uci -q set $name.$uci_name_tmp."
uci_add="uci -q add_list $name.$uci_name_tmp."
${uci_set}name="$server_name"
${uci_set}type="$server_type"
${uci_set}server="$server"
${uci_set}port="$port"
if [ "$server_type" = "vmess" ]; then
${uci_set}securitys="$cipher"
elif [ "$server_type" = "ss" ]; then
${uci_set}cipher="$cipher"
elif [ "$server_type" = "ssr" ]; then
${uci_set}cipher_ssr="$cipher"
fi
${uci_set}udp="$udp"
${uci_set}protocol="$protocol"
${uci_set}protocolparam="$protocolparam"
if [ "$server_type" = "ss" ]; then
${uci_set}obfs="$obfs"
elif [ "$server_type" = "ssr" ]; then
${uci_set}obfs_ssr="$obfs"
fi
${uci_set}tls_custom="$tls_custom"
${uci_set}obfsparam="$obfsparam"
${uci_set}host="$obfs_host"
[ -z "$obfs" ] && ${uci_set}obfs="$mode"
if [ "$server_type" = "vmess" ]; then
[ -z "$mode" ] && [ "$network" = "ws" ] && ${uci_set}obfs_vmess="websocket"
[ -z "$mode" ] && [ -z "$network" ] && ${uci_set}obfs_vmess="none"
[ -z "$mode" ] && [ "$network" = "http" ] && ${uci_set}obfs_vmess="http"
fi
[ -z "$obfs_host" ] && ${uci_set}host="$host"
[ -z "$mode" ] && [ "$server_type" = "snell" ] && ${uci_set}obfs_snell="$mode"
[ -z "$obfs" ] && [ "$server_type" = "ss" ] && ${uci_set}obfs="$mode"
[ -z "$obfs" ] && [ "$server_type" = "ss" ] && [ -z "$mode" ] && ${uci_set}obfs="none"
[ -z "$mode" ] && [ "$server_type" = "snell" ] && ${uci_set}obfs_snell="none"
if [ $tls ] && [ "$server_type" != "ss" ];then
${uci_set}tls="$tls"
fi
${uci_set}psk="$psk"
if [ $verify ] && [ "$server_type" != "ssr" ];then
${uci_set}skip_cert_verify="$verify"
fi
${uci_set}path="$path"
[ -z "$path" ] && [ "$network" = "ws" ] && ${uci_set}path="$ws_path"
${uci_set}mux="$mux"
${uci_set}custom="$headers"
[ -z "$headers" ] && [ "$network" = "ws" ] && ${uci_set}custom="$Host"
if [ "$server_type" = "vmess" ]; then
#v2ray
${uci_set}alterId="$alterId"
${uci_set}uuid="$uuid"
${uci_del}http_path >/dev/null 2>&1
for http_path in $http_paths; do
${uci_add}http_path="$http_path" >/dev/null 2>&1
done
if [ ! -z "$(grep "^ \{0,\}- keep-alive" "$single_server")" ]; then
${uci_set}keep_alive="true"
else
${uci_set}keep_alive="false"
fi
fi
if [ "$server_type" = "socks5" ] || [ "$server_type" = "http" ]; then
${uci_set}auth_name="$username"
${uci_set}auth_pass="$password"
else
${uci_set}password="$password"
fi
if [ "$server_type" = "trojan" ]; then
${uci_set}sni="$sni"
${uci_del}alpn >/dev/null 2>&1
for alpn in $alpns; do
${uci_add}alpn="$alpn" >/dev/null 2>&1
done
fi
done
uci commit clash
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Reading Server Completed" >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "读取代理配置完成" >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
fi
fi
#######READ SERVERS END
fi
if [ "${loadprovider}" -eq 1 ];then
#######READ PROVIDER START
if [ -f /tmp/yaml_provider.yaml ];then
while [[ "$( grep -c "config provider" $CFG_FILE )" -ne 0 ]]
do
uci delete clash.@provider[0] && uci commit clash 2>/dev/null
done
echo "" >"$match_provider"
provider_nums=0
config_load "clash"
config_foreach yml_provider_name_get "provider"
yml_provider_name_get()
{
local section="$1"
config_get "name" "$section" "name" ""
[ ! -z "$name" ] && {
echo "$provider_nums"."$name" >>"$match_provider"
}
provider_nums=$(( $provider_nums + 1 ))
}
cfg_new_provider_groups_get()
{
if [ -z "$1" ]; then
return
fi
${uci_add}groups="${1}"
}
for n in $provider_line
do
[ "$provider_count" -eq 1 ] && {
startLine="$n"
}
provider_count=$(expr "$provider_count" + 1)
if [ "$provider_count" -gt "$provider_num" ]; then
endLine=$(sed -n '$=' $provider_file)
else
endLine=$(expr $(echo "$provider_line" | sed -n "${provider_count}p") - 1)
fi
sed -n "${startLine},${endLine}p" $provider_file >$single_provider
health_check_line=$(sed -n '/^ \{0,\}health-check:/=' $single_provider)
sed -n "1,${health_check_line}p" $single_provider >$single_provider_gen
sed -n "${health_check_line},\$p" $single_provider >$single_provider_che
startLine=$(expr "$endLine" + 1)
#name
provider_name="$(sed -n "${n}p" $provider_file |awk -F ':' '{print $1}' |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)"
#type
provider_type="$(cfg_get "type:" "$single_provider_gen")"
#path
provider_path="$(cfg_get "path:" "$single_provider_gen")"
#gen_url
provider_gen_url="$(cfg_get "url:" "$single_provider_gen")"
#gen_interval
provider_gen_interval="$(cfg_get "interval:" "$single_provider_gen")"
#che_enable
provider_che_enable="$(cfg_get "enable:" "$single_provider_che")"
#che_url
provider_che_url="$(cfg_get "url:" "$single_provider_che")"
#che_interval
provider_che_interval="$(cfg_get "interval:" "$single_provider_che")"
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Now Reading 【$provider_type】-【$server_name】 Proxy-Provider..." >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "正在读取【$provider_type】-【$provider_name】代理集配置..." >$START_LOG
fi
name=clash
uci_name_tmp=$(uci add $name provider)
uci_set="uci -q set $name.$uci_name_tmp."
uci_add="uci -q add_list $name.$uci_name_tmp."
${uci_set}name="$provider_name"
${uci_set}type="$provider_type"
${uci_set}path="$provider_path"
${uci_set}provider_url="$provider_gen_url"
${uci_set}provider_interval="$provider_gen_interval"
${uci_set}health_check="$provider_che_enable"
${uci_set}health_check_url="$provider_che_url"
${uci_set}health_check_interval="$provider_che_interval"
if [ ! -z "$(grep "config groups" "$CFG_FILE")" ]; then
for ((i=1;i<=$group_num;i++))
do
single_group="/tmp/group_$i.yaml"
use_line=$(sed -n '/^ \{0,\}use:/=' $single_group)
proxies_line=$(sed -n '/^ \{0,\}proxies:/=' $single_group)
if [ "$use_line" -le "$proxies_line" ]; then
if [ ! -z "$(sed -n "${use_line},${proxies_line}p" "$single_group" |grep -F "$provider_name")" ]; then
group_name=$(grep "name:" $single_group 2>/dev/null |awk -F 'name:' '{print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)
${uci_add}groups="$group_name"
fi
elif [ "$use_line" -ge "$proxies_line" ]; then
if [ ! -z "$(sed -n "${use_line},\$p" "$single_group" |grep -F "$provider_name")" ]; then
group_name=$(grep "name:" $single_group 2>/dev/null |awk -F 'name:' '{print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)
${uci_add}groups="$group_name"
fi
elif [ ! -z "$use_line" ] && [ -z "$proxies_line" ]; then
if [ ! -z "$(grep -F "$provider_name" $single_group)" ]; then
group_name=$(grep "name:" $single_group 2>/dev/null |awk -F 'name:' '{print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)
${uci_add}groups="$group_name"
fi
fi
done
fi
uci commit clash
done
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Reading Proxy Provider Completed" >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "读取代理集配置完成" >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
fi
#######READ PROVIDER END
fi
fi
rm -rf /tmp/Proxy_Group /tmp/servers.yaml /tmp/yaml_proxy.yaml /tmp/group_*.yaml /tmp/yaml_group.yaml /tmp/match_servers.list /tmp/yaml_provider.yaml /tmp/provider.yaml /tmp/provider_gen.yaml /tmp/provider_che.yaml /tmp/match_provider.list 2>/dev/null
/usr/share/clash/proxy.sh >/dev/null 2>&1
}
run_load >/dev/null 2>&1

View File

@ -1 +1 @@
1.7.3.2
v1.7.5.4

View File

@ -1,438 +0,0 @@
#!/bin/bash /etc/rc.common
. /lib/functions.sh
RULE_PROVIDER="/tmp/rule_provider.yaml"
GROUP_FILE="/tmp/groups.yaml"
CLASH_CONFIG="/etc/clash/config.yaml"
CONFIG_YAML_PATH=$(uci get clash.config.use_config 2>/dev/null)
if [ -f $CONFIG_YAML_PATH ] && [ "$(ls -l $CONFIG_YAML_PATH|awk '{print int($5)}')" -ne 0 ];then
cp $CONFIG_YAML_PATH $CLASH_CONFIG 2>/dev/null
fi
SCRIPT="/usr/share/clash/provider/script.yaml"
rule_providers=$(uci get clash.config.rule_providers 2>/dev/null)
CFG_FILE="/etc/config/clash"
config_name=$(uci get clash.config.name_tag 2>/dev/null)
lang=$(uci get luci.main.lang 2>/dev/null)
CONFIG_YAML="/usr/share/clash/config/custom/${config_name}.yaml"
check_name=$(grep -F "${config_name}.yaml" "/usr/share/clashbackup/create_list.conf")
REAL_LOG="/usr/share/clash/clash_real.txt"
same_tag=$(uci get clash.config.same_tag 2>/dev/null)
rcount=$( grep -c "config ruleprovider" $CFG_FILE 2>/dev/null)
create=$(uci get clash.config.provider_config 2>/dev/null)
if [ "${create}" -eq 1 ];then
if [ $config_name == "" ] || [ -z $config_name ];then
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Tag Your Config" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "标记您的配置" >$REAL_LOG
fi
sleep 5
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
fi
if [ -f $RULE_PROVIDER ];then
rm -rf $RULE_PROVIDER 2>/dev/null
fi
rule_set()
{
local section="$1"
config_get "name" "$section" "name" ""
config_get "type" "$section" "type" ""
config_get "behavior" "$section" "behavior" ""
config_get "path" "$section" "path" ""
config_get "url" "$section" "url" ""
config_get "interval" "$section" "interval" ""
if [ "$path" != "./ruleprovider/$name.yaml" ] && [ "$type" = "http" ]; then
path="./ruleprovider/$name.yaml"
elif [ -z "$path" ]; then
return
fi
cat >> "$RULE_PROVIDER" <<-EOF
$name:
type: $type
behavior: $behavior
path: $path
EOF
if [ "$type" == "http" ]; then
cat >> "$RULE_PROVIDER" <<-EOF
url: $url
interval: $interval
EOF
fi
}
if [ $rcount -gt 0 ];then
config_load clash
config_foreach rule_set "ruleprovider"
fi
if [ -f $RULE_PROVIDER ];then
sed -i "1i\ " $RULE_PROVIDER 2>/dev/null
sed -i "2i\rule-providers:" $RULE_PROVIDER 2>/dev/null
fi
PROVIDER_FILE="/tmp/yaml_provider.yaml"
pcount=$( grep -c "config proxyprovider" $CFG_FILE 2>/dev/null)
if [ -f $PROVIDER_FILE ];then
rm -rf $PROVIDER_FILE 2>/dev/null
fi
yml_proxy_provider_set()
{
local section="$1"
config_get "type" "$section" "type" ""
config_get "name" "$section" "name" ""
config_get "path" "$section" "path" ""
config_get "provider_url" "$section" "provider_url" ""
config_get "provider_interval" "$section" "provider_interval" ""
config_get "health_check" "$section" "health_check" ""
config_get "health_check_url" "$section" "health_check_url" ""
config_get "health_check_interval" "$section" "health_check_interval" ""
if [ "$path" != "./proxyprovider/$name.yaml" ] && [ "$type" = "http" ]; then
path="./proxyprovider/$name.yaml"
elif [ -z "$path" ]; then
return
fi
if [ -z "$type" ]; then
return
fi
if [ -z "$name" ]; then
return
fi
if [ -z "$health_check" ]; then
return
fi
echo "$name" >> /tmp/Proxy_Provider
cat >> "$PROVIDER_FILE" <<-EOF
$name:
type: $type
path: $path
EOF
if [ ! -z "$provider_url" ]; then
cat >> "$PROVIDER_FILE" <<-EOF
url: $provider_url
interval: $provider_interval
EOF
fi
cat >> "$PROVIDER_FILE" <<-EOF
health-check:
enable: $health_check
url: $health_check_url
interval: $health_check_interval
EOF
}
if [ $pcount -gt 0 ];then
config_load "clash"
config_foreach yml_proxy_provider_set "proxyprovider"
fi
if [ -f $PROVIDER_FILE ];then
sed -i "1i\ " $PROVIDER_FILE 2>/dev/null
sed -i "2i\proxy-providers:" $PROVIDER_FILE 2>/dev/null
rm -rf /tmp/Proxy_Provider
fi
if [ -f $GROUP_FILE ];then
rm -rf $GROUP_FILE 2>/dev/null
fi
set_groups()
{
if [ -z "$1" ]; then
return
fi
if [ "$1" = "$3" ]; then
set_group=1
echo " - \"${2}\"" >>$GROUP_FILE
fi
}
set_other_groups()
{
set_group=1
if [ "${1}" = "DIRECT" ]||[ "${1}" = "REJECT" ];then
echo " - ${1}" >>$GROUP_FILE 2>/dev/null
else
echo " - \"${1}\"" >>$GROUP_FILE 2>/dev/null
fi
}
set_proxy_provider()
{
local section="$1"
config_get "name" "$section" "name" ""
config_list_foreach "$section" "pgroups" set_provider_groups "$name" "$2"
}
set_provider_groups()
{
if [ -z "$1" ]; then
return
fi
if [ "$1" = "$3" ]; then
set_proxy_provider=1
echo " - ${2}" >>$GROUP_FILE
fi
}
yml_groups_set()
{
local section="$1"
config_get "type" "$section" "type" ""
config_get "name" "$section" "name" ""
config_get "old_name" "$section" "old_name" ""
config_get "test_url" "$section" "test_url" ""
config_get "test_interval" "$section" "test_interval" ""
config_get "other_group" "$section" "other_group" ""
if [ -z "$type" ]; then
return
fi
if [ -z "$name" ]; then
return
fi
echo "- name: $name" >>$GROUP_FILE 2>/dev/null
echo " type: $type" >>$GROUP_FILE 2>/dev/null
group_name="$name"
echo " proxies: " >>$GROUP_FILE
set_group=0
set_proxy_provider=0
config_list_foreach "$section" "other_group" set_other_groups
if [ "$( grep -c "config proxyprovider" $CFG_FILE )" -gt 0 ];then
echo " use: $group_name" >>$GROUP_FILE
if [ "$type" != "relay" ]; then
config_foreach set_proxy_provider "proxyprovider" "$group_name"
fi
if [ "$set_proxy_provider" -eq 1 ]; then
sed -i "/^ \{0,\}use: ${group_name}/c\ use:" $GROUP_FILE
else
sed -i "/use: ${group_name}/d" $GROUP_FILE
fi
if [ "$set_group" -eq 1 ]; then
sed -i "/^ \{0,\}proxies: ${group_name}/c\ proxies:" $GROUP_FILE
else
sed -i "/proxies: ${group_name}/d" $GROUP_FILE
fi
fi
[ ! -z "$test_url" ] && {
echo " url: $test_url" >>$GROUP_FILE 2>/dev/null
}
[ ! -z "$test_interval" ] && {
echo " interval: \"$test_interval\"" >>$GROUP_FILE 2>/dev/null
}
}
gcount=$( grep -c "config pgroups" $CFG_FILE 2>/dev/null)
if [ $gcount -gt 0 ];then
config_load clash
config_foreach yml_groups_set "pgroups"
fi
if [ -f $GROUP_FILE ]; then
sed -i "1i\ " $GROUP_FILE 2>/dev/null
sed -i "2i\proxy-groups:" $GROUP_FILE 2>/dev/null
fi
RULE_FILE="/tmp/rules.yaml"
rucount=$( grep -c "config rules" $CFG_FILE 2>/dev/null)
if [ -f $RULE_FILE ];then
rm -rf $RULE_FILE 2>/dev/null
fi
add_rules()
{
local section="$1"
config_get "rulegroups" "$section" "rulegroups" ""
config_get "rulename" "$section" "rulename" ""
config_get "type" "$section" "type" ""
config_get "res" "$section" "res" ""
config_get "rulenamee" "$section" "rulenamee" ""
if [ ! -z $rulename ];then
rulename=$rulename
elif [ ! -z $rulenamee ];then
rulename=$rulenamee
fi
if [ "${res}" -eq 1 ];then
echo "- $type,$rulename,$rulegroups,no-resolve">>$RULE_FILE
elif [ "${type}" == "MATCH" ];then
echo "- $type,$rulegroups">>$RULE_FILE
else
echo "- $type,$rulename,$rulegroups">>$RULE_FILE
fi
}
if [ $rucount -gt 0 ];then
config_load clash
config_foreach add_rules "rules"
fi
if [ -f $RULE_FILE ];then
sed -i "1i\ " $RULE_FILE 2>/dev/null
sed -i "2i\rules:" $RULE_FILE 2>/dev/null
fi
mode=$(uci get clash.config.mode 2>/dev/null)
p_mode=$(uci get clash.config.p_mode 2>/dev/null)
da_password=$(uci get clash.config.dash_pass 2>/dev/null)
redir_port=$(uci get clash.config.redir_port 2>/dev/null)
http_port=$(uci get clash.config.http_port 2>/dev/null)
socks_port=$(uci get clash.config.socks_port 2>/dev/null)
dash_port=$(uci get clash.config.dash_port 2>/dev/null)
bind_addr=$(uci get clash.config.bind_addr 2>/dev/null)
allow_lan=$(uci get clash.config.allow_lan 2>/dev/null)
log_level=$(uci get clash.config.level 2>/dev/null)
subtype=$(uci get clash.config.subcri 2>/dev/null)
DNS_FILE="/usr/share/clash/dns.yaml"
TEMP_FILE="/tmp/dns_temp.yaml"
cat >> "$TEMP_FILE" <<-EOF
#config-start-here
EOF
sed -i "1i\port: ${http_port}" $TEMP_FILE 2>/dev/null
sed -i "/port: ${http_port}/a\socks-port: ${socks_port}" $TEMP_FILE 2>/dev/null
sed -i "/socks-port: ${socks_port}/a\redir-port: ${redir_port}" $TEMP_FILE 2>/dev/null
sed -i "/redir-port: ${redir_port}/a\allow-lan: ${allow_lan}" $TEMP_FILE 2>/dev/null
if [ $allow_lan == "true" ]; then
sed -i "/allow-lan: ${allow_lan}/a\bind-address: \"${bind_addr}\"" $TEMP_FILE 2>/dev/null
sed -i "/bind-address: \"${bind_addr}\"/a\mode: ${p_mode}" $TEMP_FILE 2>/dev/null
sed -i "/mode: ${p_mode}/a\log-level: ${log_level}" $TEMP_FILE 2>/dev/null
sed -i "/log-level: ${log_level}/a\external-controller: 0.0.0.0:${dash_port}" $TEMP_FILE 2>/dev/null
sed -i "/external-controller: 0.0.0.0:${dash_port}/a\secret: \"${da_password}\"" $TEMP_FILE 2>/dev/null
sed -i "/secret: \"${da_password}\"/a\external-ui: \"./dashboard\"" $TEMP_FILE 2>/dev/null
sed -i "external-ui: \"/usr/share/clash/dashboard\"/a\ " $TEMP_FILE 2>/dev/null
sed -i " /a\ " $TEMP_FILE 2>/dev/null
else
sed -i "/allow-lan: ${allow_lan}/a\mode: ${p_mode}" $TEMP_FILE 2>/dev/null
sed -i "/mode: ${p_mode}/a\log-level: ${log_level}" $TEMP_FILE 2>/dev/null
sed -i "/log-level: ${log_level}/a\external-controller: 0.0.0.0:${dash_port}" $TEMP_FILE 2>/dev/null
sed -i "/external-controller: 0.0.0.0:${dash_port}/a\secret: \"${da_password}\"" $TEMP_FILE 2>/dev/null
sed -i "/secret: \"${da_password}\"/a\external-ui: \"./dashboard\"" $TEMP_FILE 2>/dev/null
fi
sed -i '/#config-start-here/ d' $TEMP_FILE 2>/dev/null
cat $DNS_FILE >> $TEMP_FILE 2>/dev/null
script=$(uci get clash.config.script 2>/dev/null)
ruleprovider=$(uci get clash.config.rulprp 2>/dev/null)
ppro=$(uci get clash.config.ppro 2>/dev/null)
rul=$(uci get clash.config.rul 2>/dev/null)
if [ $ppro -eq 1 ];then
if [ -f $PROVIDER_FILE ];then
cat $PROVIDER_FILE >> $TEMP_FILE 2>/dev/null
fi
fi
if [ -f $GROUP_FILE ];then
cat $GROUP_FILE >> $TEMP_FILE 2>/dev/null
fi
if [ $ruleprovider -eq 1 ];then
if [ -f $RULE_PROVIDER ];then
cat $RULE_PROVIDER >> $TEMP_FILE 2>/dev/null
sed -i -e '$a\' $TEMP_FILE 2>/dev/null
fi
fi
if [ $script -eq 1 ];then
if [ -f $SCRIPT ];then
cat $SCRIPT >> $TEMP_FILE 2>/dev/null
sed -i -e '$a\' $TEMP_FILE 2>/dev/null
fi
fi
if [ $rul -eq 1 ];then
if [ -f $RULE_FILE ];then
cat $RULE_FILE >> $TEMP_FILE 2>/dev/null
fi
fi
mv $TEMP_FILE $CONFIG_YAML 2>/dev/null
if [ -z $check_name ] && [ "${same_tag}" -eq 1 ];then
echo "${config_name}.yaml" >>/usr/share/clashbackup/create_list.conf
elif [ -z $check_name ] && [ "${same_tag}" -eq 0 ];then
echo "${config_name}.yaml" >>/usr/share/clashbackup/create_list.conf
fi
rm -rf $RULE_PROVIDER $PROVIDER_FILE $GROUP_FILE $RULE_FILE
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Completed Creating Custom Config.. " >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "创建自定义配置完成..." >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
fi
fi
fi

View File

@ -1,787 +0,0 @@
#!/bin/bash /etc/rc.common
. /lib/functions.sh
REAL_LOG="/usr/share/clash/clash_real.txt"
lang=$(uci get luci.main.lang 2>/dev/null)
config_type=$(uci get clash.config.config_type 2>/dev/null)
create=$(uci get clash.config.create 2>/dev/null)
load_from=$(uci get clash.config.loadfrom 2>/dev/null)
config_name=$(uci get clash.config.create_tag 2>/dev/null)
CONFIG_YAML="/usr/share/clash/config/custom/${config_name}.yaml"
check_name=$(grep -F "${config_name}.yaml" "/usr/share/clashbackup/create_list.conf")
same_tag=$(uci get clash.config.same_tag 2>/dev/null)
if [ $config_name == "" ] || [ -z $config_name ];then
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Tag Your Config" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "标记您的配置" >$REAL_LOG
fi
sleep 5
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
fi
if [ ! -z $check_name ] && [ "${same_tag}" -eq 0 ];then
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Config with same name exist, please rename tag and create again" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "已存在同名配置,请重命名标记,重新创建配置" >$REAL_LOG
fi
sleep 5
echo "Clash for OpenWRT" >$REAL_LOG
exit 0
else
if [ "$load_from" == "sub" ];then
load=$(uci get clash.config.config_path_sub 2>/dev/null)
elif [ "$load_from" == "upl" ];then
load=$(uci get clash.config.config_path_up 2>/dev/null)
fi
if [ "${create}" -eq 1 ];then
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Starting to Create Custom Config.. " >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "开始创建自定义配置..." >$REAL_LOG
fi
CONFIG_YAML_RULE="/usr/share/clash/custom_rule.yaml"
SERVER_FILE="/tmp/servers.yaml"
TEMP_FILE="/tmp/dns_temp.yaml"
Proxy_Group="/tmp/Proxy_Group"
GROUP_FILE="/tmp/groups.yaml"
CONFIG_FILE="/tmp/y_groups"
CFG_FILE="/etc/config/clash"
DNS_FILE="/usr/share/clash/dns.yaml"
PROVIDER_FILE="/tmp/yaml_provider.yaml"
gcount=$( grep -c "config groups" $CFG_FILE 2>/dev/null)
scount=$( grep -c "config servers" $CFG_FILE 2>/dev/null)
pcount=$( grep -c "config provider" $CFG_FILE 2>/dev/null)
if [ $gcount -eq 0 ];then
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "No policy group found. Aborting Operation .." >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "找不到策略组。中止操作..." >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
fi
exit 0
fi
set_http_path()
{
if [ -z "$1" ]; then
return
fi
cat >> "$SERVER_FILE" <<-EOF
- '$1'
EOF
}
yml_proxy_provider_set()
{
local section="$1"
config_get "type" "$section" "type" ""
config_get "name" "$section" "name" ""
config_get "path" "$section" "path" ""
config_get "provider_url" "$section" "provider_url" ""
config_get "provider_interval" "$section" "provider_interval" ""
config_get "health_check" "$section" "health_check" ""
config_get "health_check_url" "$section" "health_check_url" ""
config_get "health_check_interval" "$section" "health_check_interval" ""
if [ "$path" != "./proxyprovider/$name.yaml" ] && [ "$type" = "http" ]; then
path="./proxyprovider/$name.yaml"
elif [ -z "$path" ]; then
return
fi
if [ -z "$type" ]; then
return
fi
if [ -z "$name" ]; then
return
fi
if [ -z "$health_check" ]; then
return
fi
echo "$name" >> /tmp/Proxy_Provider
cat >> "$PROVIDER_FILE" <<-EOF
$name:
type: $type
path: $path
EOF
if [ ! -z "$provider_url" ]; then
cat >> "$PROVIDER_FILE" <<-EOF
url: $provider_url
interval: $provider_interval
EOF
fi
cat >> "$PROVIDER_FILE" <<-EOF
health-check:
enable: $health_check
url: $health_check_url
interval: $health_check_interval
EOF
}
if [ $pcount -gt 0 ];then
config_load "clash"
config_foreach yml_proxy_provider_set "provider"
fi
if [ -f $PROVIDER_FILE ];then
sed -i "1i\ " $PROVIDER_FILE 2>/dev/null
sed -i "2i\proxy-provider:" $PROVIDER_FILE 2>/dev/null
#echo "proxy-provider:" >$PROVIDER_FILE
rm -rf /tmp/Proxy_Provider
fi
set_alpn()
{
if [ -z "$1" ]; then
return
fi
cat >> "$SERVER_FILE" <<-EOF
- $1
EOF
}
set_groups()
{
if [ -z "$1" ]; then
return
fi
if [ "$1" = "$3" ]; then
set_group=1
echo " - \"${2}\"" >>$GROUP_FILE
fi
}
servers_set()
{
local section="$1"
config_get "type" "$section" "type" ""
config_get "name" "$section" "name" ""
config_get "server" "$section" "server" ""
config_get "port" "$section" "port" ""
config_get "cipher" "$section" "cipher" ""
config_get "password" "$section" "password" ""
config_get "securitys" "$section" "securitys" ""
config_get "udp" "$section" "udp" ""
config_get "obfs" "$section" "obfs" ""
config_get "obfs_vmess" "$section" "obfs_vmess" ""
config_get "host" "$section" "host" ""
config_get "custom" "$section" "custom" ""
config_get "tls" "$section" "tls" ""
config_get "tls_custom" "$section" "tls_custom" ""
config_get "skip_cert_verify" "$section" "skip_cert_verify" ""
config_get "path" "$section" "path" ""
config_get "alterId" "$section" "alterId" ""
config_get "uuid" "$section" "uuid" ""
config_get "auth_name" "$section" "auth_name" ""
config_get "auth_pass" "$section" "auth_pass" ""
config_get "mux" "$section" "mux" ""
config_get "protocol" "$section" "protocol" ""
config_get "protocolparam" "$section" "protocolparam" ""
config_get "obfsparam" "$section" "obfsparam" ""
config_get "obfs_ssr" "$section" "obfs_ssr" ""
config_get "cipher_ssr" "$section" "cipher_ssr" ""
config_get "psk" "$section" "psk" ""
config_get "obfs_snell" "$section" "obfs_snell" ""
config_get "sni" "$section" "sni" ""
config_get "alpn" "$section" "alpn" ""
config_get "http_path" "$section" "http_path" ""
config_get "keep_alive" "$section" "keep_alive" ""
if [ -z "$type" ]; then
return
fi
if [ -z "$server" ]; then
return
fi
if [ ! -z "$mux" ]; then
muxx="mux: $mux"
fi
if [ "$obfs_snell" = "none" ]; then
obfs_snell=""
fi
if [ -z "$name" ]; then
name="Server"
fi
if [ -z "$port" ]; then
return
fi
if [ ! -z "$udp" ] && [ "$obfs" = "none" ] && [ "$type" = "ss" ]; then
udpp=", udp: $udp"
fi
if [ ! -z "$udp" ] && [ "$type" != "trojan" ] && [ "$type" != "ss" ]; then
udpp=", udp: $udp"
fi
if [ "$obfs" != "none" ] && [ "$type" = "ss" ]; then
if [ "$obfs" = "websocket" ]; then
obfss="plugin: v2ray-plugin"
else
obfss="plugin: obfs"
fi
fi
if [ "$obfs_vmess" = "websocket" ]; then
obfs_vmess="network: ws"
fi
if [ "$obfs_vmess" = "http" ]; then
obfs_vmess="network: http"
fi
if [ ! -z "$custom" ] && [ "$type" = "vmess" ]; then
custom="Host: $custom"
fi
if [ ! -z "$path" ]; then
if [ "$type" != "vmess" ]; then
path="path: '$path'"
elif [ "$obfs_vmess" = "network: ws" ]; then
path="ws-path: $path"
fi
fi
if [ ! -z "$auth_name" ] && [ ! -z "$auth_pass" ]; then
auth_psk=", username: $auth_name, password: $auth_pass"
fi
if [ -z "$password" ]; then
if [ "$type" = "ss" ] || [ "$type" = "trojan" ]; then
return
fi
fi
if [ "$type" = "ss" ] && [ "$obfs" = " " ]; then
echo "- { name: \"$name\", type: $type, server: $server, port: $port, cipher: $cipher, password: "$password"$udpp }" >>$SERVER_FILE
elif [ "$type" = "ss" ] && [ "$obfs" = "websocket" ] || [ "$obfs" = "tls" ] ||[ "$obfs" = "http" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
cipher: $cipher
password: "$password"
EOF
if [ ! -z "$udp" ]; then
cat >> "$SERVER_FILE" <<-EOF
udp: $udp
EOF
fi
if [ ! -z "$obfss" ]; then
cat >> "$SERVER_FILE" <<-EOF
$obfss
plugin-opts:
mode: $obfs
EOF
fi
if [ "$host" ]; then
cat >> "$SERVER_FILE" <<-EOF
host: $host
EOF
fi
if [ "$tls_custom" = "true" ] && [ "$type" = "ss" ]; then
cat >> "$SERVER_FILE" <<-EOF
tls: true
EOF
fi
if [ "$skip_cert_verify" = "true" ] && [ "$type" = "ss" ]; then
cat >> "$SERVER_FILE" <<-EOF
skip-cert-verify: true
EOF
fi
if [ ! -z "$path" ]; then
cat >> "$SERVER_FILE" <<-EOF
$paths
EOF
fi
if [ "$mux" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
$muxx
EOF
fi
if [ ! -z "$custom" ]; then
cat >> "$SERVER_FILE" <<-EOF
headers:
custom: $custom
EOF
fi
fi
if [ "$type" = "trojan" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
password: "$password"
EOF
if [ ! -z "$udp" ]; then
cat >> "$SERVER_FILE" <<-EOF
udp: $udp
EOF
fi
if [ ! -z "$sni" ]; then
cat >> "$SERVER_FILE" <<-EOF
sni: $sni
EOF
fi
if [ ! -z "$alpn" ]; then
cat >> "$SERVER_FILE" <<-EOF
alpn:
EOF
config_list_foreach "$section" "alpn" set_alpn
fi
if [ "$skip_cert_verify" = "true" ] && [ "$type" = "trojan" ]; then
cat >> "$SERVER_FILE" <<-EOF
skip-cert-verify: true
EOF
fi
fi
#vmess
if [ "$type" = "vmess" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
uuid: $uuid
alterId: $alterId
cipher: $securitys
EOF
if [ ! -z "$udp" ]; then
cat >> "$SERVER_FILE" <<-EOF
udp: $udp
EOF
fi
if [ "$tls" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
tls: $tls
EOF
fi
if [ "$skip_cert_verify" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
skip-cert-verify: $skip_cert_verify
EOF
fi
if [ "$obfs_vmess" != "none" ]; then
cat >> "$SERVER_FILE" <<-EOF
$obfs_vmess
EOF
if [ ! -z "$path" ] && [ "$obfs_vmess" = "network: ws" ]; then
cat >> "$SERVER_FILE" <<-EOF
$path
EOF
fi
if [ ! -z "$custom" ] && [ "$obfs_vmess" = "network: ws" ]; then
cat >> "$SERVER_FILE" <<-EOF
ws-headers:
$custom
EOF
fi
if [ ! -z "$http_path" ] && [ "$obfs_vmess" = "network: http" ]; then
cat >> "$SERVER_FILE" <<-EOF
http-opts:
method: "GET"
path:
EOF
config_list_foreach "$section" "http_path" set_http_path
fi
if [ "$keep_alive" = "true" ] && [ "$obfs_vmess" = "network: http" ]; then
cat >> "$SERVER_FILE" <<-EOF
headers:
Connection:
- keep-alive
EOF
fi
fi
fi
#socks5
if [ "$type" = "socks5" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
EOF
if [ ! -z "$auth_name" ]; then
cat >> "$SERVER_FILE" <<-EOF
username: $auth_name
EOF
fi
if [ ! -z "$auth_pass" ]; then
cat >> "$SERVER_FILE" <<-EOF
password: $auth_pass
EOF
fi
if [ ! -z "$udp" ]; then
cat >> "$SERVER_FILE" <<-EOF
udp: $udp
EOF
fi
if [ "$skip_cert_verify" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
skip-cert-verify: $skip_cert_verify
EOF
fi
if [ "$tls" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
tls: $tls
EOF
fi
fi
#http
if [ "$type" = "http" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
EOF
if [ ! -z "$auth_name" ]; then
cat >> "$SERVER_FILE" <<-EOF
username: $auth_name
EOF
fi
if [ ! -z "$auth_pass" ]; then
cat >> "$SERVER_FILE" <<-EOF
password: $auth_pass
EOF
fi
if [ "$skip_cert_verify" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
skip-cert-verify: $skip_cert_verify
EOF
fi
if [ "$tls" = "true" ]; then
cat >> "$SERVER_FILE" <<-EOF
tls: $tls
EOF
fi
fi
#snell
if [ "$type" = "snell" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
psk: $psk
EOF
if [ "$obfs_snell" != "none" ] && [ ! -z "$host" ]; then
cat >> "$SERVER_FILE" <<-EOF
obfs-opts:
mode: $obfs_snell
host: $host
EOF
fi
fi
if [ "$type" = "ssr" ]; then
cat >> "$SERVER_FILE" <<-EOF
- name: "$name"
type: $type
server: $server
port: $port
cipher: $cipher_ssr
password: "$password"
protocol: "$protocol"
protocolparam: "$protocolparam"
obfs: "$obfs_ssr"
obfsparam: "$obfsparam"
EOF
fi
}
if [ $scount -gt 0 ];then
config_load clash
config_foreach servers_set "servers"
fi
if [ ! -z "${scount}" ] || [ "${scount}" -ne 0 ];then
sed -i "1i\ " $SERVER_FILE 2>/dev/null
sed -i "2i\Proxy:" $SERVER_FILE 2>/dev/null
egrep '^ {0,}-' $SERVER_FILE |grep name: |awk -F 'name: ' '{print $2}' |sed 's/,.*//' >$Proxy_Group 2>&1
sed -i "s/^ \{0,\}/ - /" $Proxy_Group 2>/dev/null
fi
yml_servers_add()
{
local section="$1"
config_get "name" "$section" "name" ""
config_list_foreach "$section" "groups" set_groups "$name" "$2"
config_get "relay_groups" "$section" "relay_groups" ""
}
set_other_groups()
{
set_group=1
if [ "${1}" = "DIRECT" ]||[ "${1}" = "REJECT" ];then
echo " - ${1}" >>$GROUP_FILE 2>/dev/null
elif [ "${1}" = "ALL" ];then
cat $Proxy_Group >> $GROUP_FILE 2>/dev/null
else
echo " - \"${1}\"" >>$GROUP_FILE 2>/dev/null
fi
}
set_proxy_provider()
{
local section="$1"
config_get "name" "$section" "name" ""
config_list_foreach "$section" "groups" set_provider_groups "$name" "$2"
}
set_provider_groups()
{
if [ -z "$1" ]; then
return
fi
if [ "$1" = "$3" ]; then
set_proxy_provider=1
echo " - ${2}" >>$GROUP_FILE
fi
}
yml_groups_set()
{
local section="$1"
config_get "type" "$section" "type" ""
config_get "name" "$section" "name" ""
config_get "old_name" "$section" "old_name" ""
config_get "test_url" "$section" "test_url" ""
config_get "test_interval" "$section" "test_interval" ""
if [ -z "$type" ]; then
return
fi
if [ -z "$name" ]; then
return
fi
echo "- name: $name" >>$GROUP_FILE 2>/dev/null
echo " type: $type" >>$GROUP_FILE 2>/dev/null
group_name="$name"
echo " proxies: " >>$GROUP_FILE
#if [ "$name" != "$old_name" ]; then
# sed -i "s/,${old_name}$/,${name}#d/g" $load 2>/dev/null
# sed -i "s/:${old_name}$/:${name}#d/g" $load 2>/dev/null
# sed -i "s/\'${old_name}\'/\'${name}\'/g" $CFG_FILE 2>/dev/null
# config_load "clash"
#fi
set_group=0
set_proxy_provider=0
config_list_foreach "$section" "other_group" set_other_groups #加入其他策略组
config_foreach yml_servers_add "servers" "$name" "$type" #加入服务器节点
if [ "$( grep -c "config provider" $CFG_FILE )" -ne 0 ];then
echo " use: $group_name" >>$GROUP_FILE
if [ "$type" != "relay" ]; then
config_foreach set_proxy_provider "provider" "$group_name" #加入代理集
fi
if [ "$set_group" -eq 1 ]; then
sed -i "/^ \{0,\}proxies: ${group_name}/c\ proxies:" $GROUP_FILE
else
sed -i "/proxies: ${group_name}/d" $GROUP_FILE 2>/dev/null
fi
if [ "$set_proxy_provider" -eq 1 ]; then
sed -i "/^ \{0,\}use: ${group_name}/c\ use:" $GROUP_FILE
else
sed -i "/use: ${group_name}/d" $GROUP_FILE 2>/dev/null
fi
fi
[ ! -z "$test_url" ] && {
echo " url: $test_url" >>$GROUP_FILE 2>/dev/null
}
[ ! -z "$test_interval" ] && {
echo " interval: \"$test_interval\"" >>$GROUP_FILE 2>/dev/null
}
}
config_load clash
config_foreach yml_groups_set "groups"
if [ "$(ls -l $GROUP_FILE|awk '{print $5}')" -ne 0 ]; then
sed -i "1i\ " $GROUP_FILE 2>/dev/null
sed -i "2i\Proxy Group:" $GROUP_FILE 2>/dev/null
fi
mode=$(uci get clash.config.mode 2>/dev/null)
p_mode=$(uci get clash.config.p_mode 2>/dev/null)
da_password=$(uci get clash.config.dash_pass 2>/dev/null)
redir_port=$(uci get clash.config.redir_port 2>/dev/null)
http_port=$(uci get clash.config.http_port 2>/dev/null)
socks_port=$(uci get clash.config.socks_port 2>/dev/null)
dash_port=$(uci get clash.config.dash_port 2>/dev/null)
bind_addr=$(uci get clash.config.bind_addr 2>/dev/null)
allow_lan=$(uci get clash.config.allow_lan 2>/dev/null)
log_level=$(uci get clash.config.level 2>/dev/null)
subtype=$(uci get clash.config.subcri 2>/dev/null)
DNS_FILE="/usr/share/clash/dns.yaml"
TEMP_FILE="/tmp/dns_temp.yaml"
cat >> "$TEMP_FILE" <<-EOF
#config-start-here
EOF
sed -i "1i\port: ${http_port}" $TEMP_FILE 2>/dev/null
sed -i "/port: ${http_port}/a\socks-port: ${socks_port}" $TEMP_FILE 2>/dev/null
sed -i "/socks-port: ${socks_port}/a\redir-port: ${redir_port}" $TEMP_FILE 2>/dev/null
sed -i "/redir-port: ${redir_port}/a\allow-lan: ${allow_lan}" $TEMP_FILE 2>/dev/null
if [ $allow_lan == "true" ]; then
sed -i "/allow-lan: ${allow_lan}/a\bind-address: \"${bind_addr}\"" $TEMP_FILE 2>/dev/null
sed -i "/bind-address: \"${bind_addr}\"/a\mode: ${p_mode}" $TEMP_FILE 2>/dev/null
sed -i "/mode: ${p_mode}/a\log-level: ${log_level}" $TEMP_FILE 2>/dev/null
sed -i "/log-level: ${log_level}/a\external-controller: 0.0.0.0:${dash_port}" $TEMP_FILE 2>/dev/null
sed -i "/external-controller: 0.0.0.0:${dash_port}/a\secret: \"${da_password}\"" $TEMP_FILE 2>/dev/null
sed -i "/secret: \"${da_password}\"/a\external-ui: \"./dashboard\"" $TEMP_FILE 2>/dev/null
sed -i "external-ui: \"/usr/share/clash/dashboard\"/a\ " $TEMP_FILE 2>/dev/null
sed -i " /a\ " $TEMP_FILE 2>/dev/null
else
sed -i "/allow-lan: ${allow_lan}/a\mode: ${p_mode}" $TEMP_FILE 2>/dev/null
sed -i "/mode: ${p_mode}/a\log-level: ${log_level}" $TEMP_FILE 2>/dev/null
sed -i "/log-level: ${log_level}/a\external-controller: 0.0.0.0:${dash_port}" $TEMP_FILE 2>/dev/null
sed -i "/external-controller: 0.0.0.0:${dash_port}/a\secret: \"${da_password}\"" $TEMP_FILE 2>/dev/null
sed -i "/secret: \"${da_password}\"/a\external-ui: \"./dashboard\"" $TEMP_FILE 2>/dev/null
fi
sed -i '/#config-start-here/ d' $TEMP_FILE 2>/dev/null
cat $DNS_FILE >> $TEMP_FILE 2>/dev/null
if [ -f $SERVER_FILE ];then
cat $SERVER_FILE >> $TEMP_FILE 2>/dev/null
fi
if [ -f $PROVIDER_FILE ];then
cat $PROVIDER_FILE >> $TEMP_FILE 2>/dev/null
fi
cat $GROUP_FILE >> $TEMP_FILE 2>/dev/null
if [ -f $CONFIG_YAML ];then
rm -rf $CONFIG_YAML
fi
cat $TEMP_FILE $CONFIG_YAML_RULE > $CONFIG_YAML 2>/dev/null
sed -i "/Rule:/i\ " $CONFIG_YAML 2>/dev/null
if [ -z $check_name ] && [ "${same_tag}" -eq 1 ];then
echo "${config_name}.yaml" >>/usr/share/clashbackup/create_list.conf
elif [ -z $check_name ] && [ "${same_tag}" -eq 0 ];then
echo "${config_name}.yaml" >>/usr/share/clashbackup/create_list.conf
fi
rm -rf $TEMP_FILE $GROUP_FILE $Proxy_Group $CONFIG_FILE $PROVIDER_FILE
rm -rf /tmp/relay_server.list 2>/dev/null
if [ $lang == "en" ] || [ $lang == "auto" ];then
echo "Completed Creating Custom Config.. " >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
elif [ $lang == "zh_cn" ];then
echo "创建自定义配置完成..." >$REAL_LOG
sleep 2
echo "Clash for OpenWRT" >$REAL_LOG
fi
rm -rf $SERVER_FILE
fi
fi

View File

@ -12,12 +12,12 @@ status=$(egrep '^ {0,}Rule:' /tmp/Rule)
sed -i "1i\ " $RULE_YAML
mv $RULE_YAML /tmp/test
sed -i '1,/===/d' /tmp/test
mv /tmp/test /usr/share/clash/custom_rule.yaml
mv /tmp/test /usr/share/clash/rule.yaml
else
sed -i "1i\Rule:" $RULE_YAML
mv $RULE_YAML /tmp/test
sed -i "1i\ " /tmp/test
mv /tmp/test /usr/share/clash/custom_rule.yaml
mv /tmp/test /usr/share/clash/rule.yaml
fi
fi

View File

@ -1,46 +0,0 @@
experimental:
ignore-resolve-fail: true
# interface-name: eth0
tun:
enable: true
stack: system # or gvisor
# dns-hijack:
# - 8.8.8.8:53
# - tcp://8.8.8.8:53
device-url: dev://utun
dns-listen: 0.0.0.0:53
#authentication:
# - "user1:pass1"
#hosts:
# '*.clash.dev': 127.0.0.1
# 'alpha.clash.dev': '::1'
dns:
enable: true
listen: 0.0.0.0:5300
# # default-nameserver:
# # - 114.114.114.114
# # - 8.8.8.8
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- udp://114.114.114.114
- tls://118.89.110.78:853
- tls://47.96.179.163:853
- udp://8.8.8.8:53
- udp://8.8.4.4:53
- tcp://1.1.1.1
fallback:
- tls://118.89.110.78:853
- tls://47.96.179.163:853
- tcp://1.1.1.1
- tcp://8.8.8.8
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,14 +0,0 @@
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,28 +1,28 @@
/*! modern-normalize v0.6.0 | MIT License | https://github.com/sindresorhus/modern-normalize */*,:after,:before{box-sizing:border-box}:root{-moz-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{padding:0}progress{vertical-align:initial}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}
._2MMSFnbhST{stroke-dasharray:890;stroke-dashoffset:890;animation:apL4DUAKgd 3s ease-in-out infinite normal forwards}@keyframes apL4DUAKgd{0%{stroke-dashoffset:890}to{stroke-dashoffset:0}}
._3oi0NFbeOm{opacity:.5;width:100%;height:100%;display:flex;justify-content:center;align-items:center}
._1rJPiLWN4s{position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden;padding:20px;background:var(--color-background);color:var(--color-text);text-align:center}._3h_IywJG1l{color:#2a477a;opacity:.6;display:flex;justify-content:center;padding:40px}.aXXDDfyTjE,._3h_IywJG1l{align-items:center}.aXXDDfyTjE{display:inline-flex;color:var(--color-text-secondary)}.aXXDDfyTjE:active,.aXXDDfyTjE:hover{color:#387cec}.aXXDDfyTjE svg{margin-right:5px}
._30oJwXNik9{background:var(--color-bg-sidebar);position:relative}._1SsCcpJvxN{display:block}._2r8EkOI78X{display:flex;align-items:center;justify-content:center;padding:25px 0 15px;color:#2a477a;transition:color .3s ease-in-out}@media (max-width:768px){._2r8EkOI78X{display:none}}._2r8EkOI78X:hover{animation:_2KRqAfqV8c .3s ease-in-out 0s infinite alternate}._2r8EkOI78X img{width:80px;height:80px}@keyframes _2KRqAfqV8c{0%{color:#2a477a}to{color:#1f52ac}}@media (max-width:768px){._2vUQ0Hs_C5{display:flex;justify-content:space-between;overflow:scroll}}._8mEn9Wlw1n{color:var(--color-text);text-decoration:none;display:flex;align-items:center;padding:6px 16px}@media screen and (min-width:30em){._8mEn9Wlw1n{padding:8px 20px}}@media (max-width:768px){._8mEn9Wlw1n{flex-direction:column}}._8mEn9Wlw1n svg{color:var(--color-icon);width:22px;height:22px}@media screen and (min-width:30em){._8mEn9Wlw1n svg{width:24px;height:24px}}._1WyHmd6t6y{background:var(--color-sb-active-row-bg)}@media (max-width:768px){._1WyHmd6t6y{background:none;border-bottom:2px solid #387cec}}._2eMIYGbP9O{padding-left:14px;font-size:.75em}@media (max-width:768px){._2eMIYGbP9O{padding-left:0;padding-top:5px}}@media screen and (min-width:30em){._2eMIYGbP9O{font-size:1em}}.nURY8qkFLS{--sz:40px;position:absolute;bottom:10px;left:50%;transform:translateX(-50%);width:var(--sz);height:var(--sz);display:flex;justify-content:center;align-items:center;color:var(--color-text);padding:5px;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;background:none;cursor:pointer;border:1px solid transparent;border-radius:100%}@media (max-width:768px){.nURY8qkFLS{display:none}}.nURY8qkFLS:focus{border-color:var(--color-focus-blue)}
.SNYKRrv_2I{height:76px;display:flex;align-items:center}.VG1cD2OYvg{padding:0 15px;font-size:1.7em;text-align:left;margin:0}@media screen and (min-width:30em){.VG1cD2OYvg{padding:0 40px;font-size:2em}}
._37kQcxVR4T{color:var(--color-text);display:flex;align-items:center;flex-wrap:wrap}._37kQcxVR4T .sec{padding:10px;width:180px}._37kQcxVR4T .sec div:first-child{color:var(--color-text-secondary);font-size:.7em}._37kQcxVR4T .sec div:nth-child(2){padding:10px 0 0;font-size:1.8em}
._1EnK5MMInH{width:100%;height:100%;display:flex;justify-content:center;align-items:center}._39z9L5I2ao{--color1:#ddd;--size:40px;width:var(--size);height:var(--size);margin:10px;background-color:var(--color1);border-radius:100%;animation:_1DSWK2a-pe 1s ease-in-out infinite}@keyframes _1DSWK2a-pe{0%{transform:scale(0)}to{transform:scale(1);opacity:0}}
._2rN7aLQPCl{padding:6px 15px}@media screen and (min-width:30em){._2rN7aLQPCl{padding:10px 40px}}
._1u5AP7XMF9{padding:0 40px 5px}._2zeyKJDdFH{position:relative;height:40px}._3DQ7SXxKRA{position:absolute;top:50%;transform:translateY(-50%);left:0;width:100%}._1f-XUgRxH1{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px 0 35px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._3PLtWxZwrd{position:absolute;top:50%;transform:translateY(-50%);left:10px}
._2tpN_G7FeO{display:flex;align-items:center;flex-wrap:wrap;font-size:.9em;padding:10px}._3wuPHKqO5W{color:#eee;flex-shrink:0;text-align:center;width:66px;background:green;border-radius:5px;padding:3px 5px;margin:0 8px}.IwiVCclCSC{flex-shrink:0;color:#999;font-size:14px}._3I1beKAMFt{flex-shrink:0;display:flex;font-family:Roboto Mono,Menlo,monospace;align-items:center;padding:8px 0;width:100%;white-space:pre;overflow:auto}._2MDNI6JESq{margin:0;padding:0;color:var(--color-text)}._2MDNI6JESq li,._2MDNI6JESq li.even{background:var(--color-background)}._3KX1sKJ1QD{padding:10px 40px}._19_8g6kTIV{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#2d2d30}._19_8g6kTIV div:nth-child(2){color:var(--color-text-secondary);font-size:1.4em;opacity:.6}._3ljFcrWmBC{opacity:.3}
._3evbv-Ui87{-webkit-user-select:none;-ms-user-select:none;user-select:none;border:1px solid #525252;color:var(--color-text);background:var(--color-toggle-bg);display:flex;position:relative;outline:none}._3evbv-Ui87:focus{border-color:var(--color-focus-blue)}._3evbv-Ui87 input{position:absolute;left:0;opacity:0}._3evbv-Ui87 label{z-index:2;display:flex;align-items:center;justify-content:center;padding:10px 0;cursor:pointer}._1ok8KIb1RH{z-index:1;position:absolute;display:block;left:0;height:100%;transition:left .2s ease-out;background:var(--color-toggle-selected)}
._2S85tjFa1n{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:4px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._2S85tjFa1n:focus{border-color:var(--color-focus-blue)}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
h2._1p7G03ShKD{margin:0;font-size:1.3em}@media screen and (min-width:30em){h2._1p7G03ShKD{font-size:1.5em}}h2._1p7G03ShKD span:nth-child(2){font-size:12px;color:#777;font-weight:400;margin:0 .3em}body.light{--loading-dot-1-1:rgba(0,0,0,0.1);--loading-dot-1-2:rgba(0,0,0,0.5);--loading-dot-1-3:rgba(0,0,0,0.3);--loading-dot-2-1:rgba(0,0,0,0.3);--loading-dot-2-2:rgba(0,0,0,0.1);--loading-dot-2-3:rgba(0,0,0,0.5);--loading-dot-3-1:rgba(0,0,0,0.5);--loading-dot-3-2:rgba(0,0,0,0.3);--loading-dot-3-3:rgba(0,0,0,0.1)}body.dark{--loading-dot-1-1:hsla(0,0%,100%,0.5);--loading-dot-1-2:hsla(0,0%,100%,0.1);--loading-dot-1-3:hsla(0,0%,100%,0.3);--loading-dot-2-1:hsla(0,0%,100%,0.3);--loading-dot-2-2:hsla(0,0%,100%,0.5);--loading-dot-2-3:hsla(0,0%,100%,0.1);--loading-dot-3-1:hsla(0,0%,100%,0.1);--loading-dot-3-2:hsla(0,0%,100%,0.3);--loading-dot-3-3:hsla(0,0%,100%,0.5)}._1l_b31nvKC,._1l_b31nvKC:after,._1l_b31nvKC:before{display:inline-block;vertical-align:middle;width:6px;height:6px;border-radius:50%;font-size:0}._1l_b31nvKC{position:relative;background-color:var(--loading-dot-2-1);animation:AmeWPxQSDb 1s step-start infinite}._1l_b31nvKC:before{content:"";position:absolute;left:-12px;background-color:var(--loading-dot-1-1);animation:_1C49ms67Ai 1s step-start infinite}._1l_b31nvKC:after{content:"";position:absolute;right:-12px;background-color:var(--loading-dot-3-1);animation:p_etI2Ova8 1s step-start infinite}@keyframes _1C49ms67Ai{0%,to{background-color:var(--loading-dot-1-1)}33%{background-color:var(--loading-dot-1-2)}66%{background-color:var(--loading-dot-1-3)}}@keyframes AmeWPxQSDb{0%,to{background-color:var(--loading-dot-2-1)}33%{background-color:var(--loading-dot-2-2)}66%{background-color:var(--loading-dot-2-3)}}@keyframes p_etI2Ova8{0%,to{background-color:var(--loading-dot-3-1)}33%{background-color:var(--loading-dot-3-2)}66%{background-color:var(--loading-dot-3-3)}}
@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:400;src:local("Roboto Mono Regular "),local("Roboto Mono-Regular"),url(roboto-mono-latin-400.woff2) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:400;src:local("Open Sans Regular "),local("Open Sans-Regular"),url(open-sans-latin-400.woff2) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold "),local("Open Sans-Bold"),url(open-sans-latin-700.woff2) format("woff2")}.border-bottom,.border-left,.border-top,.relative{position:relative}.border-top:before{top:0}.border-bottom:after,.border-top:before{position:absolute;content:"";height:1px;width:100%;transform:scaleY(.5) translateZ(0);left:0;right:0;background:#555}.border-bottom:after{bottom:0}.border-left:before{position:absolute;content:"";height:100%;width:1px;transform:scaleX(.5) translateZ(0);top:0;bottom:0;background:#555;left:0}*,:after,:before{box-sizing:border-box}:root{--font-mono:"Roboto Mono",Menlo,monospace;--font-normal:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,"PingFang SC","Microsoft YaHei","微软雅黑",Arial,sans-serif;--color-focus-blue:#1a73e8}body{font-family:Open Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,PingFang SC,Microsoft YaHei,;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;margin:0;padding:0}body,body.dark{--color-background:#202020;--color-text:#ddd;--color-text-secondary:#ccc;--color-text-highlight:#fff;--color-bg-sidebar:#2d2d30;--color-sb-active-row-bg:#494b4e;--color-input-bg:#2d2d30;--color-input-border:#3f3f3f;--color-toggle-bg:#353535;--color-toggle-selected:#181818;--color-icon:#c7c7c7;--color-separator:#333;--color-btn-bg:#232323;--color-btn-fg:#bebebe;--color-bg-proxy:#303030;--color-row-odd:#282828;--bg-modal:#1f1f20;--bg-near-transparent:hsla(0,0%,100%,0.1);--select-border-color:#040404;--select-bg-hover:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23fff'/%3E%3C/svg%3E")}body.light{--color-background:#fbfbfb;--color-text:#222;--color-text-secondary:#646464;--color-text-highlight:#040404;--color-bg-sidebar:#e7e7e7;--color-sb-active-row-bg:#d0d0d0;--color-input-bg:#fff;--color-input-border:silver;--color-toggle-bg:#fff;--color-toggle-selected:#d7d7d7;--color-icon:#5b5b5b;--color-separator:#ccc;--color-btn-bg:#f4f4f4;--color-btn-fg:#101010;--color-bg-proxy:#e7e7e7;--color-row-odd:#f5f5f5;--bg-modal:#fbfbfb;--bg-near-transparent:rgba(0,0,0,0.1);--select-border-color:#999;--select-bg-hover:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23222'/%3E%3C/svg%3E")}.flexCenter{display:flex;align-items:center;justify-content:center}.fabgrp{position:fixed;z-index:3;right:20px;bottom:20px}
._3hz7LVhvUv:focus{outline:none}._3HF-KB9mgO{display:flex;justify-content:center;align-items:center}._3HF-KB9mgO ._3HzgPICn91{color:#2d2d30;opacity:.4;transition:opacity .4s}._3HF-KB9mgO ._3HzgPICn91:hover{opacity:.7}._1wpZuvoD5I{padding:30px 0 10px}.L7jTy-EFJ2{display:flex}.L7jTy-EFJ2 div{flex:1 1 auto}.L7jTy-EFJ2 div:nth-child(2){flex-grow:0;flex-basis:120px;margin-left:10px}._2fehqRU9GV{padding:30px 0 10px;display:flex;justify-content:flex-end;align-items:center}
._2A0HoxnDqc{-webkit-appearance:none;outline:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:inline-flex;align-items:center;justify-content:center;color:var(--color-btn-fg);background:var(--color-btn-bg);border:1px solid #555;border-radius:100px;font-size:.85em;padding:4px 7px}._2A0HoxnDqc:focus{border-color:var(--color-focus-blue)}._2A0HoxnDqc:hover{background:#387cec;border:1px solid #387cec;color:#fff}._2A0HoxnDqc:active{transform:scale(.97)}@media screen and (min-width:30em){._2A0HoxnDqc{font-size:1em;padding:6px 12px}}._2A0HoxnDqc.rBrOhcv1IU{border-color:transparent;background:none}._2A0HoxnDqc.rBrOhcv1IU:focus{border-color:var(--color-focus-blue)}._2A0HoxnDqc.rBrOhcv1IU:hover{color:#fff;background:#387cec;border:1px solid #387cec}.CtvjIaf7QB{margin-right:5px;display:inline-flex;align-items:center;justify-content:center}._2KAqQdptfT{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:inline-flex}
._2id19fefQX{display:flex;flex-wrap:wrap}._2QQQyNTKoG{flex-grow:0;margin-right:10px;margin-bottom:10px;cursor:pointer;border:2px solid transparent}.XJkW0wZSAx{border-color:#387cec}
._2OZZRrEL0J>div{min-width:345px}@media screen and (min-width:30em){._2OZZRrEL0J>div{width:360px}}._2OZZRrEL0J,.lF_ZoyIdZN{padding:6px 15px 15px}@media screen and (min-width:30em){._2OZZRrEL0J,.lF_ZoyIdZN{padding:10px 40px 40px}}.VduFBb2hWX{padding:0 15px}@media screen and (min-width:30em){.VduFBb2hWX{padding:0 40px}}.VduFBb2hWX>div{border-top:1px dashed #373737}._2NQoBOQcGA{padding:16px 0}
._73r9mFp69q{display:grid;grid-template-columns:repeat(11,minmax(-webkit-max-content,auto));grid-template-columns:repeat(11,minmax(max-content,auto))}.hEAcjybq1r{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}.hEAcjybq1r:hover{color:var(--color-text-highlight)}._1x7JSEXzR8{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._1x7JSEXzR8._3n5sGVMC-F{background:var(--color-row-odd)}._26SQDJZWya{text-align:right}._3LKH-WXUjR{display:inline-flex;margin-left:10px;width:16px;height:16px}._1CoVX1S_So{transform:rotate(180deg)}
h2._1p7G03ShKD{margin:0;font-size:1.3em}@media screen and (min-width:30em){h2._1p7G03ShKD{font-size:1.5em}}h2._1p7G03ShKD span:nth-child(2){font-size:12px;color:#777;font-weight:400;margin:0 .3em}body.light{--loading-dot-1-1:rgba(0,0,0,0.1);--loading-dot-1-2:rgba(0,0,0,0.5);--loading-dot-1-3:rgba(0,0,0,0.3);--loading-dot-2-1:rgba(0,0,0,0.3);--loading-dot-2-2:rgba(0,0,0,0.1);--loading-dot-2-3:rgba(0,0,0,0.5);--loading-dot-3-1:rgba(0,0,0,0.5);--loading-dot-3-2:rgba(0,0,0,0.3);--loading-dot-3-3:rgba(0,0,0,0.1)}body.dark{--loading-dot-1-1:hsla(0,0%,100%,0.5);--loading-dot-1-2:hsla(0,0%,100%,0.1);--loading-dot-1-3:hsla(0,0%,100%,0.3);--loading-dot-2-1:hsla(0,0%,100%,0.3);--loading-dot-2-2:hsla(0,0%,100%,0.5);--loading-dot-2-3:hsla(0,0%,100%,0.1);--loading-dot-3-1:hsla(0,0%,100%,0.1);--loading-dot-3-2:hsla(0,0%,100%,0.3);--loading-dot-3-3:hsla(0,0%,100%,0.5)}._1l_b31nvKC,._1l_b31nvKC:after,._1l_b31nvKC:before{display:inline-block;vertical-align:middle;width:6px;height:6px;border-radius:50%;font-size:0}._1l_b31nvKC{position:relative;background-color:var(--loading-dot-2-1);animation:AmeWPxQSDb 1s step-start infinite}._1l_b31nvKC:before{content:"";position:absolute;left:-12px;background-color:var(--loading-dot-1-1);animation:_1C49ms67Ai 1s step-start infinite}._1l_b31nvKC:after{content:"";position:absolute;right:-12px;background-color:var(--loading-dot-3-1);animation:p_etI2Ova8 1s step-start infinite}@keyframes _1C49ms67Ai{0%,to{background-color:var(--loading-dot-1-1)}33%{background-color:var(--loading-dot-1-2)}66%{background-color:var(--loading-dot-1-3)}}@keyframes AmeWPxQSDb{0%,to{background-color:var(--loading-dot-2-1)}33%{background-color:var(--loading-dot-2-2)}66%{background-color:var(--loading-dot-2-3)}}@keyframes p_etI2Ova8{0%,to{background-color:var(--loading-dot-3-1)}33%{background-color:var(--loading-dot-3-2)}66%{background-color:var(--loading-dot-3-3)}}
._1r-KsYFNaj{position:relative;padding:10px 0}._1r-KsYFNaj input{-webkit-appearance:none;background-color:initial;background-image:none;border:none;border-radius:0;border-bottom:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 8px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._1r-KsYFNaj input:focus{border-color:var(--color-focus-blue)}._1r-KsYFNaj label{position:absolute;left:8px;bottom:22px;transition:transform .15s ease-in-out;transform-origin:0 0}._1r-KsYFNaj input:focus+label,._1r-KsYFNaj label.Hn6h5kxOg7{transform:scale(.75) translateY(-25px)}._1r-KsYFNaj input:focus+label{color:var(--color-focus-blue)}
._2MMSFnbhST{stroke-dasharray:890;stroke-dashoffset:890;animation:apL4DUAKgd 3s ease-in-out infinite normal forwards}@keyframes apL4DUAKgd{0%{stroke-dashoffset:890}to{stroke-dashoffset:0}}
._3D3ZNp4oBz{background:none;position:fixed;top:0;bottom:0;left:0;right:0;transform:none;padding:0;border-radius:0;display:flex;justify-content:center}.tgH3yv-xGR{position:relative;top:10%;margin-left:20px;margin-right:20px}._3MMuzHtwZL{background:#222}
.ctrHyq7uir{position:fixed;top:0;right:0;left:0;bottom:0;background:#444;z-index:1024}._17mHpKiOUD{outline:none;position:relative;color:#ddd;top:50%;left:50%;transform:translate(-50%,-50%);background:#444;padding:20px;border-radius:10px}
._3R-iKwDVj-{background-color:rgba(0,0,0,.6)}._1vh9rFTHqn{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._3bTCBReMiZ{opacity:1;transform:translate(-50%,-50%) scale(1)}._1lwetyauPD{display:flex;align-items:center;justify-content:center;margin-top:30px}
.rtf{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:9998;padding-left:0;list-style:none}.rtf.open .rtf--mb>*{transition:transform .2s ease-in-out}.rtf.open .rtf--mb{background:rgba(56,124,236,.92);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.rtf.open .rtf--mb>ul{list-style:none;margin:0;padding:0}.rtf.open .rtf--ab__c:hover>span,.rtf.open .rtf--ab__c>span.always-show{transition:opacity .2s ease-in-out;opacity:.9}.rtf.open .rtf--ab__c:first-child{transform:translateY(-60px) scale(1);transition-delay:.03s}.rtf.open .rtf--ab__c:first-child.top{transform:translateY(60px) scale(1)}.rtf.open .rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(1);transition-delay:.09s}.rtf.open .rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(1)}.rtf.open .rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(1);transition-delay:.12s}.rtf.open .rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(1)}.rtf.open .rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(1);transition-delay:.15s}.rtf.open .rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(1)}.rtf.open .rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(1);transition-delay:.18s}.rtf.open .rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(1)}.rtf.open .rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(1);transition-delay:.21s}.rtf.open .rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(1)}.rtf--mb__c{padding:25px;margin:-25px}.rtf--mb__c :last-child{margin-bottom:0}.rtf--mb__c:hover>span,.rtf--mb__c>span.always-show{transition:opacity .2s ease-in-out;opacity:.9}.rtf--mb__c>span{opacity:0;transition:opacity .2s ease-in-out;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;margin-left:4px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.rtf--mb__c>span.right{right:100%}.rtf--mb{height:48px;width:48px;z-index:9999;background:#387cec;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:18px}.rtf--ab__c,.rtf--mb>*{transition:transform .2s ease-in-out}.rtf--ab__c{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0}.rtf--ab__c>span{opacity:0;transition:opacity .2s ease-in-out;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.rtf--ab__c>span.right{right:100%}.rtf--ab__c:first-child{transform:translateY(-60px) scale(0);transition-delay:.21s}.rtf--ab__c:first-child.top{transform:translateY(60px) scale(0)}.rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(0);transition-delay:.18s}.rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(0)}.rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(0);transition-delay:.15s}.rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(0)}.rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(0);transition-delay:.12s}.rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(0)}.rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(0);transition-delay:.09s}.rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(0)}.rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(0);transition-delay:.03s}.rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(0)}.rtf--ab{height:40px;width:40px;margin-right:4px;background-color:#aaa;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:16px;z-index:10000}.rtf--ab:hover{background:#387cec;border:1px solid #387cec;color:#fff}.rtf--ab:focus{border-color:var(--color-focus-blue)}
._2OZZRrEL0J>div{min-width:345px}@media screen and (min-width:30em){._2OZZRrEL0J>div{width:360px}}._2OZZRrEL0J,.lF_ZoyIdZN{padding:6px 15px 15px}@media screen and (min-width:30em){._2OZZRrEL0J,.lF_ZoyIdZN{padding:10px 40px 40px}}.VduFBb2hWX{padding:0 15px}@media screen and (min-width:30em){.VduFBb2hWX{padding:0 40px}}.VduFBb2hWX>div{border-top:1px dashed #373737}._2NQoBOQcGA{padding:16px 0}
.SNYKRrv_2I{height:76px;display:flex;align-items:center}.VG1cD2OYvg{padding:0 15px;font-size:1.7em;text-align:left;margin:0}@media screen and (min-width:30em){.VG1cD2OYvg{padding:0 40px;font-size:2em}}
._2S85tjFa1n{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:4px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._2S85tjFa1n:focus{border-color:var(--color-focus-blue)}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
._2id19fefQX{display:flex;flex-wrap:wrap}._2QQQyNTKoG{flex-grow:0;margin-right:10px;margin-bottom:10px;cursor:pointer;border:2px solid transparent}.XJkW0wZSAx{border-color:#387cec}
._3evbv-Ui87{-webkit-user-select:none;-ms-user-select:none;user-select:none;border:1px solid #525252;color:var(--color-text);background:var(--color-toggle-bg);display:flex;position:relative;outline:none}._3evbv-Ui87:focus{border-color:var(--color-focus-blue)}._3evbv-Ui87 input{position:absolute;left:0;opacity:0}._3evbv-Ui87 label{z-index:2;display:flex;align-items:center;justify-content:center;padding:10px 0;cursor:pointer}._1ok8KIb1RH{z-index:1;position:absolute;display:block;left:0;height:100%;transition:left .2s ease-out;background:var(--color-toggle-selected)}
.react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{margin:0 0 10px;padding:0 30px}.react-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:5px;bottom:-1px;position:relative;list-style:none;padding:6px 10px;cursor:pointer;font-size:1.2em;opacity:.5}.react-tabs__tab--selected{opacity:1}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{border-color:#0188fe;outline:none}.react-tabs__tab:focus:after{content:"";position:absolute}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}
.duOnUwq-nI{height:100%;display:flex;color:var(--color-background);opacity:.1}.CCpULSE9Uh,.duOnUwq-nI{align-items:center;justify-content:center}.CCpULSE9Uh{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;background-color:var(--bg-near-transparent);border-radius:30px}.peSK87gUob{margin:0 30px;width:100%;max-width:350px;justify-self:flex-end}._1nDSx5DASl{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:18px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:36px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}
._1r-KsYFNaj{position:relative;padding:10px 0}._1r-KsYFNaj input{-webkit-appearance:none;background-color:initial;background-image:none;border:none;border-radius:0;border-bottom:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 8px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._1r-KsYFNaj input:focus{border-color:var(--color-focus-blue)}._1r-KsYFNaj label{position:absolute;left:8px;bottom:22px;transition:transform .15s ease-in-out;transform-origin:0 0}._1r-KsYFNaj input:focus+label,._1r-KsYFNaj label.Hn6h5kxOg7{transform:scale(.75) translateY(-25px)}._1r-KsYFNaj input:focus+label{color:var(--color-focus-blue)}
._3hz7LVhvUv:focus{outline:none}._3HF-KB9mgO{display:flex;justify-content:center;align-items:center}._3HF-KB9mgO ._3HzgPICn91{color:#2d2d30;opacity:.4;transition:opacity .4s}._3HF-KB9mgO ._3HzgPICn91:hover{opacity:.7}._1wpZuvoD5I{padding:30px 0 10px}.L7jTy-EFJ2{display:flex}.L7jTy-EFJ2 div{flex:1 1 auto}.L7jTy-EFJ2 div:nth-child(2){flex-grow:0;flex-basis:120px;margin-left:10px}._2fehqRU9GV{padding:30px 0 10px;display:flex;justify-content:flex-end;align-items:center}
._3D3ZNp4oBz{background:none;position:fixed;top:0;bottom:0;left:0;right:0;transform:none;padding:0;border-radius:0;display:flex;justify-content:center}.tgH3yv-xGR{position:relative;top:10%;margin-left:20px;margin-right:20px}._3MMuzHtwZL{background:#222}
@font-face{font-family:Roboto Mono;font-style:normal;font-display:swap;font-weight:400;src:local("Roboto Mono Regular "),local("Roboto Mono-Regular"),url(roboto-mono-latin-400.woff2) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:400;src:local("Open Sans Regular "),local("Open Sans-Regular"),url(open-sans-latin-400.woff2) format("woff2")}@font-face{font-family:Open Sans;font-style:normal;font-display:swap;font-weight:700;src:local("Open Sans Bold "),local("Open Sans-Bold"),url(open-sans-latin-700.woff2) format("woff2")}.border-bottom,.border-left,.border-top,.relative{position:relative}.border-top:before{top:0}.border-bottom:after,.border-top:before{position:absolute;content:"";height:1px;width:100%;transform:scaleY(.5) translateZ(0);left:0;right:0;background:#555}.border-bottom:after{bottom:0}.border-left:before{position:absolute;content:"";height:100%;width:1px;transform:scaleX(.5) translateZ(0);top:0;bottom:0;background:#555;left:0}*,:after,:before{box-sizing:border-box}:root{--font-mono:"Roboto Mono",Menlo,monospace;--font-normal:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,"PingFang SC","Microsoft YaHei","微软雅黑",Arial,sans-serif;--color-focus-blue:#1a73e8}body{font-family:Open Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,PingFang SC,Microsoft YaHei,;margin:0;padding:0}body,body.dark{--color-background:#202020;--color-text:#ddd;--color-text-secondary:#ccc;--color-text-highlight:#fff;--color-bg-sidebar:#2d2d30;--color-sb-active-row-bg:#494b4e;--color-input-bg:#2d2d30;--color-input-border:#3f3f3f;--color-toggle-bg:#353535;--color-toggle-selected:#181818;--color-icon:#c7c7c7;--color-separator:#333;--color-btn-bg:#232323;--color-btn-fg:#bebebe;--color-bg-proxy:#303030;--color-row-odd:#282828;--bg-modal:#1f1f20;--bg-near-transparent:hsla(0,0%,100%,0.1);--select-border-color:#040404;--select-bg-hover:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23fff'/%3E%3C/svg%3E")}body.light{--color-background:#fbfbfb;--color-text:#222;--color-text-secondary:#646464;--color-text-highlight:#040404;--color-bg-sidebar:#e7e7e7;--color-sb-active-row-bg:#d0d0d0;--color-input-bg:#fff;--color-input-border:silver;--color-toggle-bg:#fff;--color-toggle-selected:#d7d7d7;--color-icon:#5b5b5b;--color-separator:#ccc;--color-btn-bg:#f4f4f4;--color-btn-fg:#101010;--color-bg-proxy:#e7e7e7;--color-row-odd:#f5f5f5;--bg-modal:#fbfbfb;--bg-near-transparent:rgba(0,0,0,0.1);--select-border-color:#999;--select-bg-hover:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23222'/%3E%3C/svg%3E")}.flexCenter{display:flex;align-items:center;justify-content:center}.fabgrp{position:fixed;z-index:3;right:20px;bottom:20px}
._73r9mFp69q{display:grid;grid-template-columns:repeat(11,minmax(-webkit-max-content,auto));grid-template-columns:repeat(11,minmax(max-content,auto))}.hEAcjybq1r{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}.hEAcjybq1r:hover{color:var(--color-text-highlight)}._1x7JSEXzR8{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._1x7JSEXzR8._3n5sGVMC-F{background:var(--color-row-odd)}._26SQDJZWya{text-align:right}._3LKH-WXUjR{display:inline-flex;margin-left:10px;width:16px;height:16px}._1CoVX1S_So{transform:rotate(180deg)}
._3R-iKwDVj-{background-color:rgba(0,0,0,.6)}._1vh9rFTHqn{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._3bTCBReMiZ{opacity:1;transform:translate(-50%,-50%) scale(1)}._1lwetyauPD{display:flex;align-items:center;justify-content:center;margin-top:30px}
.rtf{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:9998;padding-left:0;list-style:none}.rtf.open .rtf--mb>*{transition:transform .2s ease-in-out}.rtf.open .rtf--mb{background:rgba(56,124,236,.92);box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.rtf.open .rtf--mb>ul{list-style:none;margin:0;padding:0}.rtf.open .rtf--ab__c:hover>span,.rtf.open .rtf--ab__c>span.always-show{transition:opacity .2s ease-in-out;opacity:.9}.rtf.open .rtf--ab__c:first-child{transform:translateY(-60px) scale(1);transition-delay:.03s}.rtf.open .rtf--ab__c:first-child.top{transform:translateY(60px) scale(1)}.rtf.open .rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(1);transition-delay:.09s}.rtf.open .rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(1)}.rtf.open .rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(1);transition-delay:.12s}.rtf.open .rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(1)}.rtf.open .rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(1);transition-delay:.15s}.rtf.open .rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(1)}.rtf.open .rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(1);transition-delay:.18s}.rtf.open .rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(1)}.rtf.open .rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(1);transition-delay:.21s}.rtf.open .rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(1)}.rtf--mb__c{padding:25px;margin:-25px}.rtf--mb__c :last-child{margin-bottom:0}.rtf--mb__c:hover>span,.rtf--mb__c>span.always-show{transition:opacity .2s ease-in-out;opacity:.9}.rtf--mb__c>span{opacity:0;transition:opacity .2s ease-in-out;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;margin-left:4px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.rtf--mb__c>span.right{right:100%}.rtf--mb{height:48px;width:48px;z-index:9999;background:#387cec;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:18px}.rtf--ab__c,.rtf--mb>*{transition:transform .2s ease-in-out}.rtf--ab__c{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0}.rtf--ab__c>span{opacity:0;transition:opacity .2s ease-in-out;position:absolute;top:50%;transform:translateY(-50%);margin-right:6px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28)}.rtf--ab__c>span.right{right:100%}.rtf--ab__c:first-child{transform:translateY(-60px) scale(0);transition-delay:.21s}.rtf--ab__c:first-child.top{transform:translateY(60px) scale(0)}.rtf--ab__c:nth-child(2){transform:translateY(-120px) scale(0);transition-delay:.18s}.rtf--ab__c:nth-child(2).top{transform:translateY(120px) scale(0)}.rtf--ab__c:nth-child(3){transform:translateY(-180px) scale(0);transition-delay:.15s}.rtf--ab__c:nth-child(3).top{transform:translateY(180px) scale(0)}.rtf--ab__c:nth-child(4){transform:translateY(-240px) scale(0);transition-delay:.12s}.rtf--ab__c:nth-child(4).top{transform:translateY(240px) scale(0)}.rtf--ab__c:nth-child(5){transform:translateY(-300px) scale(0);transition-delay:.09s}.rtf--ab__c:nth-child(5).top{transform:translateY(300px) scale(0)}.rtf--ab__c:nth-child(6){transform:translateY(-360px) scale(0);transition-delay:.03s}.rtf--ab__c:nth-child(6).top{transform:translateY(360px) scale(0)}.rtf--ab{height:40px;width:40px;margin-right:4px;background-color:#aaa;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:16px;z-index:10000}.rtf--ab:hover{background:#387cec;border:1px solid #387cec;color:#fff}.rtf--ab:focus{border-color:var(--color-focus-blue)}
._1rJPiLWN4s{position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden;padding:20px;background:var(--color-background);color:var(--color-text);text-align:center}._3h_IywJG1l{color:#2a477a;opacity:.6;display:flex;justify-content:center;padding:40px}.aXXDDfyTjE,._3h_IywJG1l{align-items:center}.aXXDDfyTjE{display:inline-flex;color:var(--color-text-secondary)}.aXXDDfyTjE:active,.aXXDDfyTjE:hover{color:#387cec}.aXXDDfyTjE svg{margin-right:5px}
._2rN7aLQPCl{padding:6px 15px}@media screen and (min-width:30em){._2rN7aLQPCl{padding:10px 40px}}
._1EnK5MMInH{width:100%;height:100%;display:flex;justify-content:center;align-items:center}._39z9L5I2ao{--color1:#ddd;--size:40px;width:var(--size);height:var(--size);margin:10px;background-color:var(--color1);border-radius:100%;animation:_1DSWK2a-pe 1s ease-in-out infinite}@keyframes _1DSWK2a-pe{0%{transform:scale(0)}to{transform:scale(1);opacity:0}}
._37kQcxVR4T{color:var(--color-text);display:flex;align-items:center;flex-wrap:wrap}._37kQcxVR4T .sec{padding:10px;width:180px}._37kQcxVR4T .sec div:first-child{color:var(--color-text-secondary);font-size:.7em}._37kQcxVR4T .sec div:nth-child(2){padding:10px 0 0;font-size:1.8em}
._3oi0NFbeOm{opacity:.5;width:100%;height:100%;display:flex;justify-content:center;align-items:center}
._2tpN_G7FeO{display:flex;align-items:center;flex-wrap:wrap;font-size:.9em;padding:10px}._3wuPHKqO5W{color:#eee;flex-shrink:0;text-align:center;width:66px;background:green;border-radius:5px;padding:3px 5px;margin:0 8px}.IwiVCclCSC{flex-shrink:0;color:#999;font-size:14px}._3I1beKAMFt{flex-shrink:0;display:flex;font-family:Roboto Mono,Menlo,monospace;align-items:center;padding:8px 0;width:100%;white-space:pre;overflow:auto}._2MDNI6JESq{margin:0;padding:0;color:var(--color-text)}._2MDNI6JESq li,._2MDNI6JESq li.even{background:var(--color-background)}._3KX1sKJ1QD{padding:10px 40px}._19_8g6kTIV{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#2d2d30}._19_8g6kTIV div:nth-child(2){color:var(--color-text-secondary);font-size:1.4em;opacity:.6}._3ljFcrWmBC{opacity:.3}
._1u5AP7XMF9{padding:0 40px 5px}._2zeyKJDdFH{position:relative;height:40px}._3DQ7SXxKRA{position:absolute;top:50%;transform:translateY(-50%);left:0;width:100%}._1f-XUgRxH1{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px 0 35px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._3PLtWxZwrd{position:absolute;top:50%;transform:translateY(-50%);left:10px}
._35EMVy62Je{display:flex;background:var(--color-background);color:var(--color-text);min-height:300px;height:100vh}@media (max-width:768px){._35EMVy62Je{flex-direction:column}}.AwL8oIubvP{flex-grow:1;overflow:auto}
._30oJwXNik9{background:var(--color-bg-sidebar);position:relative}._1SsCcpJvxN{display:block}._2r8EkOI78X{display:flex;align-items:center;justify-content:center;padding:25px 0 15px;color:#2a477a;transition:color .3s ease-in-out}@media (max-width:768px){._2r8EkOI78X{display:none}}._2r8EkOI78X:hover{animation:_2KRqAfqV8c .3s ease-in-out 0s infinite alternate}._2r8EkOI78X img{width:80px;height:80px}@keyframes _2KRqAfqV8c{0%{color:#2a477a}to{color:#1f52ac}}@media (max-width:768px){._2vUQ0Hs_C5{display:flex;justify-content:space-between;overflow:scroll}}._8mEn9Wlw1n{color:var(--color-text);text-decoration:none;display:flex;align-items:center;padding:6px 16px}@media screen and (min-width:30em){._8mEn9Wlw1n{padding:8px 20px}}@media (max-width:768px){._8mEn9Wlw1n{flex-direction:column}}._8mEn9Wlw1n svg{color:var(--color-icon);width:22px;height:22px}@media screen and (min-width:30em){._8mEn9Wlw1n svg{width:24px;height:24px}}._1WyHmd6t6y{background:var(--color-sb-active-row-bg)}@media (max-width:768px){._1WyHmd6t6y{background:none;border-bottom:2px solid #387cec}}._2eMIYGbP9O{padding-left:14px;font-size:.75em}@media (max-width:768px){._2eMIYGbP9O{padding-left:0;padding-top:5px}}@media screen and (min-width:30em){._2eMIYGbP9O{font-size:1em}}.nURY8qkFLS{--sz:40px;position:absolute;bottom:10px;left:50%;transform:translateX(-50%);width:var(--sz);height:var(--sz);display:flex;justify-content:center;align-items:center;color:var(--color-text);padding:5px;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;background:none;cursor:pointer;border:1px solid transparent;border-radius:100%}@media (max-width:768px){.nURY8qkFLS{display:none}}.nURY8qkFLS:focus{border-color:var(--color-focus-blue)}

View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><link rel="preload" href="/open-sans-latin-400.woff2" as="font"><link rel="preload" href="/open-sans-latin-700.woff2" as="font"><link rel="preload" href="/roboto-mono-latin-400.woff2" as="font"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="application-name" content="yacd"><meta name="description" content="Yet Another Clash Dashboard"><meta name="theme-color" content="#202020"><title>yacd - Yet Another Clash Dashboard</title><meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png"><meta property="og:site_name" content="yacd"><meta property="og:type" content="object"><meta property="og:title" content="yacd"><meta property="og:url" content="http://yacd.haishan.me"><meta property="og:description" content="Yet Another Clash Dashboard"><script defer="defer" src="runtime.c5c5cfdb187e3dcf245e.js"></script><script defer="defer" src="core-js~app.f925e7b0d7db8cb56360.js"></script><script defer="defer" src="react~app.11ff7e45a0d5e0bfa30d.js"></script><script defer="defer" src="app.1e9cc92a5b0a36bb97e9.js"></script><link href="app.2db3fc367e2e4ce88e80.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><link rel="preload" href="/open-sans-latin-400.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/open-sans-latin-700.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="/roboto-mono-latin-400.woff2" as="font" type="font/woff2" crossorigin><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="application-name" content="yacd"><meta name="description" content="Yet Another Clash Dashboard"><meta name="theme-color" content="#202020"><title>yacd - Yet Another Clash Dashboard</title><meta property="og:image" content="https://user-images.githubusercontent.com/1166872/47304841-536f3d80-d65a-11e8-8908-1917127dafc5.png"><meta property="og:site_name" content="yacd"><meta property="og:type" content="object"><meta property="og:title" content="yacd"><meta property="og:url" content="http://yacd.haishan.me"><meta property="og:description" content="Yet Another Clash Dashboard"><script defer="defer" src="runtime.2f322c031bcb67b98af2.js"></script><script defer="defer" src="core-js~app.36c6f0077ac1e602b325.js"></script><script defer="defer" src="react~app.10618449a8e9b56a1845.js"></script><script defer="defer" src="app.09d100e5dacbf4f76606.js"></script><link href="app.b814d6460bc4d015f5f9.css" rel="stylesheet"></head><body><div id="app"></div></body></html>

View File

@ -1,11 +1,12 @@
._37wt2_a2Gx{display:flex;align-items:center}._37wt2_a2Gx .L80zPM0Rx0{display:inline-flex;transform:rotate(0deg);transition:transform .3s}._37wt2_a2Gx .L80zPM0Rx0._36RO7_wtuv{transform:rotate(180deg)}._37wt2_a2Gx .L80zPM0Rx0:focus{outline:var(--color-focus-blue) solid 1px}._2XKN3NArpV{margin-left:5px}._1s98xvUoBx{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}
._2tHS8vcjWZ{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width:30em){._2tHS8vcjWZ{font-size:1em}}
._1OypGPFF1I{position:relative;padding:5px;border-radius:8px;overflow:hidden;max-width:280px;background-color:var(--color-bg-proxy)}@media screen and (min-width:30em){._1OypGPFF1I{min-width:200px;border-radius:10px;padding:10px}}._1OypGPFF1I._25Vy0R3DBh{background-color:var(--color-focus-blue);color:#ddd}._1OypGPFF1I._20b8CxdJZg{opacity:.5}._3ILPKOrew2{font-family:var(--font-mono);font-size:.6em}@media screen and (min-width:30em){._3ILPKOrew2{font-size:1em}}._3DtTZsIYVP{display:flex;align-items:center;justify-content:space-between}._2dGvkUlaDx{width:100%;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;font-size:.85em}@media screen and (min-width:30em){._2dGvkUlaDx{font-size:1.1em}}._1fX-k2HS41{width:12px;height:12px;border-radius:8px}._1fX-k2HS41 ._25Vy0R3DBh{outline:1px solid pink}
._1Zy60rJawW{display:flex;flex-wrap:wrap;margin-top:8px}._34N6M4Zdr3{margin-right:5px;margin-bottom:5px;transition:transform .2s ease-in-out}@media screen and (min-width:30em){._34N6M4Zdr3{margin-right:10px;margin-bottom:10px}}._34N6M4Zdr3.QolCt3jugF{cursor:pointer}._34N6M4Zdr3.QolCt3jugF:hover{transform:translateY(-2px)}
.WqD74l0KeZ{margin-bottom:12px}._3u5R6urbB9{width:20px;height:20px;display:flex;align-items:center;justify-content:center}
._2OKIZuCJtW{background-color:rgba(0,0,0,.6)}._1y6NeshM4O{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;transform:translate(-50%,-50%) scale(1.2);box-shadow:0 4px 4px rgba(0,0,0,.12),0 16px 32px rgba(0,0,0,.24)}._25KARE4UsT{opacity:1;transform:translate(-50%,-50%) scale(1)}
.W_0q0BiEOR{display:flex;justify-content:center;align-items:center}
._1vpeUMroNJ{position:-webkit-sticky;position:sticky;top:0;justify-content:space-between;flex-wrap:wrap;z-index:1;background:var(--color-background);background:linear-gradient(var(--color-background) 70%,transparent)}._1vpeUMroNJ,.pGNJbFaunZ{display:flex;align-items:center}.pGNJbFaunZ{flex-wrap:wrap;flex:1;justify-content:flex-end;margin-right:20px}._1aJVGJw_DC{max-width:350px;min-width:150px;flex:1;margin-right:8px}._2gOPGelc7s{padding:10px 15px}@media screen and (min-width:30em){._2gOPGelc7s{padding:10px 40px}}._3BayoLOhA0{position:relative;border-radius:50%;background:linear-gradient(60deg,#e66465,#9198e5)}._3BayoLOhA0:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border:2px solid transparent;border-top-color:initial;border-radius:50%;animation:NKvZlK5zKz 1s linear infinite}@keyframes NKvZlK5zKz{0%{transform:rotate(0)}to{transform:rotate(1turn)}}
._37wt2_a2Gx{display:flex;align-items:center}._37wt2_a2Gx .L80zPM0Rx0{display:inline-flex;transform:rotate(0deg);transition:transform .3s}._37wt2_a2Gx .L80zPM0Rx0._36RO7_wtuv{transform:rotate(180deg)}._37wt2_a2Gx .L80zPM0Rx0:focus{outline:var(--color-focus-blue) solid 1px}._2XKN3NArpV{margin-left:5px}._1s98xvUoBx{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}
.WqD74l0KeZ{margin-bottom:12px}._3u5R6urbB9{width:20px;height:20px;display:flex;align-items:center;justify-content:center}
._1OypGPFF1I{margin:3px;padding:5px;position:relative;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;max-width:280px;background-color:var(--color-bg-proxy)}@media screen and (min-width:30em){._1OypGPFF1I{min-width:200px;border-radius:10px;padding:10px}}._1OypGPFF1I._25Vy0R3DBh{background-color:var(--color-focus-blue);color:#ddd}._1OypGPFF1I._20b8CxdJZg{opacity:.5}._1OypGPFF1I._2jncDUnzU1{transition:transform .2s ease-in-out;cursor:pointer}._1OypGPFF1I._2jncDUnzU1:hover{transform:translateY(-2px)}._3ILPKOrew2{font-family:var(--font-mono);font-size:.6em}@media screen and (min-width:30em){._3ILPKOrew2{font-size:1em}}._3DtTZsIYVP{display:flex;align-items:center;justify-content:space-between}._2dGvkUlaDx{width:100%;margin-bottom:5px;font-size:.85em}@media screen and (min-width:30em){._2dGvkUlaDx{font-size:1em}}._1fX-k2HS41{width:13px;height:13px;border-radius:50%;border:1px solid var(--color-background)}._1fX-k2HS41._25Vy0R3DBh{border-color:var(--color-text-secondary)}._1fX-k2HS41._2jncDUnzU1{transition:transform .1s ease-in-out;cursor:pointer}._1fX-k2HS41._2jncDUnzU1:hover{transform:scale(1.2)}
._2tHS8vcjWZ{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width:30em){._2tHS8vcjWZ{font-size:1em}}
._1Zy60rJawW{display:flex;flex-wrap:wrap;margin:8px 0 8px -3px}._1YJnElh2Sr{margin:8px 0;display:grid;grid-template-columns:repeat(auto-fill,13px);grid-gap:10px}
._2PJqMIeTLt{margin-bottom:12px}._2PJqMIeTLt small{color:#777}._2bdge0dkRf{padding:10px 15px}@media screen and (min-width:30em){._2bdge0dkRf{padding:10px 40px}}.Vp69gn8Y28{display:flex}.Vp69gn8Y28 button{margin:0 5px}.Vp69gn8Y28 button:first-child{margin-left:0}._32jty5m2Ss{display:flex;justify-content:center;align-items:center;cursor:pointer}
.t6lsDKNXTK{height:30px;width:100%;padding-left:8px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-background);color:var(--color-text);padding-right:20px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 7l3 4H1l3-4zM4 17l-3-4h6l-3 4z' fill='%23999'/%3E%3C/svg%3E");border-radius:4px;border-image:initial;border:1px solid var(--select-border-color);transition:all .1s ease 0s;background-position:calc(100% - 8px) 50%;background-repeat:no-repeat}.t6lsDKNXTK:focus,.t6lsDKNXTK:hover{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}.t6lsDKNXTK option{background-color:var(--color-background)}
._1h4Qixiwxj{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0}
.W_0q0BiEOR{display:flex;justify-content:center;align-items:center}
._2PJqMIeTLt{margin-bottom:12px}._2PJqMIeTLt small{color:#777}._2bdge0dkRf{padding:10px 15px}@media screen and (min-width:30em){._2bdge0dkRf{padding:10px 40px}}.Vp69gn8Y28{display:flex}.Vp69gn8Y28 button{margin:0 5px}.Vp69gn8Y28 button:first-child{margin-left:0}._32jty5m2Ss{display:flex;justify-content:center;align-items:center;cursor:pointer}
._1vpeUMroNJ{position:-webkit-sticky;position:sticky;top:0;z-index:1;background:var(--color-background);display:flex;justify-content:flex-end;padding:5px 5px 2px 0}._2gOPGelc7s{padding:10px 15px}@media screen and (min-width:30em){._2gOPGelc7s{padding:10px 40px}}._3BayoLOhA0{position:relative;border-radius:50%;background:linear-gradient(60deg,#e66465,#9198e5)}._3BayoLOhA0:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border:2px solid transparent;border-top-color:initial;border-radius:50%;animation:NKvZlK5zKz 1s linear infinite}@keyframes NKvZlK5zKz{0%{transform:rotate(0)}to{transform:rotate(1turn)}}
._1LsRPWba72{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;outline:none;padding:8px 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._1LsRPWba72:focus{border:1px solid var(--color-focus-blue)}

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