OpenClash: bump to v0.39.2-beta
This commit is contained in:
parent
6ca48b8591
commit
423fdc5895
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-openclash
|
||||
PKG_VERSION:=0.38.4
|
||||
PKG_VERSION:=0.39.2
|
||||
PKG_RELEASE:=beta
|
||||
PKG_MAINTAINER:=vernesong <https://github.com/vernesong/OpenClash>
|
||||
|
||||
@ -32,7 +32,6 @@ define Build/Prepare
|
||||
chmod 0755 $(PKG_BUILD_DIR)/files/etc/init.d/openclash
|
||||
chmod -R 0755 $(PKG_BUILD_DIR)/files/usr/share/openclash/
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/config >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/proxy_provider >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/rule_provider >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/backup >/dev/null 2>&1
|
||||
mkdir -p $(PKG_BUILD_DIR)/files/etc/openclash/core >/dev/null 2>&1
|
||||
@ -82,7 +81,6 @@ uci set firewall.openclash.reload=1 >/dev/null 2>&1
|
||||
uci commit firewall >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/config >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/proxy_provider >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/rule_provider >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/backup >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/core >/dev/null 2>&1
|
||||
mkdir -p /etc/openclash/history >/dev/null 2>&1
|
||||
@ -118,8 +116,8 @@ if [ -d "/tmp/openclash_proxy_provider/" ]; then
|
||||
mv "/tmp/openclash_proxy_provider" "/etc/openclash/proxy_provider" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -d "/tmp/openclash_rule_provider/" ]; then
|
||||
rm -rf "/etc/openclash/rule_provider" >/dev/null 2>&1
|
||||
mv "/tmp/openclash_rule_provider" "/etc/openclash/rule_provider" >/dev/null 2>&1
|
||||
cp -a "/tmp/openclash_rule_provider/." "/etc/openclash/rule_provider" >/dev/null 2>&1
|
||||
rm -rf "/tmp/openclash_rule_provider" >/dev/null 2>&1
|
||||
fi
|
||||
if [ -d "/tmp/openclash_game_rules/" ]; then
|
||||
rm -rf "/etc/openclash/game_rules" >/dev/null 2>&1
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#!/bin/bash /etc/rc.common
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (c) 2019 vernesong
|
||||
|
||||
START=99
|
||||
@ -106,8 +106,7 @@ field_cut()
|
||||
script_len=$(sed -n '/^script:/=' "$3" 2>/dev/null)
|
||||
lines="$proxy_len $provider_len $group_len $rule_len $rule_provider_len $script_len"
|
||||
|
||||
for i in $lines
|
||||
do
|
||||
for i in $lines; do
|
||||
if [ -z "$1" ]; then
|
||||
break
|
||||
fi
|
||||
@ -297,16 +296,21 @@ yml_dns_check()
|
||||
#修改集路径
|
||||
yml_provider_path()
|
||||
{
|
||||
sed -i "s/\'//g" "$1" 2>/dev/null
|
||||
sed -i 's/\"//g' "$1" 2>/dev/null
|
||||
provider_path_line=$(sed -n '/^ \{0,\}path:/=' "$1" 2>/dev/null)
|
||||
provider_path_line=$(sed -n '/ \{0,\}path/=' "$1" 2>/dev/null)
|
||||
if [ -n "$provider_path_line" ]; then
|
||||
for n in $provider_path_line
|
||||
do
|
||||
provider_path=$(sed -n "${n}p" "$1" |awk -F 'path:' '{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 $provider_path_line; do
|
||||
if [ -n "$(sed -n "${n}p" "$1" |grep "^ \{0,\}#")" ]; then
|
||||
continue
|
||||
fi
|
||||
provider_path=$(sed -n "${n}p" "$1" |sed "s/\'//g" |sed 's/\"//g' |awk -F 'path:' '{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 [ -z "$(echo "$provider_path" |grep "$2")" ]; then
|
||||
provider_name=$(echo "$provider_path" |awk -F '/' '{print $NF}')
|
||||
sed -i "s#${provider_path}#./${2}/${provider_name}#" "$1" 2>/dev/null
|
||||
sed -i "s#path: ${provider_path}#path: ./${2}/${provider_name}#" "$1" 2>/dev/null
|
||||
sed -i "s#\"${provider_path}#\"./${2}/${provider_name}#" "$1" 2>/dev/null
|
||||
sed -i "s#\'${provider_path}#\'./${2}/${provider_name}#" "$1" 2>/dev/null
|
||||
sed -i "s#\:${provider_path}#\:./${2}/${provider_name}#" "$1" 2>/dev/null
|
||||
uci set openclash.config.config_reload=0 2>/dev/null
|
||||
uci commit openclash
|
||||
fi
|
||||
done
|
||||
fi 2>/dev/null
|
||||
@ -315,42 +319,44 @@ yml_provider_path()
|
||||
#检查集文件防止启动失败
|
||||
yml_provider_check()
|
||||
{
|
||||
provider_path_line=$(sed -n '/^ \{0,\}path:/=' "$1" 2>/dev/null)
|
||||
provider_path_line=$(sed -n '/ \{0,\}path/=' "$1" 2>/dev/null)
|
||||
local provider_path_exist
|
||||
if [ -n "$provider_path_line" ]; then
|
||||
while ( [ -n "$(pidof clash)" ] && [ "$provider_path_exist" != 1 ] )
|
||||
do
|
||||
provider_path_exist=1
|
||||
for n in $provider_path_line
|
||||
do
|
||||
provider_path=$(sed -n "${n}p" "$1" |awk -F 'path:' '{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 [ "$(echo ${provider_path:0:1})" = "." ]; then
|
||||
for n in $provider_path_line; do
|
||||
if [ -n "$(sed -n "${n}p" "$1" |grep "^ \{0,\}#")" ]; then
|
||||
continue
|
||||
fi
|
||||
provider_path=$(sed -n "${n}p" "$1" |sed "s/\'//g" |sed 's/\"//g' |awk -F 'path:' '{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 [ "$(echo "${provider_path:0:1}")" = "." ]; then
|
||||
provider_path_check="/etc/openclash/$(echo ${provider_path:2})"
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "proxy_provider" ]; then
|
||||
if [ -z "$(grep "'proxies:':" "$provider_path_check")" ] && [ -z "$(grep '"proxies:":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
if [ -z "$(grep "'proxies':" "$provider_path_check")" ] && [ -z "$(grep '"proxies":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "proxy_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "rule_provider" ]; then
|
||||
if [ -z "$(grep "'payload:':" "$provider_path_check")" ] && [ -z "$(grep '"payload:":' "$provider_path_check")" ] && [ -z "$(grep 'payload:' "$provider_path_check")" ]; then
|
||||
if [ -z "$(grep "'payload':" "$provider_path_check")" ] && [ -z "$(grep '"payload":' "$provider_path_check")" ] && [ -z "$(grep 'payload:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "rule_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
else
|
||||
elif [ "$(echo "${provider_path:0:1}")" = "/" ]; then
|
||||
provider_path_check="$provider_path"
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "proxy_provider" ]; then
|
||||
if [ -z "$(grep "'proxies:':" "$provider_path_check")" ] && [ -z "$(grep '"proxies:":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
if [ -z "$(grep "'proxies':" "$provider_path_check")" ] && [ -z "$(grep '"proxies":' "$provider_path_check")" ] && [ -z "$(grep 'proxies:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "proxy_provider" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
if [ -f "$provider_path_check" ] && [ "$2" = "rule_provider" ]; then
|
||||
if [ -z "$(grep "'payload:':" "$provider_path_check")" ] && [ -z "$(grep '"payload:":' "$provider_path_check")" ] && [ -z "$(grep 'payload:' "$provider_path_check")" ]; then
|
||||
if [ -z "$(grep "'payload':" "$provider_path_check")" ] && [ -z "$(grep '"payload":' "$provider_path_check")" ] && [ -z "$(grep 'payload:' "$provider_path_check")" ]; then
|
||||
provider_path_exist=0
|
||||
fi
|
||||
elif [ "$2" = "rule_provider" ]; then
|
||||
@ -410,8 +416,7 @@ yml_dns_get()
|
||||
{
|
||||
|
||||
local section="$1"
|
||||
local dns_type=""
|
||||
local dns_address=""
|
||||
local enabled port type ip group dns_type dns_address
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "port" "$section" "port" ""
|
||||
config_get "type" "$section" "type" ""
|
||||
@ -479,8 +484,8 @@ yml_dns_custom()
|
||||
fi
|
||||
|
||||
#fallback-filter
|
||||
if [ -n "$(grep '^ \{0,\}fallback:' $2)" ]; then
|
||||
if [ -z "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then
|
||||
if [ -n "$(grep "^ \{0,\}fallback:" "$2")" ]; then
|
||||
if [ -z "$(grep "^ \{0,\}fallback-filter:" "$2")" ]; then
|
||||
awk '/^ {0,}fallback:/,/OpenClash-General-Settings/{print}' "$2" |sed '1d' |sed '$d' >/tmp/fallback.cache 2>/dev/null
|
||||
sed -i '/cfw-bypass:/,$d' /tmp/fallback.cache 2>/dev/null
|
||||
sed -i '/cfw-latency-timeout:/,$d' /tmp/fallback.cache 2>/dev/null
|
||||
@ -494,29 +499,29 @@ yml_dns_custom()
|
||||
rm -rf /tmp/fallback.cache 2>/dev/null
|
||||
echo "#===================== OpenClash-General-Settings =====================#" >>"$2"
|
||||
else
|
||||
if [ -z "$(grep '^ fallback-filter:' $2)" ]; then
|
||||
if [ -z "$(grep "^ fallback-filter:" "$2")" ]; then
|
||||
sed -i "/fallback-filter:/c\ fallback-filter:" "$2" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep '^ geoip: true' $2)" ]; then
|
||||
if [ -z "$(grep "^ geoip: true" "$2")" ]; then
|
||||
sed -i "/geoip: true/c\ geoip: true" "$2" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep '^ ipcidr:' $2)" ]; then
|
||||
if [ -z "$(grep "^ ipcidr:" "$2")" ]; then
|
||||
sed -i "/ipcidr:/c\ ipcidr:" "$2" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
if [ -z "$(grep "^ - " $2)" ]; then
|
||||
if [ -z "$(grep "^ - " "$2")" ]; then
|
||||
sed -i '/^ \{0,\}nameserver:/,/^ \{0,\}fallback-filter:/ {s/^ \{0,\}- / - /}' "$2" 2>/dev/null #修改参数空格
|
||||
fi
|
||||
if [ -z "$(grep "^ - " $2)" ]; then
|
||||
if [ -z "$(grep "^ - " "$2")" ]; then
|
||||
sed -i '/^ \{0,\}ipcidr:/,/OpenClash-General-Settings/ {s/^ \{0,\}- / - /}' "$2" 2>/dev/null #修改参数空格
|
||||
fi
|
||||
#删除fallback-filter
|
||||
else
|
||||
if [ -n "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then
|
||||
if [ -n "$(grep "^ \{0,\}fallback-filter:" "$2")" ]; then
|
||||
sed -i '/fallback-filter:/,$d' "$2" 2>/dev/null
|
||||
echo "#===================== OpenClash-General-Settings =====================#" >>"$2"
|
||||
fi
|
||||
if [ -n "$(grep "^ \{0,1\}- " $2)" ]; then
|
||||
if [ -n "$(grep "^ \{0,1\}- " "$2")" ]; then
|
||||
#添加参数空格
|
||||
sed -i "s/^ \{0,\}- / - /" "$2" 2>/dev/null
|
||||
fi
|
||||
@ -528,6 +533,7 @@ yml_dns_custom()
|
||||
yml_auth_get()
|
||||
{
|
||||
local section="$1"
|
||||
local enabled username password
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "username" "$section" "username" ""
|
||||
config_get "password" "$section" "password" ""
|
||||
@ -565,20 +571,22 @@ get_rule_file()
|
||||
return
|
||||
fi
|
||||
|
||||
GAME_RULE_FILE_NAME=$(grep -F $1 /etc/openclash/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null)
|
||||
GAME_RULE_FILE_NAME=$(grep "^$1," /etc/openclash/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null)
|
||||
|
||||
if [ -z "$GAME_RULE_FILE_NAME" ]; then
|
||||
GAME_RULE_FILE_NAME=$(grep -F $1 /etc/openclash/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null)
|
||||
GAME_RULE_FILE_NAME=$(grep "^$1," /etc/openclash/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null)
|
||||
fi
|
||||
|
||||
GAME_RULE_PATH="/etc/openclash/game_rules/$GAME_RULE_FILE_NAME"
|
||||
sed '/^#/d' $GAME_RULE_PATH 2>/dev/null |sed '/^ *$/d' |awk '{print "- IP-CIDR,"$0}' |awk -v tag="$2" '{print $0","'tag'""}' >> $GAME_RULE_FILE 2>/dev/null
|
||||
|
||||
sed '/^#/d' "$GAME_RULE_PATH" 2>/dev/null |sed '/^ *$/d' |awk '{print "- IP-CIDR,"$0}' |awk -v tag="$2" '{print $0","'tag'""}' >> $GAME_RULE_FILE 2>/dev/null
|
||||
set_rule_file=1
|
||||
}
|
||||
|
||||
yml_game_rule_get()
|
||||
{
|
||||
local section="$1"
|
||||
local enabled group config
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "group" "$section" "group" ""
|
||||
config_get "config" "$section" "config" ""
|
||||
@ -598,9 +606,10 @@ yml_game_rule_get()
|
||||
config_list_foreach "$section" "rule_name" get_rule_file "$group"
|
||||
}
|
||||
|
||||
yml_game_group_get()
|
||||
yml_rule_group_get()
|
||||
{
|
||||
local section="$1"
|
||||
local enabled group config
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "group" "$section" "group" ""
|
||||
config_get "config" "$section" "config" ""
|
||||
@ -632,10 +641,14 @@ fi
|
||||
sed -i '/OpenClash-Game-Rules/d' "$RULE_FILE" 2>/dev/null
|
||||
sed -i '/OpenClash-Game-Rules-End/d' "$RULE_FILE" 2>/dev/null
|
||||
[ "$set_rule_file" = 1 ] && {
|
||||
if [ -n "$(grep "^ \{0,\}- GEOIP" "$RULE_FILE")" ]; then
|
||||
if [ -n "$(grep "##Custom Rules 2##" "$RULE_FILE")" ]; then
|
||||
sed -i "/##Custom Rules 2##/i\#===================== OpenClash-Game-Rules =====================#" "$RULE_FILE" 2>/dev/null
|
||||
elif [ -n "$(grep "^ \{0,\}- GEOIP" "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- GEOIP,/{/^ \{0,\}- GEOIP,/s/^ \{0,\}- GEOIP,/#===================== OpenClash-Game-Rules =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
elif [ -n "$(grep "^ \{0,\}- MATCH," "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- MATCH,/{/^ \{0,\}- MATCH,/s/^ \{0,\}- MATCH,/#===================== OpenClash-Game-Rules =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
elif [ -n "$(grep "^ \{0,\}- FINAL," "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- FINAL,/{/^ \{0,\}- FINAL,/s/^ \{0,\}- FINAL,/#===================== OpenClash-Game-Rules =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
else
|
||||
echo "#===================== OpenClash-Game-Rules =====================#" >> "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
@ -648,7 +661,8 @@ cat "$CHANGE_FILE" "$DNS_FILE" "$PROXY_PROVIDER_FILE" "$PROXY_FILE" "$GROUP_FILE
|
||||
|
||||
#处理游戏节点与策略组
|
||||
config_load "openclash"
|
||||
config_foreach yml_game_group_get "game_config"
|
||||
config_foreach yml_rule_group_get "rule_provider_config"
|
||||
config_foreach yml_rule_group_get "game_config"
|
||||
sed -i '/^ \{0,\}proxy-groups:/r/tmp/yaml_groups.yaml' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/^ \{0,\}Proxy:/d' /tmp/yaml_servers.yaml 2>/dev/null
|
||||
sed -i '/^ \{0,\}proxy-providers:/d' /tmp/yaml_provider.yaml 2>/dev/null
|
||||
@ -666,6 +680,231 @@ elif [ -f "/tmp/yaml_servers.yaml" ]; then
|
||||
fi
|
||||
}
|
||||
|
||||
yml_rule_set_add()
|
||||
{
|
||||
if [ -z "$(grep "rules:" "$RULE_FILE" 2>/dev/null)" ]; then
|
||||
echo "rules:" > "$RULE_FILE"
|
||||
fi
|
||||
if [ "$3" -eq 1 ]; then
|
||||
if [ -z "$(grep "OpenClash-Rule-Set-Extended-End" "$RULE_FILE" 2>/dev/null)" ]; then
|
||||
if [ -n "$(grep "##Custom Rules 2##" "$RULE_FILE")" ]; then
|
||||
sed -i "/##Custom Rules 2##/i\#===================== OpenClash-Rule-Set-Extended-End =====================#" "$RULE_FILE" 2>/dev/null
|
||||
sed -i "/OpenClash-Rule-Set-Extended-End/i\#===================== OpenClash-Rule-Set-Extended =====================#" "$RULE_FILE" 2>/dev/null
|
||||
elif [ -n "$(grep "^ \{0,\}- GEOIP" "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- GEOIP,/{/^ \{0,\}- GEOIP,/s/^ \{0,\}- GEOIP,/#===================== OpenClash-Rule-Set-Extended-End =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
sed -i "/OpenClash-Rule-Set-Extended-End/i\#===================== OpenClash-Rule-Set-Extended =====================#" "$RULE_FILE" 2>/dev/null
|
||||
elif [ -n "$(grep "^ \{0,\}- MATCH," "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- MATCH,/{/^ \{0,\}- MATCH,/s/^ \{0,\}- MATCH,/#===================== OpenClash-Rule-Set-Extended-End =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
sed -i "/OpenClash-Rule-Set-Extended-End/i\#===================== OpenClash-Rule-Set-Extended =====================#" "$RULE_FILE" 2>/dev/null
|
||||
elif [ -n "$(grep "^ \{0,\}- FINAL," "$RULE_FILE")" ]; then
|
||||
sed -i '1,/^ \{0,\}- FINAL,/{/^ \{0,\}- FINAL,/s/^ \{0,\}- FINAL,/#===================== OpenClash-Rule-Set-Extended-End =====================#\n&/}' "$RULE_FILE" 2>/dev/null
|
||||
sed -i "/OpenClash-Rule-Set-Extended-End/i\#===================== OpenClash-Rule-Set-Extended =====================#" "$RULE_FILE" 2>/dev/null
|
||||
else
|
||||
echo "#===================== OpenClash-Rule-Set-Extended =====================#" >> "$RULE_FILE" 2>/dev/null
|
||||
echo "#===================== OpenClash-Rule-Set-Extended-End =====================#" >> "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
sed -i "/OpenClash-Rule-Set-Extended-End/i\- RULE-SET,${1},${2}" "$RULE_FILE" 2>/dev/null
|
||||
elif [ "$3" -eq 0 ]; then
|
||||
if [ -z "$(grep "OpenClash-Rule-Set-Priority-End" "$RULE_FILE" 2>/dev/null)" ]; then
|
||||
if [ -n "$(grep "##Custom Rules##" "$RULE_FILE" 2>/dev/null)" ]; then
|
||||
sed -i "/##Custom Rules End##/a\#===================== OpenClash-Rule-Set-Priority-End =====================#" "$RULE_FILE" 2>/dev/null
|
||||
sed -i "/##Custom Rules End##/a\#===================== OpenClash-Rule-Set-Priority =====================#" "$RULE_FILE" 2>/dev/null
|
||||
else
|
||||
sed -i "/^rules:/a\#===================== OpenClash-Rule-Set-Priority-End =====================#" "$RULE_FILE" 2>/dev/null
|
||||
sed -i "/^rules:/a\#===================== OpenClash-Rule-Set-Priority =====================#" "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
sed -i "/OpenClash-Rule-Set-Priority-End/i\- RULE-SET,${1},${2}" "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
yml_gen_rule_provider_file()
|
||||
{
|
||||
if [ -z "$1" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
RULE_PROVIDER_FILE_NAME=$(grep "^$1," /etc/openclash/rule_providers.list |awk -F ',' '{print $6}' 2>/dev/null)
|
||||
if [ -z "$RULE_PROVIDER_FILE_NAME" ]; then
|
||||
RULE_PROVIDER_FILE_NAME=$(grep "^$1," /etc/openclash/rule_providers.list |awk -F ',' '{print $5}' 2>/dev/null)
|
||||
fi
|
||||
RULE_PROVIDER_FILE_BEHAVIOR=$(grep -F "$RULE_PROVIDER_FILE_NAME" /etc/openclash/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null)
|
||||
RULE_PROVIDER_FILE_PATH="/etc/openclash/rule_provider/$RULE_PROVIDER_FILE_NAME"
|
||||
RULE_PROVIDER_FILE_URL="https://raw.githubusercontent.com/$(grep -F "$RULE_PROVIDER_FILE_NAME" /etc/openclash/rule_providers.list |awk -F ',' '{print $4$5}' 2>/dev/null)"
|
||||
|
||||
if [ -n "$(grep "$RULE_PROVIDER_FILE_URL" $RULE_PROVIDER_FILE)" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$(grep "rule-providers:" $RULE_PROVIDER_FILE 2>/dev/null)" ]; then
|
||||
echo "rule-providers:" > "$RULE_PROVIDER_FILE"
|
||||
fi
|
||||
|
||||
if [ -z "$(grep "OpenClash-Rule-Providers-Set" $RULE_PROVIDER_FILE 2>/dev/null)" ]; then
|
||||
echo "#===================== OpenClash-Rule-Providers-Set =====================#" >> "$RULE_PROVIDER_FILE"
|
||||
fi
|
||||
|
||||
cat >> "$RULE_PROVIDER_FILE" <<-EOF
|
||||
$1:
|
||||
type: http
|
||||
behavior: $RULE_PROVIDER_FILE_BEHAVIOR
|
||||
path: $RULE_PROVIDER_FILE_PATH
|
||||
url: $RULE_PROVIDER_FILE_URL
|
||||
EOF
|
||||
if [ -z "$3" ]; then
|
||||
cat >> "$RULE_PROVIDER_FILE" <<-EOF
|
||||
interval=86400
|
||||
EOF
|
||||
else
|
||||
cat >> "$RULE_PROVIDER_FILE" <<-EOF
|
||||
interval: $3
|
||||
EOF
|
||||
fi
|
||||
yml_rule_set_add "$1" "$2" "$4"
|
||||
}
|
||||
|
||||
yml_get_rule_provider()
|
||||
{
|
||||
local section="$1"
|
||||
local enabled group config interval position
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "group" "$section" "group" ""
|
||||
config_get "config" "$section" "config" ""
|
||||
config_get "interval" "$section" "interval" ""
|
||||
config_get "position" "$section" "position" ""
|
||||
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$group" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
config_list_foreach "$section" "rule_name" yml_gen_rule_provider_file "$group" "$interval" "$position"
|
||||
}
|
||||
|
||||
#处理自定义规则集
|
||||
yml_set_custom_rule_provider()
|
||||
{
|
||||
local section="$1"
|
||||
local enabled name config type behavior path url interval group position
|
||||
config_get_bool "enabled" "$section" "enabled" "1"
|
||||
config_get "name" "$section" "name" ""
|
||||
config_get "config" "$section" "config" ""
|
||||
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" ""
|
||||
config_get "group" "$section" "group" ""
|
||||
config_get "position" "$section" "position" ""
|
||||
|
||||
if [ "$enabled" = "0" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "$(grep "$url" "$RULE_PROVIDER_FILE")" ] && [ -n "$url" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$name" ] || [ -z "$type" ] || [ -z "$behavior" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$type" = "http" ] && [ -z "$url" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$path" != "./rule_provider/$name.yaml" ] && [ "$type" = "http" ]; then
|
||||
path="./rule_provider/$name.yaml"
|
||||
elif [ -z "$path" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "$(grep "$path" "$RULE_PROVIDER_FILE")" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$interval" ] && [ "$type" = "http" ]; then
|
||||
interval=86400
|
||||
fi
|
||||
|
||||
if [ -z "$(grep "rule-providers:" "$RULE_PROVIDER_FILE" 2>/dev/null)" ]; then
|
||||
echo "rule-providers:" > "$RULE_PROVIDER_FILE"
|
||||
fi
|
||||
|
||||
if [ -z "$(grep "OpenClash-Rule-Providers-Set" "$RULE_PROVIDER_FILE" 2>/dev/null)" ]; then
|
||||
echo "#===================== OpenClash-Rule-Providers-Set =====================#" >> "$RULE_PROVIDER_FILE"
|
||||
fi
|
||||
|
||||
cat >> "$RULE_PROVIDER_FILE" <<-EOF
|
||||
$name:
|
||||
type: $type
|
||||
behavior: $behavior
|
||||
path: $path
|
||||
EOF
|
||||
if [ "$type" = "http" ]; then
|
||||
cat >> "$RULE_PROVIDER_FILE" <<-EOF
|
||||
url: $url
|
||||
interval: $interval
|
||||
EOF
|
||||
fi
|
||||
|
||||
yml_rule_set_add "$name" "$group" "$position"
|
||||
}
|
||||
|
||||
#处理规则集
|
||||
yml_custom_rule_provider()
|
||||
{
|
||||
|
||||
if [ -n "$(grep "OpenClash-Rule-Set-Extended-End" "$RULE_FILE")" ]; then
|
||||
sed -i '/OpenClash-Rule-Set-Extended/,/OpenClash-Rule-Set-Extended-End/d' "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ -n "$(grep "OpenClash-Rule-Set-Priority-End" "$RULE_FILE")" ]; then
|
||||
sed -i '/OpenClash-Rule-Set-Priority/,/OpenClash-Rule-Set-Priority-End/d' "$RULE_FILE" 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ -n "$(grep "OpenClash-Rule-Providers-Set" "$RULE_PROVIDER_FILE")" ]; then
|
||||
sed -i '/OpenClash-Rule-Providers-Set/,/OpenClash-Rule-Providers-Set-End/d' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
fi
|
||||
|
||||
sed -i '/OpenClash-Rule-Set/d' "$RULE_FILE" 2>/dev/null
|
||||
sed -i '/OpenClash-Rule-Providers/d' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
|
||||
if [ -z "$(grep "^ type:" $RULE_PROVIDER_FILE 2>/dev/null)" ]; then
|
||||
#处理缩进
|
||||
sed -i '/^ *$/d' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/\t/ /g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}/ /g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}type:/ type:/g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}behavior:/ behavior:/g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}path:/ path:/g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}url:/ url:/g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}interval:/ interval:/g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}rule-providers:/rule-providers:/g' "$RULE_PROVIDER_FILE" 2>/dev/null
|
||||
fi
|
||||
|
||||
config_load "openclash"
|
||||
config_foreach yml_get_rule_provider "rule_provider_config"
|
||||
config_foreach yml_set_custom_rule_provider "rule_providers"
|
||||
|
||||
if [ -n "$(grep "OpenClash-Rule-Providers-Set" $RULE_PROVIDER_FILE 2>/dev/null)" ]; then
|
||||
echo "#===================== OpenClash-Rule-Providers-Set-End =====================#" >> "$RULE_PROVIDER_FILE"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
lan_ac()
|
||||
{
|
||||
if [ -z "$1" ]; then
|
||||
@ -707,49 +946,64 @@ CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
|
||||
#运行模式处理
|
||||
do_run_mode()
|
||||
{
|
||||
en_mode=$(uci get openclash.config.en_mode 2>/dev/null)
|
||||
proxy_mode=$(uci get openclash.config.proxy_mode 2>/dev/null)
|
||||
en_mode=$(uci get openclash.config.en_mode 2>/dev/null)
|
||||
|
||||
if [ "$en_mode" = "fake-ip-tun" ]; then
|
||||
en_mode_tun="1"
|
||||
en_mode="fake-ip"
|
||||
fi
|
||||
|
||||
if [ "$en_mode" = "redir-host-tun" ]; then
|
||||
en_mode_tun="1"
|
||||
en_mode="redir-host"
|
||||
fi
|
||||
|
||||
if [ "$en_mode" = "redir-host-vpn" ]; then
|
||||
en_mode_tun="2"
|
||||
en_mode="redir-host"
|
||||
fi
|
||||
|
||||
if [ "$en_mode" = "fake-ip-vpn" ]; then
|
||||
en_mode_tun="2"
|
||||
en_mode="fake-ip"
|
||||
fi
|
||||
}
|
||||
|
||||
do_run_core()
|
||||
{
|
||||
|
||||
if [ ! -h "/etc/openclash/clash" ] && [ -s "/etc/openclash/clash" ] && [ ! -s "/etc/openclash/core/clash" ]; then
|
||||
mv "/etc/openclash/clash" "/etc/openclash/core/clash" 2>/dev/null
|
||||
fi
|
||||
|
||||
rm -rf "/etc/openclash/clash" 2>/dev/null
|
||||
|
||||
if [ "$en_mode" = "fake-ip-tun" ]; then
|
||||
en_mode_tun="1"
|
||||
en_mode="fake-ip"
|
||||
if [ "$en_mode_tun" = "1" ]; then
|
||||
ln -s /etc/openclash/core/clash_tun /etc/openclash/clash 2>/dev/null
|
||||
core_type="Tun"
|
||||
fi
|
||||
|
||||
if [ "$en_mode" = "redir-host-tun" ]; then
|
||||
en_mode_tun="1"
|
||||
en_mode="redir-host"
|
||||
if [ "$en_mode_tun" = "1" ]; then
|
||||
ln -s /etc/openclash/core/clash_tun /etc/openclash/clash 2>/dev/null
|
||||
core_type="Tun"
|
||||
fi
|
||||
|
||||
if [ "$en_mode" = "redir-host-vpn" ]; then
|
||||
en_mode_tun="2"
|
||||
en_mode="redir-host"
|
||||
if [ "$en_mode_tun" = "2" ]; then
|
||||
ln -s /etc/openclash/core/clash_game /etc/openclash/clash 2>/dev/null
|
||||
core_type="Game"
|
||||
fi
|
||||
|
||||
if [ "$en_mode" = "fake-ip-vpn" ]; then
|
||||
en_mode_tun="2"
|
||||
en_mode="fake-ip"
|
||||
if [ "$en_mode_tun" = "2" ]; then
|
||||
ln -s /etc/openclash/core/clash_game /etc/openclash/clash 2>/dev/null
|
||||
core_type="Game"
|
||||
fi
|
||||
|
||||
if [ "$proxy_mode" = "Script" ] || [ -n "$(grep "^ \{0,\}rule-providers:" "$CONFIG_FILE" 2>/dev/null)" ]; then
|
||||
if [ "$proxy_mode" = "Script" ] || [ -n "$(grep "^ \{0,\}rule-providers:" "$CONFIG_FILE" 2>/dev/null)" ] || [ "$rule_source" = "ConnersHua_provider" ]; then
|
||||
ln -s /etc/openclash/core/clash_tun /etc/openclash/clash 2>/dev/null
|
||||
core_type="Tun"
|
||||
fi
|
||||
|
||||
if [ ! -f "/etc/openclash/clash" ] && [ -f "/etc/openclash/core/clash" ]; then
|
||||
if [ ! -f "/etc/openclash/clash" ] && [ -f "/etc/openclash/core/clash" ] && [ -z "$core_type" ]; then
|
||||
ln -s /etc/openclash/core/clash /etc/openclash/clash 2>/dev/null
|
||||
fi
|
||||
|
||||
@ -770,7 +1024,7 @@ if [ "$(iptables -t nat -nL PREROUTING --line-number |grep "udp dpt:53" |grep "0
|
||||
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
|
||||
if [ -z "$(uci get firewall.openclash 2>/dev/null)" ] || [ -z "$(uci get ucitrack.@openclash[-1].init 2>/dev/null)" ]; then
|
||||
uci delete ucitrack.@openclash[-1] >/dev/null 2>&1
|
||||
uci add ucitrack openclash >/dev/null 2>&1
|
||||
@ -932,6 +1186,7 @@ revert_firewall()
|
||||
for out_line in $out_lines; do
|
||||
iptables -t nat -D OUTPUT "$out_line" >/dev/null 2>&1
|
||||
done
|
||||
iptables -t nat -D OUTPUT -p tcp -j openclash_output >/dev/null 2>&1
|
||||
|
||||
pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/8\.8\./=' 2>/dev/null |sort -rn)
|
||||
for pre_line in $pre_lines; do
|
||||
@ -942,11 +1197,13 @@ revert_firewall()
|
||||
for pre_line in $pre_lines; do
|
||||
iptables -t mangle -D PREROUTING "$pre_line" >/dev/null 2>&1
|
||||
done
|
||||
iptables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1
|
||||
|
||||
pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn)
|
||||
for pre_line in $pre_lines; do
|
||||
iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1
|
||||
done
|
||||
iptables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1
|
||||
|
||||
#ipv6
|
||||
#ip6tables -t mangle -F openclash >/dev/null 2>&1
|
||||
@ -986,8 +1243,9 @@ revert_firewall()
|
||||
|
||||
get_config()
|
||||
{
|
||||
enable_custom_dns=$(uci get openclash.config.enable_custom_dns 2>/dev/null)
|
||||
proxy_mode=$(uci get openclash.config.proxy_mode 2>/dev/null)
|
||||
rule_source=$(uci get openclash.config.rule_source 2>/dev/null)
|
||||
enable_custom_dns=$(uci get openclash.config.enable_custom_dns 2>/dev/null)
|
||||
enable_custom_clash_rules=$(uci get openclash.config.enable_custom_clash_rules 2>/dev/null)
|
||||
da_password=$(uci get openclash.config.dashboard_password 2>/dev/null)
|
||||
cn_port=$(uci get openclash.config.cn_port 2>/dev/null)
|
||||
@ -1020,28 +1278,24 @@ config_choose
|
||||
enable=$(uci get openclash.config.enable 2>/dev/null)
|
||||
|
||||
if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
#检查是否存在核心文件
|
||||
do_run_mode
|
||||
[ ! -f "$CLASH" ] && {
|
||||
kill_clash
|
||||
stop
|
||||
echo "内核文件不存在,开始下载..." >$START_LOG
|
||||
nohup /usr/share/openclash/openclash_core.sh "$core_type" &
|
||||
exit 0
|
||||
}
|
||||
do_run_mode
|
||||
echo "OpenClash 开始启动..." >$START_LOG
|
||||
echo "第一步: 获取配置..." >$START_LOG
|
||||
get_config
|
||||
echo "第二步: 配置文件检查..." >$START_LOG
|
||||
yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKUP_FILE" "$START_BACKUP"
|
||||
grep "^ \{0,\}proxy-groups:" "$CONFIG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}rules:" "$CONFIG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -eq "0" ]; then
|
||||
grep "^ \{0,\}Proxy:" "$CONFIG_FILE" >/dev/null 2>&1 || grep "^ \{0,\}proxy-providers:" "$CONFIG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -ne "0" ]; then
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
if [ -n "$(grep "^ \{0,\}proxy-groups:" "$CONFIG_FILE")" ]; then
|
||||
if [ -z "$(grep "^ \{0,\}Proxy:" "$CONFIG_FILE" 2>/dev/null)" ] && [ -z "$(grep "^ \{0,\}proxy-providers:" "$CONFIG_FILE" 2>/dev/null)" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请根据日志信息对照模板格式检查修改配置文件!" >$START_LOG
|
||||
echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请对照模板格式检查修改配置文件!" >$START_LOG
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
sleep 5
|
||||
echo "" >$START_LOG
|
||||
elif [ -z "$(grep "^ \{0,\}rules:" "$CONFIG_FILE" 2>/dev/null)" ] && [ -z "$(grep "^ \{0,\}script:" "$CONFIG_FILE" 2>/dev/null)" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请对照模板格式检查修改配置文件!" >$START_LOG
|
||||
mv "$START_BACKUP" "$CONFIG_FILE"
|
||||
sleep 5
|
||||
echo "" >$START_LOG
|
||||
@ -1052,11 +1306,12 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
yml_auth_custom "$CONFIG_FILE"
|
||||
yml_cut "$CHANGE_FILE" "$RULE_FILE" "$DNS_FILE" "$CONFIG_FILE" "$PROXY_FILE" "$PROXY_PROVIDER_FILE" "$GROUP_FILE"
|
||||
yml_dns_custom "$enable_custom_dns" "$DNS_FILE"
|
||||
sh /usr/share/openclash/yml_change.sh >/dev/null 2>&1 "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CHANGE_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" "$log_level" "$proxy_mode" "$intranet_allowed" "$en_mode_tun" "$stack_type" &
|
||||
sh /usr/share/openclash/yml_rules_change.sh >/dev/null 2>&1 "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$RULE_FILE" "$set_rule_file" "$en_mode" "$enable_rule_proxy" "$BACKUP_FILE" "$RULE_PROVIDER_FILE" &
|
||||
wait
|
||||
yml_provider_path "$PROXY_PROVIDER_FILE" "proxy_provider"
|
||||
yml_provider_path "$RULE_PROVIDER_FILE" "rule_provider"
|
||||
sh /usr/share/openclash/yml_change.sh >/dev/null 2>&1 "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CHANGE_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" "$log_level" "$proxy_mode" "$intranet_allowed" "$en_mode_tun" "$stack_type" &
|
||||
sh /usr/share/openclash/yml_rules_change.sh >/dev/null 2>&1 "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$RULE_FILE" "$set_rule_file" "$en_mode" "$enable_rule_proxy" "$BACKUP_FILE" &
|
||||
wait
|
||||
yml_custom_rule_provider
|
||||
yml_game_custom
|
||||
echo "第四步: DNS设置检查..." >$START_LOG
|
||||
if [ -n "$(sed -n '/^ \{0,\}nameserver:/{n;p}' "$CONFIG_FILE" |grep '^ \{0,\}fallback:')" ] || [ -n "$(sed -n '/^ \{0,\}nameserver:/{n;p}' "$CONFIG_FILE" |grep 'OpenClash-General')" ]; then
|
||||
@ -1069,6 +1324,15 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
echo "" >$START_LOG
|
||||
else
|
||||
echo "第五步: 启动主程序..." >$START_LOG
|
||||
#检查是否存在核心文件
|
||||
do_run_core
|
||||
[ ! -f "$CLASH" ] && {
|
||||
kill_clash
|
||||
stop
|
||||
echo "内核文件不存在,开始下载..." >$START_LOG
|
||||
nohup /usr/share/openclash/openclash_core.sh "$core_type" &
|
||||
exit 0
|
||||
}
|
||||
sed -i "s/^ \{0,\}Proxy:/proxies:/g" "$CONFIG_FILE" 2>/dev/null
|
||||
ulimit -SHn 65535 2>/dev/null
|
||||
config_reload=$(uci get openclash.config.config_reload 2>/dev/null)
|
||||
@ -1078,7 +1342,7 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
kill_clash
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
fi
|
||||
uci set openclash.config.config_reload=1
|
||||
uci set openclash.config.config_reload=1 2>/dev/null
|
||||
uci commit openclash
|
||||
|
||||
#检测proxy_provider配置文件状态
|
||||
@ -1115,11 +1379,12 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
if [ "$rule_source" != 0 ] || [ "$enable_custom_clash_rules" != 0 ]; then
|
||||
echo "错误: OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..." >$START_LOG
|
||||
echo "${LOGTIME} OpenClash Can Not Start, Try Use Backup Rules Start Again" >> $LOG_FILE
|
||||
mv "$START_BACKUP" /etc/openclash/configrules.bak
|
||||
sed -i -n '/^rules:/,$p' /etc/openclash/configrules.bak
|
||||
sed -i '/^rules:/,$d' "$CONFIG_FILE"
|
||||
cat /etc/openclash/configrules.bak >> "$CONFIG_FILE"
|
||||
rm -rf /etc/openclash/configrules.bak
|
||||
mv "$START_BACKUP" /tmp/configrules.bak
|
||||
sed -i -n '/^rules:/,$p' /tmp/configrules.bak
|
||||
sed -i '/^rules:/,$d' "$CONFIG_FILE" 2>/dev/null
|
||||
sed -i '/##Other-rule-providers##/,/##Other-rule-providers-end##/d' "$CONFIG_FILE" 2>/dev/null
|
||||
cat /tmp/configrules.bak >> "$CONFIG_FILE"
|
||||
rm -rf /tmp/configrules.bak
|
||||
nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
|
||||
sleep 3
|
||||
if pidof clash >/dev/null; then
|
||||
@ -1170,8 +1435,8 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
|
||||
rm -rf $START_BACKUP 2>/dev/null
|
||||
rm -rf /tmp/yaml_* 2>/dev/null
|
||||
else
|
||||
subscribe_url=$(uci get openclash.config.subscribe_url 2>/dev/null)
|
||||
if [ ! -f "$CONFIG_FILE" ] && [ -n "$subscribe_url" ]; then
|
||||
subscribe_info=$(uci get openclash.@config_subscribe[0].address 2>/dev/null)
|
||||
if [ ! -f "$CONFIG_FILE" ] && [ -n "$subscribe_info" ]; then
|
||||
kill_clash
|
||||
stop
|
||||
echo "OpenClash 配置文件不存在,开始下载..." >$START_LOG
|
||||
@ -1190,9 +1455,6 @@ fi
|
||||
|
||||
stop()
|
||||
{
|
||||
#禁止多个实例
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "3" ] && exit 0
|
||||
|
||||
enable=$(uci get openclash.config.enable 2>/dev/null)
|
||||
|
||||
@ -1249,9 +1511,11 @@ restart()
|
||||
|
||||
reload()
|
||||
{
|
||||
revert_firewall 2>/dev/null
|
||||
do_run_mode 2>/dev/null
|
||||
get_config 2>/dev/null
|
||||
set_firewall 2>/dev/null
|
||||
echo "${LOGTIME} OpenClash Reload After Firewall Restart" >> $LOG_FILE
|
||||
if pidof clash >/dev/null; then
|
||||
revert_firewall 2>/dev/null
|
||||
do_run_mode 2>/dev/null
|
||||
get_config 2>/dev/null
|
||||
set_firewall 2>/dev/null
|
||||
echo "${LOGTIME} OpenClash Reload After Firewall Restart" >> $LOG_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,97 @@
|
||||
rule-providers:
|
||||
# name: # Provider 名称
|
||||
# type: http # http 或 file
|
||||
# behavior: classical # 或 ipcidr、domain
|
||||
# path: # 文件路径
|
||||
# url: # 只有当类型为 HTTP 时才可用,您不需要在本地空间中创建新文件。
|
||||
# interval: # 自动更新间隔,仅在类型为 HTTP 时可用
|
||||
|
||||
Unbreak:
|
||||
type: http
|
||||
behavior: classical
|
||||
path: ./RuleSet/Unbreak.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Unbreak.yaml
|
||||
interval: 86400
|
||||
|
||||
Streaming:
|
||||
type: http
|
||||
behavior: classical
|
||||
path: ./RuleSet/StreamingMedia/Streaming.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Streaming.yaml
|
||||
interval: 86400
|
||||
|
||||
StreamingSE:
|
||||
type: http
|
||||
behavior: classical
|
||||
path: ./RuleSet/StreamingMedia/StreamingSE.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/StreamingSE.yaml
|
||||
interval: 86400
|
||||
|
||||
Global:
|
||||
type: http
|
||||
behavior: classical
|
||||
path: ./RuleSet/Global.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Global.yaml
|
||||
interval: 86400
|
||||
|
||||
China:
|
||||
type: http
|
||||
behavior: classical
|
||||
path: ./RuleSet/China.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/China.yaml
|
||||
interval: 86400
|
||||
|
||||
IP-Blackhole:
|
||||
type: http
|
||||
behavior: ipcidr
|
||||
path: ./RuleSet/Extra/IP-Blackhole.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Extra/IP-Blackhole.yaml
|
||||
interval: 86400
|
||||
|
||||
ChinaIP:
|
||||
type: http
|
||||
behavior: ipcidr
|
||||
path: ./RuleSet/Extra/ChinaIP.yaml
|
||||
url: https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/RuleSet/Extra/ChinaIP.yaml
|
||||
interval: 86400
|
||||
|
||||
# 规则
|
||||
rules:
|
||||
##source:ConnersHua_provider
|
||||
# Unbreak
|
||||
- RULE-SET,Unbreak,DIRECT
|
||||
|
||||
# Global Area Network
|
||||
|
||||
# (Streaming Media)
|
||||
- RULE-SET,Streaming,Streaming
|
||||
|
||||
# (StreamingSE)
|
||||
- RULE-SET,StreamingSE,StreamingSE
|
||||
|
||||
# (DNS Cache Pollution) / (IP Blackhole) / (Region-Restricted Access Denied) / (Network Jitter)
|
||||
- RULE-SET,Global,PROXY
|
||||
|
||||
# China Area Network
|
||||
- RULE-SET,China,DIRECT
|
||||
|
||||
# Local Area Network
|
||||
- IP-CIDR,192.168.0.0/16,DIRECT
|
||||
- IP-CIDR,10.0.0.0/8,DIRECT
|
||||
- IP-CIDR,172.16.0.0/12,DIRECT
|
||||
- IP-CIDR,127.0.0.0/8,DIRECT
|
||||
- IP-CIDR,100.64.0.0/10,DIRECT
|
||||
- IP-CIDR,224.0.0.0/4,DIRECT
|
||||
|
||||
# IP Blackhole
|
||||
- RULE-SET,IP-Blackhole,PROXY
|
||||
|
||||
# Tencent
|
||||
- IP-CIDR,119.28.28.28/32,DIRECT
|
||||
- IP-CIDR,182.254.116.0/24,DIRECT
|
||||
# 使用来自 ipipdotnet 的 ChinaIP 以解决数据不准确的问题,使用 ChinaIP.yaml 时禁用「GEOIP,CN」规则
|
||||
# - RULE-SET,ChinaIP,DIRECT
|
||||
# GeoIP China
|
||||
- GEOIP,CN,DIRECT
|
||||
|
||||
- MATCH,MATCH
|
||||
@ -1,4 +1,4 @@
|
||||
Rule:
|
||||
rules:
|
||||
##source:ConnersHua_return
|
||||
# (Video)
|
||||
# AcFun
|
||||
@ -76,4 +76,4 @@ Rule:
|
||||
|
||||
- GEOIP,CN,PROXY
|
||||
|
||||
- MATCH,DIRECT
|
||||
- MATCH,DIRECT
|
||||
Binary file not shown.
@ -44,11 +44,14 @@ authentication: # 此项将被接管
|
||||
- "user1:pass1"
|
||||
- "user2:pass2"
|
||||
|
||||
# # experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com)
|
||||
# # static domain has a higher priority than wildcard domain (foo.example.com > *.example.com)
|
||||
#hosts:
|
||||
#'*.clash.dev': 127.0.0.1
|
||||
#'alpha.clash.dev': '::1'
|
||||
# # hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com)
|
||||
# # static domain has a higher priority than wildcard domain (foo.example.com > *.example.com > .example.com)
|
||||
# # +.foo.com equal .foo.com and foo.com
|
||||
# hosts:
|
||||
# '*.clash.dev': 127.0.0.1
|
||||
# '.dev': 127.0.0.1
|
||||
# 'alpha.clash.dev': '::1'
|
||||
# '+.foo.dev': 127.0.0.1
|
||||
|
||||
dns: # 如订阅配置无包括此项的所有DNS设置,OpenClash将自动添加
|
||||
enable: true # set true to enable dns (default is false) # 此项将被接管为true
|
||||
@ -147,6 +150,7 @@ proxies: # 节点设置,此部分与proxy-provider两者不能同时删除
|
||||
# udp: true
|
||||
# tls: true
|
||||
# skip-cert-verify: true
|
||||
# servername: example.com # priority over wss host
|
||||
# network: ws
|
||||
# ws-path: /path
|
||||
# ws-headers:
|
||||
|
||||
@ -77,6 +77,7 @@ Kurtzpel,Kurtzpel.rules
|
||||
怪兽世界猎人steam版,Monster-Hunter-World.rules
|
||||
万智牌:竞技场-国际服,MTG-Arena.rules
|
||||
奇迹传奇MU2,MU2.rules
|
||||
我的世界-地下城,Minecraft-Dungeons.rules
|
||||
NBA-2K19,NBA-2K19.rules
|
||||
NBA2K20,NBA2K20.rules
|
||||
仁王,NIOH.rules
|
||||
|
||||
@ -2516,7 +2516,6 @@ rules:
|
||||
- DOMAIN-SUFFIX,cpro1.edushi.com,AdBlock
|
||||
- DOMAIN-SUFFIX,cpro2.baidu.com,AdBlock
|
||||
- DOMAIN-SUFFIX,cps.360buy.com,AdBlock
|
||||
- DOMAIN-SUFFIX,cpu.baidu.com,AdBlock
|
||||
- DOMAIN-SUFFIX,cpu-admin.baidu.com,AdBlock
|
||||
- DOMAIN-SUFFIX,cpv.channelray,AdBlock
|
||||
- DOMAIN-SUFFIX,cpv.czpush.com,AdBlock
|
||||
@ -3197,7 +3196,6 @@ rules:
|
||||
- DOMAIN-SUFFIX,e.qiaoyuwang.com,AdBlock
|
||||
- DOMAIN-SUFFIX,e.qingzhencai.net,AdBlock
|
||||
- DOMAIN-SUFFIX,e.qiyunmuye.com,AdBlock
|
||||
- DOMAIN-SUFFIX,e.qq.com,AdBlock
|
||||
- DOMAIN-SUFFIX,e.qsove.com,AdBlock
|
||||
- DOMAIN-SUFFIX,e.qvxyz.com,AdBlock
|
||||
- DOMAIN-SUFFIX,e.qxfly.com,AdBlock
|
||||
@ -8507,6 +8505,7 @@ rules:
|
||||
# - USER-AGENT,TencentMidasConnect*,AsianTV
|
||||
|
||||
# > Tencent Video
|
||||
- DOMAIN-SUFFIX,v.smtcdns.com,AsianTV
|
||||
- DOMAIN-SUFFIX,vv.video.qq.com,AsianTV
|
||||
|
||||
# > Youku
|
||||
@ -8710,9 +8709,11 @@ rules:
|
||||
# - USER-AGENT,*youtube*,GlobalTV
|
||||
# - USER-AGENT,YouTube*,GlobalTV
|
||||
- DOMAIN-KEYWORD,youtube,GlobalTV
|
||||
- DOMAIN,yt3.ggpht.com,GlobalTV
|
||||
- DOMAIN-SUFFIX,googlevideo.com,GlobalTV
|
||||
- DOMAIN-SUFFIX,gvt2.com,GlobalTV
|
||||
- DOMAIN-SUFFIX,youtu.be,GlobalTV
|
||||
- DOMAIN-SUFFIX,ytimg.com,GlobalTV
|
||||
|
||||
|
||||
|
||||
@ -9701,6 +9702,7 @@ rules:
|
||||
- DOMAIN-SUFFIX,windows.net,Microsoft
|
||||
- DOMAIN-SUFFIX,xbox.com,Microsoft
|
||||
- DOMAIN-SUFFIX,xboxlive.com,Microsoft
|
||||
|
||||
- DOMAIN-SUFFIX,msftconnecttest.com,DIRECT
|
||||
|
||||
|
||||
@ -9710,6 +9712,7 @@ rules:
|
||||
- DOMAIN,apm3.music.163.com,Netease Music
|
||||
- DOMAIN,interface.music.163.com,Netease Music
|
||||
- DOMAIN,interface3.music.163.com,Netease Music
|
||||
- DOMAIN,music.126.com,Netease Music
|
||||
- DOMAIN,music.163.com,Netease Music
|
||||
- IP-CIDR,101.71.154.241/32,Netease Music
|
||||
- IP-CIDR,103.126.92.132/32,Netease Music
|
||||
@ -9794,6 +9797,7 @@ rules:
|
||||
- DOMAIN-SUFFIX,anthonycalzadilla.com,Proxy
|
||||
- DOMAIN-SUFFIX,aol.com,Proxy
|
||||
- DOMAIN-SUFFIX,aolcdn.com,Proxy
|
||||
- DOMAIN-SUFFIX,apache.org,Proxy
|
||||
- DOMAIN-SUFFIX,api.mixpanel.com,Proxy
|
||||
- DOMAIN-SUFFIX,api.termius.com,Proxy
|
||||
- DOMAIN-SUFFIX,api.tiktokv.com,Proxy
|
||||
@ -9863,6 +9867,7 @@ rules:
|
||||
- DOMAIN-SUFFIX,chromestatus.com,Proxy
|
||||
- DOMAIN-SUFFIX,chromium.org,Proxy
|
||||
- DOMAIN-SUFFIX,cl.ly,Proxy
|
||||
- DOMAIN-SUFFIX,clien.net,Proxy
|
||||
- DOMAIN-SUFFIX,cloudflare.com,Proxy
|
||||
- DOMAIN-SUFFIX,cloudfront.net,Proxy
|
||||
- DOMAIN-SUFFIX,cloudgarage.jp,Proxy
|
||||
@ -9981,6 +9986,7 @@ rules:
|
||||
- DOMAIN-SUFFIX,imgur.com,Proxy
|
||||
- DOMAIN-SUFFIX,imore.com,Proxy
|
||||
- DOMAIN-SUFFIX,ingress.com,Proxy
|
||||
- DOMAIN-SUFFIX,inoreader.com,Proxy
|
||||
- DOMAIN-SUFFIX,insder.co,Proxy
|
||||
- DOMAIN-SUFFIX,instapaper.com,Proxy
|
||||
- DOMAIN-SUFFIX,instructables.com,Proxy
|
||||
@ -10534,7 +10540,6 @@ rules:
|
||||
- DOMAIN-SUFFIX,aliyun.com,Domestic
|
||||
- DOMAIN-SUFFIX,aliyuncs.com,Domestic
|
||||
- DOMAIN-SUFFIX,amap.com,Domestic
|
||||
- DOMAIN-SUFFIX,apache.org,Domestic
|
||||
- DOMAIN-SUFFIX,api.crisp.chat,Domestic
|
||||
- DOMAIN-SUFFIX,appshike.com,Domestic
|
||||
- DOMAIN-SUFFIX,appstore.com,Domestic
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,384 @@
|
||||
payload:
|
||||
# China Area Network
|
||||
# > 360
|
||||
- DOMAIN-SUFFIX,qhres.com
|
||||
- DOMAIN-SUFFIX,qhimg.com
|
||||
# > Alibaba
|
||||
# USER-AGENT,%E4%BC%98%E9%85%B7*
|
||||
- DOMAIN-SUFFIX,alibaba.com
|
||||
- DOMAIN-SUFFIX,alibabausercontent.com
|
||||
- DOMAIN-SUFFIX,alicdn.com
|
||||
- DOMAIN-SUFFIX,alikunlun.com
|
||||
- DOMAIN-SUFFIX,alipay.com
|
||||
- DOMAIN-SUFFIX,amap.com
|
||||
- DOMAIN-SUFFIX,autonavi.com
|
||||
- DOMAIN-SUFFIX,dingtalk.com
|
||||
- DOMAIN-SUFFIX,mxhichina.com
|
||||
- DOMAIN-SUFFIX,soku.com
|
||||
- DOMAIN-SUFFIX,taobao.com
|
||||
- DOMAIN-SUFFIX,tmall.com
|
||||
- DOMAIN-SUFFIX,tmall.hk
|
||||
- DOMAIN-SUFFIX,ykimg.com
|
||||
- DOMAIN-SUFFIX,youku.com
|
||||
- DOMAIN-SUFFIX,xiami.com
|
||||
- DOMAIN-SUFFIX,xiami.net
|
||||
# > Apple
|
||||
- DOMAIN-SUFFIX,aaplimg.com
|
||||
- DOMAIN-SUFFIX,apple.co
|
||||
- DOMAIN-SUFFIX,apple.com
|
||||
- DOMAIN-SUFFIX,apple-cloudkit.com
|
||||
- DOMAIN-SUFFIX,appstore.com
|
||||
- DOMAIN-SUFFIX,cdn-apple.com
|
||||
- DOMAIN-SUFFIX,icloud.com
|
||||
- DOMAIN-SUFFIX,icloud-content.com
|
||||
- DOMAIN-SUFFIX,me.com
|
||||
- DOMAIN-SUFFIX,mzstatic.com
|
||||
- DOMAIN-KEYWORD,apple.com.akadns.net
|
||||
- DOMAIN-KEYWORD,icloud.com.akadns.net
|
||||
# > Baidu
|
||||
- DOMAIN-SUFFIX,baidu.com
|
||||
- DOMAIN-SUFFIX,baidubcr.com
|
||||
- DOMAIN-SUFFIX,bdstatic.com
|
||||
- DOMAIN-SUFFIX,yunjiasu-cdn.net
|
||||
# > bilibili
|
||||
- DOMAIN-SUFFIX,acgvideo.com
|
||||
- DOMAIN-SUFFIX,biliapi.com
|
||||
- DOMAIN-SUFFIX,biliapi.net
|
||||
- DOMAIN-SUFFIX,bilibili.com
|
||||
- DOMAIN-SUFFIX,bilibili.tv
|
||||
- DOMAIN-SUFFIX,hdslb.com
|
||||
# > ByteDance
|
||||
- DOMAIN-SUFFIX,feiliao.com
|
||||
- DOMAIN-SUFFIX,pstatp.com
|
||||
- DOMAIN-SUFFIX,snssdk.com
|
||||
- DOMAIN-SUFFIX,iesdouyin.com
|
||||
- DOMAIN-SUFFIX,toutiao.com
|
||||
# > CCTV
|
||||
- DOMAIN-SUFFIX,cctv.com
|
||||
- DOMAIN-SUFFIX,cctvpic.com
|
||||
- DOMAIN-SUFFIX,livechina.com
|
||||
# > DiDi
|
||||
- DOMAIN-SUFFIX,didialift.com
|
||||
- DOMAIN-SUFFIX,didiglobal.com
|
||||
- DOMAIN-SUFFIX,udache.com
|
||||
# > 蛋蛋赞
|
||||
- DOMAIN-SUFFIX,343480.com
|
||||
- DOMAIN-SUFFIX,baduziyuan.com
|
||||
- DOMAIN-SUFFIX,com-hs-hkdy.com
|
||||
- DOMAIN-SUFFIX,czybjz.com
|
||||
- DOMAIN-SUFFIX,dandanzan.com
|
||||
- DOMAIN-SUFFIX,fjhps.com
|
||||
- DOMAIN-SUFFIX,kuyunbo.club
|
||||
- DOMAIN-SUFFIX,youkutv.cc
|
||||
# > ChinaTelecom
|
||||
- DOMAIN-SUFFIX,21cn.com
|
||||
# > HunanTV
|
||||
- DOMAIN-SUFFIX,hitv.com
|
||||
- DOMAIN-SUFFIX,mgtv.com
|
||||
# > iQiyi
|
||||
- DOMAIN-SUFFIX,iqiyi.com
|
||||
- DOMAIN-SUFFIX,iqiyipic.com
|
||||
- DOMAIN-SUFFIX,71.am
|
||||
# > JD
|
||||
- DOMAIN-SUFFIX,jd.com
|
||||
- DOMAIN-SUFFIX,jd.hk
|
||||
- DOMAIN-SUFFIX,jdpay.com
|
||||
- DOMAIN-SUFFIX,360buyimg.com
|
||||
# > Kingsoft
|
||||
- DOMAIN-SUFFIX,iciba.com
|
||||
- DOMAIN-SUFFIX,ksosoft.com
|
||||
# > Meitu
|
||||
- DOMAIN-SUFFIX,meitu.com
|
||||
- DOMAIN-SUFFIX,meitudata.com
|
||||
- DOMAIN-SUFFIX,meitustat.com
|
||||
- DOMAIN-SUFFIX,meipai.com
|
||||
# > MI
|
||||
- DOMAIN-SUFFIX,duokan.com
|
||||
- DOMAIN-SUFFIX,mi.com
|
||||
- DOMAIN-SUFFIX,mi-img.com
|
||||
- DOMAIN-SUFFIX,miui.com
|
||||
- DOMAIN-SUFFIX,miwifi.com
|
||||
- DOMAIN-SUFFIX,xiaomi.com
|
||||
- DOMAIN-SUFFIX,xiaomi.net
|
||||
# > Microsoft
|
||||
- DOMAIN-SUFFIX,microsoft.com
|
||||
- DOMAIN-SUFFIX,msecnd.net
|
||||
- DOMAIN-SUFFIX,office365.com
|
||||
- DOMAIN-SUFFIX,outlook.com
|
||||
- DOMAIN-SUFFIX,s-microsoft.com
|
||||
- DOMAIN-SUFFIX,visualstudio.com
|
||||
- DOMAIN-SUFFIX,windows.com
|
||||
- DOMAIN-SUFFIX,windowsupdate.com
|
||||
# - DOMAIN-KEYWORD,-microsoft-com.akamaized.net
|
||||
# > NetEase
|
||||
# USER-AGENT,NeteaseMusic*
|
||||
# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*
|
||||
- DOMAIN-SUFFIX,163.com
|
||||
- DOMAIN-SUFFIX,126.com
|
||||
- DOMAIN-SUFFIX,126.net
|
||||
- DOMAIN-SUFFIX,127.net
|
||||
- DOMAIN-SUFFIX,163yun.com
|
||||
- DOMAIN-SUFFIX,lofter.com
|
||||
- DOMAIN-SUFFIX,netease.com
|
||||
- DOMAIN-SUFFIX,ydstatic.com
|
||||
# > PayPal
|
||||
# USER-AGENT,PayPal*
|
||||
- DOMAIN-SUFFIX,paypal.com
|
||||
- DOMAIN-SUFFIX,paypal.me
|
||||
- DOMAIN-SUFFIX,paypalobjects.com
|
||||
# > Sina
|
||||
- DOMAIN-SUFFIX,sina.com
|
||||
- DOMAIN-SUFFIX,weibo.com
|
||||
- DOMAIN-SUFFIX,weibocdn.com
|
||||
# > Sohu
|
||||
- DOMAIN-SUFFIX,sohu.com
|
||||
- DOMAIN-SUFFIX,sohucs.com
|
||||
- DOMAIN-SUFFIX,sohu-inc.com
|
||||
- DOMAIN-SUFFIX,v-56.com
|
||||
# > Sogo
|
||||
- DOMAIN-SUFFIX,sogo.com
|
||||
- DOMAIN-SUFFIX,sogou.com
|
||||
- DOMAIN-SUFFIX,sogoucdn.com
|
||||
# > Tencent
|
||||
# USER-AGENT,MicroMessenger%20Client
|
||||
# USER-AGENT,WeChat*
|
||||
# USER-AGENT,%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1*
|
||||
- DOMAIN-SUFFIX,gtimg.com
|
||||
- DOMAIN-SUFFIX,idqqimg.com
|
||||
- DOMAIN-SUFFIX,igamecj.com
|
||||
- DOMAIN-SUFFIX,myapp.com
|
||||
- DOMAIN-SUFFIX,myqcloud.com
|
||||
- DOMAIN-SUFFIX,qq.com
|
||||
- DOMAIN-SUFFIX,qqmail.com
|
||||
- DOMAIN-SUFFIX,servicewechat.com
|
||||
- DOMAIN-SUFFIX,tencent.com
|
||||
- DOMAIN-SUFFIX,tencent-cloud.net
|
||||
- DOMAIN-SUFFIX,tenpay.com
|
||||
- DOMAIN-SUFFIX,wechat.com
|
||||
- DOMAIN,file-igamecj.akamaized.net
|
||||
# > Content Delivery Network
|
||||
- DOMAIN-SUFFIX,ccgslb.com
|
||||
- DOMAIN-SUFFIX,ccgslb.net
|
||||
- DOMAIN-SUFFIX,chinanetcenter.com
|
||||
- DOMAIN-SUFFIX,meixincdn.com
|
||||
- DOMAIN-SUFFIX,ourdvs.com
|
||||
- DOMAIN-SUFFIX,staticdn.net
|
||||
- DOMAIN-SUFFIX,wangsu.com
|
||||
# > IP Query
|
||||
- DOMAIN-SUFFIX,ipip.net
|
||||
- DOMAIN-SUFFIX,ip.la
|
||||
- DOMAIN-SUFFIX,ip.sb
|
||||
- DOMAIN-SUFFIX,ip-cdn.com
|
||||
- DOMAIN-SUFFIX,ipv6-test.com
|
||||
- DOMAIN-SUFFIX,test-ipv6.com
|
||||
- DOMAIN-SUFFIX,whatismyip.com
|
||||
- DOMAIN,ip.istatmenus.app
|
||||
# > Speed Test
|
||||
# - DOMAIN-SUFFIX,speedtest.net
|
||||
- DOMAIN-SUFFIX,netspeedtestmaster.com
|
||||
- DOMAIN,speedtest.macpaw.com
|
||||
# > Private Tracker
|
||||
- DOMAIN-SUFFIX,animebytes.tv
|
||||
- DOMAIN-SUFFIX,awesome-hd.me
|
||||
- DOMAIN-SUFFIX,broadcasthe.net
|
||||
- DOMAIN-SUFFIX,chdbits.co
|
||||
- DOMAIN-SUFFIX,classix-unlimited.co.uk
|
||||
- DOMAIN-SUFFIX,empornium.me
|
||||
- DOMAIN-SUFFIX,gazellegames.net
|
||||
- DOMAIN-SUFFIX,hdchina.org
|
||||
- DOMAIN-SUFFIX,hdsky.me
|
||||
- DOMAIN-SUFFIX,hdhome.org
|
||||
- DOMAIN-SUFFIX,hdbits.org
|
||||
- DOMAIN-SUFFIX,icetorrent.org
|
||||
- DOMAIN-SUFFIX,jpopsuki.eu
|
||||
- DOMAIN-SUFFIX,keepfrds.com
|
||||
- DOMAIN-SUFFIX,madsrevolution.net
|
||||
- DOMAIN-SUFFIX,myanonamouse.net
|
||||
- DOMAIN-SUFFIX,m-team.cc
|
||||
- DOMAIN-SUFFIX,morethan.tv
|
||||
- DOMAIN-SUFFIX,nanyangpt.com
|
||||
- DOMAIN-SUFFIX,ncore.cc
|
||||
- DOMAIN-SUFFIX,open.cd
|
||||
- DOMAIN-SUFFIX,ourbits.club
|
||||
- DOMAIN-SUFFIX,passthepopcorn.me
|
||||
- DOMAIN-SUFFIX,privatehd.to
|
||||
- DOMAIN-SUFFIX,pterclub.com
|
||||
- DOMAIN-SUFFIX,redacted.ch
|
||||
- DOMAIN-SUFFIX,springsunday.net
|
||||
- DOMAIN-SUFFIX,tjupt.org
|
||||
- DOMAIN-SUFFIX,totheglory.im
|
||||
# > Scholar
|
||||
- DOMAIN-SUFFIX,acm.org
|
||||
- DOMAIN-SUFFIX,acs.org
|
||||
- DOMAIN-SUFFIX,aip.org
|
||||
- DOMAIN-SUFFIX,ams.org
|
||||
- DOMAIN-SUFFIX,annualreviews.org
|
||||
- DOMAIN-SUFFIX,aps.org
|
||||
- DOMAIN-SUFFIX,ascelibrary.org
|
||||
- DOMAIN-SUFFIX,asm.org
|
||||
- DOMAIN-SUFFIX,asme.org
|
||||
- DOMAIN-SUFFIX,astm.org
|
||||
- DOMAIN-SUFFIX,bmj.com
|
||||
- DOMAIN-SUFFIX,cambridge.org
|
||||
- DOMAIN-SUFFIX,cas.org
|
||||
- DOMAIN-SUFFIX,clarivate.com
|
||||
- DOMAIN-SUFFIX,ebscohost.com
|
||||
- DOMAIN-SUFFIX,emerald.com
|
||||
- DOMAIN-SUFFIX,engineeringvillage.com
|
||||
- DOMAIN-SUFFIX,icevirtuallibrary.com
|
||||
- DOMAIN-SUFFIX,ieee.org
|
||||
- DOMAIN-SUFFIX,imf.org
|
||||
- DOMAIN-SUFFIX,iop.org
|
||||
- DOMAIN-SUFFIX,jamanetwork.com
|
||||
- DOMAIN-SUFFIX,jhu.edu
|
||||
- DOMAIN-SUFFIX,jstor.org
|
||||
- DOMAIN-SUFFIX,karger.com
|
||||
- DOMAIN-SUFFIX,libguides.com
|
||||
- DOMAIN-SUFFIX,madsrevolution.net
|
||||
- DOMAIN-SUFFIX,mpg.de
|
||||
- DOMAIN-SUFFIX,myilibrary.com
|
||||
- DOMAIN-SUFFIX,nature.com
|
||||
- DOMAIN-SUFFIX,oecd-ilibrary.org
|
||||
- DOMAIN-SUFFIX,osapublishing.org
|
||||
- DOMAIN-SUFFIX,oup.com
|
||||
- DOMAIN-SUFFIX,ovid.com
|
||||
- DOMAIN-SUFFIX,oxfordartonline.com
|
||||
- DOMAIN-SUFFIX,oxfordbibliographies.com
|
||||
- DOMAIN-SUFFIX,oxfordmusiconline.com
|
||||
- DOMAIN-SUFFIX,pnas.org
|
||||
- DOMAIN-SUFFIX,proquest.com
|
||||
- DOMAIN-SUFFIX,rsc.org
|
||||
- DOMAIN-SUFFIX,sagepub.com
|
||||
- DOMAIN-SUFFIX,sciencedirect.com
|
||||
- DOMAIN-SUFFIX,sciencemag.org
|
||||
- DOMAIN-SUFFIX,scopus.com
|
||||
- DOMAIN-SUFFIX,siam.org
|
||||
- DOMAIN-SUFFIX,spiedigitallibrary.org
|
||||
- DOMAIN-SUFFIX,springer.com
|
||||
- DOMAIN-SUFFIX,springerlink.com
|
||||
- DOMAIN-SUFFIX,tandfonline.com
|
||||
- DOMAIN-SUFFIX,un.org
|
||||
- DOMAIN-SUFFIX,uni-bielefeld.de
|
||||
- DOMAIN-SUFFIX,webofknowledge.com
|
||||
- DOMAIN-SUFFIX,westlaw.com
|
||||
- DOMAIN-SUFFIX,wiley.com
|
||||
- DOMAIN-SUFFIX,worldbank.org
|
||||
- DOMAIN-SUFFIX,worldscientific.com
|
||||
# > Other
|
||||
- DOMAIN-SUFFIX,cn
|
||||
# - DOMAIN-SUFFIX,vmware.com
|
||||
- DOMAIN-SUFFIX,115.com
|
||||
- DOMAIN-SUFFIX,360in.com
|
||||
- DOMAIN-SUFFIX,51ym.me
|
||||
- DOMAIN-SUFFIX,8686c.com
|
||||
- DOMAIN-SUFFIX,abchina.com
|
||||
- DOMAIN-SUFFIX,accuweather.com
|
||||
- DOMAIN-SUFFIX,aicoinstorge.com
|
||||
- DOMAIN-SUFFIX,air-matters.com
|
||||
- DOMAIN-SUFFIX,air-matters.io
|
||||
- DOMAIN-SUFFIX,aixifan.com
|
||||
- DOMAIN-SUFFIX,amd.com
|
||||
- DOMAIN-SUFFIX,b612.net
|
||||
- DOMAIN-SUFFIX,bdatu.com
|
||||
- DOMAIN-SUFFIX,beitaichufang.com
|
||||
- DOMAIN-SUFFIX,bjango.com
|
||||
- DOMAIN-SUFFIX,booking.com
|
||||
- DOMAIN-SUFFIX,bstatic.com
|
||||
- DOMAIN-SUFFIX,cailianpress.com
|
||||
- DOMAIN-SUFFIX,camera360.com
|
||||
- DOMAIN-SUFFIX,chaoxing.com
|
||||
- DOMAIN-SUFFIX,chinaso.com
|
||||
- DOMAIN-SUFFIX,chuimg.com
|
||||
- DOMAIN-SUFFIX,chunyu.mobi
|
||||
- DOMAIN-SUFFIX,chushou.tv
|
||||
- DOMAIN-SUFFIX,cmbchina.com
|
||||
- DOMAIN-SUFFIX,cmbimg.com
|
||||
- DOMAIN-SUFFIX,ctrip.com
|
||||
- DOMAIN-SUFFIX,dfcfw.com
|
||||
- DOMAIN-SUFFIX,docschina.org
|
||||
- DOMAIN-SUFFIX,douban.com
|
||||
- DOMAIN-SUFFIX,doubanio.com
|
||||
- DOMAIN-SUFFIX,douyu.com
|
||||
- DOMAIN-SUFFIX,dxycdn.com
|
||||
- DOMAIN-SUFFIX,dytt8.net
|
||||
- DOMAIN-SUFFIX,eastmoney.com
|
||||
- DOMAIN-SUFFIX,eudic.net
|
||||
- DOMAIN-SUFFIX,feng.com
|
||||
- DOMAIN-SUFFIX,fengkongcloud.com
|
||||
- DOMAIN-SUFFIX,frdic.com
|
||||
- DOMAIN-SUFFIX,futu5.com
|
||||
- DOMAIN-SUFFIX,futunn.com
|
||||
- DOMAIN-SUFFIX,gandi.net
|
||||
- DOMAIN-SUFFIX,gcores.com
|
||||
- DOMAIN-SUFFIX,geilicdn.com
|
||||
- DOMAIN-SUFFIX,getpricetag.com
|
||||
- DOMAIN-SUFFIX,gifshow.com
|
||||
- DOMAIN-SUFFIX,godic.net
|
||||
- DOMAIN-SUFFIX,hicloud.com
|
||||
- DOMAIN-SUFFIX,hongxiu.com
|
||||
- DOMAIN-SUFFIX,hostbuf.com
|
||||
- DOMAIN-SUFFIX,huxiucdn.com
|
||||
- DOMAIN-SUFFIX,huya.com
|
||||
- DOMAIN-SUFFIX,ibm.com
|
||||
- DOMAIN-SUFFIX,infinitynewtab.com
|
||||
- DOMAIN-SUFFIX,ithome.com
|
||||
- DOMAIN-SUFFIX,java.com
|
||||
- DOMAIN-SUFFIX,jianguoyun.com
|
||||
- DOMAIN-SUFFIX,jianshu.io
|
||||
- DOMAIN-SUFFIX,jidian.im
|
||||
- DOMAIN-SUFFIX,kaiyanapp.com
|
||||
- DOMAIN-SUFFIX,kaspersky-labs.com
|
||||
- DOMAIN-SUFFIX,keepcdn.com
|
||||
- DOMAIN-SUFFIX,kkmh.com
|
||||
- DOMAIN-SUFFIX,licdn.com
|
||||
- DOMAIN-SUFFIX,linkedin.com
|
||||
- DOMAIN-SUFFIX,loli.net
|
||||
- DOMAIN-SUFFIX,luojilab.com
|
||||
- DOMAIN-SUFFIX,maoyan.com
|
||||
- DOMAIN-SUFFIX,maoyun.tv
|
||||
- DOMAIN-SUFFIX,meituan.com
|
||||
- DOMAIN-SUFFIX,meituan.net
|
||||
- DOMAIN-SUFFIX,mls-cdn.com
|
||||
- DOMAIN-SUFFIX,mobike.com
|
||||
- DOMAIN-SUFFIX,moke.com
|
||||
- DOMAIN-SUFFIX,mubu.com
|
||||
- DOMAIN-SUFFIX,myzaker.com
|
||||
- DOMAIN-SUFFIX,nim-lang-cn.org
|
||||
- DOMAIN-SUFFIX,nvidia.com
|
||||
- DOMAIN-SUFFIX,oracle.com
|
||||
- DOMAIN-SUFFIX,plex.tv
|
||||
- DOMAIN-SUFFIX,qdaily.com
|
||||
- DOMAIN-SUFFIX,qidian.com
|
||||
- DOMAIN-SUFFIX,qyer.com
|
||||
- DOMAIN-SUFFIX,qyerstatic.com
|
||||
- DOMAIN-SUFFIX,raychase.net
|
||||
- DOMAIN-SUFFIX,ronghub.com
|
||||
- DOMAIN-SUFFIX,ruguoapp.com
|
||||
- DOMAIN-SUFFIX,sankuai.com
|
||||
- DOMAIN-SUFFIX,scomper.me
|
||||
- DOMAIN-SUFFIX,seafile.com
|
||||
- DOMAIN-SUFFIX,sm.ms
|
||||
- DOMAIN-SUFFIX,smzdm.com
|
||||
- DOMAIN-SUFFIX,snapdrop.net
|
||||
- DOMAIN-SUFFIX,snwx.com
|
||||
- DOMAIN-SUFFIX,s-reader.com
|
||||
- DOMAIN-SUFFIX,sspai.com
|
||||
- DOMAIN-SUFFIX,takungpao.com
|
||||
- DOMAIN-SUFFIX,teamviewer.com
|
||||
- DOMAIN-SUFFIX,tianyancha.com
|
||||
- DOMAIN-SUFFIX,udacity.com
|
||||
- DOMAIN-SUFFIX,uning.com
|
||||
- DOMAIN-SUFFIX,weather.com
|
||||
- DOMAIN-SUFFIX,weico.cc
|
||||
- DOMAIN-SUFFIX,weidian.com
|
||||
- DOMAIN-SUFFIX,xiachufang.com
|
||||
- DOMAIN-SUFFIX,ximalaya.com
|
||||
- DOMAIN-SUFFIX,xinhuanet.com
|
||||
- DOMAIN-SUFFIX,xmcdn.com
|
||||
- DOMAIN-SUFFIX,yangkeduo.com
|
||||
- DOMAIN-SUFFIX,zhangzishi.cc
|
||||
- DOMAIN-SUFFIX,zhihu.com
|
||||
- DOMAIN-SUFFIX,zhimg.com
|
||||
- DOMAIN-SUFFIX,zhuihd.com
|
||||
- DOMAIN,download.jetbrains.com
|
||||
- DOMAIN,images-cn.ssl-images-amazon.com
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,515 @@
|
||||
payload:
|
||||
# (DNS Cache Pollution)
|
||||
# > Google
|
||||
- DOMAIN-SUFFIX,appspot.com
|
||||
- DOMAIN-SUFFIX,blogger.com
|
||||
- DOMAIN-SUFFIX,getoutline.org
|
||||
- DOMAIN-SUFFIX,gvt0.com
|
||||
- DOMAIN-SUFFIX,gvt1.com
|
||||
- DOMAIN-SUFFIX,gvt3.com
|
||||
- DOMAIN-SUFFIX,xn--ngstr-lra8j.com
|
||||
- DOMAIN-KEYWORD,google
|
||||
- DOMAIN-KEYWORD,blogspot
|
||||
# > Microsoft
|
||||
- DOMAIN-SUFFIX,onedrive.live.com
|
||||
- DOMAIN,az416426.vo.msecnd.net
|
||||
- DOMAIN,az668014.vo.msecnd.net
|
||||
# > Facebook
|
||||
- DOMAIN-SUFFIX,cdninstagram.com
|
||||
- DOMAIN-SUFFIX,fb.com
|
||||
- DOMAIN-SUFFIX,fb.me
|
||||
- DOMAIN-SUFFIX,fbaddins.com
|
||||
- DOMAIN-SUFFIX,fbcdn.net
|
||||
- DOMAIN-SUFFIX,fbsbx.com
|
||||
- DOMAIN-SUFFIX,fbworkmail.com
|
||||
- DOMAIN-SUFFIX,instagram.com
|
||||
- DOMAIN-SUFFIX,m.me
|
||||
- DOMAIN-SUFFIX,messenger.com
|
||||
- DOMAIN-SUFFIX,oculus.com
|
||||
- DOMAIN-SUFFIX,oculuscdn.com
|
||||
- DOMAIN-SUFFIX,rocksdb.org
|
||||
- DOMAIN-SUFFIX,whatsapp.com
|
||||
- DOMAIN-SUFFIX,whatsapp.net
|
||||
- DOMAIN-KEYWORD,facebook
|
||||
# > Twitter
|
||||
- DOMAIN-SUFFIX,pscp.tv
|
||||
- DOMAIN-SUFFIX,periscope.tv
|
||||
- DOMAIN-SUFFIX,t.co
|
||||
- DOMAIN-SUFFIX,twimg.co
|
||||
- DOMAIN-SUFFIX,twimg.com
|
||||
- DOMAIN-SUFFIX,twitpic.com
|
||||
- DOMAIN-SUFFIX,vine.co
|
||||
- DOMAIN-KEYWORD,twitter
|
||||
# > Telegram
|
||||
- DOMAIN-SUFFIX,telegra.ph
|
||||
- DOMAIN-SUFFIX,telegram.org
|
||||
- IP-CIDR,91.108.4.0/22,no-resolve
|
||||
- IP-CIDR,91.108.8.0/22,no-resolve
|
||||
- IP-CIDR,91.108.12.0/22,no-resolve
|
||||
- IP-CIDR,91.108.16.0/22,no-resolve
|
||||
- IP-CIDR,91.108.56.0/22,no-resolve
|
||||
- IP-CIDR,149.154.160.0/20,no-resolve
|
||||
- IP-CIDR,2001:b28:f23d::/48,no-resolve
|
||||
- IP-CIDR,2001:b28:f23f::/48,no-resolve
|
||||
- IP-CIDR,2001:67c:4e8::/48,no-resolve
|
||||
# > Line
|
||||
- DOMAIN-SUFFIX,line.me
|
||||
- DOMAIN-SUFFIX,line-apps.com
|
||||
- DOMAIN-SUFFIX,line-scdn.net
|
||||
- DOMAIN-SUFFIX,naver.jp
|
||||
- IP-CIDR,103.2.30.0/23,no-resolve
|
||||
- IP-CIDR,125.209.208.0/20,no-resolve
|
||||
- IP-CIDR,147.92.128.0/17,no-resolve
|
||||
- IP-CIDR,203.104.144.0/21,no-resolve
|
||||
# > Akamai
|
||||
- DOMAIN,a248.e.akamai.net
|
||||
- DOMAIN,a771.dscq.akamai.net
|
||||
# > Amazon CloudFront
|
||||
- DOMAIN,d3c33hcgiwev3.cloudfront.net
|
||||
# > Others
|
||||
- DOMAIN-SUFFIX,4shared.com
|
||||
- DOMAIN-SUFFIX,9cache.com
|
||||
- DOMAIN-SUFFIX,9gag.com
|
||||
- DOMAIN-SUFFIX,abc.com
|
||||
- DOMAIN-SUFFIX,abc.net.au
|
||||
- DOMAIN-SUFFIX,abebooks.com
|
||||
- DOMAIN-SUFFIX,amazon.co.jp
|
||||
- DOMAIN-SUFFIX,apigee.com
|
||||
- DOMAIN-SUFFIX,apkcombo.com
|
||||
- DOMAIN-SUFFIX,apk-dl.com
|
||||
- DOMAIN-SUFFIX,apkfind.com
|
||||
- DOMAIN-SUFFIX,apkmirror.com
|
||||
- DOMAIN-SUFFIX,apkmonk.com
|
||||
- DOMAIN-SUFFIX,apkpure.com
|
||||
- DOMAIN-SUFFIX,aptoide.com
|
||||
- DOMAIN-SUFFIX,archive.is
|
||||
- DOMAIN-SUFFIX,archive.org
|
||||
- DOMAIN-SUFFIX,archiveofourown.org
|
||||
- DOMAIN-SUFFIX,arte.tv
|
||||
- DOMAIN-SUFFIX,artstation.com
|
||||
- DOMAIN-SUFFIX,arukas.io
|
||||
- DOMAIN-SUFFIX,ask.com
|
||||
- DOMAIN-SUFFIX,avg.com
|
||||
- DOMAIN-SUFFIX,avgle.com
|
||||
- DOMAIN-SUFFIX,badoo.com
|
||||
- DOMAIN-SUFFIX,bandwagonhost.com
|
||||
- DOMAIN-SUFFIX,bangkokpost.com
|
||||
- DOMAIN-SUFFIX,bbc.com
|
||||
- DOMAIN-SUFFIX,behance.net
|
||||
- DOMAIN-SUFFIX,bibox.com
|
||||
- DOMAIN-SUFFIX,biggo.com.tw
|
||||
- DOMAIN-SUFFIX,binance.com
|
||||
- DOMAIN-SUFFIX,bitcointalk.org
|
||||
- DOMAIN-SUFFIX,bitfinex.com
|
||||
- DOMAIN-SUFFIX,bitmex.com
|
||||
- DOMAIN-SUFFIX,bit-z.com
|
||||
- DOMAIN-SUFFIX,bloglovin.com
|
||||
- DOMAIN-SUFFIX,bloomberg.cn
|
||||
- DOMAIN-SUFFIX,bloomberg.com
|
||||
- DOMAIN-SUFFIX,blubrry.com
|
||||
- DOMAIN-SUFFIX,book.com.tw
|
||||
- DOMAIN-SUFFIX,booklive.jp
|
||||
- DOMAIN-SUFFIX,books.com.tw
|
||||
- DOMAIN-SUFFIX,boslife.net
|
||||
- DOMAIN-SUFFIX,box.com
|
||||
- DOMAIN-SUFFIX,brave.com
|
||||
- DOMAIN-SUFFIX,businessinsider.com
|
||||
- DOMAIN-SUFFIX,buzzfeed.com
|
||||
- DOMAIN-SUFFIX,bwh1.net
|
||||
- DOMAIN-SUFFIX,castbox.fm
|
||||
- DOMAIN-SUFFIX,cbc.ca
|
||||
- DOMAIN-SUFFIX,cdw.com
|
||||
- DOMAIN-SUFFIX,change.org
|
||||
- DOMAIN-SUFFIX,channelnewsasia.com
|
||||
- DOMAIN-SUFFIX,ck101.com
|
||||
- DOMAIN-SUFFIX,clarionproject.org
|
||||
- DOMAIN-SUFFIX,cloudcone.com
|
||||
- DOMAIN-SUFFIX,clyp.it
|
||||
- DOMAIN-SUFFIX,cna.com.tw
|
||||
- DOMAIN-SUFFIX,comparitech.com
|
||||
- DOMAIN-SUFFIX,conoha.jp
|
||||
- DOMAIN-SUFFIX,crucial.com
|
||||
- DOMAIN-SUFFIX,cts.com.tw
|
||||
- DOMAIN-SUFFIX,cw.com.tw
|
||||
- DOMAIN-SUFFIX,cyberctm.com
|
||||
- DOMAIN-SUFFIX,dailymotion.com
|
||||
- DOMAIN-SUFFIX,dailyview.tw
|
||||
- DOMAIN-SUFFIX,daum.net
|
||||
- DOMAIN-SUFFIX,daumcdn.net
|
||||
- DOMAIN-SUFFIX,dcard.tw
|
||||
- DOMAIN-SUFFIX,deadline.com
|
||||
- DOMAIN-SUFFIX,deepdiscount.com
|
||||
- DOMAIN-SUFFIX,depositphotos.com
|
||||
- DOMAIN-SUFFIX,deviantart.com
|
||||
- DOMAIN-SUFFIX,disconnect.me
|
||||
- DOMAIN-SUFFIX,discordapp.com
|
||||
- DOMAIN-SUFFIX,discordapp.net
|
||||
- DOMAIN-SUFFIX,disqus.com
|
||||
- DOMAIN-SUFFIX,dlercloud.com
|
||||
- DOMAIN-SUFFIX,dmhy.org
|
||||
- DOMAIN-SUFFIX,dns2go.com
|
||||
- DOMAIN-SUFFIX,dowjones.com
|
||||
- DOMAIN-SUFFIX,dropbox.com
|
||||
- DOMAIN-SUFFIX,dropboxapi.com
|
||||
- DOMAIN-SUFFIX,dropboxusercontent.com
|
||||
- DOMAIN-SUFFIX,duckduckgo.com
|
||||
- DOMAIN-SUFFIX,duyaoss.com
|
||||
- DOMAIN-SUFFIX,dw.com
|
||||
- DOMAIN-SUFFIX,dynu.com
|
||||
- DOMAIN-SUFFIX,earthcam.com
|
||||
- DOMAIN-SUFFIX,ebookservice.tw
|
||||
- DOMAIN-SUFFIX,economist.com
|
||||
- DOMAIN-SUFFIX,edgecastcdn.net
|
||||
- DOMAIN-SUFFIX,edu
|
||||
- DOMAIN-SUFFIX,edx-cdn.org
|
||||
- DOMAIN-SUFFIX,elpais.com
|
||||
- DOMAIN-SUFFIX,enanyang.my
|
||||
- DOMAIN-SUFFIX,encyclopedia.com
|
||||
- DOMAIN-SUFFIX,esoir.be
|
||||
- DOMAIN-SUFFIX,etherscan.io
|
||||
- DOMAIN-SUFFIX,euronews.com
|
||||
- DOMAIN-SUFFIX,evozi.com
|
||||
- DOMAIN-SUFFIX,exblog.jp
|
||||
- DOMAIN-SUFFIX,feeder.co
|
||||
- DOMAIN-SUFFIX,feedly.com
|
||||
- DOMAIN-SUFFIX,feedx.net
|
||||
- DOMAIN-SUFFIX,firech.at
|
||||
- DOMAIN-SUFFIX,flickr.com
|
||||
- DOMAIN-SUFFIX,flipboard.com
|
||||
- DOMAIN-SUFFIX,flitto.com
|
||||
- DOMAIN-SUFFIX,foreignpolicy.com
|
||||
- DOMAIN-SUFFIX,fortawesome.com
|
||||
- DOMAIN-SUFFIX,freetls.fastly.net
|
||||
- DOMAIN-SUFFIX,friday.tw
|
||||
- DOMAIN-SUFFIX,ft.com
|
||||
- DOMAIN-SUFFIX,ftchinese.com
|
||||
- DOMAIN-SUFFIX,ftimg.net
|
||||
- DOMAIN-SUFFIX,gate.io
|
||||
- DOMAIN-SUFFIX,getlantern.org
|
||||
- DOMAIN-SUFFIX,getsync.com
|
||||
- DOMAIN-SUFFIX,globalvoices.org
|
||||
- DOMAIN-SUFFIX,goo.ne.jp
|
||||
- DOMAIN-SUFFIX,goodreads.com
|
||||
- DOMAIN-SUFFIX,gov
|
||||
- DOMAIN-SUFFIX,gov.tw
|
||||
- DOMAIN-SUFFIX,greatfire.org
|
||||
- DOMAIN-SUFFIX,gumroad.com
|
||||
- DOMAIN-SUFFIX,hbg.com
|
||||
- DOMAIN-SUFFIX,heroku.com
|
||||
- DOMAIN-SUFFIX,hightail.com
|
||||
- DOMAIN-SUFFIX,hk01.com
|
||||
- DOMAIN-SUFFIX,hkbf.org
|
||||
- DOMAIN-SUFFIX,hkbookcity.com
|
||||
- DOMAIN-SUFFIX,hkej.com
|
||||
- DOMAIN-SUFFIX,hket.com
|
||||
- DOMAIN-SUFFIX,hootsuite.com
|
||||
- DOMAIN-SUFFIX,hudson.org
|
||||
- DOMAIN-SUFFIX,hyread.com.tw
|
||||
- DOMAIN-SUFFIX,ibtimes.com
|
||||
- DOMAIN-SUFFIX,i-cable.com
|
||||
- DOMAIN-SUFFIX,icij.org
|
||||
- DOMAIN-SUFFIX,icoco.com
|
||||
- DOMAIN-SUFFIX,imgur.com
|
||||
- DOMAIN-SUFFIX,initiummall.com
|
||||
- DOMAIN-SUFFIX,inoreader.com
|
||||
- DOMAIN-SUFFIX,insecam.org
|
||||
- DOMAIN-SUFFIX,ipfs.io
|
||||
- DOMAIN-SUFFIX,issuu.com
|
||||
- DOMAIN-SUFFIX,istockphoto.com
|
||||
- DOMAIN-SUFFIX,japantimes.co.jp
|
||||
- DOMAIN-SUFFIX,jiji.com
|
||||
- DOMAIN-SUFFIX,jinx.com
|
||||
- DOMAIN-SUFFIX,jkforum.net
|
||||
- DOMAIN-SUFFIX,joinmastodon.org
|
||||
- DOMAIN-SUFFIX,justmysocks.net
|
||||
- DOMAIN-SUFFIX,justpaste.it
|
||||
- DOMAIN-SUFFIX,kadokawa.co.jp
|
||||
- DOMAIN-SUFFIX,kakao.com
|
||||
- DOMAIN-SUFFIX,kakaocorp.com
|
||||
- DOMAIN-SUFFIX,kik.com
|
||||
- DOMAIN-SUFFIX,kingkong.com.tw
|
||||
- DOMAIN-SUFFIX,kobo.com
|
||||
- DOMAIN-SUFFIX,kobobooks.com
|
||||
- DOMAIN-SUFFIX,kodingen.com
|
||||
- DOMAIN-SUFFIX,lemonde.fr
|
||||
- DOMAIN-SUFFIX,lepoint.fr
|
||||
- DOMAIN-SUFFIX,lihkg.com
|
||||
- DOMAIN-SUFFIX,limbopro.xyz
|
||||
- DOMAIN-SUFFIX,listennotes.com
|
||||
- DOMAIN-SUFFIX,livestream.com
|
||||
- DOMAIN-SUFFIX,logimg.jp
|
||||
- DOMAIN-SUFFIX,logmein.com
|
||||
- DOMAIN-SUFFIX,mail.ru
|
||||
- DOMAIN-SUFFIX,mailchimp.com
|
||||
- DOMAIN-SUFFIX,marc.info
|
||||
- DOMAIN-SUFFIX,matters.news
|
||||
- DOMAIN-SUFFIX,maying.co
|
||||
- DOMAIN-SUFFIX,medium.com
|
||||
- DOMAIN-SUFFIX,mega.nz
|
||||
- DOMAIN-SUFFIX,mergersandinquisitions.com
|
||||
- DOMAIN-SUFFIX,mil
|
||||
- DOMAIN-SUFFIX,mingpao.com
|
||||
- DOMAIN-SUFFIX,mixi.jp
|
||||
- DOMAIN-SUFFIX,mobile01.com
|
||||
- DOMAIN-SUFFIX,mubi.com
|
||||
- DOMAIN-SUFFIX,myspace.com
|
||||
- DOMAIN-SUFFIX,myspacecdn.com
|
||||
- DOMAIN-SUFFIX,nanyang.com
|
||||
- DOMAIN-SUFFIX,nationalinterest.org
|
||||
- DOMAIN-SUFFIX,naver.com
|
||||
- DOMAIN-SUFFIX,neowin.net
|
||||
- DOMAIN-SUFFIX,newstapa.org
|
||||
- DOMAIN-SUFFIX,nexitally.com
|
||||
- DOMAIN-SUFFIX,nhk.or.jp
|
||||
- DOMAIN-SUFFIX,nii.ac.jp
|
||||
- DOMAIN-SUFFIX,nikkei.com
|
||||
- DOMAIN-SUFFIX,nofile.io
|
||||
- DOMAIN-SUFFIX,notion.so
|
||||
- DOMAIN-SUFFIX,now.com
|
||||
- DOMAIN-SUFFIX,nrk.no
|
||||
- DOMAIN-SUFFIX,nuget.org
|
||||
- DOMAIN-SUFFIX,nyaa.si
|
||||
- DOMAIN-SUFFIX,nyaa.si
|
||||
- DOMAIN-SUFFIX,nyt.com
|
||||
- DOMAIN-SUFFIX,nytchina.com
|
||||
- DOMAIN-SUFFIX,nytcn.me
|
||||
- DOMAIN-SUFFIX,nytco.com
|
||||
- DOMAIN-SUFFIX,nytimes.com
|
||||
- DOMAIN-SUFFIX,nytimg.com
|
||||
- DOMAIN-SUFFIX,nytlog.com
|
||||
- DOMAIN-SUFFIX,nytstyle.com
|
||||
- DOMAIN-SUFFIX,ok.ru
|
||||
- DOMAIN-SUFFIX,okex.com
|
||||
- DOMAIN-SUFFIX,on.cc
|
||||
- DOMAIN-SUFFIX,orientaldaily.com.my
|
||||
- DOMAIN-SUFFIX,overcast.fm
|
||||
- DOMAIN-SUFFIX,paltalk.com
|
||||
- DOMAIN-SUFFIX,parsevideo.com
|
||||
- DOMAIN-SUFFIX,pawoo.net
|
||||
- DOMAIN-SUFFIX,pbxes.com
|
||||
- DOMAIN-SUFFIX,pcdvd.com.tw
|
||||
- DOMAIN-SUFFIX,pchome.com.tw
|
||||
- DOMAIN-SUFFIX,pcloud.com
|
||||
- DOMAIN-SUFFIX,picacomic.com
|
||||
- DOMAIN-SUFFIX,pinimg.com
|
||||
- DOMAIN-SUFFIX,pixiv.net
|
||||
- DOMAIN-SUFFIX,player.fm
|
||||
- DOMAIN-SUFFIX,plurk.com
|
||||
- DOMAIN-SUFFIX,po18.tw
|
||||
- DOMAIN-SUFFIX,potato.im
|
||||
- DOMAIN-SUFFIX,potatso.com
|
||||
- DOMAIN-SUFFIX,prism-break.org
|
||||
- DOMAIN-SUFFIX,proxifier.com
|
||||
- DOMAIN-SUFFIX,pt.im
|
||||
- DOMAIN-SUFFIX,pts.org.tw
|
||||
- DOMAIN-SUFFIX,pubu.com.tw
|
||||
- DOMAIN-SUFFIX,pubu.tw
|
||||
- DOMAIN-SUFFIX,pureapk.com
|
||||
- DOMAIN-SUFFIX,quora.com
|
||||
- DOMAIN-SUFFIX,quoracdn.net
|
||||
- DOMAIN-SUFFIX,qz.com
|
||||
- DOMAIN-SUFFIX,rakuten.co.jp
|
||||
- DOMAIN-SUFFIX,rarbgprx.org
|
||||
- DOMAIN-SUFFIX,readingtimes.com.tw
|
||||
- DOMAIN-SUFFIX,readmoo.com
|
||||
- DOMAIN-SUFFIX,redbubble.com
|
||||
- DOMAIN-SUFFIX,redd.it
|
||||
- DOMAIN-SUFFIX,reddit.com
|
||||
- DOMAIN-SUFFIX,redditmedia.com
|
||||
- DOMAIN-SUFFIX,resilio.com
|
||||
- DOMAIN-SUFFIX,reuters.com
|
||||
- DOMAIN-SUFFIX,reutersmedia.net
|
||||
- DOMAIN-SUFFIX,rfi.fr
|
||||
- DOMAIN-SUFFIX,rixcloud.com
|
||||
- DOMAIN-SUFFIX,roadshow.hk
|
||||
- DOMAIN-SUFFIX,rsshub.app
|
||||
- DOMAIN-SUFFIX,scmp.com
|
||||
- DOMAIN-SUFFIX,scribd.com
|
||||
- DOMAIN-SUFFIX,seatguru.com
|
||||
- DOMAIN-SUFFIX,shadowsocks.org
|
||||
- DOMAIN-SUFFIX,shindanmaker.com
|
||||
- DOMAIN-SUFFIX,shopee.tw
|
||||
- DOMAIN-SUFFIX,slideshare.net
|
||||
- DOMAIN-SUFFIX,softfamous.com
|
||||
- DOMAIN-SUFFIX,ssrcloud.org
|
||||
- DOMAIN-SUFFIX,startpage.com
|
||||
- DOMAIN-SUFFIX,steamcommunity.com
|
||||
- DOMAIN-SUFFIX,steemit.com
|
||||
- DOMAIN-SUFFIX,steemitwallet.com
|
||||
- DOMAIN-SUFFIX,straitstimes.com
|
||||
- DOMAIN-SUFFIX,streema.com
|
||||
- DOMAIN-SUFFIX,t66y.com
|
||||
- DOMAIN-SUFFIX,tapatalk.com
|
||||
- DOMAIN-SUFFIX,teco-hk.org
|
||||
- DOMAIN-SUFFIX,teco-mo.org
|
||||
- DOMAIN-SUFFIX,teddysun.com
|
||||
- DOMAIN-SUFFIX,textnow.me
|
||||
- DOMAIN-SUFFIX,theguardian.com
|
||||
- DOMAIN-SUFFIX,theinitium.com
|
||||
- DOMAIN-SUFFIX,themoviedb.org
|
||||
- DOMAIN-SUFFIX,thetvdb.com
|
||||
- DOMAIN-SUFFIX,tineye.com
|
||||
- DOMAIN-SUFFIX,tiny.cc
|
||||
- DOMAIN-SUFFIX,tinyurl.com
|
||||
- DOMAIN-SUFFIX,torproject.org
|
||||
- DOMAIN-SUFFIX,tumblr.com
|
||||
- DOMAIN-SUFFIX,turbobit.net
|
||||
- DOMAIN-SUFFIX,tutanota.com
|
||||
- DOMAIN-SUFFIX,tvboxnow.com
|
||||
- DOMAIN-SUFFIX,udn.com
|
||||
- DOMAIN-SUFFIX,unseen.is
|
||||
- DOMAIN-SUFFIX,upmedia.mg
|
||||
- DOMAIN-SUFFIX,uptodown.com
|
||||
- DOMAIN-SUFFIX,urbandictionary.com
|
||||
- DOMAIN-SUFFIX,ustream.tv
|
||||
- DOMAIN-SUFFIX,uwants.com
|
||||
- DOMAIN-SUFFIX,v2ray.com
|
||||
- DOMAIN-SUFFIX,viber.com
|
||||
- DOMAIN-SUFFIX,videopress.com
|
||||
- DOMAIN-SUFFIX,vimeo.com
|
||||
- DOMAIN-SUFFIX,voachinese.com
|
||||
- DOMAIN-SUFFIX,voanews.com
|
||||
- DOMAIN-SUFFIX,voxer.com
|
||||
- DOMAIN-SUFFIX,vzw.com
|
||||
- DOMAIN-SUFFIX,w3schools.com
|
||||
- DOMAIN-SUFFIX,washingtonpost.com
|
||||
- DOMAIN-SUFFIX,wattpad.com
|
||||
- DOMAIN-SUFFIX,whoer.net
|
||||
- DOMAIN-SUFFIX,wikileaks.org
|
||||
- DOMAIN-SUFFIX,wikimapia.org
|
||||
- DOMAIN-SUFFIX,wikimedia.org
|
||||
- DOMAIN-SUFFIX,wikinews.org
|
||||
- DOMAIN-SUFFIX,wikipedia.org
|
||||
- DOMAIN-SUFFIX,wikiquote.org
|
||||
- DOMAIN-SUFFIX,wikiwand.com
|
||||
- DOMAIN-SUFFIX,winudf.com
|
||||
- DOMAIN-SUFFIX,wire.com
|
||||
- DOMAIN-SUFFIX,wn.com
|
||||
- DOMAIN-SUFFIX,wordpress.com
|
||||
- DOMAIN-SUFFIX,workflow.is
|
||||
- DOMAIN-SUFFIX,worldcat.org
|
||||
- DOMAIN-SUFFIX,wsj.com
|
||||
- DOMAIN-SUFFIX,wsj.net
|
||||
- DOMAIN-SUFFIX,xhamster.com
|
||||
- DOMAIN-SUFFIX,xn--90wwvt03e.com
|
||||
- DOMAIN-SUFFIX,xn--i2ru8q2qg.com
|
||||
- DOMAIN-SUFFIX,xnxx.com
|
||||
- DOMAIN-SUFFIX,xvideos.com
|
||||
- DOMAIN-SUFFIX,yahoo.com
|
||||
- DOMAIN-SUFFIX,yandex.ru
|
||||
- DOMAIN-SUFFIX,ycombinator.com
|
||||
- DOMAIN-SUFFIX,yesasia.com
|
||||
- DOMAIN-SUFFIX,yes-news.com
|
||||
- DOMAIN-SUFFIX,yomiuri.co.jp
|
||||
- DOMAIN-SUFFIX,you-get.org
|
||||
- DOMAIN-SUFFIX,zaobao.com
|
||||
- DOMAIN-SUFFIX,zb.com
|
||||
- DOMAIN-SUFFIX,zello.com
|
||||
- DOMAIN-SUFFIX,zeronet.io
|
||||
- DOMAIN-SUFFIX,zoom.us
|
||||
|
||||
- DOMAIN,cc.tvbs.com.tw
|
||||
- DOMAIN,ocsp.int-x3.letsencrypt.org
|
||||
- DOMAIN,payments-jp.amazon.com
|
||||
- DOMAIN,s3-ap-northeast-1.amazonaws.com
|
||||
- DOMAIN,s3-ap-southeast-2.amazonaws.com
|
||||
- DOMAIN,search.avira.com
|
||||
|
||||
- DOMAIN-KEYWORD,github
|
||||
- DOMAIN-KEYWORD,jav
|
||||
- DOMAIN-KEYWORD,pinterest
|
||||
- DOMAIN-KEYWORD,porn
|
||||
|
||||
# (IP Blackhole)
|
||||
# > Google
|
||||
- DOMAIN-SUFFIX,abc.xyz
|
||||
- DOMAIN-SUFFIX,advertisercommunity.com
|
||||
- DOMAIN-SUFFIX,ampproject.org
|
||||
- DOMAIN-SUFFIX,android.com
|
||||
- DOMAIN-SUFFIX,androidify.com
|
||||
- DOMAIN-SUFFIX,dialogflow.com
|
||||
- DOMAIN-SUFFIX,autodraw.com
|
||||
- DOMAIN-SUFFIX,capitalg.com
|
||||
- DOMAIN-SUFFIX,certificate-transparency.org
|
||||
- DOMAIN-SUFFIX,chrome.com
|
||||
- DOMAIN-SUFFIX,chromeexperiments.com
|
||||
- DOMAIN-SUFFIX,chromestatus.com
|
||||
- DOMAIN-SUFFIX,chromium.org
|
||||
- DOMAIN-SUFFIX,creativelab5.com
|
||||
- DOMAIN-SUFFIX,debug.com
|
||||
- DOMAIN-SUFFIX,deepmind.com
|
||||
- DOMAIN-SUFFIX,firebaseio.com
|
||||
- DOMAIN-SUFFIX,getmdl.io
|
||||
- DOMAIN-SUFFIX,ggpht.com
|
||||
- DOMAIN-SUFFIX,gmail.com
|
||||
- DOMAIN-SUFFIX,gmodules.com
|
||||
- DOMAIN-SUFFIX,godoc.org
|
||||
- DOMAIN-SUFFIX,golang.org
|
||||
- DOMAIN-SUFFIX,gstatic.com
|
||||
- DOMAIN-SUFFIX,gv.com
|
||||
- DOMAIN-SUFFIX,gwtproject.org
|
||||
- DOMAIN-SUFFIX,itasoftware.com
|
||||
- DOMAIN-SUFFIX,madewithcode.com
|
||||
- DOMAIN-SUFFIX,material.io
|
||||
- DOMAIN-SUFFIX,page.link
|
||||
- DOMAIN-SUFFIX,polymer-project.org
|
||||
- DOMAIN-SUFFIX,admin.recaptcha.net
|
||||
- DOMAIN-SUFFIX,recaptcha.net
|
||||
- DOMAIN-SUFFIX,shattered.io
|
||||
- DOMAIN-SUFFIX,synergyse.com
|
||||
- DOMAIN-SUFFIX,telephony.goog
|
||||
- DOMAIN-SUFFIX,tensorflow.org
|
||||
- DOMAIN-SUFFIX,tfhub.dev
|
||||
- DOMAIN-SUFFIX,tiltbrush.com
|
||||
- DOMAIN-SUFFIX,waveprotocol.org
|
||||
- DOMAIN-SUFFIX,waymo.com
|
||||
- DOMAIN-SUFFIX,webmproject.org
|
||||
- DOMAIN-SUFFIX,webrtc.org
|
||||
- DOMAIN-SUFFIX,whatbrowser.org
|
||||
- DOMAIN-SUFFIX,widevine.com
|
||||
- DOMAIN-SUFFIX,x.company
|
||||
- DOMAIN-SUFFIX,youtu.be
|
||||
- DOMAIN-SUFFIX,yt.be
|
||||
- DOMAIN-SUFFIX,ytimg.com
|
||||
# > Telegram
|
||||
- DOMAIN-SUFFIX,t.me
|
||||
- DOMAIN-SUFFIX,tdesktop.com
|
||||
- DOMAIN-SUFFIX,telegram.me
|
||||
- DOMAIN-SUFFIX,telesco.pe
|
||||
# > Others
|
||||
- DOMAIN-SUFFIX,noxinfluencer.com
|
||||
- DOMAIN-SUFFIX,smartmailcloud.com
|
||||
- DOMAIN-SUFFIX,weebly.com
|
||||
|
||||
# (Region-Restricted Access Denied)
|
||||
# ---(Apple)---
|
||||
# > Apple URL Shortener
|
||||
- DOMAIN-SUFFIX,appsto.re
|
||||
# > iBooks Store download
|
||||
- DOMAIN,books.itunes.apple.com
|
||||
# > App Store Preview
|
||||
- DOMAIN,apps.apple.com
|
||||
- DOMAIN,itunes.apple.com
|
||||
# > Spotlight
|
||||
- DOMAIN,api-glb-sea.smoot.apple.com
|
||||
# > Look Up
|
||||
- DOMAIN,lookup-api.apple.com
|
||||
- DOMAIN-SUFFIX,smoot.apple.com
|
||||
# > Apple Music Web
|
||||
- DOMAIN,beta.music.apple.com
|
||||
# ------
|
||||
# > Others
|
||||
- DOMAIN-SUFFIX,bing.com
|
||||
- DOMAIN-SUFFIX,cccat.io
|
||||
- DOMAIN-SUFFIX,ifixit.com
|
||||
- DOMAIN-SUFFIX,mangakakalot.com
|
||||
- DOMAIN-SUFFIX,shopeemobile.com
|
||||
|
||||
# (Network Jitter)
|
||||
# > Fix download or update is stuck in App Store,and when change the Apple ID region,the payment information can be selected by none.
|
||||
- DOMAIN-KEYWORD,buy.itunes.apple.com
|
||||
# - DOMAIN-SUFFIX,evernote.com
|
||||
- DOMAIN-SUFFIX,inkbunny.net
|
||||
- DOMAIN-SUFFIX,metapix.net
|
||||
- DOMAIN-SUFFIX,s3.amazonaws.com
|
||||
- DOMAIN-SUFFIX,zaobao.com.sg
|
||||
@ -0,0 +1,46 @@
|
||||
payload:
|
||||
# IP Blackhole
|
||||
# > Facebook
|
||||
- '31.13.24.0/21'
|
||||
- '31.13.64.0/18'
|
||||
- '45.64.40.0/22'
|
||||
- '66.220.144.0/20'
|
||||
- '69.63.176.0/20'
|
||||
- '69.171.224.0/19'
|
||||
- '74.119.76.0/22'
|
||||
- '103.4.96.0/22'
|
||||
- '129.134.0.0/17'
|
||||
- '157.240.0.0/17'
|
||||
- '173.252.64.0/19'
|
||||
- '173.252.96.0/19'
|
||||
- '179.60.192.0/22'
|
||||
- '185.60.216.0/22'
|
||||
- '204.15.20.0/22'
|
||||
# > Google
|
||||
- '35.190.247.0/24'
|
||||
- '64.233.160.0/19'
|
||||
- '66.102.0.0/20'
|
||||
- '66.249.80.0/20'
|
||||
- '72.14.192.0/18'
|
||||
- '74.125.0.0/16'
|
||||
- '108.177.8.0/21'
|
||||
- '172.217.0.0/16'
|
||||
- '173.194.0.0/16'
|
||||
- '209.85.128.0/17'
|
||||
- '216.58.192.0/19'
|
||||
- '216.239.32.0/19'
|
||||
# > Twitter
|
||||
- '69.195.160.0/19'
|
||||
- '104.244.42.0/21'
|
||||
- '192.133.76.0/22'
|
||||
- '199.16.156.0/22'
|
||||
- '199.59.148.0/22'
|
||||
- '199.96.56.0/21'
|
||||
- '202.160.128.0/22'
|
||||
- '209.237.192.0/19'
|
||||
# > Wikimedia
|
||||
- '91.198.174.0/24'
|
||||
- '103.102.166.0/24'
|
||||
- '185.15.56.0/22'
|
||||
- '198.35.26.0/23'
|
||||
- '208.80.152.0/22'
|
||||
@ -0,0 +1,255 @@
|
||||
payload:
|
||||
# Streaming Media
|
||||
# (Podcast)
|
||||
# > Himalaya
|
||||
# USER-AGENT,Himalaya*
|
||||
- DOMAIN-SUFFIX,himalaya.com
|
||||
# (Music)
|
||||
# > Deezer
|
||||
# USER-AGENT,Deezer*
|
||||
- DOMAIN-SUFFIX,deezer.com
|
||||
- DOMAIN-SUFFIX,dzcdn.net
|
||||
# > JOOX
|
||||
# USER-AGENT,WeMusic*
|
||||
# USER-AGENT,JOOX*
|
||||
- DOMAIN-SUFFIX,joox.com
|
||||
- DOMAIN-KEYWORD,jooxweb-api
|
||||
# > KKBOX
|
||||
- DOMAIN-SUFFIX,kkbox.com
|
||||
- DOMAIN-SUFFIX,kkbox.com.tw
|
||||
- DOMAIN-SUFFIX,kfs.io
|
||||
# > Pandora
|
||||
# USER-AGENT,Pandora*
|
||||
- DOMAIN-SUFFIX,pandora.com
|
||||
# > SoundCloud
|
||||
# USER-AGENT,SoundCloud*
|
||||
- DOMAIN-SUFFIX,p-cdn.us
|
||||
- DOMAIN-SUFFIX,sndcdn.com
|
||||
- DOMAIN-SUFFIX,soundcloud.com
|
||||
# > Spotify
|
||||
# USER-AGENT,Spotify*
|
||||
- DOMAIN-SUFFIX,pscdn.co
|
||||
- DOMAIN-SUFFIX,scdn.co
|
||||
- DOMAIN-SUFFIX,spotify.com
|
||||
- DOMAIN-SUFFIX,spoti.fi
|
||||
- DOMAIN-KEYWORD,spotify.com
|
||||
- DOMAIN-KEYWORD,-spotify-com
|
||||
# > TIDAL
|
||||
# USER-AGENT,TIDAL*
|
||||
- DOMAIN-SUFFIX,tidal.com
|
||||
# > YouTubeMusic
|
||||
# USER-AGENT,com.google.ios.youtubemusic*
|
||||
# USER-AGENT,YouTubeMusic*
|
||||
# (Video)
|
||||
# > AbemaTV
|
||||
# USER-AGENT,AbemaTV*
|
||||
- DOMAIN-SUFFIX,abema.io
|
||||
- DOMAIN-SUFFIX,abema.tv
|
||||
- DOMAIN-SUFFIX,ameba.jp
|
||||
- DOMAIN-SUFFIX,hayabusa.io
|
||||
- DOMAIN-KEYWORD,abematv.akamaized.net
|
||||
# > All 4
|
||||
# USER-AGENT,All4*
|
||||
- DOMAIN-SUFFIX,c4assets.com
|
||||
- DOMAIN-SUFFIX,channel4.com
|
||||
# > Amazon Prime Video
|
||||
# USER-AGENT,InstantVideo.US*
|
||||
# USER-AGENT,Prime%20Video*
|
||||
- DOMAIN-SUFFIX,aiv-cdn.net
|
||||
- DOMAIN-SUFFIX,aiv-delivery.net
|
||||
- DOMAIN-SUFFIX,amazonvideo.com
|
||||
- DOMAIN-SUFFIX,primevideo.com
|
||||
- DOMAIN,avodmp4s3ww-a.akamaihd.net
|
||||
- DOMAIN,d25xi40x97liuc.cloudfront.net
|
||||
- DOMAIN,dmqdd6hw24ucf.cloudfront.net
|
||||
- DOMAIN,dmqdd6hw24ucf.cloudfront.net
|
||||
- DOMAIN,d22qjgkvxw22r6.cloudfront.net
|
||||
- DOMAIN,d1v5ir2lpwr8os.cloudfront.net
|
||||
- DOMAIN-KEYWORD,avoddashs
|
||||
# > Apple TV
|
||||
- DOMAIN-SUFFIX,tv.apple.com
|
||||
- DOMAIN,hls.itunes.apple.com
|
||||
- DOMAIN,hls-amt.itunes.apple.com
|
||||
- DOMAIN,play-edge.itunes.apple.com
|
||||
# > Bahamut
|
||||
# USER-AGENT,Anime*
|
||||
- DOMAIN-SUFFIX,bahamut.com.tw
|
||||
- DOMAIN-SUFFIX,gamer.com.tw
|
||||
- DOMAIN,gamer-cds.cdn.hinet.net
|
||||
- DOMAIN,gamer2-cds.cdn.hinet.net
|
||||
# > BBC iPlayer
|
||||
# USER-AGENT,BBCiPlayer*
|
||||
- DOMAIN-SUFFIX,bbc.co.uk
|
||||
- DOMAIN-SUFFIX,bbci.co.uk
|
||||
- DOMAIN-KEYWORD,bbcfmt
|
||||
- DOMAIN-KEYWORD,uk-live
|
||||
# > DAZN
|
||||
# USER-AGENT,DAZN*
|
||||
- DOMAIN-SUFFIX,dazn.com
|
||||
- DOMAIN-SUFFIX,dazn-api.com
|
||||
- DOMAIN,d151l6v8er5bdm.cloudfront.net
|
||||
- DOMAIN-KEYWORD,voddazn
|
||||
# > Disney+
|
||||
# USER-AGENT,Disney+*
|
||||
- DOMAIN-SUFFIX,disney-plus.net
|
||||
- DOMAIN-SUFFIX,disneyplus.com
|
||||
- DOMAIN-SUFFIX,dssott.com
|
||||
- DOMAIN,cdn.registerdisney.go.com
|
||||
- DOMAIN,global.edge.bamgrid.com
|
||||
# > encoreTVB
|
||||
# USER-AGENT,encoreTVB*
|
||||
- DOMAIN-SUFFIX,encoretvb.com
|
||||
- DOMAIN,edge.api.brightcove.com
|
||||
- DOMAIN,bcbolt446c5271-a.akamaihd.net
|
||||
# > FOX NOW
|
||||
# USER-AGENT,FOX%20NOW*
|
||||
- DOMAIN-SUFFIX,fox.com
|
||||
- DOMAIN-SUFFIX,foxdcg.com
|
||||
- DOMAIN-SUFFIX,theplatform.com
|
||||
- DOMAIN-SUFFIX,uplynk.com
|
||||
# > FOX+
|
||||
- DOMAIN-SUFFIX,foxplus.com
|
||||
# - DOMAIN-SUFFIX,theplatform.com
|
||||
- DOMAIN,cdn-fox-networks-group-green.akamaized.net
|
||||
- DOMAIN,d3cv4a9a9wh0bt.cloudfront.net
|
||||
- DOMAIN,foxsports01-i.akamaihd.net
|
||||
- DOMAIN,foxsports02-i.akamaihd.net
|
||||
- DOMAIN,foxsports03-i.akamaihd.net
|
||||
- DOMAIN,staticasiafox.akamaized.net
|
||||
# > HBO NOW & Max
|
||||
# USER-AGENT,HBO%20NOW*
|
||||
- DOMAIN-SUFFIX,hbo.com
|
||||
- DOMAIN-SUFFIX,hbogo.com
|
||||
- DOMAIN-SUFFIX,hbonow.com
|
||||
# USER-AGENT,HBOMAX*
|
||||
- DOMAIN-SUFFIX,hbomax.com
|
||||
# > HBO GO HKG
|
||||
# USER-AGENT,HBO%20GO%20PROD%20HKG*
|
||||
- DOMAIN-SUFFIX,hbogoasia.com
|
||||
- DOMAIN-SUFFIX,hbogoasia.hk
|
||||
- DOMAIN,bcbolthboa-a.akamaihd.net
|
||||
- DOMAIN,players.brightcove.net
|
||||
- DOMAIN,s3-ap-southeast-1.amazonaws.com
|
||||
- DOMAIN,dai3fd1oh325y.cloudfront.net
|
||||
- DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com
|
||||
- DOMAIN,hboasia1-i.akamaihd.net
|
||||
- DOMAIN,hboasia2-i.akamaihd.net
|
||||
- DOMAIN,hboasia3-i.akamaihd.net
|
||||
- DOMAIN,hboasia4-i.akamaihd.net
|
||||
- DOMAIN,hboasia5-i.akamaihd.net
|
||||
- DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net
|
||||
# > 华文电视
|
||||
# USER-AGENT,HWTVMobile*
|
||||
- DOMAIN-SUFFIX,5itv.tv
|
||||
- DOMAIN-SUFFIX,ocnttv.com
|
||||
# > Hulu
|
||||
- DOMAIN-SUFFIX,hulu.com
|
||||
- DOMAIN-SUFFIX,huluim.com
|
||||
- DOMAIN-SUFFIX,hulustream.com
|
||||
# > Hulu / フールー
|
||||
- DOMAIN-SUFFIX,happyon.jp
|
||||
- DOMAIN-SUFFIX,hulu.jp
|
||||
# > ITV
|
||||
# USER-AGENT,ITV_Player*
|
||||
- DOMAIN-SUFFIX,itv.com
|
||||
- DOMAIN-SUFFIX,itvstatic.com
|
||||
- DOMAIN,itvpnpmobile-a.akamaihd.net
|
||||
# > KKTV
|
||||
# USER-AGENT,KKTV*
|
||||
# USER-AGENT,com.kktv.ios.kktv*
|
||||
- DOMAIN-SUFFIX,kktv.com.tw
|
||||
- DOMAIN-SUFFIX,kktv.me
|
||||
- DOMAIN,kktv-theater.kk.stream
|
||||
# > LINE TV
|
||||
# USER-AGENT,LINE%20TV*
|
||||
- DOMAIN-SUFFIX,linetv.tw
|
||||
- DOMAIN,d3c7rimkq79yfu.cloudfront.net
|
||||
# > LiTV
|
||||
- DOMAIN-SUFFIX,litv.tv
|
||||
- DOMAIN,litvfreemobile-hichannel.cdn.hinet.net
|
||||
# > My5
|
||||
# USER-AGENT,My5*
|
||||
- DOMAIN-SUFFIX,channel5.com
|
||||
- DOMAIN-SUFFIX,my5.tv
|
||||
- DOMAIN,d349g9zuie06uo.cloudfront.net
|
||||
# > myTV SUPER
|
||||
# USER-AGENT,mytv*
|
||||
- DOMAIN-SUFFIX,mytvsuper.com
|
||||
- DOMAIN-SUFFIX,tvb.com
|
||||
# > Netflix
|
||||
# USER-AGENT,Argo*
|
||||
- DOMAIN-SUFFIX,netflix.com
|
||||
- DOMAIN-SUFFIX,netflix.net
|
||||
- DOMAIN-SUFFIX,nflxext.com
|
||||
- DOMAIN-SUFFIX,nflximg.com
|
||||
- DOMAIN-SUFFIX,nflximg.net
|
||||
- DOMAIN-SUFFIX,nflxso.net
|
||||
- DOMAIN-SUFFIX,nflxvideo.net
|
||||
- DOMAIN-SUFFIX,netflixdnstest0.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest1.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest2.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest3.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest4.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest5.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest6.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest7.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest8.com
|
||||
- DOMAIN-SUFFIX,netflixdnstest9.com
|
||||
- IP-CIDR,23.246.0.0/18,no-resolve
|
||||
- IP-CIDR,37.77.184.0/21,no-resolve
|
||||
- IP-CIDR,45.57.0.0/17,no-resolve
|
||||
- IP-CIDR,64.120.128.0/17,no-resolve
|
||||
- IP-CIDR,66.197.128.0/17,no-resolve
|
||||
- IP-CIDR,108.175.32.0/20,no-resolve
|
||||
- IP-CIDR,192.173.64.0/18,no-resolve
|
||||
- IP-CIDR,198.38.96.0/19,no-resolve
|
||||
- IP-CIDR,198.45.48.0/20,no-resolve
|
||||
# > niconico
|
||||
# USER-AGENT,Niconico*
|
||||
- DOMAIN-SUFFIX,dmc.nico
|
||||
- DOMAIN-SUFFIX,nicovideo.jp
|
||||
- DOMAIN-SUFFIX,nimg.jp
|
||||
- DOMAIN-SUFFIX,socdm.com
|
||||
# > Now E
|
||||
- DOMAIN-SUFFIX,nowe.com
|
||||
- DOMAIN-SUFFIX,nowestatic.com
|
||||
# > PBS
|
||||
# USER-AGENT,PBS*
|
||||
- DOMAIN-SUFFIX,pbs.org
|
||||
# > Pornhub
|
||||
- DOMAIN-SUFFIX,phncdn.com
|
||||
- DOMAIN-SUFFIX,phprcdn.com
|
||||
- DOMAIN-SUFFIX,pornhub.com
|
||||
- DOMAIN-SUFFIX,pornhubpremium.com
|
||||
# > 台湾好
|
||||
# USER-AGENT,TaiwanGood*
|
||||
- DOMAIN-SUFFIX,skyking.com.tw
|
||||
- DOMAIN,hamifans.emome.net
|
||||
# > TikTok
|
||||
# USER-AGENT,TikTok*
|
||||
- DOMAIN-SUFFIX,byteoversea.com
|
||||
- DOMAIN-SUFFIX,ibytedtos.com
|
||||
- DOMAIN-SUFFIX,muscdn.com
|
||||
- DOMAIN-SUFFIX,musical.ly
|
||||
- DOMAIN-SUFFIX,tiktokcdn.com
|
||||
- DOMAIN-SUFFIX,tiktokv.com
|
||||
- DOMAIN-KEYWORD,-tiktokcdn-com
|
||||
# > Twitch
|
||||
- DOMAIN-SUFFIX,twitch.tv
|
||||
- DOMAIN-SUFFIX,twitchcdn.net
|
||||
- DOMAIN-SUFFIX,ttvnw.net
|
||||
- DOMAIN-SUFFIX,jtvnw.net
|
||||
# > ViuTV
|
||||
# USER-AGENT,Viu*
|
||||
- DOMAIN-SUFFIX,viu.com
|
||||
- DOMAIN-SUFFIX,viu.tv
|
||||
- DOMAIN,api.viu.now.com
|
||||
- DOMAIN,d1k2us671qcoau.cloudfront.net
|
||||
- DOMAIN,d2anahhhmp1ffz.cloudfront.net
|
||||
- DOMAIN,dfp6rglgjqszk.cloudfront.net
|
||||
# > YouTube
|
||||
# USER-AGENT,com.google.ios.youtube*
|
||||
# USER-AGENT,YouTube*
|
||||
- DOMAIN-SUFFIX,googlevideo.com
|
||||
- DOMAIN-SUFFIX,youtube.com
|
||||
- DOMAIN,youtubei.googleapis.com
|
||||
@ -0,0 +1,13 @@
|
||||
payload:
|
||||
# > bilibili
|
||||
- DOMAIN-SUFFIX,biliapi.net
|
||||
- DOMAIN,api.bilibili.com
|
||||
- DOMAIN,www.bilibili.com
|
||||
- DOMAIN,upos-hz-mirrorakam.akamaized.net
|
||||
# > 愛奇藝台灣站
|
||||
- DOMAIN,cache.video.iqiyi.com
|
||||
# > 芒果TV国际
|
||||
- DOMAIN-SUFFIX,api.mgtv.com
|
||||
# > WeTV
|
||||
- DOMAIN-SUFFIX,wetv.vip
|
||||
- DOMAIN-SUFFIX,wetvinfo.com
|
||||
@ -0,0 +1,23 @@
|
||||
payload:
|
||||
# Unbreak
|
||||
# > General
|
||||
# USER-AGENT,archero*
|
||||
# USER-AGENT,coffeecorp*
|
||||
# USER-AGENT,Coffee%20Corp*
|
||||
# USER-AGENT,restaurant-mobile*
|
||||
- DOMAIN,app.adjust.com
|
||||
# > Alibaba
|
||||
- DOMAIN,log.mmstat.com
|
||||
- DOMAIN,sycm.mmstat.com
|
||||
# > Google
|
||||
- DOMAIN-SUFFIX,googletraveladservices.com
|
||||
- DOMAIN,dl.google.com
|
||||
- DOMAIN,mtalk.google.com
|
||||
# > Tencent
|
||||
- DOMAIN,livew.l.qq.com
|
||||
- DOMAIN,vd.l.qq.com
|
||||
# > Strava
|
||||
- DOMAIN,analytics.strava.com
|
||||
# > Umeng
|
||||
- DOMAIN,msg.umeng.com
|
||||
- DOMAIN,msg.umengcloud.com
|
||||
@ -0,0 +1,71 @@
|
||||
反劫持规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Hijacking.yaml
|
||||
国内IP白名单,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,ChinaIP.yaml
|
||||
国内域名白名单,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,China.yaml
|
||||
国内流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingCN.yaml
|
||||
国内流媒体国际版合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,StreamingSE.yaml
|
||||
国外常用网站合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Global.yaml
|
||||
国外流媒体合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/,Streaming.yaml
|
||||
学术网站,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,Scholar.yaml
|
||||
常用隐私规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/,Unbreak.yaml
|
||||
广告规则,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Advertising.yaml
|
||||
隐私规则合集,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Guard/,Privacy.yaml
|
||||
GFW地址,ConnersHua,ipcidr,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,IP-Blackhole.yaml
|
||||
AbemaTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,AbemaTV.yaml
|
||||
All-4,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,All-4.yaml
|
||||
AppStore,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStore.yaml
|
||||
AppStoreConnect,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,AppStoreConnect.yaml
|
||||
Apple FindMy,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,FindMy.yaml
|
||||
Apple Music,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Music.yaml
|
||||
Apple News,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,News.yaml
|
||||
Apple SoftwareUpdate,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,SoftwareUpdate.list,SoftwareUpdate.yaml
|
||||
Apple TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TV.yaml
|
||||
Apple TestFlight,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,TestFlight.yaml
|
||||
Apple iCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,iCloud.yaml
|
||||
Apple,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Apple.yaml
|
||||
BBC-iPlayer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,BBC-iPlayer.yaml
|
||||
Bahamut,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Bahamut.yaml
|
||||
DAZN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DAZN.yaml
|
||||
Deezer,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Deezer.yaml
|
||||
DisneyPlus,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,DisneyPlus.yaml
|
||||
FOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,FOX.yaml
|
||||
GoogleDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleDrive.yaml
|
||||
GoogleSearch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Google/,GoogleSearch.yaml
|
||||
HBO,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO.yaml
|
||||
HBO-GO-HKG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HBO-GO-HKG.yaml
|
||||
HWTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,HWTV.yaml
|
||||
Himalaya,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Podcast/,Himalaya.list,Himalaya.yaml
|
||||
Hulu,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu.yaml
|
||||
Hulu-JPN,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Hulu-JPN.yaml
|
||||
ITV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ITV.yaml
|
||||
Instagram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Instagram.yaml
|
||||
JOOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,JOOX.yaml
|
||||
KKBOX,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,KKBOX.yaml
|
||||
KKTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,KKTV.yaml
|
||||
LINE-TV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LINE-TV.yaml
|
||||
LiTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,LiTV.yaml
|
||||
My5,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,My5.yaml
|
||||
Netflix,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Netflix.yaml
|
||||
Now-E,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Now-E.yaml
|
||||
OneDrive,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Microsoft/,OneDrive.yaml
|
||||
PBS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,PBS.yaml
|
||||
Pandora,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Pandora.yaml
|
||||
PayPal,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/,PayPal.yaml
|
||||
Pornhub,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Pornhub.yaml
|
||||
Prime-Video,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,Prime-Video.yaml
|
||||
Siri,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Siri.yaml
|
||||
SoundCloud,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,SoundCloud.yaml
|
||||
Spotify,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,Spotify.yaml
|
||||
TIDAL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Music/,TIDAL.yaml
|
||||
TaiwanGood,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TaiwanGood.yaml
|
||||
Telegram,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,Telegram.yaml
|
||||
TelegramNL,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramNL.yaml
|
||||
TelegramSG,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramSG.yaml
|
||||
TelegramUS,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Telegram/,TelegramUS.yaml
|
||||
TikTok,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,TikTok.yaml
|
||||
Twitch,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Live/,Twitch.list,Twitch.yaml
|
||||
ViuTV,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,ViuTV.yaml
|
||||
YouTube,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,YouTube.yaml
|
||||
encoreTVB,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,encoreTVB.yaml
|
||||
iCloud-email,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/Extra/Apple/,Mail.yaml
|
||||
myTV-SUPER,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,myTV-SUPER.yaml
|
||||
niconico,ConnersHua,classical,DivineEngine/Profiles/master/Clash/RuleSet/StreamingMedia/Video/,niconico.yaml
|
||||
@ -23,16 +23,18 @@ function index()
|
||||
entry({"admin", "services", "openclash", "coretunupdate"},call("action_core_tun_update"))
|
||||
entry({"admin", "services", "openclash", "coregameupdate"},call("action_core_game_update"))
|
||||
entry({"admin", "services", "openclash", "ping"}, call("act_ping"))
|
||||
entry({"admin", "services", "openclash", "download_game_rule"}, call("action_download_rule"))
|
||||
entry({"admin", "services", "openclash", "download_rule"}, call("action_download_rule"))
|
||||
entry({"admin", "services", "openclash", "restore"}, call("action_restore_config"))
|
||||
entry({"admin", "services", "openclash", "settings"},cbi("openclash/settings"),_("Global Settings"), 30).leaf = true
|
||||
entry({"admin", "services", "openclash", "servers"},cbi("openclash/servers"),_("Severs and Groups"), 40).leaf = true
|
||||
entry({"admin", "services", "openclash", "game-settings"},cbi("openclash/game-settings"),_("Game Rules and Groups"), 50).leaf = true
|
||||
entry({"admin", "services", "openclash", "rule-providers-settings"},cbi("openclash/rule-providers-settings"),_("Rule Providers and Groups"), 50).leaf = true
|
||||
entry({"admin", "services", "openclash", "game-rules-manage"},form("openclash/game-rules-manage"), nil).leaf = true
|
||||
entry({"admin", "services", "openclash", "rule-providers-manage"},form("openclash/rule-providers-manage"), nil).leaf = true
|
||||
entry({"admin", "services", "openclash", "config-subscribe"},cbi("openclash/config-subscribe"),_("Config Update"), 60).leaf = true
|
||||
entry({"admin", "services", "openclash", "servers-config"},cbi("openclash/servers-config"), nil).leaf = true
|
||||
entry({"admin", "services", "openclash", "groups-config"},cbi("openclash/groups-config"), nil).leaf = true
|
||||
entry({"admin", "services", "openclash", "proxy-provider-config"},cbi("openclash/proxy-provider-config"), nil).leaf = true
|
||||
entry({"admin", "services", "openclash", "rule-providers-config"},cbi("openclash/rule-providers-config"), nil).leaf = true
|
||||
entry({"admin", "services", "openclash", "config"},form("openclash/config"),_("Config Manage"), 70).leaf = true
|
||||
entry({"admin", "services", "openclash", "log"},cbi("openclash/log"),_("Server Logs"), 80).leaf = true
|
||||
|
||||
@ -200,8 +202,7 @@ end
|
||||
|
||||
function download_rule()
|
||||
local filename = luci.http.formvalue("filename")
|
||||
local rule_file_dir="/etc/openclash/game_rules/" .. filename
|
||||
local state = luci.sys.call(string.format('/usr/share/openclash/openclash_game_rule.sh "%s" >/dev/null 2>&1',filename))
|
||||
local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',filename))
|
||||
return state
|
||||
end
|
||||
|
||||
@ -322,6 +323,6 @@ end
|
||||
function action_download_rule()
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json({
|
||||
game_rule_download_status = download_rule();
|
||||
rule_download_status = download_rule();
|
||||
})
|
||||
end
|
||||
@ -328,6 +328,71 @@ if r then table.remove(p,x)end
|
||||
return r
|
||||
end
|
||||
|
||||
local g,h={}
|
||||
for n,m in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do
|
||||
h=fs.stat(m)
|
||||
if h then
|
||||
g[n]={}
|
||||
g[n].name=fs.basename(m)
|
||||
g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime)
|
||||
g[n].size=i(h.size)
|
||||
g[n].remove=0
|
||||
g[n].enable=false
|
||||
end
|
||||
end
|
||||
|
||||
rule_form=SimpleForm("rule_provider_file_list",translate("Rule Providers File List"))
|
||||
rule_form.reset=false
|
||||
rule_form.submit=false
|
||||
tb2=rule_form:section(Table,g)
|
||||
nm2=tb2:option(DummyValue,"name",translate("File Name"))
|
||||
mt2=tb2:option(DummyValue,"mtime",translate("Update Time"))
|
||||
sz2=tb2:option(DummyValue,"size",translate("Size"))
|
||||
|
||||
btndl2 = tb2:option(Button,"download2",translate("Download Configurations"))
|
||||
btndl2.template="openclash/other_button"
|
||||
btndl2.render=function(m,n,h)
|
||||
m.inputstyle="remove"
|
||||
Button.render(m,n,h)
|
||||
end
|
||||
btndl2.write = function (h,n)
|
||||
local sPath, sFile, fd, block
|
||||
sPath = "/etc/openclash/rule_provider/"..g[n].name
|
||||
sFile = NXFS.basename(sPath)
|
||||
if fs.isdirectory(sPath) then
|
||||
fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r")
|
||||
sFile = sFile .. ".tar.gz"
|
||||
else
|
||||
fd = nixio.open(sPath, "r")
|
||||
end
|
||||
if not fd then
|
||||
return
|
||||
end
|
||||
HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile})
|
||||
HTTP.prepare_content("application/octet-stream")
|
||||
while true do
|
||||
block = fd:read(nixio.const.buffersize)
|
||||
if (not block) or (#block ==0) then
|
||||
break
|
||||
else
|
||||
HTTP.write(block)
|
||||
end
|
||||
end
|
||||
fd:close()
|
||||
HTTP.close()
|
||||
end
|
||||
|
||||
btnrm2=tb2:option(Button,"remove2",translate("Remove"))
|
||||
btnrm2.render=function(g,n,h)
|
||||
g.inputstyle="reset"
|
||||
Button.render(g,n,h)
|
||||
end
|
||||
btnrm2.write=function(h,n)
|
||||
local h=fs.unlink("/etc/openclash/rule_provider/"..luci.openclash.basename(g[n].name))
|
||||
if h then table.remove(g,n)end
|
||||
return h
|
||||
end
|
||||
|
||||
m = SimpleForm("openclash")
|
||||
m.reset = false
|
||||
m.submit = false
|
||||
@ -396,4 +461,4 @@ o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash"))
|
||||
end
|
||||
|
||||
return ful , form , proxy_form , m
|
||||
return ful , form , proxy_form , rule_form , m
|
||||
|
||||
@ -15,16 +15,23 @@ m.reset = false
|
||||
m.submit = false
|
||||
|
||||
local t = {
|
||||
{Apply}
|
||||
{Refresh, Apply}
|
||||
}
|
||||
|
||||
a = m:section(Table, t)
|
||||
|
||||
o = a:option(Button, "Apply")
|
||||
o.inputtitle = translate("Back Configurations")
|
||||
o = a:option(Button, "Refresh")
|
||||
o.inputtitle = translate("Refresh Page")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-settings"))
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage"))
|
||||
end
|
||||
|
||||
o = a:option(Button, "Apply")
|
||||
o.inputtitle = translate("Back Configurations")
|
||||
o.inputstyle = "reset"
|
||||
o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-settings"))
|
||||
end
|
||||
|
||||
if not NXFS.access("/tmp/rules_name") then
|
||||
@ -74,7 +81,7 @@ 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="openclash/download_game_rule"
|
||||
btnis.template="openclash/download_rule"
|
||||
|
||||
btnrm=tb:option(Button,"remove",translate("Remove"))
|
||||
btnrm.render=function(e,t,a)
|
||||
|
||||
@ -0,0 +1,128 @@
|
||||
|
||||
local m, s, o
|
||||
local openclash = "openclash"
|
||||
local uci = luci.model.uci.cursor()
|
||||
local fs = require "luci.openclash"
|
||||
local sys = require "luci.sys"
|
||||
local sid = arg[1]
|
||||
|
||||
font_red = [[<font color="red">]]
|
||||
font_off = [[</font>]]
|
||||
bold_on = [[<strong>]]
|
||||
bold_off = [[</strong>]]
|
||||
|
||||
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(openclash, translate("Edit Rule Providers"))
|
||||
m.pageaction = false
|
||||
m.description=translate("规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider")
|
||||
m.redirect = luci.dispatcher.build_url("admin/services/openclash/rule-providers-settings")
|
||||
if m.uci:get(openclash, sid) ~= "rule_providers" then
|
||||
luci.http.redirect(m.redirect)
|
||||
return
|
||||
end
|
||||
|
||||
-- [[ Rule Providers Setting ]]--
|
||||
s = m:section(NamedSection, sid, "rule_providers")
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
|
||||
o = s:option(ListValue, "config", translate("Config File"))
|
||||
o:value("all", translate("Use For All Config File"))
|
||||
local e,a={}
|
||||
for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do
|
||||
a=fs.stat(f)
|
||||
if a then
|
||||
e[t]={}
|
||||
e[t].name=fs.basename(f)
|
||||
if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then
|
||||
o:value(e[t].name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
o = s:option(Value, "name", translate("Rule Providers Name"))
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(ListValue, "type", translate("Rule Providers Type"))
|
||||
o.rmempty = true
|
||||
o.description = translate("Choose The Rule Providers Type")
|
||||
o:value("http", translate("http"))
|
||||
o:value("file", translate("file"))
|
||||
|
||||
o = s:option(ListValue, "behavior", translate("Rule Behavior"))
|
||||
o.rmempty = true
|
||||
o.description = translate("Choose The Rule Behavior")
|
||||
o:value("domain")
|
||||
o:value("ipcidr")
|
||||
o:value("classical")
|
||||
|
||||
o = s:option(ListValue, "path", translate("Rule Providers Path"))
|
||||
o.description = translate("Update Your Rule Providers File From Config Luci Page")
|
||||
local p,h={}
|
||||
for t,f in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do
|
||||
h=fs.stat(f)
|
||||
if h then
|
||||
p[t]={}
|
||||
p[t].name=fs.basename(f)
|
||||
if IsYamlFile(p[t].name) or IsYmlFile(p[t].name) then
|
||||
o:value("./rule_provider/"..p[t].name)
|
||||
end
|
||||
end
|
||||
end
|
||||
o.rmempty = false
|
||||
o:depends("type", "file")
|
||||
|
||||
o = s:option(Value, "url", translate("Rule Providers URL"))
|
||||
o.rmempty = false
|
||||
o:depends("type", "http")
|
||||
|
||||
o = s:option(Value, "interval", translate("Rule Providers Interval(s)"))
|
||||
o.default = "86400"
|
||||
o.rmempty = false
|
||||
o:depends("type", "http")
|
||||
|
||||
o = s:option(ListValue, "group", translate("Set Proxy Group"))
|
||||
o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off
|
||||
o.rmempty = true
|
||||
m.uci:foreach("openclash", "groups",
|
||||
function(s)
|
||||
if s.name ~= "" and s.name ~= nil then
|
||||
o:value(s.name)
|
||||
end
|
||||
end)
|
||||
o:value("DIRECT")
|
||||
o:value("REJECT")
|
||||
|
||||
local t = {
|
||||
{Commit, Back}
|
||||
}
|
||||
a = m:section(Table, t)
|
||||
|
||||
o = a:option(Button,"Commit")
|
||||
o.inputtitle = translate("Commit Configurations")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
m.uci:commit(openclash)
|
||||
sys.call("/usr/share/openclash/yml_groups_name_ch.sh start")
|
||||
luci.http.redirect(m.redirect)
|
||||
end
|
||||
|
||||
o = a:option(Button,"Back")
|
||||
o.inputtitle = translate("Back Configurations")
|
||||
o.inputstyle = "reset"
|
||||
o.write = function()
|
||||
m.uci:revert(openclash)
|
||||
luci.http.redirect(m.redirect)
|
||||
end
|
||||
|
||||
return m
|
||||
@ -0,0 +1,100 @@
|
||||
|
||||
local form, m
|
||||
local openclash = "openclash"
|
||||
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.openclash"
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
|
||||
m = SimpleForm("openclash", translate("Other Rule Providers List"))
|
||||
m.description=translate("规则项目: Profiles ( https://github.com/DivineEngine/Profiles )<br/>")
|
||||
m.reset = false
|
||||
m.submit = false
|
||||
|
||||
local t = {
|
||||
{Apply}
|
||||
}
|
||||
|
||||
a = m:section(Table, t)
|
||||
|
||||
o = a:option(Button, "Refresh")
|
||||
o.inputtitle = translate("Refresh Page")
|
||||
o.inputstyle = "apply"
|
||||
o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage"))
|
||||
end
|
||||
|
||||
o = a:option(Button, "Apply")
|
||||
o.inputtitle = translate("Back Configurations")
|
||||
o.inputstyle = "reset"
|
||||
o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-settings"))
|
||||
end
|
||||
|
||||
if not NXFS.access("/tmp/rule_providers_name") then
|
||||
SYS.call("awk -F ',' '{print $5}' /etc/openclash/rule_providers.list > /tmp/rule_providers_name 2>/dev/null")
|
||||
end
|
||||
file = io.open("/tmp/rule_providers_name", "r");
|
||||
|
||||
---- Rules List
|
||||
local e={},o,t
|
||||
if NXFS.access("/tmp/rule_providers_name") 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' /etc/openclash/rule_providers.list |awk -F ',' '{print $1}' 2>/dev/null",o)),1,-2)
|
||||
e[t].filename=string.sub(luci.sys.exec(string.format("grep -F ',%s' /etc/openclash/rule_providers.list |awk -F ',' '{print $6}' 2>/dev/null",o)),1,-2)
|
||||
if e[t].filename == "" then
|
||||
e[t].filename=o
|
||||
end
|
||||
e[t].author=string.sub(luci.sys.exec(string.format("grep -F ',%s' /etc/openclash/rule_providers.list |awk -F ',' '{print $2}' 2>/dev/null",o)),1,-2)
|
||||
e[t].rule_type=string.sub(luci.sys.exec(string.format("grep -F ',%s' /etc/openclash/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null",o)),1,-2)
|
||||
RULE_FILE="/etc/openclash/rule_provider/".. e[t].filename
|
||||
if fs.mtime(RULE_FILE) then
|
||||
e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE))
|
||||
else
|
||||
e[t].mtime="/"
|
||||
end
|
||||
if fs.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()
|
||||
|
||||
form=SimpleForm("filelist")
|
||||
form.reset=false
|
||||
form.submit=false
|
||||
tb=form:section(Table,e)
|
||||
nu=tb:option(DummyValue,"num",translate("Order Number"))
|
||||
st=tb:option(DummyValue,"exist",translate("State"))
|
||||
st.template="openclash/cfg_check"
|
||||
tp=tb:option(DummyValue,"rule_type",translate("Rule Type"))
|
||||
nm=tb:option(DummyValue,"name",translate("Rule Name"))
|
||||
au=tb:option(DummyValue,"author",translate("Rule Author"))
|
||||
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="openclash/download_rule"
|
||||
|
||||
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)
|
||||
fs.unlink("/etc/openclash/rule_provider/"..e[t].filename)
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage"))
|
||||
end
|
||||
|
||||
return m, form
|
||||
@ -9,7 +9,7 @@ local UTIL = require "luci.util"
|
||||
local fs = require "luci.openclash"
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
|
||||
m = Map(openclash, translate("Game Rules and Groups"))
|
||||
m = Map(openclash, translate("Rule Providers and Groups"))
|
||||
m.pageaction = false
|
||||
m.description=translate("注意事项:<br/>游戏代理为测试功能,不保证可用性 \
|
||||
<br/>准备步骤:\
|
||||
@ -22,7 +22,11 @@ m.description=translate("注意事项:<br/>游戏代理为测试功能,不
|
||||
<br/> \
|
||||
<br/>在TUN模式下使用: \
|
||||
<br/>1、在全局设置-版本更新标签先下载对应模式内核 \
|
||||
<br/>2、在《全局设置》-《模式设置》-《运行模式》中选择TUN模式或者游戏模式并重新启动")
|
||||
<br/>2、在《全局设置》-《模式设置》-《运行模式》中选择TUN模式或者游戏模式并重新启动 \
|
||||
<br/> \
|
||||
<br/>本页设置时如策略组为空,请先到《服务器与策略组管理》页面进行添加 \
|
||||
<br/> \
|
||||
<br/>规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider")
|
||||
|
||||
|
||||
function IsRuleFile(e)
|
||||
@ -44,10 +48,10 @@ function IsYmlFile(e)
|
||||
end
|
||||
|
||||
-- [[ Edit Game Rule ]] --
|
||||
s = m:section(TypedSection, "game_config")
|
||||
s = m:section(TypedSection, "game_config", translate("Game Rules and Groups"))
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
s.sortable = false
|
||||
s.sortable = true
|
||||
s.template = "cbi/tblsection"
|
||||
s.rmempty = false
|
||||
|
||||
@ -103,8 +107,118 @@ o:value("DIRECT")
|
||||
o:value("REJECT")
|
||||
o.rmempty = true
|
||||
|
||||
-- [[ Edit Other Rule Provider ]] --
|
||||
s = m:section(TypedSection, "rule_provider_config", translate("Other Rule Providers and Groups"))
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
s.sortable = true
|
||||
s.template = "cbi/tblsection"
|
||||
s.rmempty = false
|
||||
|
||||
---- enable flag
|
||||
o = s:option(Flag, "enabled", translate("Enable"))
|
||||
o.rmempty = false
|
||||
o.default = o.enabled
|
||||
o.cfgvalue = function(...)
|
||||
return Flag.cfgvalue(...) or "1"
|
||||
end
|
||||
|
||||
---- config
|
||||
o = s:option(ListValue, "config", translate("Config File"))
|
||||
o:value("all", translate("Use For All Config File"))
|
||||
local e,a={}
|
||||
for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do
|
||||
a=fs.stat(f)
|
||||
if a then
|
||||
e[t]={}
|
||||
e[t].name=fs.basename(f)
|
||||
if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then
|
||||
o:value(e[t].name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---- rule name
|
||||
o = s:option(DynamicList, "rule_name", translate("Rule Provider's Name"))
|
||||
local e,a={}
|
||||
for t,f in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do
|
||||
a=fs.stat(f)
|
||||
if a then
|
||||
e[t]={}
|
||||
e[t].filename=fs.basename(f)
|
||||
if IsYamlFile(e[t].filename) or IsYmlFile(e[t].filename) then
|
||||
e[t].name=luci.sys.exec(string.format("grep -F ',%s' /etc/openclash/rule_providers.list |awk -F ',' '{print $1}' 2>/dev/null",e[t].filename))
|
||||
if e[t].name ~= "" and e[t].name ~= nil then
|
||||
o:value(e[t].name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
o.rmempty = true
|
||||
|
||||
---- Proxy Group
|
||||
o = s:option(ListValue, "group", translate("Select Proxy Group"))
|
||||
uci:foreach("openclash", "groups",
|
||||
function(s)
|
||||
if s.name ~= "" and s.name ~= nil then
|
||||
o:value(s.name)
|
||||
end
|
||||
end)
|
||||
o:value("DIRECT")
|
||||
o:value("REJECT")
|
||||
o.rmempty = true
|
||||
|
||||
o = s:option(Value, "interval", translate("Rule Providers Interval(s)"))
|
||||
o.default = "86400"
|
||||
o.rmempty = false
|
||||
|
||||
---- position
|
||||
o = s:option(ListValue, "position", translate("Append Position"))
|
||||
o.rmempty = false
|
||||
o:value("0", translate("Priority Match"))
|
||||
o:value("1", translate("Extended Match"))
|
||||
|
||||
-- [[ Edit Custom Rule Provider ]] --
|
||||
s = m:section(TypedSection, "rule_providers", translate("Custom Rule Providers and Groups"))
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
s.sortable = true
|
||||
s.template = "cbi/tblsection"
|
||||
s.extedit = luci.dispatcher.build_url("admin/services/openclash/rule-providers-config/%s")
|
||||
function s.create(...)
|
||||
local sid = TypedSection.create(...)
|
||||
if sid then
|
||||
luci.http.redirect(s.extedit % sid)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
---- enable flag
|
||||
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, "config", translate("Config File"))
|
||||
function o.cfgvalue(...)
|
||||
return Value.cfgvalue(...) or translate("all")
|
||||
end
|
||||
|
||||
o = s:option(DummyValue, "name", translate("Rule Providers Name"))
|
||||
function o.cfgvalue(...)
|
||||
return Value.cfgvalue(...) or translate("None")
|
||||
end
|
||||
|
||||
o = s:option(ListValue, "position", translate("Append Position"))
|
||||
o.rmempty = false
|
||||
o:value("0", translate("Priority Match"))
|
||||
o:value("1", translate("Extended Match"))
|
||||
|
||||
local rm = {
|
||||
{rule_mg}
|
||||
{rule_mg, pro_mg}
|
||||
}
|
||||
|
||||
rmg = m:section(Table, rm)
|
||||
@ -116,6 +230,13 @@ o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage"))
|
||||
end
|
||||
|
||||
o = rmg:option(Button, "pro_mg")
|
||||
o.inputtitle = translate("Other Rule Provider Manage")
|
||||
o.inputstyle = "reload"
|
||||
o.write = function()
|
||||
HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage"))
|
||||
end
|
||||
|
||||
local t = {
|
||||
{Commit, Apply}
|
||||
}
|
||||
@ -218,6 +218,11 @@ o:depends("obfs_vmess", "http")
|
||||
o:depends("type", "socks5")
|
||||
o:depends("type", "http")
|
||||
|
||||
o = s:option(Value, "servername", translate("TLS Custom Host"))
|
||||
o.rmempty = true
|
||||
o.placeholder = translate("example.com")
|
||||
o:depends("obfs_vmess", "websocket")
|
||||
|
||||
o = s:option(Value, "keep_alive", translate("keep-alive"))
|
||||
o.rmempty = true
|
||||
o.default = "true"
|
||||
|
||||
@ -26,6 +26,7 @@ o.description = translate("Use Other Rules To Create Config")
|
||||
o:depends("create_config", 1)
|
||||
o:value("lhie1", translate("lhie1 Rules"))
|
||||
o:value("ConnersHua", translate("ConnersHua Rules"))
|
||||
o:value("ConnersHua_provider", translate("ConnersHua(Provider-type) Rules"))
|
||||
o:value("ConnersHua_return", translate("ConnersHua Return Rules"))
|
||||
|
||||
o = s:option(ListValue, "servers_update", translate("Keep Settings"))
|
||||
@ -158,6 +159,11 @@ function o.cfgvalue(...)
|
||||
return Value.cfgvalue(...) or translate("None")
|
||||
end
|
||||
|
||||
o = s:option(DummyValue, "udp", translate("UDP Support"))
|
||||
function o.cfgvalue(...)
|
||||
return Value.cfgvalue(...) or translate("None")
|
||||
end
|
||||
|
||||
o = s:option(DummyValue,"server",translate("Ping Latency"))
|
||||
o.template="openclash/ping"
|
||||
o.width="10%"
|
||||
|
||||
@ -257,6 +257,7 @@ o.description = translate("Use Other Rules")
|
||||
o:value("0", translate("Disable Other Rules"))
|
||||
o:value("lhie1", translate("lhie1 Rules"))
|
||||
o:value("ConnersHua", translate("ConnersHua Rules"))
|
||||
o:value("ConnersHua_provider", translate("ConnersHua(Provider-type) Rules"))
|
||||
o:value("ConnersHua_return", translate("ConnersHua Return Rules"))
|
||||
|
||||
if not fs.isfile("/tmp/Proxy_Group") then
|
||||
@ -267,6 +268,7 @@ file = io.open("/tmp/Proxy_Group", "r");
|
||||
o = s:taboption("rules", ListValue, "GlobalTV", translate("GlobalTV"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
o:depends("rule_source", "ConnersHua_provider")
|
||||
for l in file:lines() do
|
||||
o:value(l)
|
||||
end
|
||||
@ -274,6 +276,7 @@ o:depends("rule_source", "ConnersHua")
|
||||
o = s:taboption("rules", ListValue, "AsianTV", translate("AsianTV"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
o:depends("rule_source", "ConnersHua_provider")
|
||||
for l in file:lines() do
|
||||
o:value(l)
|
||||
end
|
||||
@ -281,6 +284,7 @@ o:depends("rule_source", "ConnersHua")
|
||||
o = s:taboption("rules", ListValue, "Proxy", translate("Proxy"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
o:depends("rule_source", "ConnersHua_provider")
|
||||
o:depends("rule_source", "ConnersHua_return")
|
||||
for l in file:lines() do
|
||||
o:value(l)
|
||||
@ -288,7 +292,6 @@ o:depends("rule_source", "ConnersHua_return")
|
||||
file:seek("set")
|
||||
o = s:taboption("rules", ListValue, "Apple", translate("Apple"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
for l in file:lines() do
|
||||
o:value(l)
|
||||
end
|
||||
@ -343,7 +346,7 @@ o:depends("rule_source", "lhie1")
|
||||
file:seek("set")
|
||||
o = s:taboption("rules", ListValue, "AdBlock", translate("AdBlock"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
o:depends("rule_source", "ConnersHua_provider")
|
||||
for l in file:lines() do
|
||||
o:value(l)
|
||||
end
|
||||
@ -351,6 +354,7 @@ o:depends("rule_source", "ConnersHua")
|
||||
o = s:taboption("rules", ListValue, "Domestic", translate("Domestic"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
o:depends("rule_source", "ConnersHua_provider")
|
||||
for l in file:lines() do
|
||||
o:value(l)
|
||||
end
|
||||
@ -358,6 +362,7 @@ o:depends("rule_source", "ConnersHua")
|
||||
o = s:taboption("rules", ListValue, "Others", translate("Others"))
|
||||
o:depends("rule_source", "lhie1")
|
||||
o:depends("rule_source", "ConnersHua")
|
||||
o:depends("rule_source", "ConnersHua_provider")
|
||||
o:depends("rule_source", "ConnersHua_return")
|
||||
o.description = translate("Choose Proxy Group, Base On Your Servers Group in config.yaml")
|
||||
for l in file:lines() do
|
||||
|
||||
@ -5,22 +5,22 @@
|
||||
{
|
||||
btn.disabled = true;
|
||||
btn.value = '<%:正在下载规则...%> ';
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash","download_game_rule")%>',
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash","download_rule")%>',
|
||||
{
|
||||
filename: filename
|
||||
},
|
||||
function(x,status)
|
||||
{
|
||||
if ( x && x.status == 200 ) {
|
||||
if(status.game_rule_download_status=="0")
|
||||
if(status.rule_download_status=="0")
|
||||
{
|
||||
btn.value = '<%:下载失败%>';
|
||||
}
|
||||
else if (status.game_rule_download_status=="1")
|
||||
else if (status.rule_download_status=="1")
|
||||
{
|
||||
btn.value = '<%:下载成功%>';
|
||||
}
|
||||
else if (status.game_rule_download_status=="2")
|
||||
else if (status.rule_download_status=="2")
|
||||
{
|
||||
btn.value = '<%:规则没有更新%>';
|
||||
}
|
||||
@ -20,6 +20,7 @@
|
||||
<link rel="preconnect" href="https://api.ttt.sh">
|
||||
<link rel="preconnect" href="https://api.skk.moe">
|
||||
<link rel="preconnect" href="https://d.skk.moe">
|
||||
<meta name="referrer" content="no-referrer">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,minimal-ui">
|
||||
<title>IP 地址查询</title>
|
||||
<style>
|
||||
@ -202,14 +203,24 @@
|
||||
throw error;
|
||||
}),
|
||||
parseIPIpip: (ip, elID) => {
|
||||
var meta = document.createElement('meta');
|
||||
meta.name = "referrer";
|
||||
meta.content = "no-referrer-when-downgrade";
|
||||
document.getElementsByTagName('head')[0].appendChild(meta);
|
||||
|
||||
IP.get(`https://qqwry.api.skk.moe/${ip}`, 'json')
|
||||
.then(resp => {
|
||||
$$.getElementById(elID).innerHTML = resp.data.geo;
|
||||
//$$.getElementById(elID).innerHTML = `${resp.data.country} ${resp.data.regionName} ${resp.data.city} ${resp.data.isp}`;
|
||||
})
|
||||
|
||||
var meta = document.createElement('meta');
|
||||
meta.name = "referrer";
|
||||
meta.content = "no-referrer";
|
||||
document.getElementsByTagName('head')[0].appendChild(meta);
|
||||
},
|
||||
getIpipnetIP: () => {
|
||||
IP.get(`http://myip.ipip.net/?z=${random}`, 'text')
|
||||
IP.get(`https://myip.ipip.net/?z=${random}`, 'text')
|
||||
.then((resp) => {
|
||||
let data = resp.data.replace('当前 IP:', '').split(' 来自于:');
|
||||
$$.getElementById('ip-ipipnet').innerHTML = `${data[0]}`;
|
||||
@ -276,6 +287,7 @@
|
||||
$$.getElementById('ip-pcol').innerHTML = data.ip;
|
||||
$$.getElementById('ip-pcol-ipip').innerHTML = `${data.pro} ${data.city} ${data.region} ${pcisp[1]}`;
|
||||
};
|
||||
|
||||
function getIpsbIP(data){
|
||||
$$.getElementById('ip-ipsb').innerHTML = data.ip;
|
||||
IP.parseIPIpip(data.ip, 'ip-ipsb-geo');
|
||||
@ -303,11 +315,12 @@
|
||||
IP.getIpipnetIP();
|
||||
IP.getIpifyIP();
|
||||
|
||||
function getPcolIP(data){
|
||||
let pcisp = data.addr.split(' ');
|
||||
function getPcolIP(data){
|
||||
let pcisp = data.addr.split(' ');
|
||||
$$.getElementById('ip-pcol').innerHTML = data.ip;
|
||||
$$.getElementById('ip-pcol-ipip').innerHTML = `${data.pro} ${data.city} ${data.region} ${pcisp[1]}`;
|
||||
};
|
||||
};
|
||||
|
||||
function getIpsbIP(data){
|
||||
$$.getElementById('ip-ipsb').innerHTML = data.ip;
|
||||
IP.parseIPIpip(data.ip, 'ip-ipsb-geo');
|
||||
|
||||
@ -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.1560b07adc97ac0ac265.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.1560b07adc97ac0ac265.min.js"></script><script src="js/bundle.1560b07adc97ac0ac265.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</title><link href="main.22aafef55a2ae3675d94.css" rel="stylesheet"></head><body><div id="root"></div><script src="js/1.bundle.22aafef55a2ae3675d94.min.js"></script><script src="js/bundle.22aafef55a2ae3675d94.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
@ -12,7 +12,7 @@
|
||||
.button{outline:0;padding:0 15px;height:32px;line-height:32px;border-radius:16px;font-size:14px;cursor:pointer;transition:all 150ms ease}.button-primary{color:#fff;border:none;background:linear-gradient(135deg, #57befc, #2c8af8);box-shadow:0 2px 8px rgba(44,138,248,.5)}.button-primary:hover{border:none}.button-primary:active{box-shadow:0 0 2px rgba(44,138,248,.5)}.button-normal{color:#909399;background:#fff;border:1px solid rgba(0,0,0,.1)}.button-normal:hover{border-color:#b7c5d6;color:#54759a}.button-normal:active{background:#fafafa;color:#54759a}.button-danger{color:#fff;border:none;background:linear-gradient(135deg, #f56c6c, #f23c3c);box-shadow:0 2px 8px rgba(242,60,60,.5)}.button-danger:hover{border:none}.button-danger:active{box-shadow:0 0 2px rgba(242,60,60,.5)}.button-success{color:#fff;border:none;background:linear-gradient(135deg, #67c23a, #5dae34);box-shadow:0 2px 8px rgba(93,174,52,.5)}.button-success:hover{border:none}.button-success:active{box-shadow:0 0 2px rgba(93,174,52,.5)}.button-warning{color:#fff;border:none;background:linear-gradient(135deg, #e6a23c, #e39725);box-shadow:0 2px 8px rgba(227,151,37,.5)}.button-warning:hover{border:none}.button-warning:active{box-shadow:0 0 2px rgba(227,151,37,.5)}
|
||||
.message{position:fixed;top:20px;right:20px;border-radius:4px;opacity:0;background:#fff;display:flex;box-shadow:0 0 20px rgba(44,138,248,.2);transition:all 200ms ease;transform:translateX(100%)}.message .message-icon{width:36px;flex:1;border-radius:4px 0 0 4px;display:flex;justify-content:center;align-items:center}.message .message-icon>i{color:#fff}.message .message-content{padding:10px 15px;font-size:13px;color:#54759a}.message-info .message-icon{background:linear-gradient(135deg, #57befc, #2c8af8)}.message-success .message-icon{background:linear-gradient(135deg, #67c23a, #5dae34)}.message-warning .message-icon{background:linear-gradient(135deg, #e6a23c, #e39725)}.message-error .message-icon{background:linear-gradient(135deg, #f56c6c, #f23c3c)}.message-show{opacity:1;transition:all 200ms ease;transform:translateX(0)}
|
||||
.checkbox{display:flex;position:relative;padding-left:26px;cursor:pointer;line-height:18px}.checkbox::before{content:"";display:inline-block;position:absolute;left:0;top:50%;width:18px;height:18px;border-radius:3px;transition:background-color .3s ease;transform:translateY(-9px);background-color:#fff;border:1px solid #e4eaef}.checkbox.checked::before{background-color:#57befc}.checkbox-icon{position:absolute;left:0;top:50%;color:#fff;line-height:18px;transform:translateY(-9px) scale(0.6);text-shadow:none;font-weight:bold}
|
||||
.tag{display:flex;align-items:center;height:24px;font-size:12px;padding:0 12px;text-align:center;background-color:#fff;border:2px solid #2c8af8;color:#2c8af8;border-radius:12px}
|
||||
.tag{display:flex;align-items:center;justify-content:center;height:24px;font-size:12px;padding:0 12px;text-align:center;background-color:#fff;border:2px solid #2c8af8;color:#2c8af8;border-radius:12px}
|
||||
.spinner{position:relative;width:80px;height:80px;border-radius:100%;-webkit-animation:spinner 5s infinite linear;animation:spinner 5s infinite linear}.spinner-circle{position:absolute;width:100%;height:100%;transform-origin:48% 48%}.spinner-inner{width:100%;height:100%;border-radius:100%;border:5px solid rgba(44,138,248,.7);border-right:none;border-top:none;background-clip:padding-box;box-shadow:inset 0 0 10px rgba(44,138,248,.15)}@-webkit-keyframes spinner{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes spinner{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.spinner-circle:nth-of-type(0){transform:rotate(0deg)}.spinner-circle:nth-of-type(0) .spinner-inner{-webkit-animation:spinner 2s infinite linear;animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(1){transform:rotate(70deg)}.spinner-circle:nth-of-type(1) .spinner-inner{-webkit-animation:spinner 2s infinite linear;animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(2){transform:rotate(140deg)}.spinner-circle:nth-of-type(2) .spinner-inner{-webkit-animation:spinner 2s infinite linear;animation:spinner 2s infinite linear}
|
||||
.loading{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0;bottom:0;right:0;background-color:rgba(255,255,255,.9);box-shadow:inset 0 0 80px rgba(0,0,0,.1);z-index:1000}
|
||||
.proxy-item{position:relative;width:100%;height:110px;padding:10px;border-radius:4px;background:#fff;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;box-shadow:2px 5px 20px -3px rgba(44,138,248,.2);transition:all 300ms ease}.proxy-item .proxy-type{padding:2px 5px;font-size:10px;color:#fff;border-radius:2px}.proxy-item .proxy-name{display:-webkit-box;margin-top:10px;color:#54759a;font-size:10px;overflow:hidden;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.proxy-item .proxy-delay{position:absolute;left:10px;bottom:13px;font-size:10px;color:rgba(84,117,154,.8)}.proxy-item .proxy-editor{position:absolute;right:10px;bottom:10px;cursor:pointer;color:rgba(84,117,154,.8);opacity:0;pointer-events:none;transition:all 300ms ease}.proxy-item:hover{box-shadow:0 14px 20px -4px rgba(84,117,154,.4)}.proxy-item:hover .proxy-editor{opacity:1;pointer-events:visible}.proxy-error{opacity:.5}.proxy-error .proxy-type{background-color:#909399}@media(max-width: 768px){.proxy-item{height:70px}.proxy-item .proxy-delay{left:unset;bottom:unset;top:0;right:20px;height:70px;line-height:70px}}
|
||||
@ -20,8 +20,9 @@
|
||||
.proxy-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.proxy-provider-header{display:flex;align-items:center;justify-content:space-between}.proxy-provider-header-part{display:flex;align-items:center}.proxy-provider-name{margin-right:24px}.proxy-provider-proxies{list-style:none}.proxy-provider-item{box-shadow:0 0 24px 0 rgba(44,138,248,.2)}.proxy-provider-item:hover{box-shadow:0 0 24px 0 rgba(84,117,154,.4)}.proxy-provider-update{line-height:14px;font-size:14px}.proxy-provider-icon{margin-left:20px;cursor:pointer}.proxy-provider-icon.healthcheck{color:#f56c6c}@media(max-width: 768px){.proxy-provider-header{flex-direction:column;align-items:flex-start}.proxy-provider-header-part{margin:6px 0}}
|
||||
.proxies-list{--item-width: calc(100% / (var(--columns) + 1));--gap: calc(var(--item-width) / var(--columns));display:flex;margin-right:calc(-1 * var(--gap));margin-top:20px;flex-wrap:wrap;align-content:flex-start;list-style:none}@media(min-width: 2001px){.proxies-list{--columns: 12}}@media(max-width: 2000px){.proxies-list{--columns: 10}}@media(max-width: 1600px){.proxies-list{--columns: 8}}@media(max-width: 1340px){.proxies-list{--columns: 7}}@media(max-width: 960px){.proxies-list{--columns: 6}}@media(max-width: 860px){.proxies-list{--columns: 5}}@media(max-width: 760px){.proxies-list{--columns: 3}}.proxies-list>li{display:inline-block;width:var(--item-width);margin-right:var(--gap);flex-shrink:0;margin-bottom:10px}.proxies-group-list{list-style:none}.proxies-group-card{margin:20px 0}.proxies-container .proxies-action-icon{margin-left:10px}.proxies-speed-test{line-height:32px;margin:0 2px 0 6px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4);cursor:pointer}.proxies-providers-item{margin:20px 0}.proxies-providers-list{list-style:none}@media(max-width: 768px){.proxies-group-card{margin:12px 0}.proxies-list{margin-right:0;padding-bottom:20px;flex-wrap:unset;flex-direction:column}.proxies-list>li{width:100%;margin-right:0;margin-bottom:10px}}
|
||||
.logs-card{display:flex;flex-direction:column;flex:1;margin-top:10px}.logs-panel{display:flex;flex-direction:column;flex-grow:1;flex-basis:0;list-style:none;padding:10px;border-radius:2px;background-color:#f3f6f9;font-size:12px;color:#73808f;overflow-y:auto;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace}.logs-panel li{line-height:20px;display:inline-block}.logs-panel-time{margin-right:10px;color:#adb7c3}
|
||||
.rules-card{display:flex;flex-direction:column;flex:1;margin-top:10px;padding:0}.rules-card:focus{outline:none}.rules-card .rules{flex:1 0 auto}.rule-item{line-height:30px;padding:5px 0;height:50px;overflow:hidden;list-style:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom:1px solid rgba(228,234,239,.5)}.rule-item .rule-item-row{padding:5px 0}.rule-item .drag-handler{cursor:row-resize;margin:0 10px;display:flex;justify-content:center}.rule-item .drag-handler>i{font-weight:bold;color:#b7c5d6}.rule-item .rule-type{font-size:14px;color:#54759a}.rule-item .rule-type>i{margin-left:5px;color:#54759a}.rule-item .payload{font-size:14px;color:#54759a;cursor:pointer}.rule-item .rule-proxy{font-size:14px;color:#54759a}.rule-item .delete-btn{opacity:0;transition:all 300ms ease}.rule-item .delete-btn span{font-size:14px;color:#f56c6c;cursor:pointer}.rule-item:last-child{border-bottom:none}.rule-item:hover .delete-btn{opacity:1}.rule-proxy-option{display:flex;align-items:center;overflow:hidden}.rule-proxy-option .label{margin-right:5px;height:20px;line-height:20px;padding:0 8px;font-size:10px;border-radius:10px;color:#fff;background:#b7c5d6}.rule-proxy-option .value{line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
.rule-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.rule-provider-header{display:flex;align-items:center;justify-content:space-between}.rule-provider-header-part{display:flex;align-items:center}.rule-provider-name{width:120px;margin-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rule-provider-behavior{width:80px;margin:0 20px 0 12px;background-color:#2c8af8;color:#fff}.rule-provider-spinner{transform:scale(0.4)}.rule-provider-proxies{list-style:none}.rule-provider-item{box-shadow:0 0 24px 0 rgba(44,138,248,.2)}.rule-provider-item:hover{box-shadow:0 0 24px 0 rgba(84,117,154,.4)}.rule-provider-update{line-height:14px;font-size:14px}.rule-provider-icon{display:block;margin-left:20px;cursor:pointer}.rule-provider-icon.rule-provider-loading::before{color:#909399;cursor:not-allowed;-webkit-animation:spinner 2s infinite linear;animation:spinner 2s infinite linear}@media(max-width: 768px){.rule-provider-header{flex-direction:column;align-items:flex-start}.rule-provider-header-part{margin:6px 0}}
|
||||
.rules-card{display:flex;flex-direction:column;flex:1;min-height:700px;margin-top:10px;padding:0}.rules-card:focus{outline:none}.rules-card .rules{flex:1 0 auto}.rule-item{line-height:30px;padding:5px 0;height:50px;overflow:hidden;list-style:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom:1px solid rgba(228,234,239,.5)}.rule-item .rule-item-row{padding:5px 0}.rule-item .drag-handler{cursor:row-resize;margin:0 10px;display:flex;justify-content:center}.rule-item .drag-handler>i{font-weight:bold;color:#b7c5d6}.rule-item .rule-type{font-size:14px;color:#54759a}.rule-item .rule-type>i{margin-left:5px;color:#54759a}.rule-item .payload{font-size:14px;color:#54759a;cursor:pointer}.rule-item .rule-proxy{font-size:14px;color:#54759a}.rule-item .delete-btn{opacity:0;transition:all 300ms ease}.rule-item .delete-btn span{font-size:14px;color:#f56c6c;cursor:pointer}.rule-item:last-child{border-bottom:none}.rule-item:hover .delete-btn{opacity:1}.rule-proxy-option{display:flex;align-items:center;overflow:hidden}.rule-proxy-option .label{margin-right:5px;height:20px;line-height:20px;padding:0 8px;font-size:10px;border-radius:10px;color:#fff;background:#b7c5d6}.rule-proxy-option .value{line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
.settings-card{margin-top:10px;padding:20px 0}.settings-card .column{font-weight:bold;align-items:center}.settings-card .value-column{justify-content:flex-end}.settings-card .label{font-size:14px;color:#54759a}.settings-card .external-controller{font-size:14px;color:#54759a;display:flex;justify-content:flex-end;font-weight:normal;line-height:17px}.settings-card .external-controller .modify-btn{color:#2c8af8;cursor:pointer}.clash-version{position:relative;margin-top:10px;padding:20px 45px;display:flex}.clash-version .check-icon{width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg, #57befc, #2c8af8);display:flex;justify-content:center;align-items:center}.clash-version .check-icon>i{transform:scale(0.5);color:#fff;font-weight:bold}.clash-version .version-info{margin-left:10px;font-size:14px;line-height:24px;color:#54759a}.clash-version .check-update-btn{position:absolute;right:45px;font-size:14px;line-height:24px;color:#b7c5d6;cursor:pointer;transition:all 150ms ease}.clash-version .check-update-btn:hover{color:#54759a}@media(max-width: 768px){.settings-card .row{flex-direction:column;padding-top:0;padding-bottom:0}.settings-card .row>.column{width:100%;margin:10px 0}}
|
||||
.sidebar{position:fixed;top:0;left:0;display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:140px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar-logo{margin-top:50px;width:60px;height:60px}.sidebar-menu{display:flex;flex-direction:column;margin-top:12px}.sidebar-menu .item{display:block;margin-top:18px}.sidebar-menu .item>a{display:block;width:120px;height:36px;line-height:36px;font-size:14px;border-radius:18px;text-align:center}.sidebar-menu .item>a,.sidebar-menu .item a:active,.sidebar-menu .item a:visited{color:#909399;text-decoration:none}.sidebar-menu .item>a.active{background:linear-gradient(135deg, #57befc, #2c8af8);color:#fff;box-shadow:0 2px 8px rgba(44,138,248,.5)}@media(max-width: 768px){.sidebar{width:100%;height:60px;flex-direction:row;background:#f4f5f6;z-index:10}.sidebar-logo{margin:0 15px;width:36px;height:36px}.sidebar-menu{flex:1;flex-direction:row;justify-content:center;margin-top:0;overflow-x:scroll;padding:10px}.sidebar-menu::-webkit-scrollbar{display:none}.sidebar-menu .item{margin:0 3px}.sidebar-menu .item>a{width:80px;height:32px;line-height:32px}.sidebar-menu .item.no-mobile{display:none}}
|
||||
.sidebar{position:fixed;top:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:160px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar-logo{margin-top:50px;width:60px;height:60px}.sidebar-menu{display:flex;flex-direction:column;flex:1;margin-top:12px}.sidebar-menu .item{display:block;margin-top:18px}.sidebar-menu .item>a{display:block;width:120px;height:36px;line-height:36px;font-size:14px;border-radius:18px;text-align:center}.sidebar-menu .item>a,.sidebar-menu .item a:active,.sidebar-menu .item a:visited{color:#909399;text-decoration:none}.sidebar-menu .item>a.active{background:linear-gradient(135deg, #57befc, #2c8af8);color:#fff;box-shadow:0 2px 8px rgba(44,138,248,.5)}.sidebar-version{display:flex;flex-direction:column;align-items:center;padding-bottom:20px}.sidebar-version-label{font-size:14px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.sidebar-version-text{text-align:center;font-size:14px;margin:8px 0;color:#54759a}@media(max-width: 768px){.sidebar{width:100%;height:60px;flex-direction:row;background:#f4f5f6;z-index:10}.sidebar-logo{margin:0 15px;width:36px;height:36px}.sidebar-menu{flex:1;flex-direction:row;justify-content:center;margin-top:0;overflow-x:scroll;padding:10px}.sidebar-menu::-webkit-scrollbar{display:none}.sidebar-menu .item{margin:0 3px}.sidebar-menu .item>a{width:80px;height:32px;line-height:32px}.sidebar-menu .item.no-mobile{display:none}.sidebar-version{display:none}}
|
||||
.connections-card{display:flex;flex-direction:column;flex:1;margin-top:10px;padding:0;overflow:hidden}.connections-card .connections{display:flex;flex-direction:column;width:100%;flex-grow:1;flex-basis:0;overflow:auto}.connections-card .connections-body{flex:1 0 auto}.connections-card .connections-th{position:relative;text-align:center;color:#909399;background:#f3f6f9;height:30px;line-height:30px;font-weight:500;font-size:14px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.connections-card .connections-resizer{position:absolute;opacity:0;right:-10px;top:8px;bottom:8px;width:20px;transition:opacity .3s ease;z-index:10;font-size:14px;font-weight:300}.connections-card .connections-resizer::before{content:"";display:block;position:absolute;left:10px;transform:translateX(-2px);width:2px;height:100%;background-color:rgba(144,147,153,.6)}.connections-card .connections-header{position:-webkit-sticky;position:sticky;top:0;white-space:nowrap}.connections-card .connections-header:hover .connections-resizer{opacity:1}.connections-card .connetions-item{height:36px}.connections-card .connections-block{display:flex;align-items:center;font-size:14px;line-height:36px;padding:0 10px;color:#54759a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.connections-card .connections-block.center{text-align:center}.connections-card .connections-block.completed{background-color:#e9eef4;color:rgba(84,117,154,.5)}.connections-filter{color:#2c8af8;font-size:14px;line-height:20px;margin-left:15px;text-shadow:0 0 6px rgba(44,138,248,.4);cursor:pointer}.connections-filter.dangerous{color:#f56c6c;text-shadow:0 0 6px rgba(87,190,252,.2)}.connections-filter.total{flex:1;cursor:unset}
|
||||
.external-controller .row{padding:0}.external-controller .alert{margin:10px 0}.external-controller .title,.external-controller .form{margin:15px 0}.external-controller .title{margin-top:15px;font-size:14px;font-weight:bold}@media(max-width: 768px){.external-controller .row{flex-direction:column;align-items:flex-start}.external-controller .title{margin:5px 0}.external-controller .form{margin:5px 0}.external-controller .column{width:100%}.external-controller .alert{display:none}}
|
||||
@ -1,8 +1,8 @@
|
||||
#!/bin/bash /etc/rc.common
|
||||
#!/bin/bash
|
||||
. /lib/functions.sh
|
||||
|
||||
status=$(ps|grep -c /usr/share/openclash/openclash.sh)
|
||||
[ "$status" -gt "3" ] && exit 0
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "1" ] && sleep 5
|
||||
[ "$status" -gt 3 ] && exit 0
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
@ -53,7 +53,7 @@ config_cus_up()
|
||||
uci set openclash.config.config_path="$CONFIG_PATH"
|
||||
uci commit openclash
|
||||
fi
|
||||
if [ "$servers_update" -eq 1 ] || [ ! -z "$keyword" ]; then
|
||||
if [ "$servers_update" -eq 1 ] || [ ! -z "$keyword" ] || [ ! -z "$ex_keyword" ]; then
|
||||
echo "配置文件【$name】替换成功,开始挑选节点..." >$START_LOG
|
||||
uci set openclash.config.config_update_path="/etc/openclash/config/$name.yaml"
|
||||
uci set openclash.config.servers_if_update=1
|
||||
@ -177,6 +177,7 @@ sub_info_get()
|
||||
config_get "type" "$section" "type" ""
|
||||
config_get "address" "$section" "address" ""
|
||||
config_get "keyword" "$section" "keyword" ""
|
||||
config_get "ex_keyword" "$section" "ex_keyword" ""
|
||||
|
||||
if [ "$enabled" -eq 0 ]; then
|
||||
return
|
||||
@ -205,11 +206,13 @@ sub_info_get()
|
||||
|
||||
if [ "$?" -eq 0 ] && [ -s "$CFG_FILE" ]; then
|
||||
config_encode
|
||||
grep "^ \{0,\}proxy-groups:" "$CFG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}rules:" "$CFG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -eq 0 ]; then
|
||||
grep "^ \{0,\}Proxy:" "$CFG_FILE" >/dev/null 2>&1 || grep "^ \{0,\}proxy-providers:" "$CFG_FILE" >/dev/null 2>&1
|
||||
if [ "$?" -eq 0 ]; then
|
||||
config_su_check
|
||||
if [ -n "$(grep "^ \{0,\}proxy-groups:" "$CFG_FILE")" ]; then
|
||||
if [ -n "$(grep "^ \{0,\}Proxy:" "$CFG_FILE" 2>/dev/null)" ] || [ -n "$(grep "^ \{0,\}proxy-providers:" "$CFG_FILE" 2>/dev/null)" ]; then
|
||||
if [ -n "$(grep "^ \{0,\}rules:" "$CFG_FILE" 2>/dev/null)" ] || [ -n "$(grep "^ \{0,\}script:" "$CFG_FILE" 2>/dev/null)" ]; then
|
||||
config_su_check
|
||||
else
|
||||
config_download_direct
|
||||
fi
|
||||
else
|
||||
config_download_direct
|
||||
fi
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
#!/bin/sh
|
||||
RULE_FILE_NAME="$1"
|
||||
if [ -z "$(grep ",$RULE_FILE_NAME" /etc/openclash/rule_providers.list 2>/dev/null)" ]; then
|
||||
DOWNLOAD_PATH=$(grep -F $RULE_FILE_NAME /etc/openclash/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null)
|
||||
RULE_FILE_DIR="/etc/openclash/game_rules/$RULE_FILE_NAME"
|
||||
RULE_TYPE="game"
|
||||
else
|
||||
DOWNLOAD_PATH=$(grep -F ",$RULE_FILE_NAME" /etc/openclash/rule_providers.list |awk -F ',' '{print $4$5}' 2>/dev/null)
|
||||
RULE_FILE_DIR="/etc/openclash/rule_provider/$RULE_FILE_NAME"
|
||||
RULE_TYPE="provider"
|
||||
fi
|
||||
|
||||
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null)
|
||||
PROXY_ADDR=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
if [ -s "/tmp/openclash.auth" ]; then
|
||||
PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null)
|
||||
fi
|
||||
if [ "$RULE_TYPE" = "game" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 5 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
fi
|
||||
elif [ "$RULE_TYPE" = "provider" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 5 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 5 --retry 2 https://raw.githubusercontent.com/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
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
|
||||
echo "${LOGTIME} Rule File【$RULE_FILE_NAME】 Download Successful" >>$LOG_FILE
|
||||
return 1
|
||||
else
|
||||
echo "${LOGTIME} Updated Rule File【$RULE_FILE_NAME】 No Change, Do Nothing" >>$LOG_FILE
|
||||
rm -rf $TMP_RULE_DIR >/dev/null 2>&1
|
||||
return 2
|
||||
fi
|
||||
else
|
||||
rm -rf $TMP_RULE_DIR >/dev/null 2>&1
|
||||
echo "${LOGTIME} Rule File【$RULE_FILE_NAME】 Download Error" >>$LOG_FILE
|
||||
return 0
|
||||
fi
|
||||
@ -1,39 +0,0 @@
|
||||
#!/bin/sh
|
||||
RULE_FILE_NAME="$1"
|
||||
RULE_FILE_ENNAME=$(grep -F $RULE_FILE_NAME /etc/openclash/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null)
|
||||
if [ ! -z "$RULE_FILE_ENNAME" ]; then
|
||||
DOWNLOAD_PATH=$(grep -F $RULE_FILE_NAME /etc/openclash/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null)
|
||||
else
|
||||
DOWNLOAD_PATH=$RULE_FILE_NAME
|
||||
fi
|
||||
RULE_FILE_DIR="/etc/openclash/game_rules/$RULE_FILE_NAME"
|
||||
TMP_RULE_DIR="/tmp/$RULE_FILE_NAME"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null)
|
||||
PROXY_ADDR=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
if [ -s "/tmp/openclash.auth" ]; then
|
||||
PROXY_AUTH=$(cat /tmp/openclash.auth |awk -F '- ' '{print $2}' |sed -n '1p' 2>/dev/null)
|
||||
fi
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/FQrabbit/SSTap-Rule/master/rules/"$DOWNLOAD_PATH" -o "$TMP_RULE_DIR" >/dev/null 2>&1
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ "$(ls -l $TMP_RULE_DIR |awk '{print $5}')" -ne 0 ]; 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
|
||||
echo "${LOGTIME} Rule File【$RULE_FILE_NAME】 Download Successful" >>$LOG_FILE
|
||||
return 1
|
||||
else
|
||||
echo "${LOGTIME} Updated Rule File【$RULE_FILE_NAME】 No Change, Do Nothing" >>$LOG_FILE
|
||||
rm -rf $TMP_RULE_DIR >/dev/null 2>&1
|
||||
return 2
|
||||
fi
|
||||
else
|
||||
rm -rf $TMP_RULE_DIR >/dev/null 2>&1
|
||||
echo "${LOGTIME} Rule File【$RULE_FILE_NAME】 Download Error" >>$LOG_FILE
|
||||
return 0
|
||||
fi
|
||||
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "1" ] && sleep 5
|
||||
status=$(ps|grep -c /usr/share/openclash/openclash_ipdb.sh)
|
||||
[ "$status" -gt 3 ] && exit 0
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
@ -20,6 +20,12 @@
|
||||
echo "GEOIP 数据库下载成功,检查数据库版本是否更新..." >$START_LOG
|
||||
cmp -s /tmp/Country.mmdb /etc/openclash/Country.mmdb
|
||||
if [ "$?" -ne "0" ]; then
|
||||
status=$(ps |grep -v openclash_watchdog |grep -c openclash.sh)
|
||||
while ( [ "$status" -gt 1 ] )
|
||||
do
|
||||
sleep 5
|
||||
status=$(ps |grep -v openclash_watchdog |grep -c openclash.sh)
|
||||
done
|
||||
/etc/init.d/openclash stop
|
||||
echo "数据库版本有更新,开始替换数据库版本..." >$START_LOG\
|
||||
&& mv /tmp/Country.mmdb /etc/openclash/Country.mmdb >/dev/null 2>&1\
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
status=$(ps|grep -c /etc/init.d/openclash)
|
||||
[ "$status" -gt "1" ] && sleep 5
|
||||
status=$(ps|grep -c /usr/share/openclash/openclash_rule.sh)
|
||||
[ "$status" -gt 3 ] && exit 0
|
||||
|
||||
START_LOG="/tmp/openclash_start.log"
|
||||
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
@ -21,20 +21,27 @@
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/lhie1/Rules/master/Clash/Rule.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i '1i rules:' /tmp/rules.yaml
|
||||
elif [ "$RUlE_SOURCE" = "ConnersHua_provider" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Global.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/DivineEngine/Profiles/master/Clash/Global.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i -n '/^rule-providers:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
elif [ "$RUlE_SOURCE" = "ConnersHua" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Global.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Pro.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/Global.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i "/^Rule:/c\^rules:" /tmp/rules.yaml 2>/dev/null && sed -i -n '/^rules:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
sed -i -n '/^rules:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
elif [ "$RUlE_SOURCE" = "ConnersHua_return" ]; then
|
||||
if pidof clash >/dev/null; then
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/BacktoCN.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -sL --connect-timeout 10 --retry 2 -x http://$PROXY_ADDR:$HTTP_PORT -U "$PROXY_AUTH" https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/China.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
else
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/BacktoCN.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/ConnersHua/Profiles/master/Clash/China.yaml -o /tmp/rules.yaml >/dev/null 2>&1
|
||||
fi
|
||||
sed -i "/^Rule:/c\^rules:" /tmp/rules.yaml 2>/dev/null && sed -i -n '/^rules:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
sed -i -n '/^rules:/,$p' /tmp/rules.yaml 2>/dev/null
|
||||
fi
|
||||
if [ "$?" -eq "0" ] && [ "$RUlE_SOURCE" != 0 ] && [ -s "/tmp/rules.yaml" ]; then
|
||||
echo "下载成功,开始预处理规则文件..." >$START_LOG
|
||||
@ -46,6 +53,12 @@
|
||||
mv /tmp/rules.yaml /etc/openclash/"$RUlE_SOURCE".yaml >/dev/null 2>&1
|
||||
sed -i '/^rules:/a\##updated' /etc/openclash/"$RUlE_SOURCE".yaml >/dev/null 2>&1
|
||||
echo "替换成功,重新加载 OpenClash 应用新规则..." >$START_LOG
|
||||
status=$(ps |grep -v openclash_watchdog |grep -c openclash.sh)
|
||||
while ( [ "$status" -gt 1 ] )
|
||||
do
|
||||
sleep 5
|
||||
status=$(ps |grep -v openclash_watchdog |grep -c openclash.sh)
|
||||
done
|
||||
/etc/init.d/openclash restart 2>/dev/null
|
||||
echo "${LOGTIME} Other Rules 【$RUlE_SOURCE】 Update Successful" >>$LOG_FILE
|
||||
else
|
||||
@ -68,4 +81,3 @@
|
||||
sleep 10
|
||||
echo "" >$START_LOG
|
||||
fi
|
||||
sed ':label;N;s/\n//;b label' /etc/openclash/lhie1.yaml
|
||||
|
||||
@ -8,8 +8,8 @@ LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
LOG_FILE="/tmp/openclash.log"
|
||||
LAST_OPVER="/tmp/openclash_last_version"
|
||||
LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g")
|
||||
OP_CV=$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
OP_CV=$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null)
|
||||
PROXY_ADDR=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
if [ -s "/tmp/openclash.auth" ]; then
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
CKTIME=$(date "+%Y-%m-%d-%H")
|
||||
LAST_OPVER="/tmp/openclash_last_version"
|
||||
OP_CV=$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $1"."$2$3}' 2>/dev/null)
|
||||
OP_CV=$(sed -n 1p /etc/openclash/openclash_version 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
OP_LV=$(sed -n 1p $LAST_OPVER 2>/dev/null |awk -F '-' '{print $1}' |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
|
||||
HTTP_PORT=$(uci get openclash.config.http_port 2>/dev/null)
|
||||
PROXY_ADDR=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null)
|
||||
|
||||
|
||||
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
@ -10,12 +10,6 @@ object-assign
|
||||
All rights reserved.
|
||||
*/
|
||||
|
||||
/*!
|
||||
Copyright (c) 2017 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/classnames
|
||||
*/
|
||||
|
||||
/*!
|
||||
* Adapted from jQuery UI core
|
||||
*
|
||||
@ -29,18 +23,18 @@ object-assign
|
||||
*/
|
||||
|
||||
/*! *****************************************************************************
|
||||
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
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
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.
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
See the Apache Version 2.0 License for specific language governing permissions
|
||||
and limitations under the License.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
***************************************************************************** */
|
||||
|
||||
/** @license React v0.0.0-experimental-241c4467e
|
||||
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 +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"><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><link href="https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;700&family=Roboto+Mono&display=swap" rel="stylesheet"><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.19a1a1c098f3d2fbd54e.js"></script><script defer="defer" src="core-js~app.b214178cdb71012cd622.js"></script><script defer="defer" src="react~app.e2d573992419eb24e61b.js"></script><script defer="defer" src="app.1de83e4934f843dc8d9b.js"></script><link href="app.6c8a97d4cbae5f4b8f38.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"><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.37e8203ec536250e1e4c.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.2ba50fd5acdb533fac49.js"></script><link href="app.8ff5510a4335f1c96a7c.css" rel="stylesheet"></head><body><div id="app"></div></body></html>
|
||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
._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{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)}
|
||||
._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}
|
||||
.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)}
|
||||
.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;display:flex;align-items:center;justify-content:space-between;z-index:1;background:var(--color-background);background:linear-gradient(var(--color-background) 70%,transparent)}._2fxAc3OESk{margin-right:20px}._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)}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,9 +0,0 @@
|
||||
._37wt2_a2Gx{display:flex;align-items:center}._37wt2_a2Gx .L80zPM0Rx0{display:inline-flex;-ms-transform:rotate(0deg);transform:rotate(0deg);transition:transform .3s}._37wt2_a2Gx .L80zPM0Rx0._36RO7_wtuv{-ms-transform:rotate(180deg);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}
|
||||
._2V-RqIAl7n{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width:30em){._2V-RqIAl7n{font-size:1em}}
|
||||
.NpfXwxWAxo{position:relative;padding:5px;border-radius:8px;overflow:hidden;max-width:280px;background-color:var(--color-bg-proxy)}@media screen and (min-width:30em){.NpfXwxWAxo{min-width:200px;border-radius:10px;padding:10px}}.NpfXwxWAxo._2zD7drviYH{background-color:var(--color-focus-blue);color:#ddd}.NpfXwxWAxo._2bylJNYYdN{opacity:.5}._1rVl-Kdmss{font-family:var(--font-mono);font-size:.6em}@media screen and (min-width:30em){._1rVl-Kdmss{font-size:1em}}.aS2noEcBcP{display:flex;align-items:center;justify-content:space-between}._3kdi5nima5{width:100%;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;font-size:.85em}@media screen and (min-width:30em){._3kdi5nima5{font-size:1.1em}}._3NpxWygDxO{width:12px;height:12px;border-radius:8px}._3NpxWygDxO ._2zD7drviYH{outline:1px solid pink}
|
||||
._3PCSxT0l14{margin-bottom:12px}._1yYRIyvlRd{display:flex;flex-wrap:wrap;margin-top:8px}._1OcDlvlM5R{margin-right:5px;margin-bottom:5px;transition:transform .2s ease-in-out}@media screen and (min-width:30em){._1OcDlvlM5R{margin-right:10px;margin-bottom:10px}}._1OcDlvlM5R._3oAxPKtZFv{cursor:pointer}._1OcDlvlM5R._3oAxPKtZFv:hover{-ms-transform:translateY(-2px);transform:translateY(-2px)}
|
||||
._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;-ms-transform:translate(-50%,-50%) scale(1.2);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;-ms-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}
|
||||
.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}
|
||||
._3GVE9k27aM{margin-bottom:12px}._3GVE9k27aM small{color:#777}._1PV2l5z2zN{padding:10px 15px}@media screen and (min-width:30em){._1PV2l5z2zN{padding:10px 40px}}._1b5XrAhEUm{display:flex}._1b5XrAhEUm button{margin:0 5px}._1b5XrAhEUm button:first-child{margin-left:0}._2t6Q6BkZ73{display:flex;justify-content:center;align-items:center;cursor:pointer}
|
||||
._39uWX_-wQq{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}._1myfcMimT9{padding:10px 15px}@media screen and (min-width:30em){._1myfcMimT9{padding:10px 40px}}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1 +1 @@
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{BVyM:function(e,t,a){"use strict";a.r(t);var r=a("ODXe"),n=a("q1tI"),i=a.n(n),o=a("iR1w"),c=a("OAQO"),l=a("9cvt"),u=a("WfPo"),s=a("OADI"),f=a("DKqX"),p=a("17x9"),d=a.n(p),m=a("xrux"),v=a.n(m),b={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function y(e){var t=e.type,a=e.payload,r=e.proxy,n=e.id,o=function(e){var t=e.proxy,a=b._default;return b[t]&&(a=b[t]),{color:a}}({proxy:r});return i.a.createElement("div",{className:v.a.rule},i.a.createElement("div",{className:v.a.left},n),i.a.createElement("div",null,i.a.createElement("div",{className:v.a.b},a),i.a.createElement("div",{className:v.a.a},i.a.createElement("div",{className:v.a.type},t),i.a.createElement("div",{style:o},r))))}y.propTypes={id:d.a.number,type:d.a.string,payload:d.a.string,proxy:d.a.string};var O=y,E=a("II4a"),h=a("EwbC"),w=Object(u.a)((function(e){return{searchText:Object(h.d)(e),updateSearchText:h.f}}))(E.a),g=a("Kv4h"),x=i.a.memo,j=i.a.useEffect,k=i.a.useMemo,C=i.a.useCallback;function N(e,t){return t[e].id}var I=x((function(e){var t=e.index,a=e.style,r=e.data[t];return i.a.createElement("div",{style:a},i.a.createElement(O,r))}),o.b);t.default=Object(u.a)((function(e){return{apiConfig:Object(s.b)(e),rules:Object(h.c)(e)}}))((function(e){var t=e.dispatch,a=e.apiConfig,n=e.rules,u=C((function(){t(Object(h.a)(a))}),[a,t]);j((function(){t(Object(h.b)(a))}),[t,a]);var s=Object(g.a)(),p=Object(r.a)(s,2),d=p[0],m=p[1],v=k((function(){return i.a.createElement(c.a,{width:16})}),[]);return i.a.createElement("div",null,i.a.createElement(f.a,{title:"Rules"}),i.a.createElement(w,null),i.a.createElement("div",{ref:d,style:{paddingBottom:30}},i.a.createElement(o.a,{height:m-30,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:N},I)),i.a.createElement(l.b,{icon:v,text:"Refresh",onClick:u,position:l.c}))}))},OAQO:function(e,t,a){"use strict";var r=a("q1tI"),n=a.n(r),i=a("17x9"),o=a.n(i);function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=Object(r.forwardRef)((function(e,t){var a=e.color,r=void 0===a?"currentColor":a,i=e.size,o=void 0===i?24:i,u=l(e,["color","size"]);return n.a.createElement("svg",c({ref:t,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),n.a.createElement("polyline",{points:"23 4 23 10 17 10"}),n.a.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))}));u.propTypes={color:o.a.string,size:o.a.oneOfType([o.a.string,o.a.number])},u.displayName="RotateCw",t.a=u},xrux:function(e,t,a){e.exports={rule:"_3eSLieOhVX",left:"_2n1pW09UvV",a:"t1XJIwvW7A",b:"_1fNf8kj0HA",type:"_3yJmN0tON0"}}}]);
|
||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{BVyM:function(e,t,a){"use strict";a.r(t);var r=a("ODXe"),n=a("q1tI"),i=a.n(n),c=a("iR1w"),o=a("OAQO"),l=a("9cvt"),u=a("WfPo"),s=a("OADI"),f=a("DKqX"),p=a("17x9"),d=a.n(p),m=a("xrux"),v=a.n(m),b={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function y(e){var t=e.type,a=e.payload,r=e.proxy,n=e.id,c=function(e){var t=e.proxy,a=b._default;return b[t]&&(a=b[t]),{color:a}}({proxy:r});return i.a.createElement("div",{className:v.a.rule},i.a.createElement("div",{className:v.a.left},n),i.a.createElement("div",null,i.a.createElement("div",{className:v.a.b},a),i.a.createElement("div",{className:v.a.a},i.a.createElement("div",{className:v.a.type},t),i.a.createElement("div",{style:c},r))))}y.propTypes={id:d.a.number,type:d.a.string,payload:d.a.string,proxy:d.a.string};var O=y,E=a("II4a"),h=a("EwbC"),w=Object(u.a)((function(e){return{searchText:Object(h.d)(e),updateSearchText:h.f}}))(E.a),g=a("Kv4h"),x=i.a.memo,j=i.a.useEffect,k=i.a.useMemo,C=i.a.useCallback;function N(e,t){return t[e].id}var I=x((function(e){var t=e.index,a=e.style,r=e.data[t];return i.a.createElement("div",{style:a},i.a.createElement(O,r))}),c.b);t.default=Object(u.a)((function(e){return{apiConfig:Object(s.c)(e),rules:Object(h.c)(e)}}))((function(e){var t=e.dispatch,a=e.apiConfig,n=e.rules,u=C((function(){t(Object(h.a)(a))}),[a,t]);j((function(){t(Object(h.b)(a))}),[t,a]);var s=Object(g.a)(),p=Object(r.a)(s,2),d=p[0],m=p[1],v=k((function(){return i.a.createElement(o.a,{width:16})}),[]);return i.a.createElement("div",null,i.a.createElement(f.a,{title:"Rules"}),i.a.createElement(w,null),i.a.createElement("div",{ref:d,style:{paddingBottom:30}},i.a.createElement(c.a,{height:m-30,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:N},I)),i.a.createElement(l.b,{icon:v,text:"Refresh",onClick:u,position:l.c}))}))},OAQO:function(e,t,a){"use strict";var r=a("q1tI"),n=a.n(r),i=a("17x9"),c=a.n(i);function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=Object(r.forwardRef)((function(e,t){var a=e.color,r=void 0===a?"currentColor":a,i=e.size,c=void 0===i?24:i,u=l(e,["color","size"]);return n.a.createElement("svg",o({ref:t,xmlns:"http://www.w3.org/2000/svg",width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),n.a.createElement("polyline",{points:"23 4 23 10 17 10"}),n.a.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))}));u.propTypes={color:c.a.string,size:c.a.oneOfType([c.a.string,c.a.number])},u.displayName="RotateCw",t.a=u},xrux:function(e,t,a){e.exports={rule:"_3eSLieOhVX",left:"_2n1pW09UvV",a:"t1XJIwvW7A",b:"_1fNf8kj0HA",type:"_3yJmN0tON0"}}}]);
|
||||
@ -1 +0,0 @@
|
||||
!function(e){function t(t){for(var n,o,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)o=i[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&h.push(a[o][0]),a[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,s);h.length;)h.shift()();return c.push.apply(c,f||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,o=1;o<r.length;o++){var f=r[o];0!==a[f]&&(n=!1)}n&&(c.splice(t--,1),e=l(l.s=r[0]))}return 0===c.length&&(u.forEach((function(e){if(void 0===a[e]){a[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=i(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={5:0},a={5:0},c=[],u=[];function i(e){return l.p+""+({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"98cabc7dc53e642492d1",4:"5123c4f00bc3b0a54628",6:"fa4d4e9c5ca3297a0d20",7:"cd3f974bfcc521d59a74",8:"7958f6e20b89d91ec605"}[e]+".js"}function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{2:1,4:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"f2fb2adff629251cabb9",4:"664f8b737878361937cb",6:"31d6cfe0d16ae931b73c",7:"31d6cfe0d16ae931b73c",8:"31d6cfe0d16ae931b73c"}[e]+".css",a=l.p+n,c=document.getElementsByTagName("link"),u=0;u<c.length;u++){var i=(s=c[u]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(i===n||i===a))return t()}var f=document.getElementsByTagName("style");for(u=0;u<f.length;u++){var s;if((i=(s=f[u]).getAttribute("data-href"))===n||i===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,c=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");c.code="CSS_CHUNK_LOAD_FAILED",c.request=n,delete o[e],d.parentNode.removeChild(d),r(c)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=i(e);var f=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(s);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",f.name="ChunkLoadError",f.type=n,f.request=o,r[1](f)}a[e]=void 0}};var s=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw console.error(e),e};var f=window.webpackJsonp=window.webpackJsonp||[],s=f.push.bind(f);f.push=t,f=f.slice();for(var d=0;d<f.length;d++)t(f[d]);var p=s;r()}([]);
|
||||
@ -0,0 +1 @@
|
||||
!function(e){function t(t){for(var n,o,i=t[0],l=t[1],s=t[2],f=t[3]||[],d=0,h=[];d<i.length;d++)o=i[d],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&h.push(a[o][0]),a[o]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),c.push.apply(c,f);h.length;)h.shift()();return u.push.apply(u,s||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var s=r[o];0!==a[s]&&(n=!1)}n&&(u.splice(t--,1),e=l(l.s=r[0]))}return 0===u.length&&(c.forEach((function(e){if(void 0===a[e]){a[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=i(e),document.head.appendChild(t)}})),c.length=0),e}var n={},o={5:0},a={5:0},u=[],c=[];function i(e){return l.p+""+({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"6a0a58d936ddbebbba53",4:"9bb11b1b25fa6817b033",6:"236a69375b65655cd7e6",7:"a3e2ad41949ba3aa37c4",8:"57c375f07ca41659ac12"}[e]+".js"}function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{2:1,4:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({2:"proxies",4:"rules",6:"vendors~chartjs",7:"vendors~proxies"}[e]||e)+"."+{2:"30780ebe14695af063e3",4:"664f8b737878361937cb",6:"31d6cfe0d16ae931b73c",7:"31d6cfe0d16ae931b73c",8:"31d6cfe0d16ae931b73c"}[e]+".css",a=l.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var i=(f=u[c]).getAttribute("data-href")||f.getAttribute("href");if("stylesheet"===f.rel&&(i===n||i===a))return t()}var s=document.getElementsByTagName("style");for(c=0;c<s.length;c++){var f;if((i=(f=s[c]).getAttribute("data-href"))===n||i===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,l.nc&&c.setAttribute("nonce",l.nc),c.src=i(e);var s=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",s.name="ChunkLoadError",s.type=n,s.request=o,r[1](s)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw console.error(e),e};var s=window.webpackJsonp=window.webpackJsonp||[],f=s.push.bind(s);s.push=t,s=s.slice();for(var d=0;d<s.length;d++)t(s[d]);var p=f;r()}([]);
|
||||
File diff suppressed because one or more lines are too long
@ -160,7 +160,7 @@
|
||||
fi
|
||||
|
||||
if [ "$8" -eq 1 ]; then
|
||||
if [ -z "$(grep " ipv6: true" "$7")" ]; then
|
||||
if [ -z "$(grep "^ ipv6: true" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}ipv6:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}ipv6:/c\ ipv6: true" "$7"
|
||||
else
|
||||
@ -168,7 +168,7 @@
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [ -z "$(grep " ipv6: false" "$7")" ]; then
|
||||
if [ -z "$(grep "^ ipv6: false" "$7")" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}ipv6:" "$7")" ]; then
|
||||
sed -i "/^ \{0,\}ipv6:/c\ ipv6: false" "$7"
|
||||
else
|
||||
@ -219,7 +219,7 @@
|
||||
fi
|
||||
|
||||
#fake-ip-filter
|
||||
sed -i '/##Custom fake-ip-filter##/,/##Custom fake-ip-filter END##/d' "$7" 2>/dev/null
|
||||
sed -i '/##Custom fake-ip-filter##/,/##Custom fake-ip-filter END##/d' "$7" 2>/dev/null
|
||||
if [ "$2" = "fake-ip" ]; then
|
||||
if [ ! -f "/etc/openclash/fake_filter.list" ] || [ ! -z "$(grep "config servers" /etc/config/openclash)" ]; then
|
||||
/usr/share/openclash/openclash_fake_filter.sh
|
||||
|
||||
@ -46,14 +46,42 @@ echo "开始更新【$CONFIG_NAME】的策略组配置..." >$START_LOG
|
||||
exit 0
|
||||
}
|
||||
|
||||
field_cut()
|
||||
{
|
||||
local i lines end_len
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$3" 2>/dev/null |sed -n 1p)
|
||||
provider_len=$(sed -n '/^proxy-providers:/=' "$3" 2>/dev/null)
|
||||
group_len=$(sed -n '/^proxy-groups:/=' "$3" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^rules:/=' "$3" 2>/dev/null)
|
||||
rule_provider_len=$(sed -n '/^rule-providers:/=' "$3" 2>/dev/null)
|
||||
script_len=$(sed -n '/^script:/=' "$3" 2>/dev/null)
|
||||
lines="$proxy_len $provider_len $group_len $rule_len $rule_provider_len $script_len"
|
||||
|
||||
for i in $lines; do
|
||||
if [ -z "$1" ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
if [ "$1" -ge "$i" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$end_len" -gt "$i" ] || [ -z "$end_len" ]; then
|
||||
end_len="$i"
|
||||
fi
|
||||
done 2>/dev/null
|
||||
|
||||
if [ -n "$1" ] && [ -z "$end_len" ]; then
|
||||
end_len=$(sed -n '$=' "$3")
|
||||
elif [ -n "$end_len" ]; then
|
||||
end_len=$(expr "$end_len" - 1)
|
||||
fi
|
||||
sed -n "${1},${end_len}p" "$3" |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null > "$2" 2>/dev/null
|
||||
}
|
||||
|
||||
#判断各个区位置
|
||||
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
provider_len=$(sed -n '/^ \{0,\}proxy-providers:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
if [ "$provider_len" -ge "$group_len" ]; then
|
||||
awk '/proxy-groups:/,/proxy-providers:/{print}' "$CONFIG_FILE" 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
|
||||
else
|
||||
awk '/proxy-groups:/,/rules:/{print}' "$CONFIG_FILE" 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 2>/dev/null
|
||||
field_cut "$group_len" "/tmp/yaml_group.yaml" "$CONFIG_FILE"
|
||||
|
||||
#判断当前配置文件是否有策略组信息
|
||||
cfg_group_name()
|
||||
@ -177,7 +205,7 @@ do
|
||||
if [ "$group_type" = "select" ]; then
|
||||
cat $single_group |while read -r line
|
||||
do
|
||||
if [ -z "$(echo "$line" |grep "^ \{0,\}-")" ]; then
|
||||
if [ -z "$line" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
|
||||
@ -247,7 +247,7 @@ if [ "$create_config" = "0" ] || [ "$servers_if_update" = "1" ] || [ ! -z "$if_g
|
||||
echo "开始写入配置文件【$CONFIG_NAME】的策略组信息..." >$START_LOG
|
||||
echo "proxy-groups:" >$GROUP_FILE
|
||||
else
|
||||
echo "开始加入游戏策略组【$if_game_group】的信息..." >$START_LOG
|
||||
echo "开始加入游戏&规则集策略组【$if_game_group】的信息..." >$START_LOG
|
||||
rm -rf $GROUP_FILE
|
||||
fi
|
||||
config_load "openclash"
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#!/bin/bash /etc/rc.common
|
||||
#!/bin/bash
|
||||
. /lib/functions.sh
|
||||
status=$(ps|grep -c /usr/share/openclash/yml_proxys_get.sh)
|
||||
[ "$status" -gt "3" ] && exit 0
|
||||
|
||||
@ -32,25 +33,45 @@ elif [ ! -s "$CONFIG_FILE" ] && [ -s "$BACKUP_FILE" ]; then
|
||||
mv "$BACKUP_FILE" "$CONFIG_FILE"
|
||||
fi
|
||||
|
||||
field_cut()
|
||||
{
|
||||
local i lines end_len
|
||||
proxy_len=$(sed -n '/^Proxy:/=' "$3" 2>/dev/null |sed -n 1p)
|
||||
provider_len=$(sed -n '/^proxy-providers:/=' "$3" 2>/dev/null)
|
||||
group_len=$(sed -n '/^proxy-groups:/=' "$3" 2>/dev/null)
|
||||
rule_len=$(sed -n '/^rules:/=' "$3" 2>/dev/null)
|
||||
rule_provider_len=$(sed -n '/^rule-providers:/=' "$3" 2>/dev/null)
|
||||
script_len=$(sed -n '/^script:/=' "$3" 2>/dev/null)
|
||||
lines="$proxy_len $provider_len $group_len $rule_len $rule_provider_len $script_len"
|
||||
|
||||
for i in $lines; do
|
||||
if [ -z "$1" ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
if [ "$1" -ge "$i" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$end_len" -gt "$i" ] || [ -z "$end_len" ]; then
|
||||
end_len="$i"
|
||||
fi
|
||||
done 2>/dev/null
|
||||
|
||||
if [ -n "$1" ] && [ -z "$end_len" ]; then
|
||||
end_len=$(sed -n '$=' "$3")
|
||||
elif [ -n "$end_len" ]; then
|
||||
end_len=$(expr "$end_len" - 1)
|
||||
fi
|
||||
sed -n "${1},${end_len}p" "$3" |sed 's/\"//g' 2>/dev/null |sed "s/\'//g" 2>/dev/null |sed 's/\t/ /g' 2>/dev/null > "$2" 2>/dev/null
|
||||
}
|
||||
|
||||
#判断各个区位置
|
||||
proxy_len=$(sed -n '/^ \{0,\}Proxy:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
group_len=$(sed -n '/^ \{0,\}proxy-groups:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
field_cut "$proxy_len" "/tmp/yaml_proxy.yaml" "$CONFIG_FILE"
|
||||
provider_len=$(sed -n '/^ \{0,\}proxy-providers:/=' "$CONFIG_FILE" 2>/dev/null)
|
||||
field_cut "$provider_len" "/tmp/yaml_provider.yaml" "$CONFIG_FILE"
|
||||
|
||||
if [ "$provider_len" -ge "$proxy_len" ] && [ "$provider_len" -le "$group_len" ]; then
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-providers:/{print}' "$CONFIG_FILE" 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-providers:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 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
|
||||
elif [ "$provider_len" -le "$proxy_len" ]; then
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 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-providers:/,/^ {0,}Proxy:/{print}' "$CONFIG_FILE" 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
|
||||
elif [ "$provider_len" -ge "$group_len" ]; then
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 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-providers:/,/^ {0,}rules:/{print}' "$CONFIG_FILE" 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
|
||||
elif [ "$provider_len" -le "$group_len" ]; then
|
||||
awk '/^ {0,}proxy-providers:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 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
|
||||
else
|
||||
awk '/^ {0,}Proxy:/,/^ {0,}proxy-groups:/{print}' "$CONFIG_FILE" 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
|
||||
fi
|
||||
|
||||
CFG_FILE="/etc/config/openclash"
|
||||
server_file="/tmp/yaml_proxy.yaml"
|
||||
@ -69,6 +90,7 @@ new_servers_group=$(uci get openclash.config.new_servers_group 2>/dev/null)
|
||||
#proxy
|
||||
sed -i "s/\'//g" $server_file 2>/dev/null
|
||||
sed -i 's/\"//g' $server_file 2>/dev/null
|
||||
sed -i 's/servername:/servername#/g' $server_file 2>/dev/null
|
||||
line=$(sed -n '/name:/=' $server_file 2>/dev/null)
|
||||
num=$(grep -c "name:" $server_file 2>/dev/null)
|
||||
count=1
|
||||
@ -79,7 +101,7 @@ sed -i 's/\"//g' $provider_file 2>/dev/null
|
||||
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 2>/dev/null |grep -v '^ \{0,\}proxy-providers:\|^ \{0,\}Proxy:\|^ \{0,\}proxy-groups:\|^ \{0,\}rules:\|^ \{0,\}type:\|^ \{0,\}path:\|^ \{0,\}url:\|^ \{0,\}interval:\|^ \{0,\}health-check:\|^ \{0,\}enable:' |awk -F '#*#' '{print $3}')
|
||||
provider_line=$(awk '{print $0"#*#"FNR}' $provider_file 2>/dev/null |grep -v '^ \{0,\}proxy-providers:\|^ \{0,\}Proxy:\|^ \{0,\}proxy-groups:\|^ \{0,\}rules:\|^ \{0,\}rule-providers:\|^ \{0,\}script:\|^ \{0,\}type:\|^ \{0,\}path:\|^ \{0,\}url:\|^ \{0,\}interval:\|^ \{0,\}health-check:\|^ \{0,\}enable:' |awk -F '#*#' '{print $3}')
|
||||
provider_num=$(grep -c "type:" $provider_file 2>/dev/null)
|
||||
provider_count=1
|
||||
|
||||
@ -524,6 +546,8 @@ do
|
||||
alterId="$(cfg_get "alterId:" "$single_server")"
|
||||
#cipher
|
||||
cipher="$(cfg_get "cipher:" "$single_server")"
|
||||
#servername
|
||||
servername="$(cfg_get "servername#" "$single_server")"
|
||||
#network:
|
||||
network="$(cfg_get "network:" "$single_server")"
|
||||
#ws-path:
|
||||
@ -604,6 +628,7 @@ do
|
||||
${uci_set}securitys="$cipher"
|
||||
${uci_set}alterId="$alterId"
|
||||
${uci_set}uuid="$uuid"
|
||||
${uci_set}servername="$servername"
|
||||
if [ "$network" = "ws" ]; then
|
||||
${uci_set}obfs_vmess="websocket"
|
||||
${uci_set}path="$ws_path"
|
||||
@ -687,6 +712,7 @@ do
|
||||
${uci_set}securitys="$cipher"
|
||||
${uci_set}alterId="$alterId"
|
||||
${uci_set}uuid="$uuid"
|
||||
${uci_set}servername="$servername"
|
||||
if [ "$network" = "ws" ]; then
|
||||
${uci_set}obfs_vmess="websocket"
|
||||
${uci_set}path="$ws_path"
|
||||
|
||||
@ -154,6 +154,7 @@ yml_servers_set()
|
||||
config_get "alpn" "$section" "alpn" ""
|
||||
config_get "http_path" "$section" "http_path" ""
|
||||
config_get "keep_alive" "$section" "keep_alive" ""
|
||||
config_get "servername" "$section" "servername" ""
|
||||
|
||||
if [ ! -z "$if_game_proxy" ] && [ "$if_game_proxy" != "$name" ] && [ "$if_game_proxy_type" = "proxy" ]; then
|
||||
return
|
||||
@ -292,6 +293,11 @@ EOF
|
||||
if [ ! -z "$udp" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
udp: $udp
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$skip_cert_verify" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
skip-cert-verify: $skip_cert_verify
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$tls" ]; then
|
||||
@ -299,9 +305,9 @@ cat >> "$SERVER_FILE" <<-EOF
|
||||
tls: $tls
|
||||
EOF
|
||||
fi
|
||||
if [ ! -z "$skip_cert_verify" ]; then
|
||||
if [ ! -z "$servername" ] && [ "$tls" = "true" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
skip-cert-verify: $skip_cert_verify
|
||||
servername: $servername
|
||||
EOF
|
||||
fi
|
||||
if [ "$obfs_vmess" != "none" ]; then
|
||||
@ -552,17 +558,6 @@ cat >> "$SERVER_FILE" <<-EOF
|
||||
- Proxy
|
||||
- DIRECT
|
||||
- Domestic
|
||||
- name: AdBlock
|
||||
type: select
|
||||
proxies:
|
||||
- REJECT
|
||||
- DIRECT
|
||||
- Proxy
|
||||
- name: Apple
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- Proxy
|
||||
- name: AsianTV
|
||||
type: select
|
||||
proxies:
|
||||
@ -594,7 +589,99 @@ ${UCI_SET}rule_source="ConnersHua"
|
||||
${UCI_SET}GlobalTV="GlobalTV"
|
||||
${UCI_SET}AsianTV="AsianTV"
|
||||
${UCI_SET}Proxy="Proxy"
|
||||
${UCI_SET}Apple="Apple"
|
||||
${UCI_SET}Domestic="Domestic"
|
||||
${UCI_SET}Others="Others"
|
||||
[ "$config_auto_update" -eq 1 ] && [ "$new_servers_group_set" -eq 1 ] && {
|
||||
${UCI_SET}servers_update="1"
|
||||
${UCI_DEL_LIST}="Auto - UrlTest" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Auto - UrlTest" >/dev/null 2>&1
|
||||
${UCI_DEL_LIST}="Proxy" >/dev/null 2>&1 && ${UCI_ADD_LIST}="Proxy" >/dev/null 2>&1
|
||||
${UCI_DEL_LIST}="AsianTV" >/dev/null 2>&1 && ${UCI_ADD_LIST}="AsianTV" >/dev/null 2>&1
|
||||
${UCI_DEL_LIST}="GlobalTV" >/dev/null 2>&1 && ${UCI_ADD_LIST}="GlobalTV" >/dev/null 2>&1
|
||||
}
|
||||
elif [ "$rule_sources" = "ConnersHua_provider" ] && [ "$servers_if_update" != "1" ] && [ -z "$if_game_proxy" ]; then
|
||||
echo "使用ConnersHua(规则集)规则创建中..." >$START_LOG
|
||||
echo "proxy-groups:" >>$SERVER_FILE
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: Auto - UrlTest
|
||||
type: url-test
|
||||
EOF
|
||||
if [ -f "/tmp/Proxy_Server" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
proxies:
|
||||
EOF
|
||||
fi
|
||||
cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null
|
||||
if [ -f "/tmp/Proxy_Provider" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
use:
|
||||
EOF
|
||||
fi
|
||||
cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
url: http://www.gstatic.com/generate_204
|
||||
interval: "600"
|
||||
- name: Proxy
|
||||
type: select
|
||||
proxies:
|
||||
- Auto - UrlTest
|
||||
- DIRECT
|
||||
EOF
|
||||
cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null
|
||||
if [ -f "/tmp/Proxy_Provider" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
use:
|
||||
EOF
|
||||
fi
|
||||
cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: Domestic
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- Proxy
|
||||
- name: Others
|
||||
type: select
|
||||
proxies:
|
||||
- Proxy
|
||||
- DIRECT
|
||||
- Domestic
|
||||
- name: AdBlock
|
||||
type: select
|
||||
proxies:
|
||||
- REJECT
|
||||
- DIRECT
|
||||
- Proxy
|
||||
- name: AsianTV
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- Proxy
|
||||
EOF
|
||||
cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null
|
||||
if [ -f "/tmp/Proxy_Provider" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
use:
|
||||
EOF
|
||||
fi
|
||||
cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
- name: GlobalTV
|
||||
type: select
|
||||
proxies:
|
||||
- Proxy
|
||||
- DIRECT
|
||||
EOF
|
||||
cat /tmp/Proxy_Server >> $SERVER_FILE 2>/dev/null
|
||||
if [ -f "/tmp/Proxy_Provider" ]; then
|
||||
cat >> "$SERVER_FILE" <<-EOF
|
||||
use:
|
||||
EOF
|
||||
fi
|
||||
cat /tmp/Proxy_Provider >> $SERVER_FILE 2>/dev/null
|
||||
${UCI_SET}rule_source="ConnersHua_provider"
|
||||
${UCI_SET}GlobalTV="GlobalTV"
|
||||
${UCI_SET}AsianTV="AsianTV"
|
||||
${UCI_SET}Proxy="Proxy"
|
||||
${UCI_SET}AdBlock="AdBlock"
|
||||
${UCI_SET}Domestic="Domestic"
|
||||
${UCI_SET}Others="Others"
|
||||
|
||||
@ -1,8 +1,83 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
check_def=0
|
||||
/usr/share/openclash/yml_groups_name_get.sh
|
||||
|
||||
yml_other_set()
|
||||
{
|
||||
sed -i "s/'//g" "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/,/^##Custom Rules End##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules End##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/,/^##Custom Rules 2 End##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2 End##/d' "$4" 2>/dev/null
|
||||
sed -i '/- DOMAIN-KEYWORD,tracker,DIRECT/d' "$4" 2>/dev/null
|
||||
sed -i '/- DOMAIN-KEYWORD,announce,DIRECT/d' "$4" 2>/dev/null
|
||||
sed -i '/- DOMAIN-KEYWORD,torrent,DIRECT/d' "$4" 2>/dev/null
|
||||
|
||||
if [ -z "$(grep '^ \{0,\}- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ] && [ "$6" = "fake-ip" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}- IP-CIDR,198.18.0.1/16" "$4")" ]; then
|
||||
sed -i "/^ \{0,\}- IP-CIDR,198.18.0.1\/16/c\- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve" "$4" 2>/dev/null
|
||||
else
|
||||
sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" 2>/dev/null
|
||||
if [ -z "$(grep '^- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ]; then
|
||||
sed -i '1,/^ \{0,\}- MATCH/{/^ \{0,\}- MATCH/s/^ \{0,\}- MATCH/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep '^- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ]; then
|
||||
sed -i '1,/^ \{0,\}- FINAL/{/^ \{0,\}- FINAL/s/^ \{0,\}- FINAL/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$7" = 1 ]; then
|
||||
sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" 2>/dev/null
|
||||
if [ -z "$(grep '^- DOMAIN-KEYWORD,tracker,DIRECT' "$4")" ]; then
|
||||
sed -i '1,/^ \{0,\}- MATCH/{/^ \{0,\}- MATCH/s/^ \{0,\}- MATCH/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep '^- DOMAIN-KEYWORD,tracker,DIRECT' "$4")" ]; then
|
||||
sed -i '1,/^ \{0,\}- FINAL/{/^ \{0,\}- FINAL/s/^ \{0,\}- FINAL/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep '^- DOMAIN-KEYWORD,tracker,DIRECT' "$4")" ]; then
|
||||
echo "- DOMAIN-KEYWORD,tracker,DIRECT" >> "$4" 2>/dev/null
|
||||
fi
|
||||
sed -i "/- DOMAIN-KEYWORD,tracker,DIRECT/a\- DOMAIN-KEYWORD,announce,DIRECT" "$4" 2>/dev/null
|
||||
sed -i "/- DOMAIN-KEYWORD,tracker,DIRECT/a\- DOMAIN-KEYWORD,torrent,DIRECT" "$4" 2>/dev/null
|
||||
if [ -z "$(grep "###- MATCH," "$4")" ] && [ -z "$(grep "###- FINAL," "$4")" ]; then
|
||||
sed -i 's/- MATCH,/###&/' "$4" 2>/dev/null
|
||||
sed -i 's/- FINAL,/###&/' "$4" 2>/dev/null
|
||||
echo "- MATCH,DIRECT" >> "$4" 2>/dev/null
|
||||
fi
|
||||
else
|
||||
if [ ! -z "$(grep "###- MATCH," "$4")" ] || [ ! -z "$(grep "###- FINAL," "$4")" ]; then
|
||||
sed -i '/^- MATCH,DIRECT/d' "$4" 2>/dev/null
|
||||
sed -i "s/###- MATCH,/- MATCH,/" "$4" 2>/dev/null
|
||||
sed -i "s/###- FINAL,/- FINAL,/" "$4" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$3" = 1 ]; then
|
||||
sed -i '/^rules:/a\##Custom Rules End##' "$4" 2>/dev/null
|
||||
sed -i '/^rules:/a\##Custom Rules##' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/r/etc/openclash/custom/openclash_custom_rules.list' "$4" 2>/dev/null
|
||||
sed -i '/^ \{0,\}- MATCH,/i\##Custom Rules 2##' "$4" 2>/dev/null
|
||||
if [ -z "$(grep '^##Custom Rules 2##' "$4")" ]; then
|
||||
sed -i '/^ \{0,\}- FINAL,/i\##Custom Rules 2##' "$4" 2>/dev/null
|
||||
fi
|
||||
if [ -z "$(grep '^##Custom Rules 2##' "$4")" ]; then
|
||||
echo "##Custom Rules 2##" >> "$4" 2>/dev/null
|
||||
fi
|
||||
sed -i '/^##Custom Rules 2##/a\##Custom Rules 2 End##' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/r/etc/openclash/custom/openclash_custom_rules_2.list' "$4" 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ "$5" = 1 ] || [ "$3" = 1 ] || [ "$7" = 1 ] || [ -z "$(grep '- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ]; then
|
||||
sed -i "s/^ \{0,\}-/-/" "$4" 2>/dev/null #修改参数空格
|
||||
sed -i "s/^\t\{0,\}-/-/" "$4" 2>/dev/null #修改参数tab
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if [ "$2" != 0 ]; then
|
||||
#判断策略组是否存在
|
||||
GlobalTV=$(uci get openclash.config.GlobalTV 2>/dev/null)
|
||||
@ -24,17 +99,28 @@ if [ "$2" != 0 ]; then
|
||||
if [ -z "$(grep "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Others" /tmp/Proxy_Group)" ];then
|
||||
echo "${1} Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" >>/tmp/openclash.log
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
exit 0
|
||||
fi
|
||||
elif [ "$2" = "ConnersHua" ]; then
|
||||
elif [ "$2" = "ConnersHua_provider" ]; then
|
||||
if [ -z "$(grep "$GlobalTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$AsianTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Apple" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$AdBlock" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
echo "${1} Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" >>/tmp/openclash.log
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
exit 0
|
||||
fi
|
||||
elif [ "$2" = "ConnersHua" ]; then
|
||||
if [ -z "$(grep "$GlobalTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$AsianTV" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Proxy" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
echo "${1} Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" >>/tmp/openclash.log
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
exit 0
|
||||
fi
|
||||
elif [ "$2" = "lhie1" ]; then
|
||||
@ -54,11 +140,13 @@ if [ "$2" != 0 ]; then
|
||||
|| [ -z "$(grep "$Others" /tmp/Proxy_Group)" ]\
|
||||
|| [ -z "$(grep "$Domestic" /tmp/Proxy_Group)" ]; then
|
||||
echo "${1} Warning: Because of The Different Porxy-Group's Name, Stop Setting The Other Rules!" >>/tmp/openclash.log
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
if [ "$Proxy" = "读取错误,配置文件异常!" ]; then
|
||||
echo "${1} Warning: Can not Get The Porxy-Group's Name, Stop Setting The Other Rules!" >>/tmp/openclash.log
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
exit 0
|
||||
else
|
||||
rulesource=$(grep '##source:' "$4" |awk -F ':' '{print $2}')
|
||||
@ -96,12 +184,19 @@ if [ "$2" != 0 ]; then
|
||||
|| [ "$Others" != "$Others_YAML" ];then
|
||||
check_def=1
|
||||
fi
|
||||
elif [ "$2" = "ConnersHua_provider" ]; then
|
||||
if [ "$GlobalTV" != "$GlobalTV_YAML" ]\
|
||||
|| [ "$AsianTV" != "$AsianTV_YAML" ]\
|
||||
|| [ "$Proxy" != "$Proxy_YAML" ]\
|
||||
|| [ "$AdBlock" != "$AdBlock_YAML" ]\
|
||||
|| [ "$Others" != "$Others_YAML" ]\
|
||||
|| [ "$Domestic" != "$Domestic_YAML" ]; then
|
||||
check_def=1
|
||||
fi
|
||||
elif [ "$2" = "ConnersHua" ]; then
|
||||
if [ "$GlobalTV" != "$GlobalTV_YAML" ]\
|
||||
|| [ "$AsianTV" != "$AsianTV_YAML" ]\
|
||||
|| [ "$Proxy" != "$Proxy_YAML" ]\
|
||||
|| [ "$Apple" != "$Apple_YAML" ]\
|
||||
|| [ "$AdBlock" != "$AdBlock_YAML" ]\
|
||||
|| [ "$Others" != "$Others_YAML" ]\
|
||||
|| [ "$Domestic" != "$Domestic_YAML" ]; then
|
||||
check_def=1
|
||||
@ -128,115 +223,151 @@ if [ "$2" != 0 ]; then
|
||||
}
|
||||
|
||||
if [ "$check_def" -eq 1 ]; then
|
||||
sed -i '/^rules:/,$d' "$4" 2>/dev/null
|
||||
sed -i '/##Other-rule-providers##/,/##Other-rule-providers-end##/d' "$9" 2>/dev/null
|
||||
if [ "$2" = "lhie1" ]; then
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/lhie1.yaml >> "$4"
|
||||
sed -i -e "s/,GlobalTV$/,${GlobalTV}#d/g" -e "/rules:/a\##GlobalTV:${GlobalTV}"\
|
||||
-e "s/,AsianTV$/,${AsianTV}#d/g" -e "/rules:/a\##AsianTV:${AsianTV}"\
|
||||
-e "s/,Proxy$/,${Proxy}#d/g" -e "/rules:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,Apple$/,${Apple}#d/g"\
|
||||
-e "s/,Apple,no-resolve$/,${Apple},no-resolve#d/g" -e "/rules:/a\##Apple:${Apple}"\
|
||||
-e "s/,Netflix$/,${Netflix}#d/g" -e "/rules:/a\##Netflix:${Netflix}"\
|
||||
-e "s/,Spotify$/,${Spotify}#d/g" -e "/rules:/a\##Spotify:${Spotify}"\
|
||||
-e "s/,Steam$/,${Steam}#d/g" -e "/rules:/a\##Steam:${Steam}"\
|
||||
-e "s/,AdBlock$/,${AdBlock}#d/g" -e "/rules:/a\##AdBlock:${AdBlock}"\
|
||||
-e "s/,Netease Music$/,${Netease_Music}#d/g" -e "/rules:/a\##Netease_Music:${Netease_Music}"\
|
||||
-e "s/,Speedtest$/,${Speedtest}#d/g" -e "/rules:/a\##Speedtest:${Speedtest}"\
|
||||
-e "s/,Telegram$/,${Telegram}#d/g" -e "/rules:/a\##Telegram:${Telegram}"\
|
||||
-e "s/,Microsoft$/,${Microsoft}#d/g" -e "/rules:/a\##Microsoft:${Microsoft}"\
|
||||
-e "s/,PayPal$/,${PayPal}#d/g" -e "/rules:/a\##PayPal:${PayPal}"\
|
||||
-e "s/,Domestic$/,${Domestic}#d/g" -e "/rules:/a\##Domestic:${Domestic}"\
|
||||
-e "s/,Others$/,${Others}#d/g" -e "/rules:/a\##Others:${Others}"\
|
||||
-e "s/#d//g" "$4"
|
||||
cp /etc/openclash/lhie1.yaml /tmp/other_rule.yaml
|
||||
sed -i "s/,GlobalTV$/,${GlobalTV}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,GlobalTV,no-resolve$/,${GlobalTV},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##GlobalTV:${GlobalTV}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,AsianTV$/,${AsianTV}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,AsianTV,no-resolve$/,${AsianTV},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##AsianTV:${AsianTV}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Proxy$/,${Proxy}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Proxy,no-resolve$/,${Proxy},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Proxy:${Proxy}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Apple$/,${Apple}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Apple,no-resolve$/,${Apple},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Apple:${Apple}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Netflix$/,${Netflix}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Netflix,no-resolve$/,${Netflix},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Netflix:${Netflix}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Spotify$/,${Spotify}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Spotify,no-resolve$/,${Spotify},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Spotify:${Spotify}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Steam$/,${Steam}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Steam,no-resolve$/,${Steam},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Steam:${Steam}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,AdBlock$/,${AdBlock}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,AdBlock,no-resolve$/,${AdBlock},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##AdBlock:${AdBlock}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Netease Music$/,${Netease_Music}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Netease Music$/,${Netease_Music},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Netease_Music:${Netease_Music}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Speedtest$/,${Speedtest}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Speedtest$/,${Speedtest},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Speedtest:${Speedtest}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Telegram$/,${Telegram}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Telegram$/,${Telegram},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Telegram:${Telegram}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Microsoft$/,${Microsoft}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Microsoft$/,${Microsoft},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Microsoft:${Microsoft}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PayPal$/,${PayPal}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PayPal$/,${PayPal},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##PayPal:${PayPal}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Domestic$/,${Domestic}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Domestic$/,${Domestic},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Domestic:${Domestic}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Others$/,${Others}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Others$/,${Others},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Others:${Others}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/#d//g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
elif [ "$2" = "ConnersHua_provider" ]; then
|
||||
cp /etc/openclash/ConnersHua_provider.yaml /tmp/other_rule_provider.yaml
|
||||
sed -n '/^rules:/,$p' /tmp/other_rule_provider.yaml > /tmp/other_rule.yaml 2>/dev/null
|
||||
sed -i '/^rules:/,$d' /tmp/other_rule_provider.yaml 2>/dev/null
|
||||
sed -i "/^ \{0,\}rule-providers:/c\rule-providers:" /tmp/other_rule_provider.yaml 2>/dev/null
|
||||
echo "##Other-rule-providers-end##" >> /tmp/other_rule_provider.yaml
|
||||
if [ -z "$(sed -n '/^ \{0,\}rule-providers:/=' "$9" 2>/dev/null)" ]; then
|
||||
sed -i "s/,Streaming$/,${GlobalTV}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Streaming,no-resolve$/,${GlobalTV},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##GlobalTV:${GlobalTV}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,StreamingSE$/,${AsianTV}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,StreamingSE,no-resolve$/,${AsianTV},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##AsianTV:${AsianTV}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PROXY$/,${Proxy}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PROXY,no-resolve$/,${Proxy},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,IP-Blackhole$/,${Proxy}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,IP-Blackhole,no-resolve$/,${Proxy},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Proxy:${Proxy}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,China,DIRECT$/,China,${Domestic}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,China,DIRECT,no-resolve$/,China,${Domestic},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,ChinaIP,DIRECT$/,China,${Domestic}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,ChinaIP,DIRECT,no-resolve$/,China,${Domestic},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,CN,DIRECT$/,China,${Domestic}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,CN,DIRECT,no-resolve$/,China,${Domestic},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Domestic:${Domestic}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Unbreak,DIRECT$/,Unbreak,${AdBlock}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,Unbreak,DIRECT,no-resolve$/,Unbreak,${AdBlock},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Others:${AdBlock}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,MATCH$/,${Others}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,MATCH,no-resolve$/,${Others},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Others:${Others}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/#d//g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/^rule-providers:/c\rule-providers: ##Other-rule-providers##" /tmp/other_rule_provider.yaml 2>/dev/null
|
||||
cat /tmp/other_rule_provider.yaml >> "$9" 2>/dev/null
|
||||
else
|
||||
#处理缩进
|
||||
sed -i '/^ *$/d' "$9" 2>/dev/null
|
||||
sed -i 's/\t/ /g' "$9" 2>/dev/null
|
||||
sed -i '/^ \{0,\}#/d' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}/ /g' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}type:/ type:/g' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}behavior:/ behavior:/g' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}path:/ path:/g' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}url:/ url:/g' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}interval:/ interval:/g' "$9" 2>/dev/null
|
||||
sed -i 's/^ \{1,\}rule-providers:/rule-providers:/g' "$9" 2>/dev/null
|
||||
|
||||
sed -i '/^ \{0,\}rule-providers:/a\##Other-rule-providers##' /tmp/other_rule_provider.yaml 2>/dev/null
|
||||
sed -i '/^ \{0,\}rule-providers:/d' "/tmp/other_rule_provider.yaml" 2>/dev/null
|
||||
sed -i '/rule-providers:/r/tmp/other_rule_provider.yaml' "$9" 2>/dev/null
|
||||
fi
|
||||
elif [ "$2" = "ConnersHua" ]; then
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/ConnersHua.yaml >> "$4"
|
||||
sed -i -e "s/,GlobalMedia$/,${GlobalTV}#d/g"\
|
||||
-e "s/,GlobalMedia,no-resolve$/,${GlobalTV},no-resolve#d/g" -e "/rules:/a\##GlobalTV:${GlobalTV}"\
|
||||
-e "s/,HKMTMedia$/,${AsianTV}#d/g" -e "/rules:/a\##AsianTV:${AsianTV}"\
|
||||
-e "s/,PROXY$/,${Proxy}#d/g"\
|
||||
-e "s/,PROXY,no-resolve$/,${Proxy},no-resolve#d/g" -e "/rules:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,Apple$/,${Apple}#d/g" -e "/rules:/a\##Apple:${Apple}"\
|
||||
-e "s/,Hijacking,no-resolve$/,${AdBlock},no-resolve#d/g"\
|
||||
-e "s/,Hijacking$/,${AdBlock}#d/g" -e "/rules:/a\##AdBlock:${AdBlock}"\
|
||||
-e "s/,DIRECT$/,${Domestic}#d/g" -e "/rules:/a\##Domestic:${Domestic}"\
|
||||
-e "s/,Final$/,${Others}#d/g" -e "/rules:/a\##Others:${Others}"\
|
||||
-e "s/#d//g" "$4"
|
||||
cp /etc/openclash/ConnersHua.yaml /tmp/other_rule.yaml
|
||||
sed -i "s/,GlobalMedia$/,${GlobalTV}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,GlobalMedia,no-resolve$/,${GlobalTV},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##GlobalTV:${GlobalTV}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,HKMTMedia$/,${AsianTV}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,HKMTMedia,no-resolve$/,${AsianTV},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##AsianTV:${AsianTV}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PROXY$/,${Proxy}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PROXY,no-resolve$/,${Proxy},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Proxy:${Proxy}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,DIRECT$/,${Domestic}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,DIRECT,no-resolve$/,${Domestic},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Domestic:${Domestic}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,MATCH$/,${Others}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,MATCH,no-resolve$/,${Others},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Others:${Others}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/#d//g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
else
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/ConnersHua_return.yaml >> "$4"
|
||||
sed -i -e "s/,PROXY$/,${Proxy}#d/g" -e "/rules:/a\##Proxy:${Proxy}"\
|
||||
-e "s/,DIRECT$/,${Others}#d/g" -e "/rules:/a\##Others:${Others}"\
|
||||
-e "s/#d//g" "$4"
|
||||
cp /etc/openclash/ConnersHua_return.yaml /tmp/other_rule.yaml
|
||||
sed -i "s/,PROXY$/,${Proxy}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,PROXY,no-resolve$/,${Proxy},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Proxy:${Proxy}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,DIRECT$/,${Others}#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/,DIRECT,no-resolve$/,${Others},no-resolve#d/g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "/rules:/a\##Others:${Others}" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
sed -i "s/#d//g" "/tmp/other_rule.yaml" 2>/dev/null
|
||||
fi
|
||||
cat /tmp/other_rule.yaml >> "$4" 2>/dev/null
|
||||
rm -rf /tmp/other_rule* 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
elif [ "$2" = 0 ]; then
|
||||
[ -f "$8" ] && {
|
||||
grep '##source:' "$4" 1>/dev/null
|
||||
if [ "$?" -eq "0" ]; then
|
||||
cp "$8" /etc/openclash/configrules.bak
|
||||
sed -i -n '/^rules:/,$p' /etc/openclash/configrules.bak
|
||||
cp "$8" /tmp/configrules.bak
|
||||
sed -i -n '/^rules:/,$p' /tmp/configrules.bak
|
||||
sed -i '/^rules:/,$d' "$4"
|
||||
cat /etc/openclash/configrules.bak >> "$4"
|
||||
rm -rf /etc/openclash/configrules.bak
|
||||
sed -i '/##Other-rule-providers##/,/##Other-rule-providers-end##/d' "$9" 2>/dev/null
|
||||
cat /tmp/configrules.bak >> "$4" 2>/dev/null
|
||||
rm -rf /tmp/configrules.bak 2>/dev/null
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
sed -i "s/'//g" "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/,/^##Custom Rules End##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules End##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/,/^##Custom Rules 2 End##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/d' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2 End##/d' "$4" 2>/dev/null
|
||||
sed -i '/- DOMAIN-KEYWORD,tracker,DIRECT/d' "$4" 2>/dev/null
|
||||
sed -i '/- DOMAIN-KEYWORD,announce,DIRECT/d' "$4" 2>/dev/null
|
||||
sed -i '/- DOMAIN-KEYWORD,torrent,DIRECT/d' "$4" 2>/dev/null
|
||||
|
||||
if [ -z "$(grep '^ \{0,\}- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ] && [ "$6" = "fake-ip" ]; then
|
||||
if [ ! -z "$(grep "^ \{0,\}- IP-CIDR,198.18.0.1/16" "$4")" ]; then
|
||||
sed -i "/^ \{0,\}- IP-CIDR,198.18.0.1\/16/c\- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve" "$4" 2>/dev/null
|
||||
else
|
||||
sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" 2>/dev/null\
|
||||
|| sed -i '1,/^ \{0,\}- MATCH/{/^ \{0,\}- MATCH/s/^ \{0,\}- MATCH/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" 2>/dev/null\
|
||||
|| sed -i '1,/^ \{0,\}- FINAL/{/^ \{0,\}- FINAL/s/^ \{0,\}- FINAL/- IP-CIDR,198.18.0.1\/16,REJECT,no-resolve\n&/}' "$4" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$7" = 1 ]; then
|
||||
sed -i '1,/^ \{0,\}- GEOIP/{/^ \{0,\}- GEOIP/s/^ \{0,\}- GEOIP/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" 2>/dev/null\
|
||||
|| sed -i '1,/^ \{0,\}- MATCH/{/^ \{0,\}- MATCH/s/^ \{0,\}- MATCH/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" 2>/dev/null\
|
||||
|| sed -i '1,/^ \{0,\}- FINAL/{/^ \{0,\}- FINAL/s/^ \{0,\}- FINAL/- DOMAIN-KEYWORD,tracker,DIRECT\n&/}' "$4" 2>/dev/null\
|
||||
|| echo "- DOMAIN-KEYWORD,tracker,DIRECT" >> "$4" 2>/dev/null
|
||||
sed -i "/- DOMAIN-KEYWORD,tracker,DIRECT/a\- DOMAIN-KEYWORD,announce,DIRECT" "$4" 2>/dev/null
|
||||
sed -i "/- DOMAIN-KEYWORD,tracker,DIRECT/a\- DOMAIN-KEYWORD,torrent,DIRECT" "$4" 2>/dev/null
|
||||
if [ -z "$(grep "###- MATCH," "$4")" ] && [ -z "$(grep "###- FINAL," "$4")" ]; then
|
||||
sed -i 's/- MATCH,/###&/' "$4" 2>/dev/null
|
||||
sed -i 's/- FINAL,/###&/' "$4" 2>/dev/null
|
||||
echo "- MATCH,DIRECT" >> "$4" 2>/dev/null
|
||||
fi
|
||||
else
|
||||
if [ ! -z "$(grep "###- MATCH," "$4")" ] || [ ! -z "$(grep "###- FINAL," "$4")" ]; then
|
||||
sed -i '/^- MATCH,DIRECT/d' "$4" 2>/dev/null
|
||||
sed -i "s/###- MATCH,/- MATCH,/" "$4" 2>/dev/null
|
||||
sed -i "s/###- FINAL,/- FINAL,/" "$4" 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$3" = 1 ]; then
|
||||
sed -i '/^rules:/a\##Custom Rules End##' "$4" 2>/dev/null
|
||||
sed -i '/^rules:/a\##Custom Rules##' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules##/r/etc/openclash/custom/openclash_custom_rules.list' "$4" 2>/dev/null
|
||||
sed -i '/^ \{0,\}- MATCH,/i\##Custom Rules 2##' "$4" 2>/dev/null\
|
||||
|| sed -i '/^ \{0,\}- FINAL,/i\##Custom Rules 2##' "$4" 2>/dev/null\
|
||||
|| echo "##Custom Rules 2##" >> "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/a\##Custom Rules 2 End##' "$4" 2>/dev/null
|
||||
sed -i '/^##Custom Rules 2##/r/etc/openclash/custom/openclash_custom_rules_2.list' "$4" 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ "$5" = 1 ] || [ "$3" = 1 ] || [ "$7" = 1 ] || [ -z "$(grep '- IP-CIDR,198.18.0.1/16,REJECT,no-resolve' "$4")" ]; then
|
||||
sed -i "s/^ \{0,\}-/-/" "$4" 2>/dev/null #修改参数空格
|
||||
sed -i "s/^\t\{0,\}-/-/" "$4" 2>/dev/null #修改参数tab
|
||||
fi
|
||||
yml_other_set "$1" "$2" "$3" "$4" "$5" "$6" "$7"
|
||||
@ -20,9 +20,18 @@ msgstr "运行状态"
|
||||
msgid "Global Settings"
|
||||
msgstr "全局设置"
|
||||
|
||||
msgid "Rule Providers and Groups"
|
||||
msgstr "规则集与策略组管理"
|
||||
|
||||
msgid "Game Rules and Groups"
|
||||
msgstr "游戏规则与策略组管理"
|
||||
|
||||
msgid "Other Rule Providers and Groups"
|
||||
msgstr "第三方规则集与策略组管理"
|
||||
|
||||
msgid "Custom Rule Providers and Groups"
|
||||
msgstr "自定义规则集与策略组管理"
|
||||
|
||||
msgid "General Settings"
|
||||
msgstr "常规设置"
|
||||
|
||||
@ -286,6 +295,9 @@ msgstr "注意:只支持【yaml】后缀的文件,文件将被保存到 /etc
|
||||
msgid "Proxy Provider File List"
|
||||
msgstr "代理集文件列表"
|
||||
|
||||
msgid "Rule Providers File List"
|
||||
msgstr "规则集文件列表"
|
||||
|
||||
msgid "Please Make Sure Ports Available"
|
||||
msgstr "请确保端口可用"
|
||||
|
||||
@ -385,6 +397,9 @@ msgstr "lhie1 规则"
|
||||
msgid "ConnersHua Rules"
|
||||
msgstr "ConnersHua 规则"
|
||||
|
||||
msgid "ConnersHua(Provider-type) Rules"
|
||||
msgstr "ConnersHua(规则集) 规则"
|
||||
|
||||
msgid "ConnersHua Return Rules"
|
||||
msgstr "ConnersHua 回国规则"
|
||||
|
||||
@ -558,6 +573,9 @@ msgstr "清空策略组配置"
|
||||
msgid "Back Configurations"
|
||||
msgstr "返回概览"
|
||||
|
||||
msgid "Refresh Page"
|
||||
msgstr "刷新页面"
|
||||
|
||||
msgid "Servers manage and Config create"
|
||||
msgstr "服务器&策略组管理(支持配置文件一键生成)"
|
||||
|
||||
@ -594,6 +612,9 @@ msgstr "服务器地址"
|
||||
msgid "Server Port"
|
||||
msgstr "服务器端口"
|
||||
|
||||
msgid "UDP Support"
|
||||
msgstr "UDP支持"
|
||||
|
||||
msgid "Ping Latency"
|
||||
msgstr "服务器延迟"
|
||||
|
||||
@ -642,6 +663,45 @@ msgstr "策略组配置(使用一键生成配置文件功能时无需设置)
|
||||
msgid "Proxys"
|
||||
msgstr "服务器节点配置"
|
||||
|
||||
msgid "Edit Rule Providers"
|
||||
msgstr "编辑规则集配置"
|
||||
|
||||
msgid "Rule Providers Type"
|
||||
msgstr "规则集类型"
|
||||
|
||||
msgid "Choose The Rule Providers Type"
|
||||
msgstr "选择规则集类型"
|
||||
|
||||
msgid "Append Position"
|
||||
msgstr "规则集匹配顺序"
|
||||
|
||||
msgid "Priority Match"
|
||||
msgstr "优先(覆盖)"
|
||||
|
||||
msgid "Extended Match"
|
||||
msgstr "扩展(补充)"
|
||||
|
||||
msgid "Rule Providers Name"
|
||||
msgstr "别名(请勿重名)"
|
||||
|
||||
msgid "Rule Behavior"
|
||||
msgstr "规则类型"
|
||||
|
||||
msgid "Choose The Rule Behavior"
|
||||
msgstr "选择规则类型"
|
||||
|
||||
msgid "Rule Providers Path"
|
||||
msgstr "规则集路径"
|
||||
|
||||
msgid "Update Your Rule Providers File From Config Luci Page"
|
||||
msgstr "请先在配置文件管理页面上传您的规则集文件"
|
||||
|
||||
msgid "Rule Providers URL"
|
||||
msgstr "规则集地址"
|
||||
|
||||
msgid "Rule Providers Interval(s)"
|
||||
msgstr "规则集更新时间(秒)"
|
||||
|
||||
msgid "Edit Group"
|
||||
msgstr "编辑策略组配置"
|
||||
|
||||
@ -687,6 +747,9 @@ msgstr "修改配置文件前添加的代理集必须已创建"
|
||||
msgid "Proxy Group"
|
||||
msgstr "添加到策略组(请勿重复添加)"
|
||||
|
||||
msgid "Set Proxy Group"
|
||||
msgstr "指定策略组"
|
||||
|
||||
msgid "No Need Set when Config Create, The added Proxy Groups Must Exist"
|
||||
msgstr "注意:使用一键生成配置文件功能时无需设置此项,修改配置文件前添加的策略组必须已创建"
|
||||
|
||||
@ -760,7 +823,7 @@ msgid "Edit Proxy-Provider"
|
||||
msgstr "编辑代理集配置"
|
||||
|
||||
msgid "Provider Type"
|
||||
msgstr "代理集类型
|
||||
msgstr "代理集类型"
|
||||
|
||||
msgid "Choose The Provider Type"
|
||||
msgstr "选择代理集的类型"
|
||||
@ -792,6 +855,9 @@ msgstr "状态检查间隔(s)"
|
||||
msgid "Game Rule's Name"
|
||||
msgstr "选择游戏规则"
|
||||
|
||||
msgid "Rule Provider's Name"
|
||||
msgstr "选择规则集(请勿重复添加)"
|
||||
|
||||
msgid "Select Proxy Group"
|
||||
msgstr "选择策略组"
|
||||
|
||||
@ -801,6 +867,12 @@ msgstr "游戏规则列表"
|
||||
msgid "Rule Name"
|
||||
msgstr "规则名称"
|
||||
|
||||
msgid "Rule Type"
|
||||
msgstr "规则类型"
|
||||
|
||||
msgid "Rule Author"
|
||||
msgstr "规则作者"
|
||||
|
||||
msgid "Download Rule"
|
||||
msgstr "下载规则"
|
||||
|
||||
@ -816,6 +888,12 @@ msgstr "序号"
|
||||
msgid "Game Rules Manage"
|
||||
msgstr "管理游戏规则"
|
||||
|
||||
msgid "Other Rule Provider Manage"
|
||||
msgstr "管理第三方规则集"
|
||||
|
||||
msgid "Other Rule Providers List"
|
||||
msgstr "第三方规则集列表"
|
||||
|
||||
msgid "Proxy UDP Traffics"
|
||||
msgstr "*UDP流量转发"
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user