mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-07-25 00:13:09 +00:00
Merge branch 'juewuy:dev' into dev
This commit is contained in:
@@ -38,21 +38,21 @@ if [ -n "$test" -o -n "$(pidof CrashCore)" ]; then
|
||||
ckcmd mtd_storage.sh && mtd_storage.sh save >/dev/null 2>&1 #Padavan保存/etc/storage
|
||||
#加载定时任务
|
||||
cronload | grep -v '^$' >"$TMPDIR"/cron_tmp
|
||||
[ -s "$CRASHDIR"/task/cron ] && cat "$CRASHDIR"/task/cron >>"$TMPDIR"/cron_tmp
|
||||
[ -s "$CRASHDIR"/task/running ] && cat "$CRASHDIR"/task/running >>"$TMPDIR"/cron_tmp
|
||||
[ -s "$TASKCFGDIR"/cron ] && cat "$TASKCFGDIR"/cron >>"$TMPDIR"/cron_tmp
|
||||
[ -s "$TASKCFGDIR"/running ] && cat "$TASKCFGDIR"/running >>"$TMPDIR"/cron_tmp
|
||||
[ "$bot_tg_service" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程" >>"$TMPDIR"/cron_tmp
|
||||
[ "$start_old" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh shellcrash #ShellCrash保守模式守护进程" >>"$TMPDIR"/cron_tmp
|
||||
awk '!x[$0]++' "$TMPDIR"/cron_tmp >"$TMPDIR"/cron_tmp2 #删除重复行
|
||||
cronadd "$TMPDIR"/cron_tmp2
|
||||
rm -f "$TMPDIR"/cron_tmp "$TMPDIR"/cron_tmp2
|
||||
#加载条件任务
|
||||
[ -s "$CRASHDIR"/task/afstart ] && { . "$CRASHDIR"/task/afstart; } &
|
||||
[ -s "$CRASHDIR"/task/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && {
|
||||
[ -s "$TASKCFGDIR"/afstart ] && { . "$TASKCFGDIR"/afstart; } &
|
||||
[ -s "$TASKCFGDIR"/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && {
|
||||
#注入防火墙
|
||||
line=$(grep -En "fw.* restart" /etc/init.d/firewall | cut -d ":" -f 1)
|
||||
sed -i.bak "${line}a\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall
|
||||
sed -i.bak "${line}a\\. $TASKCFGDIR/affirewall" /etc/init.d/firewall
|
||||
line=$(grep -En "fw.* start" /etc/init.d/firewall | cut -d ":" -f 1)
|
||||
sed -i "${line}a\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall
|
||||
sed -i "${line}a\\. $TASKCFGDIR/affirewall" /etc/init.d/firewall
|
||||
} &
|
||||
exit 0
|
||||
else
|
||||
|
||||
@@ -79,7 +79,7 @@ EOF
|
||||
[ ! -d "$BINDIR"/ui ] && mkdir -p "$BINDIR"/ui
|
||||
[ -z "$crashcore" ] && crashcore=meta
|
||||
#执行条件任务
|
||||
[ -s "$CRASHDIR"/task/bfstart ] && . "$CRASHDIR"/task/bfstart
|
||||
[ -s "$TASKCFGDIR"/bfstart ] && . "$TASKCFGDIR"/bfstart
|
||||
#检查内核配置文件
|
||||
if [ ! -f "$core_config" ]; then
|
||||
if [ -n "$Url" -o -n "$Https" ]; then
|
||||
@@ -144,4 +144,3 @@ fi
|
||||
rm -rf /tmp/ShellCrash/debug.log
|
||||
rm -rf "$CRASHDIR"/debug.log
|
||||
exit 0
|
||||
|
||||
|
||||
@@ -54,9 +54,7 @@ EOF
|
||||
cat >>"$TMPDIR"/dns.yaml <<EOF
|
||||
respect-rules: true
|
||||
nameserver-policy: {'rule-set:cn': [ $dns_nameserver ]}
|
||||
proxy-server-nameserver : [ $dns_resolver ]
|
||||
proxy-server-nameserver-policy:
|
||||
'*.oix_nodes.com': '124.221.68.73:1053'
|
||||
proxy-server-nameserver : [ $dns_proxy_server ]
|
||||
nameserver: [ $dns_final ]
|
||||
EOF
|
||||
else
|
||||
@@ -203,12 +201,12 @@ add_custom_inbounds_and_rules() {
|
||||
}
|
||||
}
|
||||
|
||||
generate_rule_providers_and_merge_yaml() {
|
||||
merger_yaml() {
|
||||
#mix和route模式生成rule-providers
|
||||
[ "$dns_mod" = "mix" ] || [ "$dns_mod" = "route" ] && ! grep -Eq '^[[:space:]]*cn:' "$TMPDIR"/rule-providers.yaml && ! grep -q '^rule-providers' "$CRASHDIR"/yamls/others.yaml 2>/dev/null && {
|
||||
space=$(sed -n "1p" "$TMPDIR"/rule-providers.yaml | grep -oE '^ *') #获取空格数
|
||||
[ -z "$space" ] && space=' '
|
||||
echo "${space}cn: {type: http, behavior: domain, format: mrs, path: ./ruleset/cn.mrs, url: https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@update/bin/geodata/mrs_geosite_cn.mrs}" >>"$TMPDIR"/rule-providers.yaml
|
||||
echo "${space}cn: {type: http, behavior: domain, format: mrs, path: ./ruleset/cn.mrs, interval: 86400, url: https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@update/bin/geodata/mrs_geosite_cn.mrs}" >>"$TMPDIR"/rule-providers.yaml
|
||||
}
|
||||
#对齐rules中的空格
|
||||
sed -i 's/^ *-/ -/g' "$TMPDIR"/rules.yaml
|
||||
@@ -235,7 +233,7 @@ generate_rule_providers_and_merge_yaml() {
|
||||
cut -c 1- "$TMPDIR"/set.yaml $yaml_dns $yaml_hosts $yaml_user $yaml_others $yaml_add >"$TMPDIR"/config.yaml
|
||||
}
|
||||
|
||||
validate_and_rebuild_yaml_if_needed() {
|
||||
test_yaml() {
|
||||
#测试自定义配置文件
|
||||
"$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml >/dev/null
|
||||
if [ "$?" != 0 ]; then
|
||||
@@ -266,7 +264,7 @@ modify_yaml() {
|
||||
generate_set_and_hosts_yaml
|
||||
split_and_customize_yaml_parts
|
||||
add_custom_inbounds_and_rules
|
||||
generate_rule_providers_and_merge_yaml
|
||||
validate_and_rebuild_yaml_if_needed
|
||||
merger_yaml
|
||||
test_yaml
|
||||
finalize_clash_yaml
|
||||
}
|
||||
|
||||
@@ -7,10 +7,13 @@
|
||||
. "$CRASHDIR"/libs/compare.sh
|
||||
. "$CRASHDIR"/libs/set_config.sh
|
||||
. "$CRASHDIR"/libs/logger.sh
|
||||
. "$CRASHDIR"/libs/i18n.sh
|
||||
|
||||
update_servers() { #更新servers.list
|
||||
get_bin "$TMPDIR"/servers.list public/servers.list
|
||||
[ "$?" = 0 ] && mv -f "$TMPDIR"/servers.list "$CRASHDIR"/configs/servers.list
|
||||
load_lang
|
||||
|
||||
update_servers() { #更新servers_${i18n}.list
|
||||
get_bin "$TMPDIR"/servers_${i18n}.list public/servers_${i18n}.list
|
||||
[ "$?" = 0 ] && mv -f "$TMPDIR"/servers_${i18n}.list "$CRASHDIR"/configs/servers_${i18n}.list
|
||||
}
|
||||
gen_ua(){ #自动生成ua
|
||||
[ -z "$user_agent" -o "$user_agent" = "auto" ] && {
|
||||
@@ -26,10 +29,10 @@ gen_ua(){ #自动生成ua
|
||||
}
|
||||
get_core_config() { #下载内核配置文件
|
||||
[ -z "$rule_link" ] && rule_link=1
|
||||
[ -z "$server_link" ] || [ $server_link -gt $(grep -aE '^4' "$CRASHDIR"/configs/servers.list | wc -l) ] && server_link=1
|
||||
Server=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}')
|
||||
Server_ua=$(grep -aE '^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $4}')
|
||||
Config=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $3}')
|
||||
[ -z "$server_link" ] || [ $server_link -gt $(grep -aE '^4' "$CRASHDIR"/configs/servers_${i18n}.list | wc -l) ] && server_link=1
|
||||
Server=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers_${i18n}.list | sed -n ""$server_link"p" | awk '{print $3}')
|
||||
Server_ua=$(grep -aE '^4' "$CRASHDIR"/configs/servers_${i18n}.list | sed -n ""$server_link"p" | awk '{print $4}')
|
||||
Config=$(grep -aE '^5' "$CRASHDIR"/configs/servers_${i18n}.list | sed -n ""$rule_link"p" | awk '{print $3}')
|
||||
gen_ua
|
||||
#如果传来的是Url链接则合成Https链接,否则直接使用Https链接
|
||||
if [ -z "$Https" ]; then
|
||||
|
||||
@@ -2,16 +2,16 @@ getlanip() { #获取局域网host地址
|
||||
i=1
|
||||
while [ "$i" -le "20" ]; do
|
||||
#ipv4局域网网段
|
||||
host_ipv4=$(ip route show scope link | grep -Ev 'wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{print $1}')
|
||||
host_ipv4=$(ip route show scope link | grep -Ev 'wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|wgs|multicast|anycast' | awk '{print $1}')
|
||||
#ipv6局域网网段 - 从IPv4已识别的LAN接口获取全局IPv6前缀
|
||||
[ "$ipv6_redir" = "ON" ] && {
|
||||
lan_ifaces=$(ip route show scope link | grep -Ev 'ppp|wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{for(i=1;i<=NF;i++) if($i=="dev") {print $(i+1); break}}' | grep -v '^lo$' | sort -u)
|
||||
lan_ifaces=$(ip route show scope link | grep -Ev 'ppp|wan|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|wgs|multicast|anycast' | awk '{for(i=1;i<=NF;i++) if($i=="dev") {print $(i+1); break}}' | grep -v '^lo$' | sort -u)
|
||||
host_ipv6=$(
|
||||
for iface in $lan_ifaces; do
|
||||
ip -6 addr show dev $iface 2>/dev/null
|
||||
done | grep 'scope global' | awk '{print $2}' | tr '\n' ' ' | sed 's/ $//'
|
||||
)
|
||||
[ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//')
|
||||
[ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|wgs|multicast|anycast' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//')
|
||||
}
|
||||
[ -f "$TMPDIR"/ShellCrash.log ] && break
|
||||
[ -n "$host_ipv4" -a "$ipv6_redir" != "ON" ] && break
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#初始化目录
|
||||
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
|
||||
TASKCFGDIR="$CRASHDIR"/configs/task
|
||||
profile=/etc/profile
|
||||
. "$CRASHDIR"/libs/set_profile.sh
|
||||
. "$CRASHDIR"/libs/set_cron.sh
|
||||
|
||||
@@ -190,8 +190,8 @@ EOF
|
||||
"routing_mark": $routing_mark
|
||||
},
|
||||
{
|
||||
"tag": "dns_oix",
|
||||
"type": "udp", "server": "124.221.68.73", "server_port": 1053,
|
||||
"tag": "dns_proxy_server",
|
||||
$(parse_singbox_dns "$dns_proxy_server")
|
||||
"routing_mark": $routing_mark
|
||||
}
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user