luci-app-clash: sync with upstream source
This commit is contained in:
parent
24372890a9
commit
39b956115e
@ -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)))
|
||||
|
||||
@ -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(),
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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")
|
||||
@ -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
|
||||
@ -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")
|
||||
@ -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")
|
||||
@ -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
|
||||
@ -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")
|
||||
@ -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")
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
189
package/ntlf9t/luci-app-clash/luasrc/model/cbi/clash/dns/dns.lua
Normal file
189
package/ntlf9t/luci-app-clash/luasrc/model/cbi/clash/dns/dns.lua
Normal 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
|
||||
|
||||
@ -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"))
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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.")
|
||||
|
||||
|
||||
41
package/ntlf9t/luci-app-clash/luasrc/view/clash/rulep.htm
Normal file
41
package/ntlf9t/luci-app-clash/luasrc/view/clash/rulep.htm
Normal 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%>
|
||||
@ -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
@ -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)"/>' + ' ' + '<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>
|
||||
|
||||
|
||||
|
||||
@ -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 "不带协议"
|
||||
File diff suppressed because it is too large
Load Diff
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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'
|
||||
@ -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'
|
||||
|
||||
|
||||
|
||||
@ -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'
|
||||
@ -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'
|
||||
|
||||
@ -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'
|
||||
@ -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.'
|
||||
@ -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'
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
|
||||
@ -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'
|
||||
@ -1,8 +0,0 @@
|
||||
# 2020-05-20 03:00
|
||||
payload:
|
||||
- 'paypal.*'
|
||||
- '.paypal.'
|
||||
- 'paypal.com'
|
||||
- 'paypalobjects.com'
|
||||
- '.paypal.com'
|
||||
- '.paypalobjects.com'
|
||||
File diff suppressed because it is too large
Load Diff
@ -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'
|
||||
|
||||
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
@ -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'
|
||||
|
||||
|
||||
@ -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'
|
||||
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
1187
package/ntlf9t/luci-app-clash/root/usr/share/clash/create/create.sh
Normal file
1187
package/ntlf9t/luci-app-clash/root/usr/share/clash/create/create.sh
Normal file
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||
@ -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
|
||||
@ -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
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
@ -1 +1 @@
|
||||
1.7.3.2
|
||||
v1.7.5.4
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
@ -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
@ -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)}
|
||||
@ -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>
|
||||
@ -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
Loading…
Reference in New Issue
Block a user