OpenClash: bump to v0.39.2-beta

This commit is contained in:
CN_SZTL 2020-06-18 12:39:01 +08:00
parent 6ca48b8591
commit 423fdc5895
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
75 changed files with 9970 additions and 1826 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -1,4 +1,4 @@
Rule:
rules:
##source:ConnersHua_return
# (Video)
# AcFun
@ -76,4 +76,4 @@ Rule:
- GEOIP,CN,PROXY
- MATCH,DIRECT
- MATCH,DIRECT

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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}
}

View File

@ -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"

View File

@ -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%"

View File

@ -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

View File

@ -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 = '<%:规则没有更新%>';
}

View File

@ -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');

View File

@ -1 +1 @@
<!doctype html><html lang="en" dir="ltr"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><link rel="icon" type="image/x-icon" href="https://cdn.jsdelivr.net/gh/Dreamacro/clash/docs/logo.png"/><title>Clash</title><link href="main.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

View File

@ -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}}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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\

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="UTF-8"><link rel="shortcut icon" href="yacd.ico"><link rel="icon" type="image/png" sizes="64x64" href="yacd-64.png"><link rel="icon" type="image/png" sizes="128x128" href="yacd-128.png"><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>

View File

@ -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

View File

@ -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

View File

@ -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"}}}]);

View File

@ -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()}([]);

View File

@ -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()}([]);

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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流量转发"