From 4e0417c9512bf403e90ea0e41166e1ae0ba77ce7 Mon Sep 17 00:00:00 2001 From: sofia <253282481+sofia-riese@users.noreply.github.com> Date: Sun, 25 Jan 2026 00:03:30 +0800 Subject: [PATCH] update --- scripts/menus/6_core_config.sh | 8 +- scripts/menus/check_port.sh | 6 +- scripts/menus/common.sh | 22 +- scripts/menus/dns.sh | 13 +- scripts/menus/fw_filter.sh | 389 +++++++++++++++++++-------------- scripts/menus/uninstall.sh | 5 +- 6 files changed, 253 insertions(+), 190 deletions(-) diff --git a/scripts/menus/6_core_config.sh b/scripts/menus/6_core_config.sh index d3e3d4c6..fd1b84eb 100644 --- a/scripts/menus/6_core_config.sh +++ b/scripts/menus/6_core_config.sh @@ -47,10 +47,10 @@ set_core_config() { . "$CRASHDIR"/menus/providers.sh providers else - error_report "\033[33m仅限Mihomo/singboxr内核使用,请更换内核!\033[0m" + msg_alert "\033[33m仅限Mihomo/singboxr内核使用,请更换内核!\033[0m" fi else - error_report "请先添加提供者!" + msg_alert "请先添加提供者!" fi ;; c) @@ -58,7 +58,7 @@ set_core_config() { . "$CRASHDIR"/menus/subconverter.sh subconverter else - error_report "请先添加提供者!" + msg_alert "请先添加提供者!" fi ;; d) @@ -312,7 +312,7 @@ addproviders() { echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg return 0 else - error_report "\033[31m请先完成必填选项!\033[0m" + msg_alert "\033[31m请先完成必填选项!\033[0m" return 1 fi } diff --git a/scripts/menus/check_port.sh b/scripts/menus/check_port.sh index 728ea1ba..97ef9124 100644 --- a/scripts/menus/check_port.sh +++ b/scripts/menus/check_port.sh @@ -3,13 +3,13 @@ check_port() { if [ "$1" -gt 65535 ] || [ "$1" -le 1 ]; then - echo -e "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m" + msg_alert "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m" return 1 elif echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$1|"; then - echo -e "\033[31m输入错误!请不要输入重复的端口!\033[0m" + msg_alert "\033[31m输入错误!请不要输入重复的端口!\033[0m" return 1 elif netstat -ntul | grep -q ":$1[[:space:]]"; then - echo -e "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m" + msg_alert "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m" return 1 else return 0 diff --git a/scripts/menus/common.sh b/scripts/menus/common.sh index 5d38b815..cf77fb6a 100644 --- a/scripts/menus/common.sh +++ b/scripts/menus/common.sh @@ -1,9 +1,19 @@ -error_report() { +msg_alert() { + # Default sleep time + _sleep_time=1 + + if [ "$1" = "-t" ] && [ -n "$2" ]; then + _sleep_time="$2" + shift 2 + fi + line_break separator_line "=" - content_line "\033[31m$1\033[0m" + for line in "$@"; do + content_line "$line" + done separator_line "=" - sleep 1 + sleep "$_sleep_time" } format_box() { @@ -21,15 +31,15 @@ common_back() { } errornum() { - error_report "\033[31m$COMMON_ERR_NUM\033[0m" + msg_alert "\033[31m$COMMON_ERR_NUM\033[0m" } error_letter() { - error_report "\033[31m$COMMON_ERR_LETTER\033[0m" + msg_alert "\033[31m$COMMON_ERR_LETTER\033[0m" } error_input() { - error_report "\033[31m$COMMON_ERR_INPUT\033[0m" + msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m" } cancel_back() { diff --git a/scripts/menus/dns.sh b/scripts/menus/dns.sh index e17168c9..2293c310 100644 --- a/scripts/menus/dns.sh +++ b/scripts/menus/dns.sh @@ -17,17 +17,18 @@ set_dns_mod() { content_line "$DNS_CURRENT_MODE\033[47;30m $dns_mod \033[0m" content_line "\033[33m$DNS_RESTART_NOTICE\033[0m" separator_line "=" - content_line "1) MIX$COMMON_MOD:\t\033[32m$DNS_MODE_MIX_DESC\033[0m" - content_line "2) Route$COMMON_MOD:\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m" - content_line "3) Redir$COMMON_MOD:\t\033[33m$DNS_MODE_REDIR_DESC\033[0m" + content_line "1) 设为MIX$COMMON_MOD:\t\033[32m$DNS_MODE_MIX_DESC\033[0m" + content_line "2) 设为Route$COMMON_MOD:\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m" + content_line "3) 设为Redir$COMMON_MOD:\t\033[33m$DNS_MODE_REDIR_DESC\033[0m" content_line "" - content_line "4) $DNS_MENU_PROTECT:\t\033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC" - content_line "5) $DNS_MENU_HOSTS:\t\033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC" - content_line "6) $DNS_MENU_ECS:\t\033[36m$ecs_subnet\033[0m\t$DNS_ECS_DESC" + content_line "4) $DNS_MENU_PROTECT:\t \033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC" + content_line "5) $DNS_MENU_HOSTS:\t \033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC" + content_line "6) $DNS_MENU_ECS:\t \033[36m$ecs_subnet\033[0m\t$DNS_ECS_DESC" content_line "7) $DNS_MENU_REDIR:\033[36m$dns_redir_port\033[0m\t$DNS_REDIR_PORT_DESC" [ "$dns_mod" = "mix" ] && content_line "8) \033[33m$DNS_FAKEIP_MENU\033[0m" content_line "9) \033[36m$DNS_ADV_MENU\033[0m" + content_line "" content_line "0) $COMMON_BACK" separator_line "=" read -r -p "$COMMON_INPUT> " num diff --git a/scripts/menus/fw_filter.sh b/scripts/menus/fw_filter.sh index 13a2514d..3a5d3814 100644 --- a/scripts/menus/fw_filter.sh +++ b/scripts/menus/fw_filter.sh @@ -12,25 +12,27 @@ set_fw_filter() { [ -z "$cn_ip_route" ] && cn_ip_route=OFF touch "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ] && mac_return=OFF || mac_return=ON - echo "-----------------------------------------------" - echo -e " 1 过滤非常用端口: \033[36m$common_ports\033[0m ————用于过滤P2P流量" - echo -e " 2 过滤局域网设备: \033[36m$mac_return\033[0m ————使用黑/白名单进行过滤" - echo -e " 3 过滤QUIC协议: \033[36m$quic_rj\033[0m ————优化视频性能" - echo -e " 4 过滤CN_IP(4/6)列表: \033[36m$cn_ip_route\033[0m ————优化性能" - echo -e " 5 自定义透明路由ipv4网段: 适合vlan等复杂网络环境" - echo -e " 6 自定义保留地址ipv4网段: 需要以保留地址为访问目标的环境" - echo "-----------------------------------------------" - echo -e " 0 返回上级菜单 \033[0m" - echo "-----------------------------------------------" - read -r -p "请输入对应数字 > " num + line_break + separator_line "=" + content_line "1) 过滤非常用端口: \033[36m$common_ports\033[0m ———用于过滤P2P流量" + content_line "2) 过滤局域网设备: \033[36m$mac_return\033[0m ———使用黑/白名单进行过滤" + content_line "3) 过滤QUIC协议: \033[36m$quic_rj\033[0m ———优化视频性能" + content_line "4) 过滤CN_IP(4/6)列表:\033[36m$cn_ip_route\033[0m ———优化性能" + content_line "5) 自定义透明路由ipv4网段:适合vlan等复杂网络环境" + content_line "6) 自定义保留地址ipv4网段:需要以保留地址为访问目标的环境" + common_back + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break ;; 1) - echo "-----------------------------------------------" if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then - read -r -p "切换时将停止服务,是否继续?(1/0) > " res + format_box "切换时将停止服务,是否继续:" + content_line "1) 是" + content_line "0) 否,返回上级菜单" + separator_line "=" + read -r -p "$COMMON_INPUT> " res [ "$res" = 1 ] && "$CRASHDIR"/start.sh stop && set_common_ports else set_common_ports @@ -45,36 +47,32 @@ set_fw_filter() { fi ;; 3) - echo "-----------------------------------------------" if echo "$redir_mod" | grep -oqE '混合|Tproxy|Tun'; then if [ "$quic_rj" = "OFF" ]; then - echo -e "\033[33m已禁止QUIC流量通过ShellCrash内核!!\033[0m" quic_rj=ON + msg_alert "\033[33m已禁止QUIC流量通过ShellCrash内核!!\033[0m" else - echo -e "\033[33m已取消禁止QUIC协议流量!!\033[0m" quic_rj=OFF + msg_alert "\033[33m已取消禁止QUIC协议流量!!\033[0m" fi setconfig quic_rj $quic_rj else - echo -e "\033[33m当前模式默认不会代理UDP流量,无需设置!!\033[0m" + msg_alert "\033[33m当前模式默认不会代理UDP流量,无需设置!!\033[0m" fi - sleep 1 ;; 4) if [ -n "$(ipset -v 2>/dev/null)" ] || [ "$firewall_mod" = 'nftables' ]; then if [ "$cn_ip_route" = "OFF" ]; then - echo -e "\033[32m已开启CN_IP绕过内核功能!!\033[0m" - echo -e "\033[31m注意!!!此功能会导致全局模式及一切CN相关规则失效!!!\033[0m" cn_ip_route=ON - sleep 2 + msg_alert -t 2 "\033[32m已开启CN_IP绕过内核功能!!\033[0m" \ + "\033[31m注意!!!此功能会导致全局模式及一切CN相关规则失效!!!\033[0m" else - echo -e "\033[33m已禁用CN_IP绕过内核功能!!\033[0m" cn_ip_route=OFF + msg_alert "\033[33m已禁用CN_IP绕过内核功能!!\033[0m" fi setconfig cn_ip_route $cn_ip_route else - echo -e "\033[31m当前设备缺少ipset模块或未使用nftables模式,无法启用绕过功能!!\033[0m" - sleep 1 + msg_alert "\033[31m当前设备缺少ipset模块或未使用nftables模式,无法启用绕过功能!!\033[0m" fi ;; 5) @@ -82,23 +80,29 @@ set_fw_filter() { ;; 6) [ -z "$reserve_ipv4" ] && reserve_ipv4="0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 100.64.0.0/10 169.254.0.0/16 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4" - echo -e "当前网段:\033[36m$reserve_ipv4\033[0m" - echo -e "\033[33m地址必须是空格分隔,错误的设置可能导致网络回环或启动报错,请务必谨慎!\033[0m" - read -p "请输入 > " text - if + format_box "\033[33m地址必须是空格分隔,错误的设置可能导致网络回环或启动报错,请务必谨慎!\033[0m" \ + "当前网段:\033[36m$reserve_ipv4\033[0m" \ + "" \ + "请直接输入自定义保留地址ipv4网段" \ + "或输入 0 返回上级菜单" + read -r -p "请输入> " text + if [ "$text" = 0 ]; then + continue + elif echo "$text" | grep -Eq "(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])/(3[0-2]|[1-2]?[0-9]))( +|$)+" then reserve_ipv4="$text" - echo -e "已将保留地址网段设为:\033[32m$reserve_ipv4\033[0m" - setconfig reserve_ipv4 "'$reserve_ipv4'" + if setconfig reserve_ipv4 "'$reserve_ipv4'"; then + msg_alert "已将保留地址网段设为:\033[32m$reserve_ipv4\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi else - echo -e "\033[31m输入有误,操作已取消!\033[0m" + msg_alert "\033[31m输入有误,操作已取消!\033[0m" fi - sleep 1 ;; *) errornum - sleep 1 ;; esac done @@ -107,19 +111,21 @@ set_fw_filter() { set_common_ports() { while true; do [ -z "$multiport" ] && multiport='22,80,443,8080,8443' - echo "-----------------------------------------------" - echo -e "\033[31m注意:\033[0mMIX模式下,所有fake-ip来源的非常用端口流量不会被过滤" - [ -n "$common_ports" ] && - echo -e "当前放行端口:\033[36m$multiport\033[0m" - echo "-----------------------------------------------" - echo -e " 1 启用/关闭端口过滤: \033[36m$common_ports\033[0m" - echo -e " 2 添加放行端口" - echo -e " 3 移除指定放行端口" - echo -e " 4 重置默认放行端口" - echo -e " 5 重置为旧版放行端口" - echo -e " 0 返回上级菜单" - echo "-----------------------------------------------" - read -r -p "请输入对应数字 > " num + line_break + separator_line "=" + content_line "\033[31m注意:\n\033[0mMIX模式下,所有fake-ip来源的非常用端口流量不会被过滤" + if [ -n "$common_ports" ]; then + content_line "" + content_line "当前已放行端口:\033[36m$multiport\033[0m" + fi + separator_line "=" + content_line "1) 启用/关闭端口过滤: \033[36m$common_ports\033[0m" + content_line "2) 添加放行端口" + content_line "3) 移除指定放行端口" + content_line "4) 重置默认放行端口" + content_line "5) 重置为旧版放行端口" + common_back + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break @@ -130,52 +136,82 @@ set_common_ports() { else common_ports=ON fi - setconfig common_ports "$common_ports" + + if setconfig common_ports "$common_ports"; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi ;; 2) port_count=$(echo "$multiport" | awk -F',' '{print NF}') if [ "$port_count" -ge 15 ]; then - echo -e "\033[31m最多支持设置放行15个端口,请先减少一些!\033[0m" + format_box "\033[31m最多支持设置放行15个端口,请先减少一些!\033[0m" else - read -r -p "请输入要放行的端口号 > " port - if echo ",$multiport," | grep -q ",$port,"; then - echo -e "\033[31m输入错误!请勿重复添加!\033[0m" + content_line + format_box "当前已放行端口:\033[36m$multiport\033[0m" \ + "" \ + "请直接输入要放行的端口号" \ + "或输入 0 返回上级菜单" + read -r -p "请输入> " port + if [ "$port" = 0 ]; then + continue + elif echo ",$multiport," | grep -q ",$port,"; then + msg_alert "\033[31m输入错误!请勿重复添加!\033[0m" elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then - echo -e "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m" + msg_alert "\033[31m输入错误!请输入正确的数值(1~65535)!\033[0m" else multiport=$(echo "$multiport,$port" | sed "s/^,//") - setconfig multiport "$multiport" + + if setconfig multiport "$multiport"; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi fi fi - sleep 1 ;; 3) - read -r -p "请输入要移除的端口号 > " port - if echo ",$multiport," | grep -q ",$port,"; then + format_box "当前已放行端口:\033[36m$multiport\033[0m" \ + "" \ + "请直接输入要移除的端口号" \ + "或输入 0 返回上级菜单" + read -r -p "请输入> " port + if [ "$port" = 0 ]; then + continue + elif echo ",$multiport," | grep -q ",$port,"; then if [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then - echo -e "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m" + msg_alert "\033[31m输入错误!请输入正确的数值(1~65535)!\033[0m" else multiport=$(echo ",$multiport," | sed "s/,$port//; s/^,//; s/,$//") - setconfig multiport "$multiport" + if setconfig multiport "$multiport"; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi fi else - echo -e "\033[31m输入错误!请输入已添加过的端口!\033[0m" + msg_alert "\033[31m输入错误!请输入已添加过的端口!\033[0m" fi - sleep 1 ;; 4) multiport='' - setconfig multiport - sleep 1 + if setconfig multiport; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi ;; 5) multiport='22,80,143,194,443,465,587,853,993,995,5222,8080,8443' - setconfig multiport "$multiport" - sleep 1 + if setconfig multiport "$multiport"; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi ;; *) errornum - sleep 1 ;; esac done @@ -186,39 +222,48 @@ set_cust_host_ipv4() { while true; do [ -z "$replace_default_host_ipv4" ] && replace_default_host_ipv4="OFF" . "$CRASHDIR"/starts/fw_getlanip.sh && getlanip - echo "-----------------------------------------------" - echo -e "当前默认透明路由的网段为: \033[32m$host_ipv4 \033[0m" - echo -e "当前已添加的自定义网段为:\033[36m$cust_host_ipv4\033[0m" - echo "-----------------------------------------------" - echo -e " 1 移除所有自定义网段" - echo -e " 2 使用自定义网段覆盖默认网段 \033[36m$replace_default_host_ipv4\033[0m" - echo -e " 0 返回上级菜单" - read -r -p "请输入对应的序号或需要额外添加的网段 > " text + format_box "当前默认透明路由的网段为:\033[32m$host_ipv4\033[0m" \ + "当前已添加的自定义网段为:\033[36m$cust_host_ipv4\033[0m" + content_line "1) 移除所有自定义网段" + content_line "2) 使用自定义网段覆盖默认网段 \033[36m$replace_default_host_ipv4\033[0m" + common_back + read -r -p "请输入对应的序号或需要额外添加的网段> " text case "$text" in "" | 0) break ;; 1) unset cust_host_ipv4 - setconfig cust_host_ipv4 + if setconfig cust_host_ipv4; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi ;; 2) - if [ "$replace_default_host_ipv4" == "OFF" ]; then + if [ "$replace_default_host_ipv4" = "OFF" ]; then replace_default_host_ipv4="ON" else replace_default_host_ipv4="OFF" fi - setconfig replace_default_host_ipv4 "$replace_default_host_ipv4" + + if setconfig replace_default_host_ipv4 "$replace_default_host_ipv4"; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi ;; *) - if [ -n "$(echo "$text" | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'$)" ] && [ -z "$(echo "$cust_host_ipv4" | grep "$text")" ]; then + if [ -n "$(echo "$text" | grep -Eo '^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'$)" ] && echo "$cust_host_ipv4" | grep -q "$text"; then cust_host_ipv4="$cust_host_ipv4 $text" - setconfig cust_host_ipv4 "'$cust_host_ipv4'" + if setconfig cust_host_ipv4 "'$cust_host_ipv4'"; then + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi else - echo "-----------------------------------------------" - echo -e "\033[31m请输入正确的网段地址!\033[0m" + msg_alert "\033[31m请输入正确的网段地址!\033[0m" fi - sleep 1 ;; esac done @@ -234,105 +279,119 @@ fw_filter_lan() { add_mac() { while true; do - echo "-----------------------------------------------" - echo "已添加的mac地址:" - cat "$CRASHDIR"/configs/mac 2>/dev/null - echo "-----------------------------------------------" - echo -e "\033[33m序号 设备IP 设备mac地址 设备名称\033[32m" - cat "$dhcpdir" | awk '{print " "NR" "$3,$2,$4}' - echo -e "\033[0m-----------------------------------------------" - echo -e "手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式" - echo -e " 0 或回车 结束添加" - echo "-----------------------------------------------" - read -r -p "请输入对应序号或直接输入mac地址 > " num + format_box "手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式" + content_line "已添加的mac地址:" + content_line "" + if [ -s "$CRASHDIR/configs/mac" ]; then + while IFS= read -r line; do + content_line "$line" + done <"$CRASHDIR/configs/mac" + else + content_line "暫未添加任何mac地址" + fi + + separator_line "=" + content_line "序号 \033[33m设备IP 设备mac地址 设备名称\033[0m" + if [ -s "$dhcpdir" ]; then + awk '{print NR") "$3,$2,$4}' "$dhcpdir" | + while IFS= read -r line; do + content_line "$line" + done + else + content_line "无纪录" + fi + + content_line "" + common_back + read -r -p "请输入对应序号或直接输入mac地址> " num if [ -z "$num" ] || [ "$num" = 0 ]; then i= break elif echo "$num" | grep -aEq '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$'; then - if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$num")" ]; then + if cat "$CRASHDIR"/configs/mac | grep -Eq "$num"; then echo "$num" | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >>"$CRASHDIR"/configs/mac else - echo "-----------------------------------------------" - echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m" - sleep 1 + msg_alert "\033[31m已添加的设备,请勿重复添加!\033[0m" fi elif [ "$num" -le $(cat $dhcpdir 2>/dev/null | awk 'END{print NR}') ]; then macadd=$(cat "$dhcpdir" | awk '{print $2}' | sed -n "$num"p) - if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$macadd")" ]; then + if cat "$CRASHDIR"/configs/mac | grep -Eq "$macadd"; then echo "$macadd" >>"$CRASHDIR"/configs/mac else - echo "-----------------------------------------------" - echo -e "\033[31m已添加的设备,请勿重复添加!\033[0m" - sleep 1 + msg_alert "\033[31m已添加的设备,请勿重复添加!\033[0m" fi else - echo "-----------------------------------------------" - echo -e "\033[31m输入有误,请重新输入!\033[0m" - sleep 1 + msg_alert "\033[31m输入有误,请重新输入!\033[0m" fi done } add_ip() { while true; do - echo "-----------------------------------------------" - echo "已添加的IP地址(段):" - cat "$CRASHDIR"/configs/ip_filter 2>/dev/null - echo "-----------------------------------------------" - echo -e "\033[33m序号 设备IP 设备名称\033[32m" - cat "$dhcpdir" | awk '{print " "NR" "$3,$4}' - echo -e "\033[0m-----------------------------------------------" - echo -e "手动输入时仅支持\033[32m 192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式" - echo -e "不支持ipv6地址过滤,如有需求请使用mac地址过滤" - echo -e " 0 或回车 结束添加" - echo "-----------------------------------------------" - read -r -p "请输入对应序号或直接输入IP地址段 > " num + format_box "手动输入时仅支持 \033[32m192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式" \ + "不支持ipv6地址过滤,如有需求请使用mac地址过滤" + content_line "已添加的IP地址(段):" + if [ -s "$CRASHDIR/configs/ip_filter" ]; then + while IFS= read -r line; do + content_line "$line" + done <"$CRASHDIR/configs/ip_filter" + else + content_line "暫未添加任何IP地址(段)" + fi + + separator_line "-" + content_line "\033[33m序号 设备IP 设备名称\033[32m" + if [ -s "$dhcpdir" ]; then + awk '{print NR") "$3, $4}' "$dhcpdir" | + while IFS= read -r line; do + content_line "$line" + done + else + content_line "无纪录" + fi + + content_line "" + common_back + read -r -p "请输入对应序号或直接输入IP地址段> " num if [ -z "$num" ] || [ "$num" = 0 ]; then i= break elif echo "$num" | grep -aEq '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$'; then - if [ -z "$(cat "$CRASHDIR"/configs/ip_filter | grep -E "$num")" ]; then + if cat "$CRASHDIR"/configs/ip_filter | grep -Eq "$num"; then echo "$num" | grep -oE '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(/(3[0-2]|[12]?[0-9]))?$' >>"$CRASHDIR"/configs/ip_filter else - echo "-----------------------------------------------" - echo -e "\033[31m已添加的地址,请勿重复添加!\033[0m" - sleep 1 + msg_alert "\033[31m已添加的地址,请勿重复添加!\033[0m" fi elif [ "$num" -le "$(cat "$dhcpdir" 2>/dev/null | awk 'END{print NR}')" ]; then ipadd=$(cat "$dhcpdir" | awk '{print $3}' | sed -n "$num"p) - if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$ipadd")" ]; then + if cat "$CRASHDIR"/configs/mac | grep -Eq "$ipadd"; then echo "$ipadd" >>"$CRASHDIR"/configs/ip_filter else - echo "-----------------------------------------------" - echo -e "\033[31m已添加的地址,请勿重复添加!\033[0m" - sleep 1 + msg_alert "\033[31m已添加的地址,请勿重复添加!\033[0m" fi else - echo "-----------------------------------------------" - echo -e "\033[31m输入有误,请重新输入!\033[0m" - sleep 1 + msg_alert "\033[31m输入有误,请重新输入!\033[0m" fi done } del_all() { while true; do - echo "-----------------------------------------------" if [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ]; then - echo -e "\033[31m列表中没有需要移除的设备!\033[0m" - sleep 1 + msg_alert "\033[31m列表中没有需要移除的设备!\033[0m" else - echo -e "请选择需要移除的设备:\033[36m" - echo -e "\033[33m 设备IP 设备mac地址 设备名称\033[0m" + format_box "请选择需要移除的设备:" + content_line "" + content_line " \033[32m设备IP \033[36m设备mac地址 \033[35m设备名称\033[0m" i=1 for dev in $(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null); do get_devinfo - echo -e " $i \033[32m$dev_ip \033[36m$dev_mac \033[32m$dev_name\033[0m" + content_line "$i) \033[32m$dev_ip \033[36m$dev_mac \033[35m$dev_name\033[0m" i=$((i + 1)) done - echo "-----------------------------------------------" - echo -e "\033[0m 0 或回车 结束删除" - read -r -p "请输入需要移除的设备的对应序号 > " num + content_line "" + common_back + read -r -p "$COMMON_INPUT> " num mac_filter_rows=$(cat "$CRASHDIR"/configs/mac 2>/dev/null | wc -l) ip_filter_rows=$(cat "$CRASHDIR"/configs/ip_filter 2>/dev/null | wc -l) if [ -z "$num" ] || [ "$num" -le 0 ]; then @@ -340,26 +399,19 @@ fw_filter_lan() { break elif [ "$num" -le "$mac_filter_rows" ]; then sed -i "${num}d" "$CRASHDIR"/configs/mac - echo "-----------------------------------------------" - echo -e "\033[32m对应设备已移除!\033[0m" - sleep 1 + msg_alert "\033[32m对应设备已移除!\033[0m" elif [ "$num" -le $((mac_filter_rows + ip_filter_rows)) ]; then num=$((num - mac_filter_rows)) sed -i "${num}d" "$CRASHDIR"/configs/ip_filter - echo "-----------------------------------------------" - echo -e "\033[32m对应设备已移除!\033[0m" - sleep 1 + msg_alert "\033[32m对应设备已移除!\033[0m" else - echo "-----------------------------------------------" - echo -e "\033[31m输入有误,请重新输入!\033[0m" - sleep 1 + msg_alert "\033[31m输入有误,请重新输入!\033[0m" fi fi done } while true; do - echo "-----------------------------------------------" [ -z "$dhcpdir" ] && [ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases' [ -z "$dhcpdir" ] && [ -f /var/lib/dhcpd/dhcpd.leases ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases' [ -z "$dhcpdir" ] && [ -f /tmp/dhcp.leases ] && dhcpdir='/tmp/dhcp.leases' @@ -374,39 +426,43 @@ fw_filter_lan() { fw_filter_lan_scrip='' fi - echo -e "\033[30;47m请在此添加或移除设备\033[0m" - echo -e "当前过滤方式为:\033[33m$fw_filter_lan_type模式\033[0m" - echo -e "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核" + format_box "\033[30;47m请在此添加或移除设备\033[0m" \ + "" \ + "当前过滤方式为:\033[33m$fw_filter_lan_type模式\033[0m" \ + "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核" if [ -n "$(cat "$CRASHDIR"/configs/mac)" ]; then - echo "-----------------------------------------------" - echo -e "当前已过滤设备为:\033[36m" - echo -e "\033[33m 设备mac/ip地址 设备名称\033[0m" + content_line "当前已过滤设备为:" + content_line "" + content_line "\033[36m设备mac/ip地址\033[0m \033[35m设备名称\033[0m" for dev in $(cat "$CRASHDIR"/configs/mac 2>/dev/null); do get_devinfo - echo -e "\033[36m$dev_mac \033[0m$dev_name" + content_line "\033[36m$dev_mac \033[35m$dev_name\033[0m" done for dev in $(cat "$CRASHDIR"/configs/ip_filter 2>/dev/null); do get_devinfo - echo -e "\033[32m$dev_ip \033[0m$dev_name" + content_line "\033[36m$dev_ip \033[35m$dev_name\033[0m" done - echo "-----------------------------------------------" + separator_line "=" fi - echo -e " 1 切换为\033[33m$fw_filter_lan_over模式\033[0m" - echo -e " 2 \033[32m添加指定设备(mac地址)\033[0m" - echo -e " 3 \033[32m添加指定设备(IP地址/网段)\033[0m" - echo -e " 4 \033[36m移除指定设备\033[0m" - echo -e " 9 \033[31m清空整个列表\033[0m" - echo -e " 0 返回上级菜单" - read -r -p "请输入对应数字 > " num + content_line "1) 切换为\033[33m$fw_filter_lan_over模式\033[0m" + content_line "2) \033[32m添加指定设备(mac地址)\033[0m" + content_line "3) \033[32m添加指定设备(IP地址/网段)\033[0m" + content_line "4) \033[36m移除指定设备\033[0m" + content_line "9) \033[31m清空整个列表\033[0m" + content_line "" + common_back + read -r -p "$COMMON_INPUT> " num case "$num" in "" | 0) break ;; 1) macfilter_type=$fw_filter_lan_over - setconfig macfilter_type $macfilter_type - echo "-----------------------------------------------" - echo -e "\033[32m已切换为$fw_filter_lan_type模式!\033[0m" + if setconfig macfilter_type $macfilter_type; then + msg_alert "\033[32m已切换为$fw_filter_lan_type模式!\033[0m" + else + msg_alert "\033[31m$COMMON_FAILED\033[0m" + fi ;; 2) add_mac @@ -420,13 +476,10 @@ fw_filter_lan() { 9) : >"$CRASHDIR"/configs/mac : >"$CRASHDIR"/configs/ip_filter - echo "-----------------------------------------------" - echo -e "\033[31m设备列表已清空!\033[0m" - sleep 1 + msg_alert "\033[31m设备列表已清空!\033[0m" ;; *) errornum - sleep 1 ;; esac done diff --git a/scripts/menus/uninstall.sh b/scripts/menus/uninstall.sh index 01d3d0a9..3e91208c 100644 --- a/scripts/menus/uninstall.sh +++ b/scripts/menus/uninstall.sh @@ -37,7 +37,7 @@ uninstall() { rm -rf "$CRASHDIR" fi else - error_report "\033[31m环境变量配置有误,请尝试手动移除安装目录!\033[0m" + msg_alert "\033[31m环境变量配置有误,请尝试手动移除安装目录!\033[0m" fi # 移除其他内容 @@ -71,7 +71,6 @@ uninstall() { sleep 1 exit 0 else - format_box "\033[31m操作已取消!\033[0m" - sleep 1 + msg_alert "\033[31m操作已取消!\033[0m" fi }