diff --git a/bin/ShellCrash.tar.gz b/bin/ShellCrash.tar.gz index 158eb83..2b0a577 100644 Binary files a/bin/ShellCrash.tar.gz and b/bin/ShellCrash.tar.gz differ diff --git a/bin/clashfm.tar.gz b/bin/clashfm.tar.gz index e685b2d..a5cc22c 100644 Binary files a/bin/clashfm.tar.gz and b/bin/clashfm.tar.gz differ diff --git a/bin/public.tar.gz b/bin/public.tar.gz index c447b11..364b13b 100644 Binary files a/bin/public.tar.gz and b/bin/public.tar.gz differ diff --git a/bin/version b/bin/version index 9cd2f68..384905b 100644 --- a/bin/version +++ b/bin/version @@ -5,4 +5,4 @@ meta_v=v1.18.0 singboxp_v=1.8.5-4c3391c1 singbox_v=1.8.5 GeoIP_v=20240203 -versionsh=1.9.0pre2 +versionsh=1.9.0pre3 diff --git a/scripts/getdate.sh b/scripts/getdate.sh index 611f7d7..6f14b4f 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -1961,6 +1961,7 @@ debug(){ echo -e " 3 后台运行完整启动流程,并配置防火墙劫持,日志等级:\033[31merror\033[0m" echo -e " 4 后台运行完整启动流程,并配置防火墙劫持,日志等级:\033[32minfo\033[0m" echo -e " 5 后台运行完整启动流程,并配置防火墙劫持,日志等级:\033[33mdebug\033[0m" + echo -e " 6 后台运行完整启动流程,并配置防火墙劫持,且将错误日志打印到闪存:\033[32m$CRASHDIR/debug.log\033[0m" echo ----------------------------------------------- echo -e " 8 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程" [ -s $TMPDIR/jsons/inbounds.json ] && echo -e " 9 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json" @@ -2001,6 +2002,12 @@ debug(){ $CRASHDIR/start.sh debug debug main_menu ;; + 6) + echo -e "频繁写入闪存会导致闪存寿命降低,如非遇到会导致设备死机或重启的bug,请勿使用此功能!" + read -p "是否继续?(1/0) > " res + [ "$res" = 1 ] && $CRASHDIR/start.sh debug debug flash + main_menu + ;; 8) $0 -d main_menu diff --git a/scripts/init.sh b/scripts/init.sh index b27a3d8..177b4cc 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -1,7 +1,7 @@ #!/bin/sh # Copyright (C) Juewuy -version=1.9.0pre2 +version=1.9.0pre3 setdir(){ dir_avail(){ diff --git a/scripts/menu.sh b/scripts/menu.sh index f4fdde8..cd1e0eb 100644 --- a/scripts/menu.sh +++ b/scripts/menu.sh @@ -85,7 +85,7 @@ ckstatus(){ checkport fi [ "$crashcore" = singbox -o "$crashcore" = singboxp ] && corename=SingBox || corename=Clash - [ -f ${TMPDIR}/debug.log -a -n "$PID" ] && auto="\033[33m并处于debug状态!\033[0m" + [ -f ${TMPDIR}/debug.log -o -f ${CRASHDIR}/debug.log -a -n "$PID" ] && auto="\033[33m并处于debug状态!\033[0m" #输出状态 echo ----------------------------------------------- echo -e "\033[30;46m欢迎使用ShellCrash!\033[0m 版本:$versionsh_l" @@ -769,7 +769,7 @@ setfirewall(){ #防火墙设置 } checkport(){ #自动检查端口冲突 for portx in $dns_port $mix_port $redir_port $db_port ;do - if [ -n "$(netstat -ntul 2>&1 |grep '\:$portx ')" ];then + if [ -n "$(netstat -ntul 2>&1 |grep ':$portx ')" ];then echo ----------------------------------------------- echo -e "检测到端口【$portx】被以下进程占用!内核可能无法正常启动!\033[33m" echo $(netstat -ntul | grep :$portx | head -n 1) diff --git a/scripts/start.sh b/scripts/start.sh index e9471a2..274473e 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -181,7 +181,7 @@ mark_time(){ #时间戳 getlanip(){ #获取局域网host地址 i=1 while [ "$i" -le "20" ];do - host_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'br' | grep -Ev 'iot' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/br.*$//g' | sed 's/metric.*$//g' ) #ipv4局域网网段 + host_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'br' | grep -Ev 'iot|peer' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/br.*$//g' | sed 's/metric.*$//g' ) #ipv4局域网网段 [ "$ipv6_redir" = "已开启" ] && host_ipv6=$(ip a 2>&1 | grep -w 'inet6' | grep -E 'global' | sed 's/.*inet6.//g' | sed 's/scope.*$//g' ) #ipv6公网地址段 [ -f ${TMPDIR}/ShellCrash.log ] && break [ -n "$host_ipv4" -a "$ipv6_redir" != "已开启" ] && break @@ -727,7 +727,7 @@ EOF EOF fi #生成add_outbounds.json - [ -z "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"tag\": *\"DIRECT\"')" ] && cat > ${TMPDIR}/jsons/add_outbounds.json < ${TMPDIR}/jsons/add_outbounds.json </dev/null)" ] && echo 'nameserver 127.0.0.1' >> /etc/resolv.conf #修复部分虚拟机dns查询失败的问题 + iptables -t nat -N shellcrash_dns_out + iptables -t nat -A shellcrash_dns_out -m owner --gid-owner 453 -j RETURN #绕过本机dnsmasq + iptables -t nat -A shellcrash_dns_out -m owner --gid-owner 7890 -j RETURN + iptables -t nat -A shellcrash_dns_out -p udp -j REDIRECT --to $dns_port + iptables -t nat -A OUTPUT -p udp --dport 53 -j shellcrash_dns_out } #Docker转发 ckcmd docker && { @@ -1220,9 +1221,12 @@ start_nft(){ #nftables-allinone #代理本机(仅TCP) [ "$local_proxy" = "已开启" ] && [ "$local_type" = "nftables增强模式" ] && { #dns - nft add chain inet shellcrash dns_out { type nat hook output priority -100 \; } - nft add rule inet shellcrash dns_out meta skgid { 453, 7890 } return && \ - nft add rule inet shellcrash dns_out udp dport 53 redirect to $dns_port + [ "$dns_no" != "已禁用" ] && { + [ -z "$(grep 'nameserver 127.0.0.1' /etc/resolv.conf 2>/dev/null)" ] && echo 'nameserver 127.0.0.1' >> /etc/resolv.conf #修复部分虚拟机dns查询失败的问题 + nft add chain inet shellcrash dns_out { type nat hook output priority -100 \; } + nft add rule inet shellcrash dns_out meta skgid { 453, 7890 } return && \ + nft add rule inet shellcrash dns_out udp dport 53 redirect to $dns_port + } #output nft add chain inet shellcrash output { type nat hook output priority -100 \; } nft add rule inet shellcrash output meta skgid 7890 return && { @@ -1583,13 +1587,13 @@ singbox_check(){ #singbox启动前检查 fi core_check #预下载geoip-cn.srs数据库 - [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geoip-cn\"')" ] && ckgeo geoip-cn.srs srs_geoip_cn.srs + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '"rule_set": *"geoip-cn"')" ] && ckgeo geoip-cn.srs srs_geoip_cn.srs #预下载geosite-cn.srs数据库 - [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geosite-cn\"')" -o "$dns_mod" = "mix" ] && ckgeo geosite-cn.srs srs_geosite_cn.srs + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '"rule_set": *"geosite-cn"')" -o "$dns_mod" = "mix" ] && ckgeo geosite-cn.srs srs_geosite_cn.srs #预下载GeoIP数据库 - [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geoip\":')" ] && ckgeo geoip.db geoip_cn.db + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '"geoip":')" ] && ckgeo geoip.db geoip_cn.db #预下载GeoSite数据库 - [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geosite\":')" ] && ckgeo geosite.db geosite_cn.db + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '"geosite":')" ] && ckgeo geosite.db geosite_cn.db return 0 } bfstart(){ #启动前 @@ -1639,6 +1643,7 @@ bfstart(){ #启动前 } #清理debug日志 rm -rf ${TMPDIR}/debug.log + rm -rf ${CRASHDIR}/debug.log return 0 } afstart(){ #启动后 @@ -1840,7 +1845,8 @@ debug) else sed -i "s/log-level: info/log-level: $2/" ${TMPDIR}/config.yaml fi - $COMMAND >${TMPDIR}/debug.log 2>&1 & + [ "$3" = flash ] && dir=$CRASHDIR || dir=$TMPDIR + $COMMAND >${dir}/debug.log 2>&1 & sleep 2 logger "已运行debug模式!如需停止,请使用重启/停止服务功能!" 33 else