9 Commits

Author SHA1 Message Date
juewuy
21c4f8400b ~i18h 2026-03-22 21:38:10 +08:00
juewuy
75609fbc26 ~i18 2026-03-22 21:11:32 +08:00
juewuy
c8dfb3780a ~i18 2026-03-22 20:53:55 +08:00
juewuy
373c9aacbd Merge branch 'dev' of github.com:juewuy/ShellCrash into dev 2026-03-22 20:14:59 +08:00
juewuy
5f5ea62159 Merge pull request #1241 from abcfy2/dev
使用兼容性更强的 `rm -fr` 代替 `rm -d` 删除锁目录
2026-03-22 05:14:38 -07:00
Feng Yu
a9ddbba9fe 使用兼容性更强的 rm -fr 代替 rm -d 删除锁目录
Fix #1238
2026-03-22 20:12:38 +08:00
juewuy
2e71e78a9d Merge pull request #1230 from cyxc1124/feature/pushdeer-self-hosted-support
feat: 增加 PushDeer 自建服务器支持
2026-03-22 05:06:40 -07:00
juewuy
c0e3992d40 已修改 scripts/lang/chs/7_gateway.lang 2026-03-22 20:03:54 +08:00
cyxc1124
270dbd4299 feat: 增加 PushDeer 自建服务器支持 2026-03-05 23:44:23 +08:00
15 changed files with 1774 additions and 641 deletions

View File

@@ -1,4 +1,4 @@
GW_TITLE="访问与控制菜单"
GW_TITLE="访问与控制菜单"
GW_WARN="注意:"
GW_FW_VPS_HINT="如在vps运行还需在vps安全策略对相关端口同时放行"
GW_FW_PORT_LIMIT="最多支持设置放行10个端口请先减少一些"
@@ -14,84 +14,84 @@ GW_INPUT_WSPATH="请输入ws-path路径输入0删除"
GW_INPUT_UUID="请输入UUID输入0删除"
GW_INPUT_HOST="请输入本机公网IP(4/6)或域名"
GW_SHARE_LINK_HINT="你的分享链接是(请勿随意分享给他人):"
GW_MENU_FW_WAN="?????????"
GW_MENU_TG_BOT="??Telegram???????"
GW_MENU_DDNS="??DDNS????"
GW_MENU_VMESS="?????Vmess????"
GW_MENU_SHADOWSOCKS="?????ShadowSocks????"
GW_MENU_TS="??Tailscale????(?Singbox)"
GW_MENU_WG="??Wireguard???(?Singbox)"
GW_FW_STOP_WARN="??????????????"
GW_CONFIRM_CONTINUE="???????"
GW_YES="?"
GW_NO="?"
GW_NO_BACK="?,??????"
GW_FW_MANUAL_PORTS="????????:"
GW_FW_AUTO_PORTS="????????:"
GW_FW_DEFAULT_BLOCK="??????:"
GW_FW_TOGGLE="??/???????:"
GW_FW_ADD_PORT="??????(?????????)"
GW_FW_REMOVE_PORT="??????????"
GW_FW_CLEAR_PORTS="??????????"
GW_FW_DISABLE_CONFIRM="??????????"
GW_FW_DISABLE_RISK="???????????!"
GW_ERR_DUP_PORT="????!??????!"
GW_ERR_PORT_RANGE="????!????????(1-65535)!"
GW_ERR_INPUT="????!"
GW_INPUT_REMOVE_PORT="????????????"
GW_INPUT_0_BACK="??? 0 ??????"
GW_ERR_PORT_NOT_FOUND="??????????!"
GW_TG_CMD_MENU="??ShellCrash??"
GW_TG_CMD_HELP="????"
GW_TG_WARN="????????,?????????????!"
GW_TG_TOGGLE="??/??TG-BOT??"
GW_TG_BIND="TG-BOT????"
GW_TG_MENUPUSH="???????"
GW_TG_BIND_FIRST="????TG-BOT!"
GW_TG_BOUND_DETECTED="????????TG??BOT"
GW_TG_USE_DIRECT="???????"
GW_INBOUND_WARN_PORT="?????????????????????!"
GW_INBOUND_WARN_BASIC="?????????,???????????????!"
GW_INBOUND_WARN_ILLEGAL="????????????,??????!"
GW_VMS_TOGGLE="??/??Vmess??"
GW_SET_LISTEN_PORT="??????:"
GW_SET_WSPATH="??WS-path(??):"
GW_SET_UUID="????-uuid:"
GW_GEN_RANDOM_KEY="????????"
GW_SET_OBFS_HOST="????host(??):"
GW_GEN_SHARE_LINK="????????"
GW_FILL_REQUIRED="????????!"
GW_ERR_WSPATH="?????path??,????/???!"
GW_ERR_UUID="?????UUID??,??????????????!"
GW_INPUT_OBFS_HOST="???????host(??0??)"
GW_SS_TOGGLE="??/??ShadowSocks??"
GW_SS_SELECT_CIPHER="???????????:"
GW_SS_SET_PWD="??password:"
GW_SS_2022_NOTE_HEADER=" - - - - - - -\033[31m??\033[0m- - - - - - -"
GW_SS_2022_REQUIRE=" 2022?????????????password!"
GW_SS_2022_PASSWORD_ONLY="2022???????????????password!"
GW_TS_WARN="????????????????Tailscale??\n??????????????????????!"
GW_TS_KEY_URL="????:\033[32;4mhttps://login.tailscale.com/admin/settings/keys\033[0m"
GW_TS_ALLOW_URL="????????????:\033[32;4mhttps://login.tailscale.com\033[0m"
GW_TS_SUBNET_EXIT_HINT="???????????????Subnet?EXIT-NODE??"
GW_TS_TOGGLE="??/??Tailscale??"
GW_TS_SET_AUTHKEY="????(Auth Key)"
GW_TS_SUBNET="????????(Subnet)"
GW_TS_EXIT_NODE="????????(EXIT-NODE)"
GW_TS_HOSTNAME="??????(??)"
GW_TS_SET_KEY_FIRST="??????!"
GW_TS_INPUT_KEY="?????(??0??)"
GW_TS_EXITNODE_WARN="??exitnode???DNS?bug,???????????TailscaleDNS,\n?????????Globalname servers?????????IP???override"
GW_TS_INPUT_NAME="????????Tailscale???????"
GW_WG_WARN="????????????????WireGuard??\n??????????????????????!"
GW_WG_TOGGLE="??/??Wireguard??"
GW_WG_SET_ENDPOINT="??Endpoint??:"
GW_WG_SET_ENDPOINT_PORT="??Endpoint??:"
GW_WG_SET_PUBLIC="????-PublicKey:"
GW_WG_SET_PRESHARED="????-PresharedKey:"
GW_WG_SET_PRIVATE="????-PrivateKey:"
GW_WG_SET_IPV4="????IPV4??:"
GW_WG_SET_IPV6="?? ??IPV6??:"
GW_INPUT_TEXT_DEL0="???????(???0??)"
GW_INPUT_PLAIN="???"
GW_INPUT_PWD_DEL0="?????(??0??)"
GW_MENU_FW_WAN="配置公网访问防火墙"
GW_MENU_TG_BOT="配置Telegram专属控制机器人"
GW_MENU_DDNS="配置DDNS自动域名"
GW_MENU_VMESS="自定义公网Vmess入站节点"
GW_MENU_SHADOWSOCKS="自定义公网ShadowSocks入站节点"
GW_MENU_TS="配置Tailscale内网穿透(限Singbox"
GW_MENU_WG="配置Wireguard客户端(限Singbox"
GW_FW_STOP_WARN="公网访问防火墙需要先停止服务"
GW_CONFIRM_CONTINUE="是否确认继续?"
GW_YES=""
GW_NO=""
GW_NO_BACK="否,返回上级菜单"
GW_FW_MANUAL_PORTS="当前手动放行端口:"
GW_FW_AUTO_PORTS="当前自动放行端口:"
GW_FW_DEFAULT_BLOCK="默认拦截端口:"
GW_FW_TOGGLE="启用/关闭公网防火墙:"
GW_FW_ADD_PORT="添加放行端口(可包含默认拦截端口)"
GW_FW_REMOVE_PORT="移除指定手动放行端口"
GW_FW_CLEAR_PORTS="清空全部手动放行端口"
GW_FW_DISABLE_CONFIRM="是否确认关闭防火墙?"
GW_FW_DISABLE_RISK="这会带来极大的安全隐患!"
GW_ERR_DUP_PORT="输入错误!请勿重复添加!"
GW_ERR_PORT_RANGE="输入错误!请输入正确的数值(1-65535)"
GW_ERR_INPUT="输入错误!"
GW_INPUT_REMOVE_PORT="请直接输入要移除的端口号"
GW_INPUT_0_BACK="或输入 0 返回上级菜单"
GW_ERR_PORT_NOT_FOUND="请输入已添加过的端口!"
GW_TG_CMD_MENU="呼出ShellCrash菜单"
GW_TG_CMD_HELP="查看帮助"
GW_TG_WARN="由于网络环境原因,此机器人仅限服务启动时运行!"
GW_TG_TOGGLE="启用/关闭TG-BOT服务"
GW_TG_BIND="TG-BOT绑定设置"
GW_TG_MENUPUSH="启动时推送菜单"
GW_TG_BIND_FIRST="请先绑定TG-BOT"
GW_TG_BOUND_DETECTED="检测到已经绑定了TG推送BOT"
GW_TG_USE_DIRECT="是否直接使用?"
GW_INBOUND_WARN_PORT="设置的端口会添加到公网访问防火墙并自动放行!"
GW_INBOUND_WARN_BASIC="脚本只提供基础功能,更多需求请用自定义配置文件功能!"
GW_INBOUND_WARN_ILLEGAL="切勿用于搭建违法翻墙节点,违者后果自负!"
GW_VMS_TOGGLE="启用/关闭Vmess入站"
GW_SET_LISTEN_PORT="设置监听端口:"
GW_SET_WSPATH="设置WS-path(可选):"
GW_SET_UUID="设置密钥-uuid"
GW_GEN_RANDOM_KEY="一键生成随机密钥"
GW_SET_OBFS_HOST="设置混淆host可选"
GW_GEN_SHARE_LINK="一键生成分享链接"
GW_FILL_REQUIRED="请先完成必选设置!"
GW_ERR_WSPATH="不是合法的path路径必须以【/】开头!"
GW_ERR_UUID="不是合法的UUID格式请重新输入或使用随机生成功能"
GW_INPUT_OBFS_HOST="请输入免流混淆host输入0删除"
GW_SS_TOGGLE="启用/关闭ShadowSocks入站"
GW_SS_SELECT_CIPHER="请选择要使用的加密协议:"
GW_SS_SET_PWD="设置password"
GW_SS_2022_NOTE_HEADER=" - - - - - - -\033[31m注意\033[0m- - - - - - -"
GW_SS_2022_REQUIRE=" 2022系列加密必须使用随机生成的password"
GW_SS_2022_PASSWORD_ONLY="2022系列加密必须使用脚本随机生成的password"
GW_TS_WARN="脚本默认内核为了节约内存没有编译Tailscale模块\n如需使用请先前往自定义内核更新完整版内核文件"
GW_TS_KEY_URL="创建密钥:\033[32;4mhttps://login.tailscale.com/admin/settings/keys\033[0m"
GW_TS_ALLOW_URL="访问非本机目标需允许通告:\033[32;4mhttps://login.tailscale.com\033[0m"
GW_TS_SUBNET_EXIT_HINT="访问非本机目标需在终端设置使用SubnetEXIT-NODE模式"
GW_TS_TOGGLE="启用/关闭Tailscale服务"
GW_TS_SET_AUTHKEY="设置密钥(Auth Key"
GW_TS_SUBNET="通告路由内网地址(Subnet"
GW_TS_EXIT_NODE="通告路由全部流量(EXIT-NODE"
GW_TS_HOSTNAME="设置设备名称(可选)"
GW_TS_SET_KEY_FIRST="请先设置密钥!"
GW_TS_INPUT_KEY="请输入密钥输入0删除"
GW_TS_EXITNODE_WARN="目前exitnode的官方DNSbug,要么启用域名嗅探并禁用TailscaleDNS\n要么必须在网页设置Globalname servers为分配的本设备子网IP且启用override"
GW_TS_INPUT_NAME="请直接输入希望在Tailscale显示的设备名称"
GW_WG_WARN="脚本默认内核为了节约内存没有编译WireGuard模块\n如需使用请先前往自定义内核更新完整版内核文件"
GW_WG_TOGGLE="启用/关闭Wireguard服务"
GW_WG_SET_ENDPOINT="设置Endpoint地址:"
GW_WG_SET_ENDPOINT_PORT="设置Endpoint端口:"
GW_WG_SET_PUBLIC="设置公钥-PublicKey"
GW_WG_SET_PRESHARED="设置密钥-PresharedKey"
GW_WG_SET_PRIVATE="设置私钥-PrivateKey"
GW_WG_SET_IPV4="设置组网IPV4地址:"
GW_WG_SET_IPV6="可选 组网IPV6地址:"
GW_INPUT_TEXT_DEL0="请输入相应内容回车或0删除"
GW_INPUT_PLAIN="请输入"
GW_INPUT_PWD_DEL0="请输入密钥输入0删除"

View File

@@ -9,3 +9,128 @@ TOOLS_SSH_DISABLED="已禁止外网访问SSH"
TOOLS_DISABLE="禁用"
TOOLS_ENABLE="启用"
TOOLS_CONFIGURED="已配置"
TOOLS_SSH_ONLY_OPENWRT="此功能仅针对使用Openwrt系统的设备生效且不依赖服务"
TOOLS_SSH_UNSUPPORTED_SYSTEM="本功能不支持红米AX6S等镜像化系统设备请勿尝试"
TOOLS_SSH_PORT_ITEM="1) \033[32m修改\033[0m外网访问端口\033[36m$ssh_port\033[0m"
TOOLS_SSH_PASS_ITEM="2) \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)"
TOOLS_SSH_TOGGLE_ITEM="3) \033[33m$ssh_ol\033[0m外网访问SSH"
TOOLS_PROMPT_PORT="请输入端口号(1000-65535)> "
TOOLS_WARN_COMPAT="本页工具可能无法兼容全部Linux设备请酌情使用"
TOOLS_DISK_USAGE="磁盘占用/所在目录:"
TOOLS_MENU_TEST_ITEM="1) ShellCrash\033[33m测试菜单\033[0m"
TOOLS_MENU_GUIDE_ITEM="2) ShellCrash\033[32m新手引导\033[0m"
TOOLS_MENU_LOG_ITEM="3) \033[36m日志及推送工具\033[0m"
TOOLS_MENU_SSH_ITEM="4) \033[32m配置\033[0m外网访问SSH"
TOOLS_MENU_MI_UPDATE_ITEM="5) \033[33m$mi_update\033[0m小米系统自动更新"
TOOLS_MENU_MI_AUTO_SSH_ITEM="6) 小米设备软固化SSH —— \033[$mi_mi_autoSSH_type \033[0m"
TOOLS_MENU_MI_TUN_FIX_ITEM="8) 小米设备Tun模块修复 —— \033[$mi_tunfix \033[0m"
TOOLS_MI_UPDATE_MSG="已\033[33m$mi_update\033[0m小米路由器的自动更新如未生效请在官方APP中同步设置"
TOOLS_UNSUPPORTED_DEVICE="不支持的设备!"
TOOLS_FETCHING_SCRIPT="正在获取在线脚本......"
TOOLS_DOWNLOAD_FAIL="文件下载失败!"
TOOLS_DISABLE_FIX_CONFIRM="是否禁用此功能并移除相关补丁?"
TOOLS_YES="1) 是"
TOOLS_NO_BACK="0) 否,返回上级菜单"
TOOLS_NO="0) 否"
TOOLS_SELECT_PROMPT="请输入对应标号> "
TOOLS_PATCH_REMOVED="补丁文件已移除,请立即重启设备以防止出错!"
TOOLS_TUN_WARN1="本功能需要修改系统文件,不保证没有任何风险!"
TOOLS_TUN_WARN2="本功能采集的Tun模块并不一定适用于你的设备"
TOOLS_ACCEPT_RISK="1) 我已知晓,出现问题会自行承担!"
TOOLS_TUN_CONNECTING="正在连接服务器获取Tun模块补丁文件......"
TOOLS_TUN_OK="设置成功!请重启服务!"
TOOLS_TUN_FAIL="文件下载失败,请重试!"
TOOLS_DEVICE_NOT_NEED="当前设备无需设置,请勿尝试!"
TOOLS_AUTO_SSH_WARN1="本功能使用软件命令进行固化不保证100%成功!"
TOOLS_AUTO_SSH_WARN2="如有问题请加群反馈:"
TOOLS_AUTO_SSH_PWD_HINT1="请输入需要还原的SSH密码不影响当前密码"
TOOLS_AUTO_SSH_PWD_HINT2="(回车可跳过)"
TOOLS_AUTO_SSH_INPUT="请输入> "
TOOLS_LOG_TG="1) Telegram推送\t——\033[$stat_TG\033[0m"
TOOLS_LOG_DEER="2) PushDeer推送\t——\033[$stat_Deer\033[0m"
TOOLS_LOG_BARK="3) Bark推送-IOS\t——\033[$stat_bark\033[0m"
TOOLS_LOG_PO="4) Passover推送\t——\033[$stat_Po\033[0m"
TOOLS_LOG_PP="5) PushPlus推送\t——\033[$stat_PP\033[0m"
TOOLS_LOG_SYNO="6) SynoChat推送\t——\033[$stat_SynoChat\033[0m"
TOOLS_LOG_GOTIFY="7) Gotify推送\t ——\033[$stat_Gotify\033[0m"
TOOLS_LOG_VIEW="a) 查看\033[36m运行日志\033[0m"
TOOLS_LOG_TASK="b) 推送任务日志\t——\033[$stat_task\033[0m"
TOOLS_LOG_DEVICE="c) 设置设备名称\t——\033[$device_s\033[0m"
TOOLS_LOG_CLEAR="d) 清空日志文件"
TOOLS_CONFIRM_CLOSE_TG="是否确认关闭TG日志推送"
TOOLS_CONFIRM_CLOSE_DEER="是否确认关闭PushDeer日志推送"
TOOLS_CONFIRM_CLOSE_BARK="是否确认关闭Bark日志推送"
TOOLS_CONFIRM_CLOSE_PO="是否确认关闭Pushover日志推送"
TOOLS_CONFIRM_CLOSE_PP="是否确认关闭PushPlus日志推送"
TOOLS_CONFIRM_CLOSE_SYNO="是否确认关闭SynoChat日志推送"
TOOLS_CONFIRM_CLOSE_GOTIFY="是否确认关闭Gotify日志推送"
TOOLS_BOT_PUBLIC="1) 使用公共机器人\t——不依赖内核服务"
TOOLS_BOT_PRIVATE="2) 使用私人机器人\t——需要额外申请"
TOOLS_PUSHDEER_SELECT_SERVER="请选择PushDeer服务器类型"
TOOLS_PUSHDEER_OFFICIAL="1) 官方服务器api2.pushdeer.com"
TOOLS_PUSHDEER_CUSTOM="2) 自建服务器"
TOOLS_PUSHDEER_CUSTOM_URL_HINT="请输入自建PushDeer服务器地址不含/message/push"
TOOLS_PUSHDEER_CUSTOM_URL_EXAMPLE="例如:\033[36mhttps://push.example.com\033[0m"
TOOLS_PUSHDEER_CUSTOM_URL_INPUT="请直接输入服务器地址"
TOOLS_OR_BACK="或输入 0 返回上级菜单"
TOOLS_PUSHDEER_INSTALL1="1. 请先前往 \033[32;4mhttp://www.pushdeer.com/official.html\033[0m 扫码安装快应用或下载APP"
TOOLS_PUSHDEER_INSTALL2="2. 打开快应用/APP并完成登陆"
TOOLS_PUSHDEER_INSTALL3="3. \033[33m切换到「设备」标签页点击右上角的加号注册当前设备\033[0m"
TOOLS_PUSHDEER_INSTALL4="4. \033[36m切换到「秘钥」标签页点击右上角的加号创建一个秘钥并复制\033[0m"
TOOLS_PUSHDEER_SECRET_HINT="请直接输入你复制的秘钥"
TOOLS_PUSHDEER_OK="已完成PushDeer日志推送设置"
TOOLS_BARK_WARN="Bark推送仅支持IOS系统其他平台请使用其他推送方式"
TOOLS_BARK_INSTALL="请安装Bark-IOS客户端并在客户端中找到专属推送链接"
TOOLS_BARK_URL_HINT="请直接输入你的Bark推送链接"
TOOLS_BARK_OK="已完成Bark日志推送设置"
TOOLS_PUSHOVER_REG="请先通过 \033[32;4mhttps://pushover.net/\033[0m 注册账号并获取\033[36mUser Key\033[0m"
TOOLS_PUSHOVER_USERKEY_HINT="请直接请输入你的User Key"
TOOLS_PUSHOVER_VERIFY="请检查注册邮箱,完成账户验证"
TOOLS_PUSHOVER_VERIFIED="我已经验证完成"
TOOLS_PUSHOVER_VERIFY_PROMPT="我已经验证完成(1/0)> "
TOOLS_PUSHOVER_TOKEN_BUILD="请通过 \033[32;4mhttps://pushover.net/apps/build\033[0m 生成\033[36mAPI Token\033[0m"
TOOLS_PUSHOVER_TOKEN_HINT="请输入你的API Token"
TOOLS_PUSHOVER_OK="已完成Passover日志推送设置"
TOOLS_PUSHPLUS_REG="请先通过 \033[32;4mhttps://www.pushplus.plus/push1.html\033[0m 注册账号并获取\033[36mtoken\033[0m"
TOOLS_PUSHPLUS_TOKEN_HINT="请直接输入你的token"
TOOLS_PUSHPLUS_OK="已完成PushPlus日志推送设置"
TOOLS_SYNOCHAT_URL_HINT="请输入你的Synology DSM主页地址"
TOOLS_SYNOCHAT_TOKEN_HINT="请输入你的Synology Chat Token"
TOOLS_SYNOCHAT_USERID_HINT="请通过\"你的群晖地址/webapi/entry.cgi?api=SYNO.Chat.External&method=user_list&version=2&token=你的TOKEN\"获取user_id"
TOOLS_SYNOCHAT_USERID_INPUT="请输入你的user_id> "
TOOLS_SYNOCHAT_OK="已完成SynoChat日志推送设置"
TOOLS_GOTIFY_REG="请先通过Gotify服务器获取推送URL"
TOOLS_GOTIFY_FORMAT="格式示例: https://gotify.example.com/message?token=你的应用令牌"
TOOLS_GOTIFY_URL_HINT="请直接你的Gotify推送URL"
TOOLS_LOG_NOT_FOUND="未找到相关日志!"
TOOLS_DEVICE_NAME_HINT="请直接输入本设备自定义推送名称"
TOOLS_DEVICE_NAME_BACK="或直接回车确认返回上级菜单"
TOOLS_LOG_CLEARED="运行日志及任务日志均已清空!"
TOOLS_TEST_MENU_TITLE="这里是测试命令菜单"
TOOLS_TEST_MENU_HINT="如遇问题尽量运行相应命令后截图提交issue或TG讨论组"
TOOLS_TEST_ITEM_1="1) Debug模式运行内核"
TOOLS_TEST_ITEM_2="2) 查看系统DNS端口(:53)占用 "
TOOLS_TEST_ITEM_3="3) 测试ssl加密(aes-128-gcm)跑分"
TOOLS_TEST_ITEM_4="4) 查看ShellCrash相关路由规则"
TOOLS_TEST_ITEM_5="5) 查看内核配置文件前40行"
TOOLS_TEST_ITEM_6="6) 测试代理服务器连通性(google.tw)"
TOOLS_NETSTAT_HINT="可以使用\033[44m netstat -ntulp |grep xxx \033[0m来查询任意(xxx)端口"
TOOLS_FW_TITLE="----------------本机防火墙---------------------"
TOOLS_PROXY_NOTE="注意依赖curl不支持wget且测试结果不保证一定准确"
TOOLS_PROXY_OK="连接成功!响应时间为:"
TOOLS_PROXY_TIMEOUT="连接超时!请重试或检查节点配置!"
TOOLS_DEBUG_WARN1="注意Debug运行均会停止原本的内核服务"
TOOLS_DEBUG_WARN2="后台运行日志地址:\033[32m$TMPDIR/debug.log\033[0m"
TOOLS_DEBUG_WARN3="如长时间运行后台监测日志等级推荐error防止文件过大"
TOOLS_DEBUG_WARN4="你亦可通过:\033[33mcrash -s debug 'warning'\033[0m命令使用其他日志等级"
TOOLS_DEBUG_ITEM_1="1) 仅测试\033[32m$config_tmp\033[0m配置文件可用性"
TOOLS_DEBUG_ITEM_2="2) 前台运行\033[32m$config_tmp\033[0m配置文件不配置防火墙劫持(\033[33m使用Ctrl+C手动停止\033[0m)"
TOOLS_DEBUG_ITEM_3="3) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[31merror\033[0m"
TOOLS_DEBUG_ITEM_4="4) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[32minfo\033[0m"
TOOLS_DEBUG_ITEM_5="5) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[33mdebug\033[0m"
TOOLS_DEBUG_ITEM_6="6) 后台运行完整启动流程并配置防火墙劫持,且将错误日志打印到闪存:\033[32m$CRASHDIR/debug.log\033[0m"
TOOLS_DEBUG_ITEM_8="8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
TOOLS_DEBUG_ITEM_9="9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json"
TOOLS_FLASH_WARN="频繁写入闪存会导致闪存寿命降低如非遇到会导致设备死机或重启的bug请勿使用此功能"
TOOLS_FLASH_CONFIRM="是否确认启用此功能?"
TOOLS_MERGE_OK="合并成功!"

View File

@@ -47,3 +47,243 @@ UPG_CORE_SWITCH_WARN="二者Geo数据库及yaml/json配置文件不通用"
UPG_CORE_SWITCH_KEEP="是否保留相关数据库文件?"
UPG_KEEP="保留"
UPG_NOT_KEEP="不保留"
UPG_PAC_LINK_TEXT="PAC配置链接为"
UPG_PAC_GUIDE_TEXT="PAC的使用教程请参考"
UPG_THANKS_PROJECTS="感谢以下项目及其开发者们的无私奉献!"
UPG_THANKS_SPECIAL_TEXT="特别感谢:\033[36m所有帮助及赞助过此项目的同仁们\033[0m"
UPG_GETTING_UPDATE="正在检查更新......"
UPG_GET_OK="检查更新成功"
UPG_GET_FAIL="检查更新失败!请尝试切换其他安装源!"
UPG_EXTRACT_START="开始解压文件......"
UPG_SCRIPT_UPDATE_OK="脚本更新成功!"
UPG_SCRIPT_UPDATE_PROMPT="注意:更新时会停止服务!"
UPG_SCRIPT_CUR_VER_TEXT="当前脚本版本为:"
UPG_SCRIPT_NEW_VER_TEXT="最新脚本版本为:"
UPG_UPDATE_NOW_TEXT="立即更新"
UPG_CPUCORE_HINT1_TEXT="仅适合脚本无法正确识别核心或核心无法正常运行时使用!"
UPG_CPUCORE_HINT2_TEXT="不知道如何获取核心版本?"
UPG_CPUCORE_HINT3_TEXT="请参考:"
UPG_CPUCORE_LIST_TEXT="当前可供在线下载的处理器架构为:"
UPG_CORETYPE_CONFIRM_TEXT="请确认该自定义内核的类型:"
UPG_CORE_SWITCH_KEEP_TEXT="是否保留相关数据库文件?"
UPG_KEEP_TEXT="保留"
UPG_NOT_KEEP_TEXT="不保留"
UPG_GETTING_CORE_TEXT="正在在线获取$crashcore核心文件......"
UPG_CORE_DOWNLOAD_OK_TEXT="$crashcore核心下载成功"
UPG_CORE_DOWNLOAD_FAIL_TEXT="核心文件下载失败!"
UPG_CORE_DOWNLOAD_VERIFY_FAIL_TEXT="核心文件下载成功但校验失败"
UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT="请尝试手动指定CPU版本"
UPG_CORE_LINK_TEXT="正在获取内核文件链接......"
UPG_CORE_INFO_TITLE="内核版本:"
UPG_CORE_INFO_TIME1="发布时间:"
UPG_CORE_INFO_TIME2="更新时间:"
UPG_CORE_INFO_SELECT="请确认内核信息并选择:"
UPG_CORE_NOT_FOUND="找不到可用内核可能是开发者没有编译相关CPU架构版本的内核文件"
UPG_CORE_CHECK_FAIL_HINT="查找失败,请尽量在服务启动后再使用本功能!"
UPG_CUSTOM_CORE_SOURCE="此处内核通常源自互联网采集,此处致谢各位开发者!"
UPG_CUSTOM_CORE_WARN="自定义内核未经过完整适配,使用出现问题请自行解决!"
UPG_CUSTOM_CORE_TASK_WARN="自定义内核已适配定时任务,但不支持小闪存模式!"
UPG_CUSTOM_CORE_NET_WARN="如遇到网络错误请先启动ShellCrash服务"
UPG_CUSTOM_CORE_CURRENT="当前内核为:"
UPG_CUSTOM_CORE_SELECT="请选择需要使用的核心:"
UPG_CUSTOM_CORE_LINK_HINT="请输入自定义内核的链接地址"
UPG_CUSTOM_CORE_LINK_HINT2="(必须是以.tar.gz、.upx或.gz结尾的压缩文件"
UPG_CUSTOM_CORE_LINK_HINT3="或者输入 0 返回上级菜单"
UPG_ZIPTYPE_TITLE="请选择内核分支及压缩方式:"
UPG_ZIPTYPE_1="1) \033[36m最简编译release版本upx压缩\033[0m"
UPG_ZIPTYPE_1_HINT="不支持Gvisor、Tailscale、Wireguard、NaiveProxy"
UPG_ZIPTYPE_2="2) \033[32m标准编译release版本tar.gz压缩\033[0m"
UPG_ZIPTYPE_2_HINT="完整支持脚本全部内置功能"
UPG_ZIPTYPE_3="3) \033[33m完整编译alpha版本gz压缩\033[0m"
UPG_ZIPTYPE_3_HINT="占用可能略高,稳定性自测"
UPG_CORE_MENU_CURRENT="当前内核:"
UPG_CORE_MENU_SYS="当前系统处理器架构:"
UPG_CORE_MENU_LOCAL_HINT="如需本地上传,请将.upx .gz .tar.gz文件上传至 /tmp 目录后重新运行crash命令"
UPG_CORE_MENU_SELECT="请选择需要使用的核心版本:"
UPG_CORE_MENU_1="1) \033[43;30mMihomo\033[0m\033[32m$meta_v \033[32m原meta内核支持全面\033[0m \033[33m占用略高\033[0m"
UPG_CORE_MENU_2="2) \033[43;30mSingBoxR\033[0m\033[32m$singboxr_v \033[32m支持全面\033[0m \033[33m使用reF1nd增强分支\033[0m"
UPG_CORE_MENU_3="3) \033[43;30mSingBox\033[0m\033[32m$singbox_v \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
UPG_CORE_MENU_4="4) \033[43;30mClash\033[0m\033[32m$clash_v \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
UPG_CORE_MENU_5="5) 切换版本分支及压缩方式:\033[32m$zip_type\033[0m"
UPG_CORE_MENU_6="6) \033[36m使用自定义内核\033[0m $custcore"
UPG_CORE_MENU_7="7) \033[32m更新当前内核\033[0m"
UPG_CORE_MENU_9="9) 手动指定处理器架构"
UPG_GEO_GETTING="正在从服务器获取数据库文件......"
UPG_GEO_FAIL="文件下载失败!"
UPG_GEO_EXTRACT_FAIL="文件解压失败!"
UPG_GEO_OK="$geotype数据库文件下载成功"
UPG_GEO_LINKING="正在获取数据库文件......"
UPG_GEO_FINDING="正在查找可更新的数据库文件......"
UPG_GEO_SELECT="请选择需要更新的数据库文件:"
UPG_GEO_NO_RESULT="查找失败,请尽量在服务启动后再使用本功能!"
UPG_GEO_CUSTOM_HINT="此处数据库均源自互联网采集,此处致谢各位开发者!"
UPG_GEO_CUSTOM_HINT2="请点击或复制链接前往项目页面查看具体说明!"
UPG_GEO_CUSTOM_HINT3="自定义数据库不支持定时任务及小闪存模式!"
UPG_GEO_CUSTOM_HINT4="如遇到网络错误请先启动ShellCrash服务"
UPG_GEO_SOURCE_SELECT="请选择需要更新的数据库项目来源:"
UPG_GEO_LOCAL_ONLY1="仅限Clash/Mihomo"
UPG_GEO_LOCAL_ONLY2="仅限SingBox-srs"
UPG_GEO_LOCAL_ONLY3="仅限Mihomo-mrs"
UPG_GEO_LOCAL_ONLY4="仅限Clash-GeoIP"
UPG_GEO_CUSTOM_LINK="自定义数据库链接"
UPG_GEO_CLEAN_HINT1="这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件"
UPG_GEO_CLEAN_HINT2="清理后启动服务即可自动下载所需文件"
UPG_GEO_CLEAN_CONFIRM="确认清理"
UPG_GEO_CLEAN_OK="所有数据库文件均已清理!"
UPG_DB_GETTING="正在连接服务器获取安装文件......"
UPG_DB_DOWNLOAD_OK="下载成功,正在解压文件......"
UPG_DB_EXTRACT_FAIL="文件解压失败!"
UPG_DB_OK="面板安装成功!"
UPG_DB_REFRESH_HINT="如未生效请使用【Ctrl+F5】强制刷新浏览器"
UPG_DB_INSTALLED="检测到已经安装过本地面板"
UPG_DB_UPGRADE="升级/覆盖安装"
UPG_DB_CANCEL="安装已取消"
UPG_DB_DIR_SELECT="请选择面板安装目录:"
UPG_DB_DIR_1="1) 在${CRASHDIR}/ui目录安装"
UPG_DB_DIR_2="2) 在/www/clash目录安装"
UPG_DB_TITLE="安装 dashboard 管理面板到本地"
UPG_DB_TITLE2="打开管理面板的速度更快且更稳定"
UPG_DB_SELECT="请选择面板安装类型:"
UPG_DB_WIP=" - - - - - - -维护中- - - - - - -"
UPG_DB_OLD=" - - - - - -已停止维护- - - - - -"
UPG_DB_INSTALL_1="1) 安装\033[32mzashboard面板\033[0m约2.2mb"
UPG_DB_INSTALL_2="2) 安装\033[32mMetaXD面板\033[0m约1.5mb"
UPG_DB_INSTALL_3="3) 安装\033[32mYacd-Meta魔改面板\033[0m约1.7mb"
UPG_DB_INSTALL_4="4) 安装\033[32m基础面板\033[0m约500kb"
UPG_DB_INSTALL_5="5) 安装\033[32mMeta基础面板\033[0m约800kb"
UPG_DB_INSTALL_6="6) 安装\033[32mYacd面板\033[0m约1.1mb"
UPG_DB_UNINSTALL="9) \033[31m卸载本地面板\033[0m"
UPG_DB_UNINSTALL_CONFIRM="是否卸载本地面板?"
UPG_DB_UNINSTALL_YES="1) 确认卸载"
UPG_DB_UNINSTALL_OK="面板已经卸载!"
UPG_CRT_DB_GETTING="正在连接服务器获取安装文件......"
UPG_CRT_DB_DOWNLOAD_FAIL="文件下载失败!"
UPG_CRT_DB_OK="证书安装成功!"
UPG_CRT_TITLE1="安装/更新本地根证书文件ca-certificates.crt"
UPG_CRT_TITLE2="用于解决证书校验错误x509报错等问题"
UPG_CRT_TITLE3="无上述问题的设备请勿使用!"
UPG_CRT_EXISTS="检测到系统已经存在根证书文件:"
UPG_CRT_UPDATE="1) 覆盖更新"
UPG_CRT_INSTALL="1) 立即安装"
UPG_CRT_BACK="0) 返回上级菜单"
UPG_CRT_WARN="设备可能尚未安装openssl无法安装证书文件"
UPG_SOURCE_CUR="当前版本:"
UPG_SOURCE_CUR2="当前源:"
UPG_SOURCE_TITLE="切换ShellCrash版本及更新源地址"
UPG_SOURCE_SWITCH_STABLE="a) 切换至\033[32m稳定版-stable\033[0m"
UPG_SOURCE_SWITCH_MASTER="b) 切换至\033[36m公测版-master\033[0m"
UPG_SOURCE_SWITCH_DEV="c) 切换至\033[33m开发版-dev\033[0m"
UPG_SOURCE_CUSTOM="d) 自定义源地址(用于本地源或自建源)"
UPG_SOURCE_ROLLBACK="e) \033[31m版本回退\033[0m"
UPG_SOURCE_DEV_WARN1="开发版未经过妥善测试可能依然存在大量bug"
UPG_SOURCE_DEV_WARN2="如果你没有足够的耐心或者测试经验,切勿使用此版本!"
UPG_SOURCE_DEV_WARN3="请务必加入我们的讨论组:\033[36;4mhttps://t.me/ShellClash\033[0m"
UPG_SOURCE_DEV_CONFIRM="是否依然切换到开发版?"
UPG_SOURCE_DEV_YES="1) 确认切换"
UPG_SOURCE_CUSTOM_HINT="请直接输入个人源路径"
UPG_SOURCE_CUSTOM_HINT2="或者输入 0 返回上级菜单"
UPG_SOURCE_CUSTOM_INPUT="请输入个人源路径> "
UPG_SOURCE_VER_GETTING="正在获取版本信息......"
UPG_SOURCE_VER_OK="获取版本信息成功"
UPG_SOURCE_ROLLBACK_SELECT="请选择想要回退至的具体版本:"
UPG_SOURCE_ROLLBACK_FAIL="版本回退信息获取失败,请尝试更换其他安装源!"
UPG_SOURCE_ROLLBACK_NOTSUP="当前源不支持版本回退"
UPG_SOURCE_ROLLBACK_HINT="请尝试更换其他安装源!"
UPG_THANKS_ITEM_CLASH="Clash 开发Dreamacro"
UPG_THANKS_ITEM_SINGBOX="sing-box 开发SagerNet"
UPG_THANKS_ITEM_SINGBOX_URL="项目地址https://github.com/SagerNet/sing-box"
UPG_THANKS_ITEM_METACUBE="MetaCubeX 开发MetaCubeX"
UPG_THANKS_ITEM_METACUBE_URL="项目地址https://github.com/MetaCubeX"
UPG_THANKS_ITEM_YACD="YACD面板 开发haishanh"
UPG_THANKS_ITEM_YACD_URL="项目地址https://github.com/haishanh/yacd"
UPG_THANKS_ITEM_ZASH="Zashboard 开发Zephyruso"
UPG_THANKS_ITEM_ZASH_URL="项目地址https://github.com/Zephyruso/zashboard"
UPG_THANKS_ITEM_SUB="Subconverter 开发tindy2013"
UPG_THANKS_ITEM_SUB_URL="项目地址https://github.com/tindy2013/subconverter"
UPG_THANKS_ITEM_REF1ND="sing-box-reF1nd 开发reF1nd"
UPG_THANKS_ITEM_REF1ND_URL="项目地址https://github.com/reF1nd/sing-box"
UPG_THANKS_ITEM_DUSTIN="DustinWin 开发DustinWin"
UPG_THANKS_ITEM_DUSTIN_URL="开发者地址https://github.com/DustinWin"
UPG_CORE_GET_LINK_TITLE="正在获取内核文件链接......"
UPG_CUSTOM_CORE_CURRENT_TEXT="当前内核为:"
UPG_CUSTOM_CORE_NOTE1="不支持Gvisor、Tailscale、Wireguard、NaiveProxy"
UPG_CORE_V1="1) \033[43;30mMihomo\033[0m\033[32m$meta_v \033[32m原meta内核支持全面\033[0m \033[33m占用略高\033[0m"
UPG_CORE_V1_DOC="说明文档:\033[36;4mhttps://wiki.metacubex.one\033[0m"
UPG_CORE_V2="2) \033[43;30mSingBoxR\033[0m\033[32m$singboxr_v \033[32m支持全面\033[0m \033[33m使用reF1nd增强分支\033[0m"
UPG_CORE_V2_DOC="说明文档:\033[36;4mhttps://sing-boxr.dustinwin.us.kg\033[0m"
UPG_CORE_V3="3) \033[43;30mSingBox\033[0m\033[32m$singbox_v \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
UPG_CORE_V3_DOC="说明文档:\033[36;4mhttps://sing-box.sagernet.org\033[0m"
UPG_CORE_V4="4) \033[43;30mClash\033[0m\033[32m$clash_v \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
UPG_CORE_V4_DOC="说明文档:\033[36;4mhttps://lancellc.gitbook.io\033[0m"
UPG_CORE_ASUS_WARN="Meta内核使用的GeoSite.dat数据库在华硕设备存在被系统误删的问题可能无法使用!"
UPG_GEO_FIND_TITLE="正在查找可更新的数据库文件......"
UPG_GEO_SOURCE_TITLE="请选择需要更新的数据库项目来源:"
UPG_GEO_LINK_HINT="请输入自定义数据库的链接地址> "
UPG_GEO_CHOOSE_HINT="注意Mihomo内核和SingBox内核的数据库文件不通用"
UPG_GEO_LATEST="在线数据库最新版本(每日同步上游):"
UPG_GEO_CHOOSE="请选择需要更新的Geo数据库文件"
UPG_GEO_ITEM1="1) CN-IP绕过文件约0.1mb"
UPG_GEO_ITEM2="2) CN-IPV6绕过文件约30kb"
UPG_GEO_ITEM3="3) Mihomo精简版GeoIP_cn数据库约0.1mb"
UPG_GEO_ITEM4="4) Mihomo完整版GeoSite数据库约5mb"
UPG_GEO_ITEM5="5) Mihomo-mrs数据库常用包约1mb,非必要勿用)"
UPG_GEO_ITEM6="6) Singbox-srs数据库常用包约0.8mb,非必要勿用)"
UPG_GEO_ITEM8="8) \033[36m自定义数据库文件\033[0m"
UPG_GEO_ITEM9="9) \033[31m清理数据库文件\033[0m"
UPG_GEO_CLEAN_PROMPT="确认清理"
UPG_GEO_CLEAN_WARN="这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件"
UPG_GEO_CLEAN_WARN2="清理后启动服务即可自动下载所需文件"
UPG_GEO_CLEANED="所有数据库文件均已清理!"
UPG_DB_CONNECTING="正在连接服务器获取安装文件......"
UPG_DB_DOWNLOAD_FAIL="文件下载失败!"
UPG_DB_EXTRACT_FAIL_TEXT="文件解压失败!"
UPG_DB_INSTALLED_HINT="检测到已经安装过本地面板"
UPG_DB_INSTALL_CANCEL="安装已取消"
UPG_DB_DIR_TITLE="请选择面板安装目录:"
UPG_DB_DIR_1_TEXT="1) 在${CRASHDIR}/ui目录安装"
UPG_DB_DIR_2_TEXT="2) 在/www/clash目录安装"
UPG_DB_INSTALL_TITLE="安装 dashboard 管理面板到本地"
UPG_DB_INSTALL_TITLE2="打开管理面板的速度更快且更稳定"
UPG_DB_INSTALL_SELECT="请选择面板安装类型:"
UPG_DB_INSTALL_MID=" - - - - - - -维护中- - - - - - -"
UPG_DB_INSTALL_END=" - - - - - -已停止维护- - - - - -"
UPG_DB_INSTALL_4_TEXT="4) 安装\033[32m基础面板\033[0m约500kb"
UPG_DB_INSTALL_5_TEXT="5) 安装\033[32mMeta基础面板\033[0m约800kb"
UPG_DB_INSTALL_6_TEXT="6) 安装\033[32mYacd面板\033[0m约1.1mb"
UPG_DB_UNINSTALL_PROMPT="是否卸载本地面板?"
UPG_DB_UNINSTALL_CONFIRM_TEXT="1) 确认卸载"
UPG_DB_UNINSTALLED="面板已经卸载!"
UPG_CRT_CONNECTING="正在连接服务器获取安装文件......"
UPG_CRT_INSTALL_OK="证书安装成功!"
UPG_CRT_INSTALL_TITLE1="安装/更新本地根证书文件ca-certificates.crt"
UPG_CRT_INSTALL_TITLE2="用于解决证书校验错误x509报错等问题"
UPG_CRT_INSTALL_TITLE3="无上述问题的设备请勿使用!"
UPG_CRT_EXIST_HINT="检测到系统已经存在根证书文件:"
UPG_CRT_OVERWRITE="1) 覆盖更新"
UPG_CRT_NOW="1) 立即安装"
UPG_CRT_NOT_USE="设备可能尚未安装openssl无法安装证书文件"
UPG_SOURCE_TITLE2="切换ShellCrash版本及更新源地址"
UPG_SOURCE_CUR_VER="当前版本:"
UPG_SOURCE_CUR_URL="当前源:"
UPG_SOURCE_STABLE_TEXT="稳定版"
UPG_SOURCE_MASTER_TEXT="公测版"
UPG_SOURCE_DEV_TEXT="开发版"
UPG_SOURCE_DEV_WARN4="开发版未经过妥善测试可能依然存在大量bug"
UPG_SOURCE_DEV_WARN5="如果你没有足够的耐心或者测试经验,切勿使用此版本!"
UPG_SOURCE_DEV_WARN6="请务必加入我们的讨论组:\033[36;4mhttps://t.me/ShellClash\033[0m"
UPG_SOURCE_DEV_ASK="是否依然切换到开发版?"
UPG_SOURCE_DEV_CONFIRM_TEXT="1) 确认切换"
UPG_SOURCE_PATH_HINT="请直接输入个人源路径"
UPG_SOURCE_PATH_HINT2="或者输入 0 返回上级菜单"
UPG_SOURCE_PATH_INPUT="请输入个人源路径> "
UPG_SOURCE_GETTING_VER="正在获取版本信息......"
UPG_SOURCE_GET_VER_OK="获取版本信息成功"
UPG_SOURCE_ROLLBACK_SELECT_TEXT="请选择想要回退至的具体版本:"
UPG_SOURCE_ROLLBACK_FAIL_TEXT="版本回退信息获取失败,请尝试更换其他安装源!"
UPG_SOURCE_ROLLBACK_NOTSUP_TEXT="当前源不支持版本回退"
UPG_SOURCE_ROLLBACK_HINT_TEXT="请尝试更换其他安装源!"
UPG_SOURCE_SWITCH_OK="源地址切换成功!"
UPG_GEO_TYPE_LITE="精简版"
UPG_GEO_TYPE_FULL="全球版"
UPG_SOURCE_UNSET="未指定"
UPG_SOURCE_ROLLBACK_TAG="(回退)"

View File

@@ -0,0 +1,85 @@
FWF_TITLE="流量过滤"
FWF_ITEM_1="1) 过滤非常用端口: \033[36m$common_ports\033[0m ———用于过滤P2P流量"
FWF_ITEM_2="2) 过滤局域网设备: \033[36m$mac_return\033[0m ———使用黑/白名单进行过滤"
FWF_ITEM_3="3) 过滤QUIC协议 \033[36m$quic_rj\033[0m ———优化视频性能"
FWF_ITEM_4="4) 过滤CN_IP(4&6)列表:\033[36m$cn_ip_route\033[0m ———优化性能"
FWF_ITEM_5="5) 自定义透明路由ipv4网段适合vlan等复杂网络环境"
FWF_ITEM_6="6) 自定义保留地址ipv4网段需要以保留地址为访问目标的环境"
FWF_BACK="0) $COMMON_BACK"
FWF_SWITCH_STOP="切换时将停止服务,是否继续:"
FWF_YES="1) 是"
FWF_NO_BACK="0) 否,返回上级菜单"
FWF_QUIC_OFF="已禁止QUIC流量通过ShellCrash内核"
FWF_QUIC_ON="已取消禁止QUIC协议流量"
FWF_CNIP_ON="已开启CN_IP绕过内核功能"
FWF_CNIP_WARN="注意此功能会导致全局模式及一切CN相关规则失效"
FWF_CNIP_OFF="已禁用CN_IP绕过内核功能"
FWF_NO_IPSET="当前设备缺少ipset模块或未使用nftables模式无法启用绕过功能"
FWF_WHITE_LIST="白名单"
FWF_BLACK_LIST="黑名单"
FWF_PASS_WORD="不"
FWF_COMMON_NOTE="注意:\n"
FWF_MIX_NOTE="MIX模式下所有fake-ip来源的非常用端口流量不会被过滤"
FWF_ALLOWED_PORTS="当前已放行端口:"
FWF_PORT_MENU_1="1) 启用/关闭端口过滤: \t\033[36m$common_ports\033[0m"
FWF_PORT_MENU_2="2) 添加放行端口"
FWF_PORT_MENU_3="3) 移除指定放行端口"
FWF_PORT_MENU_4="4) 重置默认放行端口"
FWF_PORT_MENU_5="5) 重置为旧版放行端口"
FWF_MAX_PORT="最多支持设置放行15个端口请先减少一些"
FWF_INPUT_ADD_HINT="请直接输入要放行的端口号"
FWF_INPUT_ADD_HINT2="(每次只能输入一个端口号,切勿一次添加多个端口号)"
FWF_INPUT_REMOVE_HINT="请直接输入要移除的端口号"
FWF_OR_BACK="或输入 0 返回上级菜单"
FWF_ERR_DUP="输入错误!请勿重复添加!"
FWF_ERR_RANGE="输入错误请输入正确的数值165535"
FWF_INPUT_PORT="请输入> "
FWF_CUST_HOST_TITLE="当前默认透明路由的网段为:"
FWF_CUST_HOST_TITLE2="当前已添加的自定义网段为:"
FWF_CUST_HOST_MENU_1="1) 移除所有自定义网段"
FWF_CUST_HOST_MENU_2="2) 使用自定义网段覆盖默认网段"
FWF_CUST_HOST_HINT="请输入对应的序号或需要额外添加的网段> "
FWF_NET_ERR="请输入正确的网段地址!"
FWF_RESERVE_NOTE="注意:地址必须是空格分隔,错误的设置可能导致网络回环或启动报错,请务必谨慎!"
FWF_RESERVE_NOW="当前网段:"
FWF_RESERVE_INPUT_HINT="请直接输入自定义保留地址ipv4网段"
FWF_RESERVE_INPUT_HINT2="或输入 1 重置默认网段"
FWF_RESERVE_INPUT_HINT3="或输入 0 返回上级菜单"
FWF_RESERVE_PROMPT="请输入> "
FWF_RESERVE_SET="已将保留地址网段设为:"
FWF_RESERVE_ERR="输入有误,请重新输入!"
FWF_LAN_NO_DEVICE="未知设备"
FWF_MAC_HINT="手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式"
FWF_MAC_EXISTED="已添加的mac地址"
FWF_NONE_MAC="暫未添加任何mac地址"
FWF_MAC_HEADER="序号 \033[33m设备IP 设备mac地址 设备名称\033[0m"
FWF_MAC_NONE="无纪录"
FWF_MAC_INPUT_HINT="请输入对应序号或直接输入mac地址> "
FWF_MAC_DUP="已添加的设备,请勿重复添加!"
FWF_IP_HINT="手动输入时仅支持 \033[32m192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式"
FWF_IP_HINT2="不支持ipv6地址过滤可能导致过滤失败建议使用mac地址过滤"
FWF_IP_EXISTED="已添加的IP地址"
FWF_NONE_IP="暫未添加任何IP地址"
FWF_IP_HEADER="\033[33m序号 设备IP 设备名称\033[32m"
FWF_IP_INPUT_HINT="请输入对应序号或直接输入IP地址段> "
FWF_IP_DUP="已添加的地址,请勿重复添加!"
FWF_REMOVE_NONE="列表中没有需要移除的设备!"
FWF_REMOVE_TITLE="请选择需要移除的设备:"
FWF_REMOVE_HEADER=" \033[32m设备IP \033[36m设备mac地址 \033[35m设备名称\033[0m"
FWF_REMOVE_OK="对应设备已移除!"
FWF_FILTER_MENU_TITLE="请在此添加或移除设备"
FWF_FILTER_MODE="当前过滤方式为:"
FWF_FILTER_ONLY="仅列表内设备流量"
FWF_FILTER_MODE_SUFFIX="模式"
FWF_FILTER_PASS="经过"
FWF_FILTER_BLACK_DESC="仅列表内设备流量不经过内核"
FWF_FILTER_WHITE_DESC="仅列表内设备流量经过内核"
FWF_FILTER_EXISTED="当前已过滤设备为:"
FWF_FILTER_HEADER=" \033[36m设备mac/ip地址\033[0m \033[35m设备名称\033[0m"
FWF_FILTER_SWITCH="1) 切换为\033[33m$fw_filter_lan_over模式\033[0m"
FWF_FILTER_ADD_MAC="2) \033[32m添加指定设备mac地址\033[0m"
FWF_FILTER_ADD_IP="3) \033[32m添加指定设备IP地址网段\033[0m"
FWF_FILTER_REMOVE="4) \033[36m移除指定设备\033[0m"
FWF_FILTER_CLEAR="9) \033[31m清空整个列表\033[0m"
FWF_SWITCH_OK="已切换成功!"
FWF_LIST_CLEARED="设备列表已清空!"

View File

@@ -0,0 +1,92 @@
OVR_TITLE="配置文件覆写"
OVR_MENU_2="2) 管理\033[36m自定义规则\033[0m"
OVR_MENU_3="3) 管理\033[33m自定义节点\033[0m"
OVR_MENU_4="4) 管理\033[36m自定义策略组\033[0m"
OVR_MENU_5="5) \033[32m自定义\033[0m高级功能"
OVR_MENU_9="9) \033[33m禁用\033[0m配置文件覆写"
OVR_BACK="0) 返回上级菜单"
OVR_INPUT_NUM="请输入对应数字> "
OVR_PROMPT="请输入> "
OVR_GROUPS_CHOOSE_TYPE="请选择策略组的类型:"
OVR_GROUP_TYPE_CN="手动选择 自动选择 故障转移 负载均衡"
OVR_WARN_1="此功能可能会导致严重问题!启用后脚本中大部分功能都将禁用!!!"
OVR_WARN_2="如果你不是非常了解$crashcore的运行机制切勿开启"
OVR_WARN_3="继续后如出现任何问题,请务必自行解决,一切提问恕不受理!"
OVR_WARN_CONFIRM="1) 我确认遇到问题可以自行解决"
OVR_CONFIRM_YES="1) 是"
OVR_CONFIRM_NO="0) 否,返回上级菜单"
OVR_RULES_TITLE="自定义规则"
OVR_RULES_MENU_HINT="你可以在这里快捷管理自定义规则"
OVR_RULES_MANUAL="如需批量操作,请手动编辑:\033[36m $YAMLSDIR/rules.yaml\033[0m"
OVR_RULES_SHARED="singbox和clash共用此处规则可无缝切换"
OVR_RULES_WARN="大量规则请尽量使用rule-set功能添加\n\033[31m此处过量添加可能导致启动卡顿\033[0m"
OVR_RULES_ADD="1) 新增自定义规则"
OVR_RULES_DEL="2) 移除自定义规则"
OVR_RULES_CLEAR="3) 清空规则列表"
OVR_RULES_BYPASS="4) 配置节点绕过:"
OVR_RULES_NO_RULES="请先添加自定义规则!"
OVR_RULES_CLEAR_CONFIRM="是否确认清空全部自定义规则?"
OVR_RULES_ADD_RULE="请输入规则语句,\n可以是域名、泛域名、IP网段或者其他匹配规则类型的内容"
OVR_RULES_TYPE="请选择规则类型:"
OVR_RULES_GROUP="请选择具体规则"
OVR_RULES_EXIST_WARN="此处规则读取自现有配置文件,如果你后续更换配置文件时运行出错,请尝试重新添加"
OVR_RULES_INPUT_RULE="请输入对应规则> "
OVR_RULES_INPUT_NUM="请输入对应数字> "
OVR_RULES_INPUT_TYPE="请输入对应数字> "
OVR_RULES_INPUT_SELECT="请输入对应数字> "
OVR_RULES_DEL_HINT="输入对应数字即可移除相应规则:"
OVR_RULES_ADD_OK="添加成功!"
OVR_RULES_BYPASS_WARN1="本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量"
OVR_RULES_BYPASS_WARN2="请确保下游设备使用的节点与ShellCrash中使用的节点相同否则无法生效"
OVR_RULES_BYPASS_PROMPT="是否启用节点绕过?"
OVR_RULES_BYPASS_CONFIRM="是否确认清空全部自定义规则?"
OVR_GROUPS_TITLE="自定义clash策略组"
OVR_GROUPS_MENU_HINT="你可以在这里快捷管理自定义策略组"
OVR_GROUPS_MANUAL="如需修改或批量操作,请手动编辑:$YAMLSDIR/proxy-groups.yaml"
OVR_GROUPS_ADD="1) 添加自定义策略组"
OVR_GROUPS_VIEW="2) 查看自定义策略组"
OVR_GROUPS_CLEAR="3) 清空自定义策略组"
OVR_GROUPS_WARN1="注意策略组名称必须和【自定义规则】或【自定义节点】功能中指定的策略组一致!"
OVR_GROUPS_WARN2="建议先创建策略组,之后可在【自定义规则】或【自定义节点】功能中智能指定"
OVR_GROUPS_WARN3="如需在当前策略组下添加节点,请手动编辑$YAMLSDIR/proxy-groups.yaml"
OVR_GROUPS_INPUT_NAME="请直接输入自定义策略组名称\n不支持纯数字且不要包含特殊字符"
OVR_GROUPS_INPUT_NUM="请输入对应数字> "
OVR_GROUPS_URL="请输入测速地址"
OVR_GROUPS_URL_HINT="或直接回车使用默认地址https://www.gstatic.com/generate_204"
OVR_GROUPS_MULTI_HINT="如需添加到多个策略组,请一次性输入多个数字并用空格隔开"
OVR_GROUPS_SKIP="0) 跳过添加"
OVR_GROUPS_CLEAR_CONFIRM="是否确认清空全部自定义策略组?"
OVR_GROUPS_ADD_OK="添加成功!"
OVR_PROXIES_TITLE="自定义clash节点"
OVR_PROXIES_MENU_HINT="你可以在这里快捷管理自定义节点"
OVR_PROXIES_MANUAL="如需批量操作,请手动编辑:$YAMLSDIR/proxies.yaml"
OVR_PROXIES_ADD="1) 添加自定义节点"
OVR_PROXIES_MANAGE="2) 管理自定义节点"
OVR_PROXIES_CLEAR="3) 清空自定义节点"
OVR_PROXIES_BYPASS="4) 配置节点绕过:"
OVR_PROXIES_WARN1="注意\n节点格式必须是单行、不包括括号、“name:”为开头,例如:"
OVR_PROXIES_WARN2="更多写法请参考:\033[32mhttps://juewuy.github.io/\033[0m"
OVR_PROXIES_INPUT="请直接输入自定义节点"
OVR_PROXIES_BLOCK_HASH="绝对禁止包含【#】号!"
OVR_PROXIES_ADD_HINT="请选择想要将节点添加到的策略组"
OVR_PROXIES_MULTI_HINT="如需添加到多个策略组,请一次性输入多个数字并用空格隔开"
OVR_PROXIES_GROUP_HINT="如需自定义策略组,请先使用【管理自定义策略组功能】添加"
OVR_PROXIES_EXIST_HINT="输入节点对应数字可以移除对应节点"
OVR_PROXIES_EXIST_TITLE="当前已添加的自定义节点为:"
OVR_PROXIES_NO_PROXY="请先添加自定义节点!"
OVR_PROXIES_CLEAR_CONFIRM="是否确认清空全部自定义节点?"
OVR_PROXIES_BYPASS_WARN1="本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量"
OVR_PROXIES_BYPASS_WARN2="请确保下游设备使用的节点与ShellCrash中使用的节点相同否则无法生效"
OVR_PROXIES_BYPASS_PROMPT="是否确定启用节点绕过:"
OVR_PROXIES_ADD_OK="添加成功!"
OVR_ADV_USER_CREATED1="已经创建自定义设定文件:$YAMLSDIR/user.yaml "
OVR_ADV_USER_CREATED2="可用于编写自定义的DNS等功能"
OVR_ADV_USER_CREATED3="已经创建自定义功能文件:$YAMLSDIR/others.yaml "
OVR_ADV_USER_CREATED4="可用于编写自定义的锚点、入站、proxy-providers、rule-set、sub-rules、script等功能"
OVR_ADV_WIN="Windows下请使用\033[33mWinSCP软件\033[0m进行编辑"
OVR_ADV_MAC="MacOS下请使用\033[33mSecureFX软件\033[0m进行编辑"
OVR_ADV_LIN="Linux可使用\033[33mvim\033[0m进行编辑路由设备若不显示中文请勿使用"
OVR_SING_TITLE1="支持覆盖脚本设置的模块有:"
OVR_SING_TITLE2="支持与内置功能合并(但不可冲突)的模块有:"
OVR_SING_TITLE3="将相应json文件放入\033[33m$JSONSDIR\033[0m目录后即可在启动时自动加载"
OVR_SING_TITLE4="使用前请务必参考配置教程:\033[32;4m https://juewuy.github.io/nWTjEpkSK \033[0m"

View File

@@ -9,3 +9,128 @@ TOOLS_SSH_DISABLED="WAN SSH access disabled!"
TOOLS_DISABLE="Disable"
TOOLS_ENABLE="Enable"
TOOLS_CONFIGURED="Configured"
TOOLS_SSH_ONLY_OPENWRT="This feature only works on OpenWrt devices and does not depend on services"
TOOLS_SSH_UNSUPPORTED_SYSTEM="This feature does not support mirrored systems like Redmi AX6S. Do not try it!"
TOOLS_SSH_PORT_ITEM="1) \033[32mChange\033[0m WAN SSH port: \033[36m$ssh_port\033[0m"
TOOLS_SSH_PASS_ITEM="2) \033[32mChange\033[0m SSH password (enter twice, then press Enter)"
TOOLS_SSH_TOGGLE_ITEM="3) \033[33m$ssh_ol\033[0m WAN SSH access"
TOOLS_PROMPT_PORT="Please enter a port number (1000-65535)> "
TOOLS_WARN_COMPAT="This page may not be compatible with all Linux devices. Use at your own discretion!"
TOOLS_DISK_USAGE="Disk usage / current directory:"
TOOLS_MENU_TEST_ITEM="1) ShellCrash \033[33mTest Menu\033[0m"
TOOLS_MENU_GUIDE_ITEM="2) ShellCrash \033[32mGetting Started\033[0m"
TOOLS_MENU_LOG_ITEM="3) \033[36mLogs and Push Tools\033[0m"
TOOLS_MENU_SSH_ITEM="4) \033[32mConfigure\033[0m WAN SSH access"
TOOLS_MENU_MI_UPDATE_ITEM="5) \033[33m$mi_update\033[0m Xiaomi system auto-update"
TOOLS_MENU_MI_AUTO_SSH_ITEM="6) Xiaomi device SSH hardening —— \033[$mi_mi_autoSSH_type \033[0m"
TOOLS_MENU_MI_TUN_FIX_ITEM="8) Xiaomi device Tun module repair —— \033[$mi_tunfix \033[0m"
TOOLS_MI_UPDATE_MSG="Xiaomi router auto-update has been \033[33m$mi_update\033[0m. If it does not take effect, sync the setting in the official app!"
TOOLS_UNSUPPORTED_DEVICE="Unsupported device!"
TOOLS_FETCHING_SCRIPT="Fetching online script..."
TOOLS_DOWNLOAD_FAIL="File download failed!"
TOOLS_DISABLE_FIX_CONFIRM="Disable this feature and remove related patches?"
TOOLS_YES="1) Yes"
TOOLS_NO_BACK="0) No, return to previous menu"
TOOLS_NO="0) No"
TOOLS_SELECT_PROMPT="Please enter the number> "
TOOLS_PATCH_REMOVED="Patch file removed. Reboot the device immediately to avoid errors!"
TOOLS_TUN_WARN1="This feature needs to modify system files and does not guarantee zero risk!"
TOOLS_TUN_WARN2="The collected Tun module may not suit your device!"
TOOLS_ACCEPT_RISK="1) I understand and will take responsibility if anything goes wrong!"
TOOLS_TUN_CONNECTING="Connecting to the server to fetch the Tun patch..."
TOOLS_TUN_OK="Set successfully! Please restart the service!"
TOOLS_TUN_FAIL="File download failed, please retry!"
TOOLS_DEVICE_NOT_NEED="This device does not need this setting. Do not try it!"
TOOLS_AUTO_SSH_WARN1="This feature hardens SSH using software commands and is not guaranteed to succeed 100%!"
TOOLS_AUTO_SSH_WARN2="If you have issues, please report in the group:"
TOOLS_AUTO_SSH_PWD_HINT1="Please enter the SSH password to restore (current password will not be affected)"
TOOLS_AUTO_SSH_PWD_HINT2="(Press Enter to skip)"
TOOLS_AUTO_SSH_INPUT="Please enter> "
TOOLS_LOG_TG="1) Telegram push\t——\033[$stat_TG\033[0m"
TOOLS_LOG_DEER="2) PushDeer push\t——\033[$stat_Deer\033[0m"
TOOLS_LOG_BARK="3) Bark push-IOS\t——\033[$stat_bark\033[0m"
TOOLS_LOG_PO="4) Passover push\t——\033[$stat_Po\033[0m"
TOOLS_LOG_PP="5) PushPlus push\t——\033[$stat_PP\033[0m"
TOOLS_LOG_SYNO="6) SynoChat push\t——\033[$stat_SynoChat\033[0m"
TOOLS_LOG_GOTIFY="7) Gotify push\t ——\033[$stat_Gotify\033[0m"
TOOLS_LOG_VIEW="a) View \033[36mruntime logs\033[0m"
TOOLS_LOG_TASK="b) Push task logs\t——\033[$stat_task\033[0m"
TOOLS_LOG_DEVICE="c) Set device name\t——\033[$device_s\033[0m"
TOOLS_LOG_CLEAR="d) Clear log files"
TOOLS_CONFIRM_CLOSE_TG="Are you sure you want to disable TG log push?"
TOOLS_CONFIRM_CLOSE_DEER="Are you sure you want to disable PushDeer log push?"
TOOLS_CONFIRM_CLOSE_BARK="Are you sure you want to disable Bark log push?"
TOOLS_CONFIRM_CLOSE_PO="Are you sure you want to disable Pushover log push?"
TOOLS_CONFIRM_CLOSE_PP="Are you sure you want to disable PushPlus log push?"
TOOLS_CONFIRM_CLOSE_SYNO="Are you sure you want to disable SynoChat log push?"
TOOLS_CONFIRM_CLOSE_GOTIFY="Are you sure you want to disable Gotify log push?"
TOOLS_BOT_PUBLIC="1) Use public bot\t——No kernel service required"
TOOLS_BOT_PRIVATE="2) Use private bot\t——Requires extra application"
TOOLS_PUSHDEER_SELECT_SERVER="Please choose the PushDeer server type:"
TOOLS_PUSHDEER_OFFICIAL="1) Official server (api2.pushdeer.com)"
TOOLS_PUSHDEER_CUSTOM="2) Self-hosted server"
TOOLS_PUSHDEER_CUSTOM_URL_HINT="Please enter the self-hosted PushDeer server address (without /message/push)"
TOOLS_PUSHDEER_CUSTOM_URL_EXAMPLE="Example: \033[36mhttps://push.example.com\033[0m"
TOOLS_PUSHDEER_CUSTOM_URL_INPUT="Please enter the server address directly"
TOOLS_OR_BACK="Or enter 0 to return to the previous menu"
TOOLS_PUSHDEER_INSTALL1="1. First go to \033[32;4mhttp://www.pushdeer.com/official.html\033[0m to scan and install the quick app or download the app"
TOOLS_PUSHDEER_INSTALL2="2. Open the quick app/app and finish logging in"
TOOLS_PUSHDEER_INSTALL3="3. Switch to the \"Device\" tab, tap the plus in the top-right corner, and register this device"
TOOLS_PUSHDEER_INSTALL4="4. Switch to the \"Secret\" tab, tap the plus in the top-right corner, create a secret, and copy it"
TOOLS_PUSHDEER_SECRET_HINT="Please enter the secret you copied"
TOOLS_PUSHDEER_OK="PushDeer log push setup completed!"
TOOLS_BARK_WARN="Bark push only supports iOS. Use another push method on other platforms!"
TOOLS_BARK_INSTALL="Please install the Bark iOS client and find the dedicated push link in the app"
TOOLS_BARK_URL_HINT="Please enter your Bark push link directly"
TOOLS_BARK_OK="Bark log push setup completed!"
TOOLS_PUSHOVER_REG="Please register at \033[32;4mhttps://pushover.net/\033[0m and get the \033[36mUser Key\033[0m"
TOOLS_PUSHOVER_USERKEY_HINT="Please enter your User Key directly"
TOOLS_PUSHOVER_VERIFY="Please check your registration email and complete account verification"
TOOLS_PUSHOVER_VERIFIED="I have completed verification"
TOOLS_PUSHOVER_VERIFY_PROMPT="I have completed verification (1/0)> "
TOOLS_PUSHOVER_TOKEN_BUILD="Generate an \033[36mAPI Token\033[0m at \033[32;4mhttps://pushover.net/apps/build\033[0m"
TOOLS_PUSHOVER_TOKEN_HINT="Please enter your API Token"
TOOLS_PUSHOVER_OK="Passover log push setup completed!"
TOOLS_PUSHPLUS_REG="Please register at \033[32;4mhttps://www.pushplus.plus/push1.html\033[0m and get the \033[36mtoken\033[0m"
TOOLS_PUSHPLUS_TOKEN_HINT="Please enter your token directly"
TOOLS_PUSHPLUS_OK="PushPlus log push setup completed!"
TOOLS_SYNOCHAT_URL_HINT="Please enter your Synology DSM home address"
TOOLS_SYNOCHAT_TOKEN_HINT="Please enter your Synology Chat token"
TOOLS_SYNOCHAT_USERID_HINT="Get the user_id via \"your NAS address/webapi/entry.cgi?api=SYNO.Chat.External&method=user_list&version=2&token=YOUR_TOKEN\""
TOOLS_SYNOCHAT_USERID_INPUT="Please enter your user_id> "
TOOLS_SYNOCHAT_OK="SynoChat log push setup completed!"
TOOLS_GOTIFY_REG="Please obtain the push URL from your Gotify server"
TOOLS_GOTIFY_FORMAT="Format example: https://gotify.example.com/message?token=your_app_token"
TOOLS_GOTIFY_URL_HINT="Please enter your Gotify push URL directly"
TOOLS_LOG_NOT_FOUND="No related log found!"
TOOLS_DEVICE_NAME_HINT="Please enter a custom push name for this device"
TOOLS_DEVICE_NAME_BACK="Or press Enter directly to return to the previous menu"
TOOLS_LOG_CLEARED="Runtime logs and task logs have been cleared!"
TOOLS_TEST_MENU_TITLE="This is the test command menu"
TOOLS_TEST_MENU_HINT="If you encounter issues, run the relevant command and submit a screenshot to the issue or TG group"
TOOLS_TEST_ITEM_1="1) Run the kernel in Debug mode"
TOOLS_TEST_ITEM_2="2) Check system DNS port (:53) usage "
TOOLS_TEST_ITEM_3="3) Test SSL encryption (aes-128-gcm) benchmark"
TOOLS_TEST_ITEM_4="4) View ShellCrash routing rules"
TOOLS_TEST_ITEM_5="5) View the first 40 lines of the kernel config file"
TOOLS_TEST_ITEM_6="6) Test proxy server connectivity (google.tw)"
TOOLS_NETSTAT_HINT="You can use \033[44m netstat -ntulp |grep xxx \033[0m to query any (xxx) port"
TOOLS_FW_TITLE="----------------Local Firewall---------------------"
TOOLS_PROXY_NOTE="Note: depends on curl (wget is not supported), and the test result is not guaranteed to be accurate!"
TOOLS_PROXY_OK="Connection successful! Response time: "
TOOLS_PROXY_TIMEOUT="Connection timed out! Please retry or check the node configuration!"
TOOLS_DEBUG_WARN1="Note: Debug mode will stop the original kernel service"
TOOLS_DEBUG_WARN2="Background log path: \033[32m$TMPDIR/debug.log\033[0m"
TOOLS_DEBUG_WARN3="For long-running background monitoring, error is recommended as the log level to avoid oversized files!"
TOOLS_DEBUG_WARN4="You can also use: \033[33mcrash -s debug 'warning'\033[0m to select another log level"
TOOLS_DEBUG_ITEM_1="1) Only test the availability of the \033[32m$config_tmp\033[0m config file"
TOOLS_DEBUG_ITEM_2="2) Run the \033[32m$config_tmp\033[0m config file in foreground without firewall hijacking (\033[33muse Ctrl+C to stop manually\033[0m)"
TOOLS_DEBUG_ITEM_3="3) Run the full startup flow in background with firewall hijacking, log level: \033[31merror\033[0m"
TOOLS_DEBUG_ITEM_4="4) Run the full startup flow in background with firewall hijacking, log level: \033[32minfo\033[0m"
TOOLS_DEBUG_ITEM_5="5) Run the full startup flow in background with firewall hijacking, log level: \033[33mdebug\033[0m"
TOOLS_DEBUG_ITEM_6="6) Run the full startup flow in background with firewall hijacking and print error logs to flash: \033[32m$CRASHDIR/debug.log\033[0m"
TOOLS_DEBUG_ITEM_8="8) Run the full startup flow in background, print execution errors and inspect context, then close the process"
TOOLS_DEBUG_ITEM_9="9) Merge the json files under \033[32m$config_tmp\033[0m into $TMPDIR/debug.json"
TOOLS_FLASH_WARN="Frequent flash writes will shorten flash lifespan. Unless you are dealing with a bug that would otherwise crash or reboot the device, do not use this feature!"
TOOLS_FLASH_CONFIRM="Confirm enabling this feature?"
TOOLS_MERGE_OK="Merged successfully!"

View File

@@ -47,3 +47,243 @@ UPG_CORE_SWITCH_WARN="Geo DB and yaml/json configs are not compatible between th
UPG_CORE_SWITCH_KEEP="Keep related database files?"
UPG_KEEP="Keep"
UPG_NOT_KEEP="Do not keep"
UPG_PAC_LINK_TEXT="PAC URL: "
UPG_PAC_GUIDE_TEXT="PAC guide: "
UPG_THANKS_PROJECTS="Thanks to the following projects and developers!"
UPG_THANKS_SPECIAL_TEXT="Special thanks: \033[36mall contributors and sponsors!\033[0m"
UPG_GETTING_UPDATE="Checking updates..."
UPG_GET_OK="Update check succeeded"
UPG_GET_FAIL="Update check failed! Please switch source and retry!"
UPG_EXTRACT_START="Extracting files..."
UPG_SCRIPT_UPDATE_OK="Script update succeeded!"
UPG_SCRIPT_UPDATE_PROMPT="Note: service will be stopped during update!"
UPG_SCRIPT_CUR_VER_TEXT="Current script version: "
UPG_SCRIPT_NEW_VER_TEXT="Latest script version: "
UPG_UPDATE_NOW_TEXT="Update now"
UPG_CPUCORE_HINT1_TEXT="Use only when CPU architecture detection fails or core cannot run!"
UPG_CPUCORE_HINT2_TEXT="Not sure how to get core arch?"
UPG_CPUCORE_HINT3_TEXT="Refer to: "
UPG_CPUCORE_LIST_TEXT="Available online CPU architectures:"
UPG_CORETYPE_CONFIRM_TEXT="Please confirm custom core type:"
UPG_CORE_SWITCH_KEEP_TEXT="Keep related database files?"
UPG_KEEP_TEXT="Keep"
UPG_NOT_KEEP_TEXT="Do not keep"
UPG_GETTING_CORE_TEXT="Fetching $crashcore core files online..."
UPG_CORE_DOWNLOAD_OK_TEXT="$crashcore core downloaded successfully!"
UPG_CORE_DOWNLOAD_FAIL_TEXT="Core file download failed!"
UPG_CORE_DOWNLOAD_VERIFY_FAIL_TEXT="Core file downloaded, but verification failed"
UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT="Please try selecting a CPU version manually"
UPG_CORE_LINK_TEXT="Fetching core file links..."
UPG_CORE_INFO_TITLE="Core version: "
UPG_CORE_INFO_TIME1="Release time: "
UPG_CORE_INFO_TIME2="Updated: "
UPG_CORE_INFO_SELECT="Please confirm the core info and choose:"
UPG_CORE_NOT_FOUND="No available core found. The developer may not have built a binary for this CPU architecture!"
UPG_CORE_CHECK_FAIL_HINT="Search failed. Please try again after the service starts!"
UPG_CUSTOM_CORE_SOURCE="This core is usually collected from the internet. Thanks to the developers!"
UPG_CUSTOM_CORE_WARN="Custom cores have not been fully adapted. Please fix issues yourself if they occur!"
UPG_CUSTOM_CORE_TASK_WARN="Custom cores support scheduled tasks but do not support low-flash mode!"
UPG_CUSTOM_CORE_NET_WARN="If you encounter network errors, start the ShellCrash service first!"
UPG_CUSTOM_CORE_CURRENT="Current core: "
UPG_CUSTOM_CORE_SELECT="Please choose the core you want to use:"
UPG_CUSTOM_CORE_LINK_HINT="Please enter the custom core URL"
UPG_CUSTOM_CORE_LINK_HINT2="(must end with .tar.gz, .upx, or .gz)"
UPG_CUSTOM_CORE_LINK_HINT3="Or enter 0 to return to the previous menu"
UPG_ZIPTYPE_TITLE="Please choose the core branch and compression method:"
UPG_ZIPTYPE_1="1) \033[36mMinimal release build, upx compressed\033[0m"
UPG_ZIPTYPE_1_HINT="Gvisor, Tailscale, Wireguard, and NaiveProxy are not supported"
UPG_ZIPTYPE_2="2) \033[32mStandard release build, tar.gz compressed\033[0m"
UPG_ZIPTYPE_2_HINT="Fully supports all built-in script features"
UPG_ZIPTYPE_3="3) \033[33mFull alpha build, gz compressed\033[0m"
UPG_ZIPTYPE_3_HINT="May use a bit more space; stability is self-tested"
UPG_CORE_MENU_CURRENT="Current core: "
UPG_CORE_MENU_SYS="Current CPU architecture: "
UPG_CORE_MENU_LOCAL_HINT="If uploading locally, place .upx, .gz, or .tar.gz files in /tmp and rerun the crash command"
UPG_CORE_MENU_SELECT="Please choose the core version to use:"
UPG_CORE_MENU_1="1) \033[43;30mMihomo\033[0m: \033[32m$meta_v \033[32m(full meta core) highly compatible\033[0m \033[33mmore resource usage\033[0m"
UPG_CORE_MENU_2="2) \033[43;30mSingBoxR\033[0m: \033[32m$singboxr_v \033[32mfully featured\033[0m \033[33mreF1nd enhanced branch\033[0m"
UPG_CORE_MENU_3="3) \033[43;30mSingBox\033[0m: \033[32m$singbox_v \033[32mlower resource usage\033[0m \033[33mproviders are not supported\033[0m"
UPG_CORE_MENU_4="4) \033[43;30mClash\033[0m: \033[32m$clash_v \033[32mlow resource usage\033[0m \033[33munsafe, maintenance stopped\033[0m"
UPG_CORE_MENU_5="5) Switch branch and compression method: \033[32m$zip_type\033[0m"
UPG_CORE_MENU_6="6) \033[36mUse custom core\033[0m $custcore"
UPG_CORE_MENU_7="7) \033[32mUpdate current core\033[0m"
UPG_CORE_MENU_9="9) Manually specify CPU architecture"
UPG_GEO_GETTING="Fetching database files from the server..."
UPG_GEO_FAIL="Download failed!"
UPG_GEO_EXTRACT_FAIL="Extraction failed!"
UPG_GEO_OK="$geotype database file downloaded successfully!"
UPG_GEO_LINKING="Fetching database files..."
UPG_GEO_FINDING="Searching for updatable database files..."
UPG_GEO_SELECT="Please choose the database file to update:"
UPG_GEO_NO_RESULT="Search failed. Please try again after the service starts!"
UPG_GEO_CUSTOM_HINT="These database files are usually collected from the internet. Thanks to the developers!"
UPG_GEO_CUSTOM_HINT2="Please click or copy the link to visit the project page for details!"
UPG_GEO_CUSTOM_HINT3="Custom databases do not support scheduled tasks or low-flash mode!"
UPG_GEO_CUSTOM_HINT4="If you encounter network errors, start the ShellCrash service first!"
UPG_GEO_SOURCE_SELECT="Please choose the database source:"
UPG_GEO_LOCAL_ONLY1="(Clash/Mihomo only)"
UPG_GEO_LOCAL_ONLY2="(SingBox-srs only)"
UPG_GEO_LOCAL_ONLY3="(Mihomo-mrs only)"
UPG_GEO_LOCAL_ONLY4="(Clash-GeoIP only)"
UPG_GEO_CUSTOM_LINK="Custom database link"
UPG_GEO_CLEAN_HINT1="This will clean all database files under $CRASHDIR and /ruleset!"
UPG_GEO_CLEAN_HINT2="After cleaning, starting the service will automatically download the required files"
UPG_GEO_CLEAN_CONFIRM="Confirm cleanup"
UPG_GEO_CLEAN_OK="All database files have been cleaned!"
UPG_DB_GETTING="Connecting to the server to fetch installation files..."
UPG_DB_DOWNLOAD_OK="Download succeeded, extracting files..."
UPG_DB_EXTRACT_FAIL="Extraction failed!"
UPG_DB_OK="Panel installed successfully!"
UPG_DB_REFRESH_HINT="If it does not take effect, use Ctrl+F5 to force-refresh the browser!"
UPG_DB_INSTALLED="A local panel is already installed"
UPG_DB_UPGRADE="Upgrade / overwrite install"
UPG_DB_CANCEL="Installation cancelled"
UPG_DB_DIR_SELECT="Please choose the panel install directory:"
UPG_DB_DIR_1="1) Install in ${CRASHDIR}/ui"
UPG_DB_DIR_2="2) Install in /www/clash"
UPG_DB_TITLE="Install the dashboard management panel locally"
UPG_DB_TITLE2="The management panel opens faster and is more stable"
UPG_DB_SELECT="Please choose the panel installation type:"
UPG_DB_WIP=" - - - - - - -Maintenance - - - - - - -"
UPG_DB_OLD=" - - - - - -Maintenance stopped - - - - - -"
UPG_DB_INSTALL_1="1) Install \033[32mzashboard panel\033[0m (about 2.2mb)"
UPG_DB_INSTALL_2="2) Install \033[32mMetaXD panel\033[0m (about 1.5mb)"
UPG_DB_INSTALL_3="3) Install \033[32mYacd-Meta modified panel\033[0m (about 1.7mb)"
UPG_DB_INSTALL_4="4) Install \033[32mbasic panel\033[0m (about 500kb)"
UPG_DB_INSTALL_5="5) Install \033[32mMeta basic panel\033[0m (about 800kb)"
UPG_DB_INSTALL_6="6) Install \033[32mYacd panel\033[0m (about 1.1mb)"
UPG_DB_UNINSTALL="9) \033[31mUninstall local panel\033[0m"
UPG_DB_UNINSTALL_CONFIRM="Uninstall the local panel?"
UPG_DB_UNINSTALL_YES="1) Confirm uninstall"
UPG_DB_UNINSTALL_OK="Panel has been uninstalled!"
UPG_CRT_DB_GETTING="Connecting to the server to fetch installation files..."
UPG_CRT_DB_DOWNLOAD_FAIL="Download failed!"
UPG_CRT_DB_OK="Certificate installed successfully!"
UPG_CRT_TITLE1="Install / update local root certificate file (ca-certificates.crt)"
UPG_CRT_TITLE2="Used to fix certificate verification errors, x509 errors, and similar issues"
UPG_CRT_TITLE3="Do not use on devices without the above issues!"
UPG_CRT_EXISTS="The system already has a root certificate file:"
UPG_CRT_UPDATE="1) Overwrite update"
UPG_CRT_INSTALL="1) Install now"
UPG_CRT_BACK="0) Return to previous menu"
UPG_CRT_WARN="This device may not have openssl installed, so certificate files cannot be installed!"
UPG_SOURCE_CUR="Current version: "
UPG_SOURCE_CUR2="Current source: "
UPG_SOURCE_TITLE="Switch ShellCrash version and update source"
UPG_SOURCE_SWITCH_STABLE="a) Switch to \033[32mstable-stable\033[0m"
UPG_SOURCE_SWITCH_MASTER="b) Switch to \033[36mmaster\033[0m"
UPG_SOURCE_SWITCH_DEV="c) Switch to \033[33mdev\033[0m"
UPG_SOURCE_CUSTOM="d) Custom source URL (for local or self-hosted sources)"
UPG_SOURCE_ROLLBACK="e) \033[31mVersion rollback\033[0m"
UPG_SOURCE_DEV_WARN1="The development branch has not been properly tested and may still contain many bugs!!!"
UPG_SOURCE_DEV_WARN2="If you do not have enough patience or testing experience, do not use this version!"
UPG_SOURCE_DEV_WARN3="Please join our discussion group: \033[36;4mhttps://t.me/ShellClash\033[0m"
UPG_SOURCE_DEV_CONFIRM="Still switch to the development branch?"
UPG_SOURCE_DEV_YES="1) Confirm switch"
UPG_SOURCE_CUSTOM_HINT="Please enter the personal source path directly"
UPG_SOURCE_CUSTOM_HINT2="Or enter 0 to return to the previous menu"
UPG_SOURCE_CUSTOM_INPUT="Please enter the personal source path> "
UPG_SOURCE_VER_GETTING="Fetching version information..."
UPG_SOURCE_VER_OK="Version information fetched successfully"
UPG_SOURCE_ROLLBACK_SELECT="Please select the specific version to roll back to:"
UPG_SOURCE_ROLLBACK_FAIL="Failed to fetch rollback information. Please try another source!"
UPG_SOURCE_ROLLBACK_NOTSUP="Current source does not support version rollback"
UPG_SOURCE_ROLLBACK_HINT="Please try another installation source!"
UPG_THANKS_ITEM_CLASH="Clash Developer: Dreamacro"
UPG_THANKS_ITEM_SINGBOX="sing-box Developer: SagerNet"
UPG_THANKS_ITEM_SINGBOX_URL="Project: https://github.com/SagerNet/sing-box"
UPG_THANKS_ITEM_METACUBE="MetaCubeX Developer: MetaCubeX"
UPG_THANKS_ITEM_METACUBE_URL="Project: https://github.com/MetaCubeX"
UPG_THANKS_ITEM_YACD="YACD panel Developer: haishanh"
UPG_THANKS_ITEM_YACD_URL="Project: https://github.com/haishanh/yacd"
UPG_THANKS_ITEM_ZASH="Zashboard Developer: Zephyruso"
UPG_THANKS_ITEM_ZASH_URL="Project: https://github.com/Zephyruso/zashboard"
UPG_THANKS_ITEM_SUB="Subconverter Developer: tindy2013"
UPG_THANKS_ITEM_SUB_URL="Project: https://github.com/tindy2013/subconverter"
UPG_THANKS_ITEM_REF1ND="sing-box-reF1nd Developer: reF1nd"
UPG_THANKS_ITEM_REF1ND_URL="Project: https://github.com/reF1nd/sing-box"
UPG_THANKS_ITEM_DUSTIN="DustinWin Developer: DustinWin"
UPG_THANKS_ITEM_DUSTIN_URL="Developer: https://github.com/DustinWin"
UPG_CORE_GET_LINK_TITLE="Fetching core file links..."
UPG_CUSTOM_CORE_CURRENT_TEXT="Current core: "
UPG_CUSTOM_CORE_NOTE1="Gvisor, Tailscale, Wireguard, and NaiveProxy are not supported"
UPG_CORE_V1="1) \033[43;30mMihomo\033[0m: \033[32m$meta_v \033[32m(full meta core) highly compatible\033[0m \033[33mmore resource usage\033[0m"
UPG_CORE_V1_DOC="Docs: \033[36;4mhttps://wiki.metacubex.one\033[0m"
UPG_CORE_V2="2) \033[43;30mSingBoxR\033[0m: \033[32m$singboxr_v \033[32mfully featured\033[0m \033[33mreF1nd enhanced branch\033[0m"
UPG_CORE_V2_DOC="Docs: \033[36;4mhttps://sing-boxr.dustinwin.us.kg\033[0m"
UPG_CORE_V3="3) \033[43;30mSingBox\033[0m: \033[32m$singbox_v \033[32mlower resource usage\033[0m \033[33mproviders are not supported\033[0m"
UPG_CORE_V3_DOC="Docs: \033[36;4mhttps://sing-box.sagernet.org\033[0m"
UPG_CORE_V4="4) \033[43;30mClash\033[0m: \033[32m$clash_v \033[32mlow resource usage\033[0m \033[33munsafe, maintenance stopped\033[0m"
UPG_CORE_V4_DOC="Docs: \033[36;4mhttps://lancellc.gitbook.io\033[0m"
UPG_CORE_ASUS_WARN="The GeoSite.dat database used by Meta core may be deleted by the system on Asus devices, so it may not work!"
UPG_GEO_FIND_TITLE="Searching for updatable database files..."
UPG_GEO_SOURCE_TITLE="Please choose the database source:"
UPG_GEO_LINK_HINT="Please enter the custom database URL> "
UPG_GEO_CHOOSE_HINT="Note: Mihomo and SingBox database files are not interchangeable"
UPG_GEO_LATEST="Latest online database version (synced daily): "
UPG_GEO_CHOOSE="Please choose the Geo database file to update:"
UPG_GEO_ITEM1="1) CN-IP bypass file (about 0.1mb)"
UPG_GEO_ITEM2="2) CN-IPV6 bypass file (about 30kb)"
UPG_GEO_ITEM3="3) Mihomo lite GeoIP_cn database (about 0.1mb)"
UPG_GEO_ITEM4="4) Mihomo full GeoSite database (about 5mb)"
UPG_GEO_ITEM5="5) Mihomo-mrs common package (about 1mb, use only if needed)"
UPG_GEO_ITEM6="6) SingBox-srs common package (about 0.8mb, use only if needed)"
UPG_GEO_ITEM8="8) \033[36mCustom database file\033[0m"
UPG_GEO_ITEM9="9) \033[31mClean database files\033[0m"
UPG_GEO_CLEAN_PROMPT="Confirm cleanup"
UPG_GEO_CLEAN_WARN="This will clean all database files under $CRASHDIR and /ruleset!"
UPG_GEO_CLEAN_WARN2="After cleanup, start the service to download the required files automatically"
UPG_GEO_CLEANED="All database files have been cleaned!"
UPG_DB_CONNECTING="Connecting to the server to fetch installation files..."
UPG_DB_DOWNLOAD_FAIL="Download failed!"
UPG_DB_EXTRACT_FAIL_TEXT="Extraction failed!"
UPG_DB_INSTALLED_HINT="A local panel is already installed"
UPG_DB_INSTALL_CANCEL="Installation cancelled"
UPG_DB_DIR_TITLE="Please choose the panel install directory:"
UPG_DB_DIR_1_TEXT="1) Install in ${CRASHDIR}/ui"
UPG_DB_DIR_2_TEXT="2) Install in /www/clash"
UPG_DB_INSTALL_TITLE="Install the dashboard management panel locally"
UPG_DB_INSTALL_TITLE2="The management panel opens faster and is more stable"
UPG_DB_INSTALL_SELECT="Please choose the panel installation type:"
UPG_DB_INSTALL_MID=" - - - - - - -Maintenance - - - - - - -"
UPG_DB_INSTALL_END=" - - - - - -Maintenance stopped - - - - - -"
UPG_DB_INSTALL_4_TEXT="4) Install \033[32mbasic panel\033[0m (about 500kb)"
UPG_DB_INSTALL_5_TEXT="5) Install \033[32mMeta basic panel\033[0m (about 800kb)"
UPG_DB_INSTALL_6_TEXT="6) Install \033[32mYacd panel\033[0m (about 1.1mb)"
UPG_DB_UNINSTALL_PROMPT="Uninstall the local panel?"
UPG_DB_UNINSTALL_CONFIRM_TEXT="1) Confirm uninstall"
UPG_DB_UNINSTALLED="Panel has been uninstalled!"
UPG_CRT_CONNECTING="Connecting to the server to fetch installation files..."
UPG_CRT_INSTALL_OK="Certificate installed successfully!"
UPG_CRT_INSTALL_TITLE1="Install / update local root certificate file (ca-certificates.crt)"
UPG_CRT_INSTALL_TITLE2="Used to fix certificate verification errors, x509 errors, and similar issues"
UPG_CRT_INSTALL_TITLE3="Do not use on devices without the above issues!"
UPG_CRT_EXIST_HINT="The system already has a root certificate file:"
UPG_CRT_OVERWRITE="1) Overwrite update"
UPG_CRT_NOW="1) Install now"
UPG_CRT_NOT_USE="This device may not have openssl installed, so certificate files cannot be installed!"
UPG_SOURCE_TITLE2="Switch ShellCrash version and update source"
UPG_SOURCE_CUR_VER="Current version: "
UPG_SOURCE_CUR_URL="Current source: "
UPG_SOURCE_STABLE_TEXT="stable"
UPG_SOURCE_MASTER_TEXT="beta"
UPG_SOURCE_DEV_TEXT="dev"
UPG_SOURCE_DEV_WARN4="The development branch has not been properly tested and may still contain many bugs!!!"
UPG_SOURCE_DEV_WARN5="If you do not have enough patience or testing experience, do not use this version!"
UPG_SOURCE_DEV_WARN6="Please join our discussion group: \033[36;4mhttps://t.me/ShellClash\033[0m"
UPG_SOURCE_DEV_ASK="Still switch to the development branch?"
UPG_SOURCE_DEV_CONFIRM_TEXT="1) Confirm switch"
UPG_SOURCE_PATH_HINT="Please enter the personal source path directly"
UPG_SOURCE_PATH_HINT2="Or enter 0 to return to the previous menu"
UPG_SOURCE_PATH_INPUT="Please enter the personal source path> "
UPG_SOURCE_GETTING_VER="Fetching version information..."
UPG_SOURCE_GET_VER_OK="Version information fetched successfully"
UPG_SOURCE_ROLLBACK_SELECT_TEXT="Please select the specific version to roll back to:"
UPG_SOURCE_ROLLBACK_FAIL_TEXT="Failed to fetch rollback information. Please try another source!"
UPG_SOURCE_ROLLBACK_NOTSUP_TEXT="Current source does not support version rollback"
UPG_SOURCE_ROLLBACK_HINT_TEXT="Please try another installation source!"
UPG_SOURCE_SWITCH_OK="Source switched successfully!"
UPG_GEO_TYPE_LITE="lite"
UPG_GEO_TYPE_FULL="global"
UPG_SOURCE_UNSET="unset"
UPG_SOURCE_ROLLBACK_TAG="(rollback)"

View File

@@ -0,0 +1,85 @@
FWF_TITLE="Traffic Filter"
FWF_ITEM_1="1) Filter non-common ports: \t\033[36m$common_ports\033[0m\t--- used to filter P2P traffic"
FWF_ITEM_2="2) Filter LAN devices: \t\033[36m$mac_return\033[0m\t--- use blacklist/whitelist filtering"
FWF_ITEM_3="3) Filter QUIC protocol: \t\033[36m$quic_rj\033[0m\t--- improve video performance"
FWF_ITEM_4="4) Filter CN_IP (4&6) list: \033[36m$cn_ip_route\033[0m\t--- improve performance"
FWF_ITEM_5="5) Custom transparent routing IPv4 subnet: suitable for vlan and other complex networks"
FWF_ITEM_6="6) Custom reserved-address IPv4 subnet: for environments that need reserved addresses as targets"
FWF_BACK="0) $COMMON_BACK"
FWF_SWITCH_STOP="Switching will stop the service. Continue?"
FWF_YES="1) Yes"
FWF_NO_BACK="0) No, return to previous menu"
FWF_QUIC_OFF="QUIC traffic through the ShellCrash core has been disabled!"
FWF_QUIC_ON="QUIC protocol traffic disable has been canceled!"
FWF_CNIP_ON="CN_IP core bypass has been enabled!"
FWF_CNIP_WARN="Note: this will cause global mode and all CN-related rules to become ineffective!"
FWF_CNIP_OFF="CN_IP core bypass has been disabled!"
FWF_NO_IPSET="This device lacks the ipset module or is not using nftables mode, so bypass cannot be enabled!"
FWF_WHITE_LIST="Whitelist"
FWF_BLACK_LIST="Blacklist"
FWF_PASS_WORD="not"
FWF_COMMON_NOTE="Note:\n"
FWF_MIX_NOTE="In MIX mode, non-common port traffic from fake-ip sources will not be filtered"
FWF_ALLOWED_PORTS="Currently allowed ports: "
FWF_PORT_MENU_1="1) Enable/disable port filtering: \t\033[36m$common_ports\033[0m"
FWF_PORT_MENU_2="2) Add allowed port"
FWF_PORT_MENU_3="3) Remove specified allowed port"
FWF_PORT_MENU_4="4) Reset default allowed ports"
FWF_PORT_MENU_5="5) Reset to legacy allowed ports"
FWF_MAX_PORT="Up to 15 allowed ports are supported. Please remove some first!"
FWF_INPUT_ADD_HINT="Please enter the port number to allow directly"
FWF_INPUT_ADD_HINT2="(Only one port number at a time. Do not add multiple at once.)"
FWF_INPUT_REMOVE_HINT="Please enter the port number to remove directly"
FWF_OR_BACK="Or enter 0 to return to the previous menu"
FWF_ERR_DUP="Invalid input! Do not add duplicates!"
FWF_ERR_RANGE="Invalid input! Please enter a valid number (1-65535)!"
FWF_INPUT_PORT="Please enter> "
FWF_CUST_HOST_TITLE="Current default transparent routing subnet: "
FWF_CUST_HOST_TITLE2="Currently added custom subnet(s): "
FWF_CUST_HOST_MENU_1="1) Remove all custom subnets"
FWF_CUST_HOST_MENU_2="2) Use custom subnets to override the default subnet"
FWF_CUST_HOST_HINT="Please enter the number or an additional subnet> "
FWF_NET_ERR="Please enter a valid subnet address!"
FWF_RESERVE_NOTE="Note: addresses must be separated by spaces. Incorrect settings may cause network loops or startup errors. Use with caution!"
FWF_RESERVE_NOW="Current subnet: "
FWF_RESERVE_INPUT_HINT="Please enter a custom reserved-address IPv4 subnet directly"
FWF_RESERVE_INPUT_HINT2="Or enter 1 to reset to the default subnet"
FWF_RESERVE_INPUT_HINT3="Or enter 0 to return to the previous menu"
FWF_RESERVE_PROMPT="Please enter> "
FWF_RESERVE_SET="Reserved-address subnet set to: "
FWF_RESERVE_ERR="Invalid input, please try again!"
FWF_LAN_NO_DEVICE="Unknown device"
FWF_MAC_HINT="Manual MAC input only supports the format \033[32mxx:xx:xx:xx:xx:xx\033[0m"
FWF_MAC_EXISTED="Added MAC addresses:"
FWF_NONE_MAC="No MAC addresses added yet"
FWF_MAC_HEADER="No. \033[33mDevice IP Device MAC Device name\033[0m"
FWF_MAC_NONE="No records"
FWF_MAC_INPUT_HINT="Please enter the number or a MAC address directly> "
FWF_MAC_DUP="This device is already added. Do not add it again!"
FWF_IP_HINT="Manual input only supports \033[32m192.168.1.0/24\033[0m or \033[32m192.168.1.0\033[0m"
FWF_IP_HINT2="IPv6 addresses are not supported and filtering may fail. MAC filtering is recommended."
FWF_IP_EXISTED="Added IP addresses (subnets):"
FWF_NONE_IP="No IP addresses (subnets) added yet"
FWF_IP_HEADER="\033[33mNo. Device IP Device name\033[32m"
FWF_IP_INPUT_HINT="Please enter the number or an IP subnet directly> "
FWF_IP_DUP="This address is already added. Do not add it again!"
FWF_REMOVE_NONE="There are no devices to remove!"
FWF_REMOVE_TITLE="Please choose the device to remove:"
FWF_REMOVE_HEADER=" \033[32mDevice IP \033[36mDevice MAC \033[35mDevice name\033[0m"
FWF_REMOVE_OK="Corresponding device removed!"
FWF_FILTER_MENU_TITLE="Add or remove devices here"
FWF_FILTER_MODE="Current filtering mode: "
FWF_FILTER_ONLY="Only devices in the list"
FWF_FILTER_MODE_SUFFIX=" mode"
FWF_FILTER_PASS="traffic passes through"
FWF_FILTER_BLACK_DESC="Only the devices in the list bypass the core"
FWF_FILTER_WHITE_DESC="Only the devices in the list pass through the core"
FWF_FILTER_EXISTED="Currently filtered devices:"
FWF_FILTER_HEADER=" \033[36mDevice MAC/IP\033[0m \033[35mDevice name\033[0m"
FWF_FILTER_SWITCH="1) Switch to \033[33m$fw_filter_lan_over mode\033[0m"
FWF_FILTER_ADD_MAC="2) \033[32mAdd specified device (MAC)\033[0m"
FWF_FILTER_ADD_IP="3) \033[32mAdd specified device (IP/subnet)\033[0m"
FWF_FILTER_REMOVE="4) \033[36mRemove specified device\033[0m"
FWF_FILTER_CLEAR="9) \033[31mClear the entire list\033[0m"
FWF_SWITCH_OK="Switch completed!"
FWF_LIST_CLEARED="Device list cleared!"

View File

@@ -0,0 +1,92 @@
OVR_TITLE="Config Override"
OVR_MENU_2="2) Manage \033[36mcustom rules\033[0m"
OVR_MENU_3="3) Manage \033[33mcustom nodes\033[0m"
OVR_MENU_4="4) Manage \033[36mcustom proxy groups\033[0m"
OVR_MENU_5="5) \033[32mCustom\033[0m advanced features"
OVR_MENU_9="9) \033[33mDisable\033[0m config override"
OVR_BACK="0) Return to previous menu"
OVR_INPUT_NUM="Please enter the corresponding number> "
OVR_PROMPT="Please enter> "
OVR_GROUPS_CHOOSE_TYPE="Please choose the proxy group type:"
OVR_GROUP_TYPE_CN="Manual Select Auto Select Failover Load Balance"
OVR_WARN_1="This feature may cause serious problems! Most script functions will be disabled after enabling it!!!"
OVR_WARN_2="If you are not very familiar with how $crashcore works, do not enable it!"
OVR_WARN_3="If any problem occurs after continuing, you must solve it yourself. No questions will be accepted!"
OVR_WARN_CONFIRM="1) I confirm I can solve any problems myself"
OVR_CONFIRM_YES="1) Yes"
OVR_CONFIRM_NO="0) No, return to previous menu"
OVR_RULES_TITLE="Custom Rules"
OVR_RULES_MENU_HINT="You can quickly manage custom rules here"
OVR_RULES_MANUAL="For batch operations, edit manually: \033[36m $YAMLSDIR/rules.yaml\033[0m"
OVR_RULES_SHARED="singbox and clash share these rules, so switching is seamless!"
OVR_RULES_WARN="For many rules, use the rule-set feature as much as possible.\n\033[31mToo many rules here may cause startup lag!\033[0m"
OVR_RULES_ADD="1) Add custom rule"
OVR_RULES_DEL="2) Remove custom rule"
OVR_RULES_CLEAR="3) Clear rule list"
OVR_RULES_BYPASS="4) Configure node bypass:"
OVR_RULES_NO_RULES="Please add custom rules first!"
OVR_RULES_CLEAR_CONFIRM="Are you sure you want to clear all custom rules?"
OVR_RULES_ADD_RULE="Enter the rule text,\nwhich can be a domain, wildcard domain, IP subnet, or other matching rule content"
OVR_RULES_TYPE="Please choose a rule type:"
OVR_RULES_GROUP="Please choose a specific rule"
OVR_RULES_EXIST_WARN="These rules are read from the existing config file. If errors occur after changing the config later, try adding them again."
OVR_RULES_INPUT_RULE="Please enter the corresponding rule> "
OVR_RULES_INPUT_NUM="Please enter the corresponding number> "
OVR_RULES_INPUT_TYPE="Please enter the corresponding number> "
OVR_RULES_INPUT_SELECT="Please enter the corresponding number> "
OVR_RULES_DEL_HINT="Enter the corresponding number to remove the matching rule:"
OVR_RULES_ADD_OK="Added successfully!"
OVR_RULES_BYPASS_WARN1="This feature will automatically set node domains or IPs from the current config file to direct rules to prevent double traffic!"
OVR_RULES_BYPASS_WARN2="Make sure the nodes used by downstream devices are the same as those used in ShellCrash, otherwise it will not take effect!"
OVR_RULES_BYPASS_PROMPT="Enable node bypass?"
OVR_RULES_BYPASS_CONFIRM="Are you sure you want to clear all custom rules?"
OVR_GROUPS_TITLE="Custom Clash Proxy Groups"
OVR_GROUPS_MENU_HINT="You can quickly manage custom proxy groups here"
OVR_GROUPS_MANUAL="For modifications or batch operations, edit manually: $YAMLSDIR/proxy-groups.yaml"
OVR_GROUPS_ADD="1) Add custom proxy group"
OVR_GROUPS_VIEW="2) View custom proxy groups"
OVR_GROUPS_CLEAR="3) Clear custom proxy groups"
OVR_GROUPS_WARN1="The proxy group name must match the group specified in the [Custom Rules] or [Custom Nodes] feature!"
OVR_GROUPS_WARN2="It is recommended to create the proxy group first, then specify it intelligently in [Custom Rules] or [Custom Nodes]"
OVR_GROUPS_WARN3="To add nodes under the current proxy group, edit $YAMLSDIR/proxy-groups.yaml manually"
OVR_GROUPS_INPUT_NAME="Please enter the custom proxy group name directly\n(pure numbers are not supported and special characters are not allowed!)"
OVR_GROUPS_INPUT_NUM="Please enter the corresponding number> "
OVR_GROUPS_URL="Please enter a test URL"
OVR_GROUPS_URL_HINT="Or press Enter to use the default URL: https://www.gstatic.com/generate_204"
OVR_GROUPS_MULTI_HINT="If you want to add to multiple proxy groups, enter multiple numbers separated by spaces"
OVR_GROUPS_SKIP="0) Skip adding"
OVR_GROUPS_CLEAR_CONFIRM="Are you sure you want to clear all custom proxy groups?"
OVR_GROUPS_ADD_OK="Added successfully!"
OVR_PROXIES_TITLE="Custom Clash Nodes"
OVR_PROXIES_MENU_HINT="You can quickly manage custom nodes here"
OVR_PROXIES_MANUAL="For batch operations, edit manually: $YAMLSDIR/proxies.yaml"
OVR_PROXIES_ADD="1) Add custom node"
OVR_PROXIES_MANAGE="2) Manage custom nodes"
OVR_PROXIES_CLEAR="3) Clear custom nodes"
OVR_PROXIES_BYPASS="4) Configure node bypass:"
OVR_PROXIES_WARN1="Note\nThe node format must be a single line, without parentheses, and start with \"name:\", for example:"
OVR_PROXIES_WARN2="For more formats, see: \033[32mhttps://juewuy.github.io/\033[0m"
OVR_PROXIES_INPUT="Please enter the custom node directly"
OVR_PROXIES_BLOCK_HASH="Absolutely no [#] character is allowed!"
OVR_PROXIES_ADD_HINT="Please choose the proxy group to add the node to"
OVR_PROXIES_MULTI_HINT="If you want to add to multiple proxy groups, enter multiple numbers separated by spaces"
OVR_PROXIES_GROUP_HINT="To use custom proxy groups, first add them using [Manage custom proxy groups]"
OVR_PROXIES_EXIST_HINT="Enter the node number to remove the corresponding node"
OVR_PROXIES_EXIST_TITLE="Currently added custom nodes:"
OVR_PROXIES_NO_PROXY="Please add custom nodes first!"
OVR_PROXIES_CLEAR_CONFIRM="Are you sure you want to clear all custom nodes?"
OVR_PROXIES_BYPASS_WARN1="This feature will automatically set node domains or IPs from the current config file to direct rules to prevent double traffic!"
OVR_PROXIES_BYPASS_WARN2="Make sure the nodes used by downstream devices are the same as those used in ShellCrash, otherwise it will not take effect!"
OVR_PROXIES_BYPASS_PROMPT="Enable node bypass:"
OVR_PROXIES_ADD_OK="Added successfully!"
OVR_ADV_USER_CREATED1="Custom config file created: $YAMLSDIR/user.yaml!"
OVR_ADV_USER_CREATED2="Can be used for custom DNS and similar features"
OVR_ADV_USER_CREATED3="Custom feature file created: $YAMLSDIR/others.yaml!"
OVR_ADV_USER_CREATED4="Can be used for custom anchors, inbound, proxy-providers, rule-set, sub-rules, script, and similar features"
OVR_ADV_WIN="On Windows, use \033[33mWinSCP\033[0m to edit it!"
OVR_ADV_MAC="On macOS, use \033[33mSecureFX\033[0m to edit it!"
OVR_ADV_LIN="On Linux, you can use \033[33mvim\033[0m to edit it (do not use it on router devices if Chinese text is not displayed)!"
OVR_SING_TITLE1="Supported modules that can override script settings:"
OVR_SING_TITLE2="Modules that can be merged with built-in features (but must not conflict):"
OVR_SING_TITLE3="Place the corresponding JSON files into the \033[33m$JSONSDIR\033[0m directory to load them automatically at startup"
OVR_SING_TITLE4="Be sure to read the configuration guide before use: \033[32;4m https://juewuy.github.io/nWTjEpkSK \033[0m"

View File

@@ -27,7 +27,8 @@ logger() {
web_json_post "$url" "$content" &
}
[ -n "$push_Deer" ] && {
url="https://api2.pushdeer.com/message/push"
url="${push_Deer_url%/}"
url="${url:-https://api2.pushdeer.com}/message/push"
content="{\"pushkey\":\"${push_Deer}\",\"text\":\"$log_text\"}"
web_json_post "$url" "$content" &
}

View File

@@ -17,13 +17,13 @@ ssh_tools() {
while true; do
[ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=$TOOLS_SSH_DISABLE || ssh_ol=$TOOLS_SSH_ENABLE
[ -z "$ssh_port" ] && ssh_port=10022
comp_box "\033[33m此功能仅针对使用Openwrt系统的设备生效且不依赖服务\033[0m" \
"\033[31m本功能不支持红米AX6S等镜像化系统设备请勿尝试\033[0m"
btm_box "1) \033[32m修改\033[0m外网访问端口\033[36m$ssh_port\033[0m" \
"2) \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)" \
"3) \033[33m$ssh_ol\033[0m外网访问SSH" \
comp_box "\033[33m$TOOLS_SSH_ONLY_OPENWRT\033[0m" \
"\033[31m$TOOLS_SSH_UNSUPPORTED_SYSTEM\033[0m"
btm_box "$TOOLS_SSH_PORT_ITEM" \
"$TOOLS_SSH_PASS_ITEM" \
"$TOOLS_SSH_TOGGLE_ITEM" \
"" \
"0) 返回上级菜单 \033[0m"
"0) $COMMON_BACK \033[0m"
read -r -p "$COMMON_INPUT> " num
case "$num" in
"" | 0)
@@ -31,7 +31,7 @@ ssh_tools() {
;;
1)
line_break
read -r -p "请输入端口号(1000-65535)> " num
read -r -p "$TOOLS_PROMPT_PORT" num
if [ -z "$num" ]; then
errornum
elif [ "$num" -gt 65535 ] || [ "$num" -le 999 ]; then
@@ -52,7 +52,7 @@ ssh_tools() {
sleep 1
;;
3)
if [ "$ssh_ol" = "开启" ]; then
if [ "$ssh_ol" = "$TOOLS_SSH_ENABLE" ]; then
iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22
[ -n "$(ckcmd ip6tables)" ] && ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22
echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
@@ -81,16 +81,16 @@ tools() {
[ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32mON || mi_tunfix=31mOFF
comp_box "\033[30;47m$TOOLS_TITLE\033[0m" \
"" \
"\033[33m本页工具可能无法兼容全部Linux设备请酌情使用\033[0m" \
"磁盘占用/所在目录:" \
"\033[33m$TOOLS_WARN_COMPAT\033[0m" \
"$TOOLS_DISK_USAGE" \
"$(du -sh "$CRASHDIR")"
content_line "1) ShellCrash\033[33m测试菜单\033[0m"
content_line "2) ShellCrash\033[32m新手引导\033[0m"
content_line "3) \033[36m日志及推送工具\033[0m"
[ -f /etc/firewall.user ] && content_line "4) \033[32m配置\033[0m外网访问SSH"
[ -x /usr/sbin/otapredownload ] && content_line "5) \033[33m$mi_update\033[0m小米系统自动更新"
[ "$systype" = "mi_snapshot" ] && content_line "6) 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m"
[ "$systype" = "mi_snapshot" ] && content_line "8) 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m"
content_line "$TOOLS_MENU_TEST_ITEM"
content_line "$TOOLS_MENU_GUIDE_ITEM"
content_line "$TOOLS_MENU_LOG_ITEM"
[ -f /etc/firewall.user ] && content_line "$TOOLS_MENU_SSH_ITEM"
[ -x /usr/sbin/otapredownload ] && content_line "$TOOLS_MENU_MI_UPDATE_ITEM"
[ "$systype" = "mi_snapshot" ] && content_line "$TOOLS_MENU_MI_AUTO_SSH_ITEM"
[ "$systype" = "mi_snapshot" ] && content_line "$TOOLS_MENU_MI_TUN_FIX_ITEM"
btm_box "" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -114,7 +114,7 @@ tools() {
;;
5)
if [ -x /usr/sbin/otapredownload ]; then
if [ "$mi_update" = "禁用" ]; then
if [ "$mi_update" = "$TOOLS_DISABLE" ]; then
grep -q "otapredownload" /etc/crontabs/root &&
sed -i "/^[^\#]*otapredownload/ s/^/#/" /etc/crontabs/root ||
echo "#15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
@@ -123,27 +123,27 @@ tools() {
sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root ||
echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
fi
msg_alert "\033[33m$mi_update\033[0m小米路由器的自动更新如未生效请在官方APP中同步设置"
msg_alert "\033[32m$TOOLS_MI_UPDATE_MSG"
fi
;;
6)
if [ "$systype" = "mi_snapshot" ]; then
mi_autoSSH
else
msg_alert "不支持的设备!"
msg_alert "\033[31m$TOOLS_UNSUPPORTED_DEVICE"
fi
;;
7)
line_break
separator_line "="
if [ ! -f "$CRASHDIR"/tools/ShellDDNS.sh ]; then
content_line "正在获取在线脚本......"
content_line "$TOOLS_FETCHING_SCRIPT"
get_bin "$TMPDIR"/ShellDDNS.sh tools/ShellDDNS.sh
if [ "$?" = "0" ]; then
mv -f "$TMPDIR"/ShellDDNS.sh "$CRASHDIR"/tools/ShellDDNS.sh
. "$CRASHDIR"/tools/ShellDDNS.sh
else
content_line "\033[31m文件下载失败!\033[0m"
content_line "\033[31m$TOOLS_DOWNLOAD_FAIL\033[0m"
separator_line "="
fi
else
@@ -153,38 +153,38 @@ tools() {
;;
8)
if [ -f "$CRASHDIR"/tools/tun.ko ]; then
comp_box "是否禁用此功能并移除相关补丁?"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_DISABLE_FIX_CONFIRM"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
[ "$res" = 1 ] && {
rm -rf "$CRASHDIR"/tools/tun.ko
msg_alert "\033[33m补丁文件已移除,请立即重启设备以防止出错!\033[0m"
msg_alert "\033[33m$TOOLS_PATCH_REMOVED\033[0m"
}
elif ckcmd modinfo && [ -z "$(modinfo tun)" ]; then
comp_box "\033[33m本功能需要修改系统文件,不保证没有任何风险!\033[0m" \
"\033[33m本功能采集的Tun模块并不一定适用于你的设备\033[0m"
btm_box "1) 我已知晓,出现问题会自行承担!" \
comp_box "\033[33m$TOOLS_TUN_WARN1\033[0m" \
"\033[33m$TOOLS_TUN_WARN2\033[0m"
btm_box "$TOOLS_ACCEPT_RISK" \
"0) $COMMON_BACK"
read -r -p "请输入对应标号> " res
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
line_break
separator_line "="
content_line "正在连接服务器获取Tun模块补丁文件......"
content_line "$TOOLS_TUN_CONNECTING"
get_bin "$TMPDIR"/tun.ko bin/fix/tun.ko
if [ "$?" = "0" ]; then
mv -f "$TMPDIR"/tun.ko "$CRASHDIR"/tools/tun.ko &&
/data/shellcrash_init.sh tunfix &&
content_line "\033[32m设置成功!请重启服务!\033[0m"
content_line "\033[32m$TOOLS_TUN_OK\033[0m"
else
content_line "\033[31m文件下载失败,请重试!\033[0m"
content_line "\033[31m$TOOLS_TUN_FAIL\033[0m"
fi
separator_line "="
else
continue
fi
else
msg_alert "\033[31m当前设备无需设置,请勿尝试!\033[0m"
msg_alert "\033[31m$TOOLS_DEVICE_NOT_NEED\033[0m"
fi
;;
*)
@@ -195,11 +195,11 @@ tools() {
}
mi_autoSSH() {
comp_box "\033[33m本功能使用软件命令进行固化不保证100%成功!\033[0m" \
"\033[33m如有问题请加群反馈:\033[36;4mhttps://t.me/ShellClash\033[0m"
btm_box "请输入需要还原的SSH密码不影响当前密码" \
"(回车可跳过)"
read -r -p "请输入> " mi_mi_autoSSH_pwd
comp_box "\033[33m$TOOLS_AUTO_SSH_WARN1\033[0m" \
"\033[33m$TOOLS_AUTO_SSH_WARN2\033[36;4mhttps://t.me/ShellClash\033[0m"
btm_box "$TOOLS_AUTO_SSH_PWD_HINT1" \
"$TOOLS_AUTO_SSH_PWD_HINT2"
read -r -p "$TOOLS_AUTO_SSH_INPUT" mi_mi_autoSSH_pwd
mi_mi_autoSSH=$TOOLS_CONFIGURED
cp -f /etc/dropbear/dropbear_rsa_host_key "$CRASHDIR"/configs/dropbear_rsa_host_key 2>/dev/null
cp -f /etc/dropbear/authorized_keys "$CRASHDIR"/configs/authorized_keys 2>/dev/null
@@ -226,19 +226,19 @@ log_pusher() {
[ -n "$push_SynoChat" ] && stat_SynoChat=32mON || stat_SynoChat=33mOFF
[ -n "$push_Gotify" ] && stat_Gotify=32mON || stat_Gotify=33mOFF
[ "$task_push" = 1 ] && stat_task=32mON || stat_task=33mOFF
[ -n "$device_name" ] && device_s=32m$device_name || device_s=33m未设置
comp_box "1) Telegram推送 ——\033[$stat_TG\033[0m" \
"2) PushDeer推送 ——\033[$stat_Deer\033[0m" \
"3) Bark推送-IOS ——\033[$stat_bark\033[0m" \
"4) Passover推送 ——\033[$stat_Po\033[0m" \
"5) PushPlus推送 ——\033[$stat_PP\033[0m" \
"6) SynoChat推送 ——\033[$stat_SynoChat\033[0m" \
"7) Gotify推送 ——\033[$stat_Gotify\033[0m" \
[ -n "$device_name" ] && device_s=32m$device_name || device_s=33m$COMMON_UNSET
comp_box "$TOOLS_LOG_TG" \
"$TOOLS_LOG_DEER" \
"$TOOLS_LOG_BARK" \
"$TOOLS_LOG_PO" \
"$TOOLS_LOG_PP" \
"$TOOLS_LOG_SYNO" \
"$TOOLS_LOG_GOTIFY" \
"" \
"a) 查看\033[36m运行日志\033[0m" \
"b) 推送任务日志 ——\033[$stat_task\033[0m" \
"c) 设置设备名称 ——\033[$device_s\033[0m" \
"d) 清空日志文件" \
"$TOOLS_LOG_VIEW" \
"$TOOLS_LOG_TASK" \
"$TOOLS_LOG_DEVICE" \
"$TOOLS_LOG_CLEAR" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -248,10 +248,10 @@ log_pusher() {
;;
1)
if [ -n "$push_TG" ]; then
comp_box "是否确认关闭TG日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_TG"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_TG=
chat_ID=
@@ -264,8 +264,8 @@ log_pusher() {
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
. "$CRASHDIR"/menus/bot_tg_bind.sh
chose_bot() {
comp_box "1) 使用公共机器人 ——不依赖内核服务" \
"2) 使用私人机器人 ——需要额外申请" \
comp_box "$TOOLS_BOT_PUBLIC" \
"$TOOLS_BOT_PRIVATE" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -291,42 +291,78 @@ log_pusher() {
;;
2)
if [ -n "$push_Deer" ]; then
comp_box "是否确认关闭PushDeer日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_DEER"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_Deer=
push_Deer_url=
setconfig push_Deer
setconfig push_Deer_url
else
continue
fi
else
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
comp_box "1. 请先前往 \033[32;4mhttp://www.pushdeer.com/official.html\033[0m 扫码安装快应用或下载APP" \
"2. 打开快应用/APP并完成登陆" \
"3. \033[33m切换到「设备」标签页点击右上角的加号注册当前设备\033[0m" \
"4. \033[36m切换到「秘钥」标签页点击右上角的加号创建一个秘钥并复制\033[0m"
btm_box "\033[36m请直接输入你复制的秘钥\033[0m" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " url
comp_box "$TOOLS_PUSHDEER_SELECT_SERVER" \
"$TOOLS_PUSHDEER_OFFICIAL" \
"$TOOLS_PUSHDEER_CUSTOM" \
"" \
"0) $COMMON_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" num
case "$num" in
0)
continue
;;
2)
comp_box "$TOOLS_PUSHDEER_CUSTOM_URL_HINT" \
"$TOOLS_PUSHDEER_CUSTOM_URL_EXAMPLE"
btm_box "\033[36m$TOOLS_PUSHDEER_CUSTOM_URL_INPUT\033[0m" \
"$TOOLS_OR_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" url
if [ "$url" = 0 ]; then
continue
elif [ -z "$url" ]; then
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
continue
fi
push_Deer_url=${url%/}
setconfig push_Deer_url "${url%/}"
;;
1)
push_Deer_url=
setconfig push_Deer_url
;;
*)
errornum
continue
;;
esac
comp_box "$TOOLS_PUSHDEER_INSTALL1" \
"$TOOLS_PUSHDEER_INSTALL2" \
"$TOOLS_PUSHDEER_INSTALL3" \
"$TOOLS_PUSHDEER_INSTALL4"
btm_box "\033[36m$TOOLS_PUSHDEER_SECRET_HINT\033[0m" \
"$TOOLS_OR_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" url
if [ "$url" = 0 ]; then
continue
elif [ -n "$url" ]; then
push_Deer=$url
setconfig push_Deer "$url"
logger "已完成PushDeer日志推送设置" 32
logger "$TOOLS_PUSHDEER_OK" 32
else
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
fi
;;
3)
if [ -n "$push_bark" ]; then
comp_box "是否确认关闭Bark日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_BARK"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_bark=
bark_param=
@@ -337,28 +373,28 @@ log_pusher() {
fi
else
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
comp_box "\033[33mBark推送仅支持IOS系统其他平台请使用其他推送方式\033[0m" \
"\033[32m请安装Bark-IOS客户端并在客户端中找到专属推送链接\033[0m"
btm_box "\033[36m请直接输入你的Bark推送链接\033[0m" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " url
comp_box "\033[33m$TOOLS_BARK_WARN\033[0m" \
"\033[32m$TOOLS_BARK_INSTALL\033[0m"
btm_box "\033[36m$TOOLS_BARK_URL_HINT\033[0m" \
"$TOOLS_OR_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" url
if [ "$url" = 0 ]; then
continue
elif [ -n "$url" ]; then
push_bark=$url
setconfig push_bark "$url"
logger "已完成Bark日志推送设置" 32
logger "$TOOLS_BARK_OK" 32
else
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
fi
;;
4)
if [ -n "$push_Po" ]; then
comp_box "是否确认关闭Pushover日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_PO"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_Po=
push_Po_key=
@@ -369,44 +405,44 @@ log_pusher() {
fi
else
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
comp_box "请先通过 \033[32;4mhttps://pushover.net/\033[0m 注册账号并获取\033[36mUser Key\033[0m" \
comp_box "$TOOLS_PUSHOVER_REG" \
"" \
"\033[36m请直接请输入你的User Key\033[0m" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " key
"\033[36m$TOOLS_PUSHOVER_USERKEY_HINT\033[0m" \
"$TOOLS_OR_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" key
if [ "$key" = 0 ]; then
continue
elif [ -n "$key" ]; then
comp_box "\033[33m请检查注册邮箱,完成账户验证\033[0m"
btm_box "1) 我已经验证完成" \
comp_box "\033[33m$TOOLS_PUSHOVER_VERIFY\033[0m"
btm_box "$TOOLS_PUSHOVER_VERIFIED" \
"0) $COMMON_BACK"
read -r -p "我已经验证完成(1/0)> " res
read -r -p "$TOOLS_PUSHOVER_VERIFY_PROMPT" res
if [ "$res" = 1 ]; then
comp_box "请通过 \033[32;4mhttps://pushover.net/apps/build\033[0m 生成\033[36mAPI Token\033[0m"
read -r -p "请输入你的API Token> " Token
comp_box "$TOOLS_PUSHOVER_TOKEN_BUILD"
read -r -p "$TOOLS_PUSHOVER_TOKEN_HINT> " Token
if [ -n "$Token" ]; then
push_Po=$Token
push_Po_key=$key
setconfig push_Po "$Token"
setconfig push_Po_key "$key"
logger "已完成Passover日志推送设置" 32
logger "$TOOLS_PUSHOVER_OK" 32
else
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
else
continue
fi
else
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
fi
;;
5)
if [ -n "$push_PP" ]; then
comp_box "是否确认关闭PushPlus日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_PP"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_PP=
setconfig push_PP
@@ -415,27 +451,27 @@ log_pusher() {
fi
else
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
comp_box "请先通过 \033[32;4mhttps://www.pushplus.plus/push1.html\033[0m 注册账号并获取\033[36mtoken\033[0m"
btm_box "\033[36m请直接输入你的token\033[0m" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " Token
comp_box "$TOOLS_PUSHPLUS_REG"
btm_box "\033[36m$TOOLS_PUSHPLUS_TOKEN_HINT\033[0m" \
"$TOOLS_OR_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" Token
if [ "$Token" = 0 ]; then
continue
elif [ -n "$Token" ]; then
push_PP=$Token
setconfig push_PP "$Token"
logger "已完成PushPlus日志推送设置" 32
logger "$TOOLS_PUSHPLUS_OK" 32
else
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
fi
;;
6)
if [ -n "$push_SynoChat" ]; then
comp_box "是否确认关闭SynoChat日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_SYNO"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_SynoChat=
setconfig push_SynoChat
@@ -444,17 +480,17 @@ log_pusher() {
fi
else
line_break
read -r -p "请输入你的Synology DSM主页地址> " URL
read -r -p "请输入你的Synology Chat Token> " TOKEN
comp_box '请通过"你的群晖地址/webapi/entry.cgi?api=SYNO.Chat.External&method=user_list&version=2&token=你的TOKEN"获取user_id'
read -r -p "请输入你的user_id> " USERID
read -r -p "$TOOLS_SYNOCHAT_URL_HINT> " URL
read -r -p "$TOOLS_SYNOCHAT_TOKEN_HINT> " TOKEN
comp_box "$TOOLS_SYNOCHAT_USERID_HINT"
read -r -p "$TOOLS_SYNOCHAT_USERID_INPUT" USERID
if [ -n "$URL" ]; then
push_SynoChat=$USERID
setconfig push_SynoChat "$USERID"
setconfig push_ChatURL "$URL"
setconfig push_ChatTOKEN "$TOKEN"
setconfig push_ChatUSERID "$USERID"
logger "已完成SynoChat日志推送设置" 32
logger "$TOOLS_SYNOCHAT_OK" 32
else
setconfig push_ChatURL
setconfig push_ChatTOKEN
@@ -462,17 +498,17 @@ log_pusher() {
push_SynoChat=
setconfig push_SynoChat
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
fi
;;
# 在menu.sh的case $num in代码块中添加
7)
if [ -n "$push_Gotify" ]; then
comp_box "是否确认关闭Gotify日志推送"
btm_box "1) 是" \
"0) 否,返回上级菜单"
read -r -p "请输入对应标号> " res
comp_box "$TOOLS_CONFIRM_CLOSE_GOTIFY"
btm_box "$TOOLS_YES" \
"$TOOLS_NO_BACK"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
push_Gotify=
setconfig push_Gotify
@@ -480,19 +516,19 @@ log_pusher() {
continue
fi
else
comp_box "请先通过Gotify服务器获取推送URL" \
"格式示例: https://gotify.example.com/message?token=你的应用令牌"
btm_box "\033[36m请直接你的Gotify推送URL\033[0m" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " url
comp_box "$TOOLS_GOTIFY_REG" \
"$TOOLS_GOTIFY_FORMAT"
btm_box "\033[36m$TOOLS_GOTIFY_URL_HINT\033[0m" \
"$TOOLS_OR_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" url
if [ "$url" = 0 ]; then
continue
elif [ -n "$url" ]; then
push_Gotify=$url
setconfig push_Gotify "$url"
logger "已完成Gotify日志推送设置" 32
logger "$TOOLS_GOTIFY_OK" 32
else
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
fi
fi
;;
@@ -504,7 +540,7 @@ log_pusher() {
echo "==========================================================="
exit
else
msg_alert "\033[31m未找到相关日志!\033[0m"
msg_alert "\033[31m$TOOLS_LOG_NOT_FOUND\033[0m"
fi
;;
b)
@@ -513,16 +549,16 @@ log_pusher() {
sleep 1
;;
c)
comp_box "请直接输入本设备自定义推送名称" \
"或直接回车确认返回上级菜单"
read -r -p "请输入> " device_name
comp_box "$TOOLS_DEVICE_NAME_HINT" \
"$TOOLS_DEVICE_NAME_BACK"
read -r -p "$TOOLS_AUTO_SSH_INPUT" device_name
if [ -n "$device_name" ]; then
setconfig device_name "$device_name"
fi
;;
d)
rm -rf "$TMPDIR"/ShellCrash.log
msg_alert "\033[33m运行日志及任务日志均已清空!\033[0m"
msg_alert "\033[33m$TOOLS_LOG_CLEARED\033[0m"
;;
*)
errornum
@@ -534,14 +570,14 @@ log_pusher() {
# 测试菜单
testcommand() {
while true; do
comp_box "\033[30;47m这里是测试命令菜单\033[0m" \
"\033[33m如遇问题尽量运行相应命令后截图提交issue或TG讨论组\033[0m"
btm_box "1) Debug模式运行内核" \
"2) 查看系统DNS端口(:53)占用 " \
"3) 测试ssl加密(aes-128-gcm)跑分" \
"4) 查看ShellCrash相关路由规则" \
"5) 查看内核配置文件前40行" \
"6) 测试代理服务器连通性(google.tw)" \
comp_box "\033[30;47m$TOOLS_TEST_MENU_TITLE\033[0m" \
"\033[33m$TOOLS_TEST_MENU_HINT\033[0m"
btm_box "$TOOLS_TEST_ITEM_1" \
"$TOOLS_TEST_ITEM_2" \
"$TOOLS_TEST_ITEM_3" \
"$TOOLS_TEST_ITEM_4" \
"$TOOLS_TEST_ITEM_5" \
"$TOOLS_TEST_ITEM_6" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -557,7 +593,7 @@ testcommand() {
echo "==========================================================="
netstat -ntulp | grep 53
echo
echo -e "可以使用\033[44m netstat -ntulp |grep xxx \033[0m来查询任意(xxx)端口"
echo -e "$TOOLS_NETSTAT_HINT"
echo "==========================================================="
;;
3)
@@ -611,7 +647,7 @@ testcommand() {
iptables -t nat -L shellcrash_vm --line-numbers
iptables -t nat -L shellcrash_vm_dns --line-numbers
}
echo "----------------本机防火墙---------------------"
echo "$TOOLS_FW_TITLE"
iptables -L INPUT --line-numbers
fi
;;
@@ -621,7 +657,7 @@ testcommand() {
sed -n '1,40p' "$config_path"
;;
6)
comp_box "\033[33m注意依赖curl不支持wget且测试结果不保证一定准确\033[0m"
comp_box "\033[33m$TOOLS_PROXY_NOTE\033[0m"
delay=$(
curl -kx ${authentication}@127.0.0.1:$mix_port -o /dev/null -s -w '%{time_starttransfer}' 'https://google.tw' &
{
@@ -633,9 +669,9 @@ testcommand() {
line_break
separator_line "="
if [ $(echo ${#delay}) -gt 1 ]; then
content_line "\033[32m连接成功!响应时间为:"$delay" ms\033[0m"
content_line "\033[32m$TOOLS_PROXY_OK$delay ms\033[0m"
else
content_line "\033[31m连接超时!请重试或检查节点配置!\033[0m"
content_line "\033[31m$TOOLS_PROXY_TIMEOUT\033[0m"
fi
separator_line "="
;;
@@ -648,19 +684,19 @@ testcommand() {
debug() {
echo "$crashcore" | grep -q 'singbox' && config_tmp="$TMPDIR"/jsons || config_tmp="$TMPDIR"/config.yaml
comp_box "\033[36m注意Debug运行均会停止原本的内核服务\033[0m" \
"后台运行日志地址:\033[32m$TMPDIR/debug.log\033[0m" \
"如长时间运行后台监测日志等级推荐error防止文件过大" \
"你亦可通过:\033[33mcrash -s debug 'warning'\033[0m命令使用其他日志等级"
content_line "1) 仅测试\033[32m$config_tmp\033[0m配置文件可用性"
content_line "2) 前台运行\033[32m$config_tmp\033[0m配置文件不配置防火墙劫持(\033[33m使用Ctrl+C手动停止\033[0m)"
content_line "3) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[31merror\033[0m"
content_line "4) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[32minfo\033[0m"
content_line "5) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[33mdebug\033[0m"
content_line "6) 后台运行完整启动流程并配置防火墙劫持,且将错误日志打印到闪存:\033[32m$CRASHDIR/debug.log\033[0m"
comp_box "\033[36m$TOOLS_DEBUG_WARN1\033[0m" \
"$TOOLS_DEBUG_WARN2" \
"$TOOLS_DEBUG_WARN3" \
"$TOOLS_DEBUG_WARN4"
content_line "$TOOLS_DEBUG_ITEM_1"
content_line "$TOOLS_DEBUG_ITEM_2"
content_line "$TOOLS_DEBUG_ITEM_3"
content_line "$TOOLS_DEBUG_ITEM_4"
content_line "$TOOLS_DEBUG_ITEM_5"
content_line "$TOOLS_DEBUG_ITEM_6"
content_line ""
content_line "8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json"
content_line "$TOOLS_DEBUG_ITEM_8"
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "$TOOLS_DEBUG_ITEM_9"
btm_box "" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -704,11 +740,11 @@ debug() {
main_menu
;;
6)
comp_box "频繁写入闪存会导致闪存寿命降低如非遇到会导致设备死机或重启的bug请勿使用此功能" \
"是否确认启用此功能?"
btm_box "1) 是" \
"0) 否"
read -r -p "请输入对应标号> " res
comp_box "\033[33m$TOOLS_FLASH_WARN\033[0m" \
"$TOOLS_FLASH_CONFIRM"
btm_box "$TOOLS_YES" \
"$TOOLS_NO"
read -r -p "$TOOLS_SELECT_PROMPT" res
if [ "$res" = 1 ]; then
"$CRASHDIR"/start.sh debug debug flash
fi
@@ -720,7 +756,7 @@ debug() {
;;
9)
. "$CRASHDIR"/libs/core_webget.sh && core_find && "$TMPDIR"/CrashCore merge "$TMPDIR"/debug.json -C "$TMPDIR"/jsons && line_break
comp_box "\033[32m合并成功!\033[0m"
comp_box "\033[32m$TOOLS_MERGE_OK\033[0m"
[ "$TMPDIR" = "$BINDIR" ] && rm -rf "$TMPDIR"/CrashCore
main_menu
;;
@@ -729,3 +765,4 @@ debug() {
;;
esac
}

View File

@@ -73,28 +73,28 @@ upgrade() {
;;
9)
comp_box "$UPG_THANKS_TITLE"
btm_box "\033[32mClash \033[0m开发\033[36mDreamacro\033[0m" \
btm_box "\033[32m$UPG_THANKS_ITEM_CLASH\033[0m" \
"" \
"\033[32msing-box \033[0m开发\033[36mSagerNet\033[0m" \
"项目地址:\033[32mhttps://github.com/SagerNet/sing-box\033[0m" \
"\033[32m$UPG_THANKS_ITEM_SINGBOX\033[0m" \
"$UPG_THANKS_ITEM_SINGBOX_URL" \
"" \
"\033[32mMetaCubeX \033[0m开发\033[36mMetaCubeX\033[0m" \
"项目地址:\033[32mhttps://github.com/MetaCubeX\033[0m" \
"\033[32m$UPG_THANKS_ITEM_METACUBE\033[0m" \
"$UPG_THANKS_ITEM_METACUBE_URL" \
"" \
"\033[32mYACD面板 \033[0m开发\033[36mhaishanh\033[0m" \
"项目地址:\033[32mhttps://github.com/haishanh/yacd\033[0m" \
"\033[32m$UPG_THANKS_ITEM_YACD\033[0m" \
"$UPG_THANKS_ITEM_YACD_URL" \
"" \
"\033[32mZashboard \033[0m开发\033[36mZephyruso\033[0m" \
"项目地址:\033[32mhttps://github.com/Zephyruso/zashboard\033[0m" \
"\033[32m$UPG_THANKS_ITEM_ZASH\033[0m" \
"$UPG_THANKS_ITEM_ZASH_URL" \
"" \
"\033[32mSubconverter \033[0m开发\033[36mtindy2013\033[0m" \
"项目地址:\033[32mhttps://github.com/tindy2013/subconverter\033[0m" \
"\033[32m$UPG_THANKS_ITEM_SUB\033[0m" \
"$UPG_THANKS_ITEM_SUB_URL" \
"" \
"\033[32msing-box-reF1nd \033[0m开发\033[36mreF1nd\033[0m" \
"项目地址:\033[32mhttps://github.com/reF1nd/sing-box\033[0m" \
"\033[32m$UPG_THANKS_ITEM_REF1ND\033[0m" \
"$UPG_THANKS_ITEM_REF1ND_URL" \
"" \
"\033[32mDustinWin \033[0m开发\033[36mDustinWin\033[0m" \
"开发者地址:\033[32mhttps://github.com/DustinWin\033[0m" \
"\033[32m$UPG_THANKS_ITEM_DUSTIN\033[0m" \
"$UPG_THANKS_ITEM_DUSTIN_URL" \
""
btm_box "$UPG_THANKS_SPECIAL"
sleep 2
@@ -300,23 +300,23 @@ getcore() {
# 获取在线内核文件
line_break
separator_line "="
content_line "正在在线获取$crashcore核心文件......"
content_line "$UPG_GETTING_CORE_TEXT"
core_webget
case "$?" in
0)
content_line "\033[32m$crashcore核心下载成功\033[0m"
content_line "\033[32m$UPG_CORE_DOWNLOAD_OK_TEXT\033[0m"
separator_line "="
sleep 1
switch_core
;;
1)
content_line "\033[31m核心文件下载失败!\033[0m"
content_line "\033[31m$UPG_CORE_DOWNLOAD_FAIL_TEXT\033[0m"
separator_line "="
[ -z "$custcorelink" ] && error_down
;;
*)
content_line "\033[31m核心文件下载成功但校验失败\033[0m"
content_line "\033[31m请尝试手动指定CPU版本\033[0m"
content_line "\033[31m$UPG_CORE_DOWNLOAD_VERIFY_FAIL_TEXT\033[0m"
content_line "\033[31m$UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT\033[0m"
separator_line "="
sleep 1
rm -rf "${TMPDIR}"/core_new
@@ -331,7 +331,7 @@ checkcustcore() {
# 通过githubapi获取内核信息
line_break
separator_line "="
content_line "\033[32m正在获取内核文件链接......\033[0m"
content_line "\033[32m$UPG_CORE_GET_LINK_TITLE\033[0m"
webget "$TMPDIR"/github_api https://api.github.com/repos/"${project}"/releases/"${api_url}"
if [ "$?" = 0 ]; then
release_tag=$(cat "$TMPDIR"/github_api | grep '"tag_name":' | awk -F '"' '{print $4}')
@@ -344,10 +344,10 @@ checkcustcore() {
if [ -s "$TMPDIR"/core.list ]; then
separator_line "="
comp_box "内核版本:\033[36m$release_tag\033[0m" \
"发布时间:\033[33m$release_date\033[0m" \
"更新时间:\033[32m$update_date\033[0m"
content_line "\033[33m请确认内核信息并选择:\033[0m"
comp_box "$UPG_CORE_INFO_TITLE\033[36m$release_tag\033[0m" \
"$UPG_CORE_INFO_TIME1\033[33m$release_date\033[0m" \
"$UPG_CORE_INFO_TIME2\033[32m$update_date\033[0m"
content_line "\033[33m$UPG_CORE_INFO_SELECT\033[0m"
separator_line "-"
grep -oE "$release_tag.*" "$TMPDIR/core.list" |
sed 's|.*/||' |
@@ -375,12 +375,12 @@ checkcustcore() {
;;
esac
else
content_line "\033[31m找不到可用内核可能是开发者没有编译相关CPU架构版本的内核文件\033[0m"
content_line "\033[31m$UPG_CORE_NOT_FOUND\033[0m"
separator_line "="
sleep 1
fi
else
content_line "\033[31m查找失败,请尽量在服务启动后再使用本功能!\033[0m"
content_line "\033[31m$UPG_CORE_CHECK_FAIL_HINT\033[0m"
separator_line "="
sleep 1
fi
@@ -393,21 +393,21 @@ setcustcore() {
[ -z "$cpucore" ] && check_cpucore
line_break
separator_line "="
content_line "\033[36m此处内核通常源自互联网采集,此处致谢各位开发者!\033[0m"
content_line "\033[33m自定义内核未经过完整适配,使用出现问题请自行解决!\033[0m"
content_line "\033[31m自定义内核已适配定时任务,但不支持小闪存模式!\033[0m"
content_line "\033[32m如遇到网络错误请先启动ShellCrash服务\033[0m"
content_line "\033[36m$UPG_CUSTOM_CORE_SOURCE\033[0m"
content_line "\033[33m$UPG_CUSTOM_CORE_WARN\033[0m"
content_line "\033[31m$UPG_CUSTOM_CORE_TASK_WARN\033[0m"
content_line "\033[32m$UPG_CUSTOM_CORE_NET_WARN\033[0m"
[ -n "$custcore" ] && {
content_line "当前内核为:\033[36m$custcore\033[0m"
content_line "$UPG_CUSTOM_CORE_CURRENT_TEXT\033[36m$custcore\033[0m"
}
separator_line "="
content_line "请选择需要使用的核心:"
content_line "$UPG_CUSTOM_CORE_SELECT"
separator_line "-"
btm_box "1) \033[36mMetaCubeX/mihomo\033[32m@release\033[0m版本官方内核" \
"2) \033[36mvernesong/mihomo\033[32m@alpha\033[0m版本内核(支持Smart策略)" \
"3) \033[36mSagerNet/sing-box\033[32m@release\033[0m版本官方内核" \
"4) Premium-2023.08.17内核(已停止维护)" \
"9) \033[33m自定义内核链接 \033[0m" \
btm_box "$UPG_CORE_MENU_1" \
"$UPG_CORE_MENU_2" \
"$UPG_CORE_MENU_3" \
"$UPG_CORE_MENU_4" \
"$UPG_CORE_MENU_9" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -440,11 +440,11 @@ setcustcore() {
checkcustcore
;;
9)
comp_box "请输入自定义内核的链接地址" \
"(必须是以.tar.gz、.upx或.gz结尾的压缩文件" \
comp_box "$UPG_CUSTOM_CORE_LINK_HINT" \
"$UPG_CUSTOM_CORE_LINK_HINT2" \
"" \
"或者输入 0 返回上级菜单"
read -r -p "请输入> " link
"$UPG_CUSTOM_CORE_LINK_HINT3"
read -r -p "$UPG_SOURCE_CUSTOM_INPUT" link
if [ "$link" = 0 ]; then
continue
elif [ -n "$link" ]; then
@@ -461,14 +461,14 @@ setcustcore() {
}
setziptype() {
comp_box "请选择内核内核分支及压缩方式:\033[0m"
content_line "1) \033[36m最简编译release版本upx压缩\033[0m"
sub_content_line "不支持Gvisor、Tailscale、Wireguard、NaiveProxy"
content_line "2) \033[32m标准编译release版本tar.gz压缩\033[0m"
sub_content_line "完整支持脚本全部内置功能"
content_line "3) \033[33m完整编译alpha版本gz压缩\033[0m"
sub_content_line "占用可能略高,稳定性自测"
content_line "0) 返回上级菜单"
comp_box "\033[0m$UPG_ZIPTYPE_TITLE"
content_line "$UPG_ZIPTYPE_1"
sub_content_line "$UPG_CUSTOM_CORE_NOTE1"
content_line "$UPG_ZIPTYPE_2"
sub_content_line "$UPG_ZIPTYPE_2_HINT"
content_line "$UPG_ZIPTYPE_3"
sub_content_line "$UPG_ZIPTYPE_3_HINT"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
@@ -500,30 +500,30 @@ setcore() {
[ -z "$cpucore" ] && check_cpucore
comp_box "当前内核:\033[42;30m$crashcore\033[47;30m $core_v\033[0m" \
"当前系统处理器架构:\033[32m$cpucore\033[0m" \
"\033[36m如需本地上传,请将.upx .gz .tar.gz文件上传至 /tmp 目录后重新运行crash命令\033[0m" \
comp_box "$UPG_CORE_MENU_CURRENT\033[42;30m$crashcore\033[47;30m $core_v\033[0m" \
"$UPG_CORE_MENU_SYS\033[32m$cpucore\033[0m" \
"\033[36m$UPG_CORE_MENU_LOCAL_HINT\033[0m" \
"" \
"\033[33m请选择需要使用的核心版本:\033[0m"
"\033[33m$UPG_CORE_MENU_SELECT\033[0m"
content_line "1) \033[43;30mMihomo\033[0m\033[32m$meta_v \033[32m原meta内核支持全面\033[0m \033[33m占用略高\033[0m"
sub_content_line "说明文档:\033[36;4mhttps://wiki.metacubex.one\033[0m"
content_line "$UPG_CORE_V1"
sub_content_line "$UPG_CORE_V1_DOC"
content_line "2) \033[43;30mSingBoxR\033[0m\033[32m$singboxr_v \033[32m支持全面\033[0m \033[33m使用reF1nd增强分支\033[0m"
sub_content_line "说明文档:\033[36;4mhttps://sing-boxr.dustinwin.us.kg\033[0m"
content_line "$UPG_CORE_V2"
sub_content_line "$UPG_CORE_V2_DOC"
[ "$zip_type" = 'upx' ] && {
content_line "3) \033[43;30mSingBox\033[0m\033[32m$singbox_v \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
sub_content_line "说明文档:\033[36;4mhttps://sing-box.sagernet.org\033[0m"
content_line "$UPG_CORE_V3"
sub_content_line "$UPG_CORE_V3_DOC"
}
[ "$zip_type" = 'upx' ] && {
content_line "4) \033[43;30mClash\033[0m\033[32m$clash_v \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
sub_content_line "说明文档:\033[36;4mhttps://lancellc.gitbook.io\033[0m"
content_line "$UPG_CORE_V4"
sub_content_line "$UPG_CORE_V4_DOC"
}
btm_box "5) 切换版本分支及压缩方式:\033[32m$zip_type\033[0m" \
"6) \033[36m使用自定义内核\033[0m $custcore" \
"7) \033[32m更新当前内核\033[0m" \
"9) 手动指定处理器架构" \
btm_box "$UPG_CORE_MENU_5" \
"$UPG_CORE_MENU_6" \
"$UPG_CORE_MENU_7" \
"$UPG_CORE_MENU_9" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -533,7 +533,7 @@ setcore() {
;;
1)
[ -d "/jffs" ] && {
msg_alert -t 2 "\033[31mMeta内核使用的GeoSite.dat数据库在华硕设备存在被系统误删的问题可能无法使用!\033[0m"
msg_alert -t 2 "\033[31m$UPG_CORE_ASUS_WARN\033[0m"
}
crashcore=meta
custcorelink=''
@@ -585,10 +585,10 @@ getgeo() {
# 生成链接
line_break
separator_line "="
content_line "正在从服务器获取数据库文件......"
content_line "$UPG_GEO_GETTING"
get_bin "$TMPDIR"/"${geoname}" bin/geodata/"$geotype"
if [ "$?" = "1" ]; then
content_line "\033[31m文件下载失败!\033[0m"
content_line "\033[31m$UPG_GEO_FAIL\033[0m"
error_down
else
echo "$geoname" | grep -Eq '.mrs|.srs|.tar.gz' && {
@@ -598,7 +598,7 @@ getgeo() {
if echo "$geoname" | grep -Eq '.tar.gz'; then
tar -zxf "$TMPDIR"/"${geoname}" ${tar_para} -C "$BINDIR"/"${geofile}" >/dev/null
if [ $? -ne 0 ]; then
content_line "文件解压失败!"
content_line "$UPG_GEO_EXTRACT_FAIL"
separator_line "="
sleep 1
line_break
@@ -609,7 +609,7 @@ getgeo() {
else
mv -f "$TMPDIR"/"${geoname}" "$BINDIR"/"${geofile}""${geoname}"
fi
content_line "\033[32m$geotype数据库文件下载成功\033[0m"
content_line "\033[32m$UPG_GEO_OK\033[0m"
geo_v="$(echo "$geotype" | awk -F "." '{print $1}')_v"
setconfig "$geo_v" "$GeoIP_v"
fi
@@ -619,10 +619,10 @@ getgeo() {
getcustgeo() {
line_break
separator_line "="
content_line "正在获取数据库文件......"
content_line "$UPG_GEO_LINKING"
webget "$TMPDIR"/"$geoname" "$custgeolink"
if [ "$?" = "1" ]; then
content_line "\033[31m文件下载失败!\033[0m"
content_line "\033[31m$UPG_GEO_FAIL\033[0m"
error_down
else
echo "$geoname" | grep -Eq '.mrs|.srs' && {
@@ -630,7 +630,7 @@ getcustgeo() {
[ ! -d "$BINDIR"/ruleset ] && mkdir -p "$BINDIR"/ruleset
}
mv -f "$TMPDIR"/"${geoname}" "$BINDIR"/"${geofile}""${geoname}"
content_line "\033[32m$geotype数据库文件下载成功\033[0m"
content_line "\033[32m$UPG_GEO_OK\033[0m"
separator_line "="
fi
sleep 1
@@ -640,20 +640,20 @@ checkcustgeo() {
while true; do
[ "$api_tag" = "latest" ] && api_url=latest || api_url="tags/$api_tag"
[ ! -s "$TMPDIR"/geo.list ] && {
comp_box "\033[32m正在查找可更新的数据库文件......\033[0m"
comp_box "\033[32m$UPG_GEO_FIND_TITLE\033[0m"
webget "$TMPDIR"/github_api https://api.github.com/repos/${project}/releases/${api_url}
release_tag=$(cat "$TMPDIR"/github_api | grep '"tag_name":' | awk -F '"' '{print $4}')
cat "$TMPDIR"/github_api | grep "browser_download_url" | grep -oE 'releases/download.*' | grep -oiE 'geosite.*\.dat"$|country.*\.mmdb"$|.*.mrs|.*.srs' | sed 's|.*/||' | sed 's/"//' >"$TMPDIR"/geo.list
rm -rf "$TMPDIR"/github_api
}
if [ -s "$TMPDIR"/geo.list ]; then
comp_box "请选择需要更新的数据库文件:"
comp_box "$UPG_GEO_SELECT"
awk '{print NR") "$1}' "$TMPDIR/geo.list" |
while IFS= read -r line; do
content_line "$line"
done
content_line ""
content_line "0) 返回上级菜单"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
@@ -678,7 +678,7 @@ checkcustgeo() {
;;
esac
else
msg_alert "\033[31m查找失败,请尽量在服务启动后再使用本功能!\033[0m"
msg_alert "\033[31m$UPG_CORE_CHECK_FAIL_HINT\033[0m"
fi
done
}
@@ -687,31 +687,31 @@ checkcustgeo() {
setcustgeo() {
while true; do
rm -rf "$TMPDIR"/geo.list
comp_box "\033[36m此处数据库均源自互联网采集,此处致谢各位开发者!\033[0m" \
"\033[32m请点击或复制链接前往项目页面查看具体说明!\033[0m" \
"\033[31m自定义数据库不支持定时任务及小闪存模式!\033[0m" \
"\033[33m如遇到网络错误请先启动ShellCrash服务\033[0m"
comp_box "\033[36m$UPG_GEO_CUSTOM_HINT\033[0m" \
"\033[32m$UPG_GEO_CUSTOM_HINT2\033[0m" \
"\033[31m$UPG_GEO_CUSTOM_HINT3\033[0m" \
"\033[33m$UPG_GEO_CUSTOM_HINT4\033[0m"
content_line "\033[0m请选择需要更新的数据库项目来源:\033[0m"
content_line "\033[0m$UPG_GEO_SOURCE_TITLE\033[0m"
separator_line "-"
content_line "1) \033[36;4mhttps://github.com/MetaCubeX/meta-rules-dat\033[0m"
sub_content_line "仅限Clash/Mihomo"
sub_content_line "$UPG_GEO_LOCAL_ONLY1"
content_line "2) \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m"
sub_content_line "仅限Clash/Mihomo"
sub_content_line "$UPG_GEO_LOCAL_ONLY1"
content_line "3) \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m"
sub_content_line "仅限SingBox-srs"
sub_content_line "$UPG_GEO_LOCAL_ONLY2"
content_line "4) \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m"
sub_content_line "仅限Mihomo-mrs"
sub_content_line "$UPG_GEO_LOCAL_ONLY3"
content_line "5) \033[36;4mhttps://github.com/Loyalsoldier/geoip\033[0m"
sub_content_line "仅限Clash-GeoIP"
sub_content_line "$UPG_GEO_LOCAL_ONLY4"
content_line "9) \033[33m自定义数据库链接 \033[0m"
content_line "$UPG_GEO_CUSTOM_LINK"
content_line ""
content_line "0) 返回上级菜单"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " num
case "$num" in
@@ -745,7 +745,7 @@ setcustgeo() {
;;
9)
line_break
read -r -p "请输入自定义数据库的链接地址> " link
read -r -p "$UPG_GEO_LINK_HINT" link
[ -n "$link" ] && custgeolink="$link"
getgeo
;;
@@ -759,23 +759,23 @@ setcustgeo() {
setgeo() {
while true; do
. $CFG_PATH >/dev/null
[ -n "$cn_mini_v" ] && geo_type_des=精简版 || geo_type_des=全球版
comp_box "\033[33m注意Mihomo内核和SingBox内核的数据库文件不通用\033[0m" \
"在线数据库最新版本(每日同步上游):\033[32m$GeoIP_v\033[0m" \
[ -n "$cn_mini_v" ] && geo_type_des=$UPG_GEO_TYPE_LITE || geo_type_des=$UPG_GEO_TYPE_FULL
comp_box "\033[33m$UPG_GEO_CHOOSE_HINT\033[0m" \
"$UPG_GEO_LATEST\033[32m$GeoIP_v\033[0m" \
"" \
"请选择需要更新的Geo数据库文件"
"$UPG_GEO_CHOOSE"
btm_box "1) CN-IP绕过文件约0.1mb \033[33m$china_ip_list_v\033[0m" \
"2) CN-IPV6绕过文件约30kb \033[33m$china_ipv6_list_v\033[0m" \
btm_box "$UPG_GEO_ITEM1 \033[33m$china_ip_list_v\033[0m" \
"$UPG_GEO_ITEM2 \033[33m$china_ipv6_list_v\033[0m" \
"" \
"3) Mihomo精简版GeoIP_cn数据库约0.1mb \033[33m$cn_mini_v\033[0m" \
"4) Mihomo完整版GeoSite数据库约5mb \033[33m$geosite_v\033[0m" \
"$UPG_GEO_ITEM3 \033[33m$cn_mini_v\033[0m" \
"$UPG_GEO_ITEM4 \033[33m$geosite_v\033[0m" \
"" \
"5) Mihomo-mrs数据库常用包约1mb,非必要勿用)" \
"6) Singbox-srs数据库常用包约0.8mb,非必要勿用)" \
"$UPG_GEO_ITEM5" \
"$UPG_GEO_ITEM6" \
"" \
"8) \033[36m自定义数据库文件\033[0m" \
"9) \033[31m清理数据库文件\033[0m" \
"$UPG_GEO_ITEM8" \
"$UPG_GEO_ITEM9" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -818,9 +818,9 @@ setgeo() {
;;
9)
while true; do
comp_box "\033[33m这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件\033[0m" \
"清理后启动服务即可自动下载所需文件"
btm_box "1) 确认清理" \
comp_box "\033[33m$UPG_GEO_CLEAN_HINT1\033[0m" \
"$UPG_GEO_CLEAN_HINT2"
btm_box "$UPG_GEO_CLEAN_CONFIRM" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " res
case "$res" in
@@ -835,7 +835,7 @@ setgeo() {
setconfig $var
done
rm -rf "$CRASHDIR"/ruleset/*
msg_alert "\033[33m所有数据库文件均已清理!\033[0m"
msg_alert "\033[33m$UPG_GEO_CLEAN_OK\033[0m"
break
;;
*)
@@ -856,18 +856,18 @@ getdb() {
dblink="${update_url}/"
line_break
separator_line "="
content_line "正在连接服务器获取安装文件......"
content_line "$UPG_DB_GETTING"
get_bin "$TMPDIR"/clashdb.tar.gz bin/dashboard/${db_type}.tar.gz
if [ "$?" = "1" ]; then
content_line "\033[31m文件下载失败!\033[0m"
content_line "\033[31m$UPG_GEO_FAIL\033[0m"
error_down
return 1
else
content_line "\033[33m下载成功,正在解压文件......\033[0m"
content_line "\033[33m$UPG_DB_DOWNLOAD_OK\033[0m"
mkdir -p "$dbdir" >/dev/null
tar -zxf "$TMPDIR/clashdb.tar.gz" ${tar_para} -C "$dbdir" >/dev/null
if [ $? -ne 0 ]; then
content_line "文件解压失败!"
content_line "$UPG_GEO_EXTRACT_FAIL"
separator_line "="
line_break
sleep 1
@@ -886,8 +886,8 @@ getdb() {
fi
#写入配置文件
setconfig hostdir "'$hostdir'"
content_line "\033[32m面板安装成功!\033[0m"
content_line "\033[36m如未生效请使用【Ctrl+F5】强制刷新浏览器\033[0m"
content_line "\033[32m$UPG_DB_OK\033[0m"
content_line "\033[36m$UPG_DB_REFRESH_HINT\033[0m"
separator_line "="
sleep 1
rm -rf "$TMPDIR"/clashdb.tar.gz
@@ -897,8 +897,8 @@ getdb() {
dbdir() {
if [ -f /www/clash/CNAME ] || [ -f "$CRASHDIR"/ui/CNAME ]; then
comp_box "\033[33m检测到已经安装过本地面板\033[0m"
btm_box "1) 升级/覆盖安装" \
comp_box "\033[33m$UPG_DB_INSTALLED\033[0m"
btm_box "$UPG_DB_UPGRADE" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " res
if [ "$res" = 1 ]; then
@@ -907,13 +907,13 @@ dbdir() {
[ -f "$CRASHDIR"/ui/CNAME ] && rm -rf "$CRASHDIR"/ui && dbdir="$CRASHDIR"/ui
getdb
else
msg_alert "\033[33m安装已取消\033[0m"
msg_alert "\033[33m$UPG_DB_CANCEL\033[0m"
return 1
fi
elif [ -w /www ] && [ -n "$(pidof nginx)" ]; then
comp_box "请选择面板\033[33m安装目录\033[0m"
btm_box "1) 在${CRASHDIR}/ui目录安装" \
"2) 在/www/clash目录安装" \
comp_box "$UPG_DB_DIR_SELECT"
btm_box "$UPG_DB_DIR_1" \
"$UPG_DB_DIR_2" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -945,19 +945,19 @@ dbdir() {
setdb() {
while true; do
comp_box "\033[36m安装 dashboard 管理面板到本地\033[0m" \
"\033[32m打开管理面板的速度更快且更稳定\033[0m" \
comp_box "\033[36m$UPG_DB_TITLE\033[0m" \
"\033[32m$UPG_DB_TITLE2\033[0m" \
"" \
"请选择面板安装类型:"
btm_box " - - - - - - -维护中- - - - - - -" \
"1) 安装\033[32mzashboard面板\033[0m约2.2mb" \
"2) 安装\033[32mMetaXD面板\033[0m约1.5mb" \
"3) 安装\033[32mYacd-Meta魔改面板\033[0m约1.7mb" \
" - - - - - -已停止维护- - - - - -" \
"4) 安装\033[32m基础面板\033[0m约500kb" \
"5) 安装\033[32mMeta基础面板\033[0m约800kb" \
"6) 安装\033[32mYacd面板\033[0m约1.1mb" \
"9) \033[31m卸载本地面板\033[0m" \
"$UPG_DB_SELECT"
btm_box "$UPG_DB_WIP" \
"$UPG_DB_INSTALL_1" \
"$UPG_DB_INSTALL_2" \
"$UPG_DB_INSTALL_3" \
"$UPG_DB_OLD" \
"$UPG_DB_INSTALL_4" \
"$UPG_DB_INSTALL_5" \
"$UPG_DB_INSTALL_6" \
"$UPG_DB_UNINSTALL" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -993,8 +993,8 @@ setdb() {
;;
9)
while true; do
comp_box "是否卸载本地面板?"
btm_box "1) 确认卸载" \
comp_box "$UPG_DB_UNINSTALL_CONFIRM"
btm_box "$UPG_DB_UNINSTALL_YES" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " res
case "$res" in
@@ -1005,7 +1005,7 @@ setdb() {
rm -rf /www/clash
rm -rf "$CRASHDIR"/ui
rm -rf "$BINDIR"/ui
msg_alert "\033[31m面板已经卸载!\033[0m"
msg_alert "\033[31m$UPG_DB_UNINSTALL_OK\033[0m"
break
;;
*)
@@ -1025,10 +1025,10 @@ setdb() {
getcrt() {
line_break
separator_line "="
content_line "正在连接服务器获取安装文件......"
content_line "$UPG_DB_GETTING"
get_bin "$TMPDIR"/ca-certificates.crt bin/fix/ca-certificates.crt echooff
if [ "$?" = "1" ]; then
content_line "\033[31m文件下载失败!\033[0m"
content_line "\033[31m$UPG_GEO_FAIL\033[0m"
error_down
else
[ "$systype" = 'mi_snapshot' ] && cp -f "$TMPDIR"/ca-certificates.crt "$CRASHDIR"/tools #镜像化设备特殊处理
@@ -1040,7 +1040,7 @@ getcrt() {
export CURL_CA_BUNDLE="$crtdir"
echo "export CURL_CA_BUNDLE=$crtdir" >>/etc/profile
fi
content_line "\033[32m证书安装成功!\033[0m"
content_line "\033[32m$UPG_CRT_DB_OK\033[0m"
separator_line "="
sleep 1
fi
@@ -1058,22 +1058,22 @@ setcrt() {
if [ -n "$openssldir" ]; then
line_break
separator_line "="
content_line "安装/更新本地根证书文件ca-certificates.crt"
content_line "\033[33m用于解决证书校验错误x509报错等问题\033[0m"
content_line "\033[31m无上述问题的设备请勿使用!\033[0m"
content_line "$UPG_CRT_TITLE1"
content_line "\033[33m$UPG_CRT_TITLE2\033[0m"
content_line "\033[31m$UPG_CRT_TITLE3\033[0m"
if [ -f "$crtdir" ]; then
content_line ""
content_line "\033[33m检测到系统已经存在根证书文件:\033[0m"
content_line "\033[33m$UPG_CRT_EXISTS\033[0m"
content_line "\033[33m$crtdir\033[0m"
fi
separator_line "="
if [ -f "$crtdir" ]; then
content_line "1) 覆盖更新"
content_line "$UPG_CRT_UPDATE"
else
content_line "1) 立即安装"
content_line "$UPG_CRT_INSTALL"
fi
content_line "0) 返回上级菜单"
content_line "0) $COMMON_BACK"
separator_line "="
read -r -p "$COMMON_INPUT> " res
case "$res" in
@@ -1091,7 +1091,7 @@ setcrt() {
esac
else
msg_alert "\033[33m设备可能尚未安装openssl无法安装证书文件\033[0m"
msg_alert "\033[33m$UPG_CRT_WARN\033[0m"
break
fi
@@ -1104,24 +1104,24 @@ saveserver() {
setconfig url_id "$url_id"
setconfig release_type "$release_type"
version_new=''
msg_alert -t 0 "\033[32m源地址切换成功!\033[0m"
msg_alert -t 0 "\033[32m$UPG_SOURCE_SWITCH_OK\033[0m"
}
# 安装源
setserver() {
while true; do
line_break
[ -z "$release_type" ] && release_name=未指定
[ -n "$release_type" ] && release_name="$release_type(回退)"
[ "$release_type" = stable ] && release_name=稳定版
[ "$release_type" = master ] && release_name=公测版
[ "$release_type" = dev ] && release_name=开发版
[ -z "$release_type" ] && release_name=$UPG_SOURCE_UNSET
[ -n "$release_type" ] && release_name="$release_type$UPG_SOURCE_ROLLBACK_TAG"
[ "$release_type" = stable ] && release_name=$UPG_SOURCE_STABLE_TEXT
[ "$release_type" = master ] && release_name=$UPG_SOURCE_MASTER_TEXT
[ "$release_type" = dev ] && release_name=$UPG_SOURCE_DEV_TEXT
[ -n "$url_id" ] && url_name=$(grep "$url_id" "$CRASHDIR"/configs/servers.list 2>/dev/null | awk '{print $2}') || url_name="$update_url"
comp_box "\033[30;47m切换ShellCrash版本及更新源地址\033[0m" \
comp_box "\033[30;47m$UPG_SOURCE_TITLE\033[0m" \
"" \
"当前版本:\033[4;33m$release_name\033[0m" \
"当前源:\n\033[4;32m$url_name\033[0m"
"$UPG_SOURCE_CUR_VER\033[4;33m$release_name\033[0m" \
"$UPG_SOURCE_CUR_URL\n\033[4;32m$url_name\033[0m"
grep -E "^1|$release_name" "$CRASHDIR"/configs/servers.list |
awk '{print NR") "$2}' |
@@ -1130,12 +1130,12 @@ setserver() {
done
btm_box "" \
"a) 切换至\033[32m稳定版-stable\033[0m" \
"b) 切换至\033[36m公测版-master\033[0m" \
"c) 切换至\033[33m开发版-dev\033[0m" \
"$UPG_SOURCE_SWITCH_STABLE" \
"$UPG_SOURCE_SWITCH_MASTER" \
"$UPG_SOURCE_SWITCH_DEV" \
"" \
"d) 自定义源地址(用于本地源或自建源)" \
"e) \033[31m版本回退\033[0m" \
"$UPG_SOURCE_CUSTOM" \
"$UPG_SOURCE_ROLLBACK" \
"" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num
@@ -1174,12 +1174,12 @@ setserver() {
;;
c)
while true; do
comp_box "\033[33m开发版未经过妥善测试可能依然存在大量bug\033[0m" \
"\033[33m如果你没有足够的耐心或者测试经验,切勿使用此版本!\033[0m" \
"请务必加入我们的讨论组:\033[36;4mhttps://t.me/ShellClash\033[0m"
content_line "是否依然切换到开发版?"
comp_box "\033[33m$UPG_SOURCE_DEV_WARN1\033[0m" \
"\033[33m$UPG_SOURCE_DEV_WARN2\033[0m" \
"$UPG_SOURCE_DEV_WARN3"
content_line "$UPG_SOURCE_DEV_CONFIRM"
separator_line "-"
btm_box "1) 确认切换" \
btm_box "$UPG_SOURCE_DEV_YES" \
"0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " res
case "$res" in
@@ -1199,9 +1199,9 @@ setserver() {
done
;;
d)
comp_box "\033[36m请直接输入个人源路径\033[0m" \
"或者输入 0 返回上级菜单"
read -r -p "请输入个人源路径> " update_url
comp_box "\033[36m$UPG_SOURCE_CUSTOM_HINT\033[0m" \
"$UPG_CUSTOM_CORE_LINK_HINT3"
read -r -p "$UPG_SOURCE_CUSTOM_INPUT" update_url
if [ "$update_url" = 0 ]; then
continue
elif [ ! -z "$update_url" ]; then
@@ -1214,16 +1214,16 @@ setserver() {
if [ -n "$url_id" ] && [ "$url_id" -lt 200 ]; then
line_break
separator_line "="
content_line "\033[32m正在获取版本信息......\033[0m"
content_line "\033[32m$UPG_SOURCE_VER_GETTING\033[0m"
. "$CRASHDIR"/libs/web_get_lite.sh
list=$(web_get_lite https://api.github.com/repos/juewuy/ShellCrash/tags | grep -E '"name": "[0-9]' | cut -d '"' -f4)
if [ "$?" = "0" ]; then
content_line "\033[32m获取版本信息成功\033[0m"
content_line "\033[32m$UPG_SOURCE_VER_OK\033[0m"
separator_line "="
line_break
separator_line "="
content_line "\033[31m请选择想要回退至的具体版本:\033[0m"
content_line "\033[31m$UPG_SOURCE_ROLLBACK_SELECT\033[0m"
list_box "$list"
btm_box "" \
"0) $COMMON_BACK"
@@ -1239,15 +1239,15 @@ setserver() {
continue
fi
else
content_line "\033[31m版本回退信息获取失败,请尝试更换其他安装源!\033[0m"
content_line "\033[31m$UPG_SOURCE_ROLLBACK_FAIL\033[0m"
separator_line "="
sleep 1
continue
fi
rm -rf "$TMPDIR"/tags
else
msg_alert "\033[31m当前源不支持版本回退\033[0m" \
"\033[31m请尝试更换其他安装源!\033[0m"
msg_alert "\033[31m$UPG_SOURCE_ROLLBACK_NOTSUP\033[0m" \
"\033[31m$UPG_SOURCE_ROLLBACK_HINT\033[0m"
continue
fi
;;
@@ -1257,3 +1257,7 @@ setserver() {
esac
done
}

View File

@@ -3,6 +3,7 @@
[ -n "$__IS_MODULE_FW_FILTER_LOADED" ] && return
__IS_MODULE_FW_FILTER_LOADED=1
load_lang fw_filter
# 流量过滤
set_fw_filter() {
@@ -12,14 +13,14 @@ 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
comp_box "1) 过滤非常用端口: \033[36m$common_ports\033[0m ———用于过滤P2P流量" \
"2) 过滤局域网设备: \033[36m$mac_return\033[0m ———使用黑/白名单进行过滤" \
"3) 过滤QUIC协议 \033[36m$quic_rj\033[0m ———优化视频性能" \
"4) 过滤CN_IP(4&6)列表:\033[36m$cn_ip_route\033[0m ———优化性能" \
"5) 自定义透明路由ipv4网段适合vlan等复杂网络环境" \
"6) 自定义保留地址ipv4网段需要以保留地址为访问目标的环境" \
comp_box "$FWF_ITEM_1" \
"$FWF_ITEM_2" \
"$FWF_ITEM_3" \
"$FWF_ITEM_4" \
"$FWF_ITEM_5" \
"$FWF_ITEM_6" \
"" \
"0) $COMMON_BACK"
"$FWF_BACK"
read -r -p "$COMMON_INPUT> " num
case "$num" in
"" | 0)
@@ -27,9 +28,9 @@ set_fw_filter() {
;;
1)
if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then
comp_box "切换时将停止服务,是否继续:"
btm_box "1) 是" \
"0) 否,返回上级菜单"
comp_box "$FWF_SWITCH_STOP"
btm_box "$FWF_YES" \
"$FWF_NO_BACK"
read -r -p "$COMMON_INPUT> " res
[ "$res" = 1 ] && "$CRASHDIR"/start.sh stop && set_common_ports
else
@@ -47,10 +48,10 @@ set_fw_filter() {
3)
if [ "$quic_rj" = "OFF" ]; then
quic_rj=ON
msg_alert "\033[33m已禁止QUIC流量通过ShellCrash内核\033[0m"
msg_alert "\033[33m$FWF_QUIC_OFF\033[0m"
else
quic_rj=OFF
msg_alert "\033[33m已取消禁止QUIC协议流量\033[0m"
msg_alert "\033[33m$FWF_QUIC_ON\033[0m"
fi
setconfig quic_rj $quic_rj
;;
@@ -58,15 +59,15 @@ set_fw_filter() {
if [ -n "$(ipset -v 2>/dev/null)" ] || [ "$firewall_mod" = 'nftables' ]; then
if [ "$cn_ip_route" = "OFF" ]; then
cn_ip_route=ON
msg_alert -t 2 "\033[32m已开启CN_IP绕过内核功能!\033[0m" \
"\033[31m注意此功能会导致全局模式及一切CN相关规则失效\033[0m"
msg_alert -t 2 "\033[32m$FWF_CNIP_ON\033[0m" \
"\033[31m$FWF_CNIP_WARN\033[0m"
else
cn_ip_route=OFF
msg_alert "\033[33m已禁用CN_IP绕过内核功能!\033[0m"
msg_alert "\033[33m$FWF_CNIP_OFF\033[0m"
fi
setconfig cn_ip_route $cn_ip_route
else
msg_alert "\033[31m当前设备缺少ipset模块或未使用nftables模式无法启用绕过功能\033[0m"
msg_alert "\033[31m$FWF_NO_IPSET\033[0m"
fi
;;
5)
@@ -87,19 +88,19 @@ set_common_ports() {
[ -z "$multiport" ] && multiport='22,80,443,8080,8443'
line_break
separator_line "="
content_line "\033[31m注意:\n\033[0mMIX模式下所有fake-ip来源的非常用端口流量不会被过滤"
content_line "\033[31m$FWF_COMMON_NOTE\033[0m$FWF_MIX_NOTE"
if [ -n "$common_ports" ]; then
content_line ""
content_line "当前已放行端口:\033[36m$multiport\033[0m"
content_line "$FWF_ALLOWED_PORTS\033[36m$multiport\033[0m"
fi
separator_line "="
btm_box "1) 启用/关闭端口过滤: \033[36m$common_ports\033[0m" \
"2) 添加放行端口" \
"3) 移除指定放行端口" \
"4) 重置默认放行端口" \
"5) 重置为旧版放行端口" \
btm_box "$FWF_PORT_MENU_1" \
"$FWF_PORT_MENU_2" \
"$FWF_PORT_MENU_3" \
"$FWF_PORT_MENU_4" \
"$FWF_PORT_MENU_5" \
"" \
"0) $COMMON_BACK"
"$FWF_BACK"
read -r -p "$COMMON_INPUT> " num
case "$num" in
"" | 0)
@@ -122,18 +123,18 @@ set_common_ports() {
while true; do
port_count=$(echo "$multiport" | awk -F',' '{print NF}')
if [ "$port_count" -ge 15 ]; then
comp_box "\033[31m最多支持设置放行15个端口请先减少一些\033[0m"
comp_box "\033[31m$FWF_MAX_PORT\033[0m"
else
comp_box "当前已放行端口:\033[36m$multiport\033[0m"
btm_box "\033[36m请直接输入要放行的端口号\033[0m\n每次只能输入一个端口号切勿一次添加多个端口号" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " port
comp_box "$FWF_ALLOWED_PORTS\033[36m$multiport\033[0m"
btm_box "\033[36m$FWF_INPUT_ADD_HINT\033[0m\n$FWF_INPUT_ADD_HINT2" \
"$FWF_OR_BACK"
read -r -p "$FWF_INPUT_PORT" port
if [ "$port" = 0 ]; then
break
elif echo ",$multiport," | grep -q ",$port,"; then
msg_alert "\033[31m输入错误!请勿重复添加!\033[0m"
msg_alert "\033[31m$FWF_ERR_DUP\033[0m"
elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
msg_alert "\033[31m输入错误请输入正确的数值165535\033[0m"
msg_alert "\033[31m$FWF_ERR_RANGE\033[0m"
else
multiport=$(echo "$multiport,$port" | sed "s/^,//")
@@ -148,15 +149,15 @@ set_common_ports() {
;;
3)
while true; do
comp_box "当前已放行端口:\033[36m$multiport\033[0m"
btm_box "\033[36m请直接输入要移除的端口号\033[0m\n每次只能输入一个端口号切勿一次添加多个端口号" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " port
comp_box "$FWF_ALLOWED_PORTS\033[36m$multiport\033[0m"
btm_box "\033[36m$FWF_INPUT_REMOVE_HINT\033[0m\n$FWF_INPUT_ADD_HINT2" \
"$FWF_OR_BACK"
read -r -p "$FWF_INPUT_PORT" port
if [ "$port" = 0 ]; then
break
elif echo ",$multiport," | grep -q ",$port,"; then
if [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
msg_alert "\033[31m输入错误请输入正确的数值165535\033[0m"
msg_alert "\033[31m$FWF_ERR_RANGE\033[0m"
else
multiport=$(echo ",$multiport," | sed "s/,$port//; s/^,//; s/,$//")
if setconfig multiport "$multiport"; then
@@ -166,7 +167,7 @@ set_common_ports() {
fi
fi
else
msg_alert "\033[31m输入错误!请输入已添加过的端口!\033[0m"
msg_alert "\033[31m$FWF_ERR_DUP\033[0m"
fi
done
;;
@@ -198,13 +199,13 @@ set_cust_host_ipv4() {
while true; do
[ -z "$replace_default_host_ipv4" ] && replace_default_host_ipv4="OFF"
. "$CRASHDIR"/starts/fw_getlanip.sh && getlanip
comp_box "当前默认透明路由的网段为:\033[32m$host_ipv4\033[0m" \
"当前已添加的自定义网段为:\033[36m$cust_host_ipv4\033[0m"
btm_box "1) 移除所有自定义网段" \
"2) 使用自定义网段覆盖默认网段 \033[36m$replace_default_host_ipv4\033[0m" \
comp_box "$FWF_CUST_HOST_TITLE\033[32m$host_ipv4\033[0m" \
"$FWF_CUST_HOST_TITLE2\033[36m$cust_host_ipv4\033[0m"
btm_box "$FWF_CUST_HOST_MENU_1" \
"$FWF_CUST_HOST_MENU_2 \033[36m$replace_default_host_ipv4\033[0m" \
"" \
"0) $COMMON_BACK"
read -r -p "请输入对应的序号或需要额外添加的网段> " text
"$FWF_BACK"
read -r -p "$FWF_CUST_HOST_HINT" text
case "$text" in
"" | 0)
break
@@ -239,7 +240,7 @@ set_cust_host_ipv4() {
msg_alert "\033[31m$COMMON_FAILED\033[0m"
fi
else
msg_alert "\033[31m请输入正确的网段地址!\033[0m"
msg_alert "\033[31m$FWF_NET_ERR\033[0m"
fi
;;
esac
@@ -249,14 +250,14 @@ set_cust_host_ipv4() {
set_reserve_ipv4() {
while true; do
[ -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"
comp_box "\033[33m注意:地址必须是空格分隔,错误的设置可能导致网络回环或启动报错,请务必谨慎!\033[0m" \
comp_box "\033[33m$FWF_RESERVE_NOTE\033[0m" \
"" \
"当前网段:" \
"$FWF_RESERVE_NOW" \
"\033[36m$reserve_ipv4\033[0m"
btm_box "\033[36m请直接输入自定义保留地址ipv4网段\033[0m" \
"或输入 1 重置默认网段" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " text
btm_box "\033[36m$FWF_RESERVE_INPUT_HINT\033[0m" \
"$FWF_RESERVE_INPUT_HINT2" \
"$FWF_RESERVE_INPUT_HINT3"
read -r -p "$FWF_RESERVE_PROMPT" text
case "$text" in
"" | 0)
break
@@ -273,12 +274,12 @@ set_reserve_ipv4() {
if 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"
if setconfig reserve_ipv4 "'$reserve_ipv4'"; then
msg_alert "已将保留地址网段设为:\033[32m$reserve_ipv4\033[0m"
msg_alert "\033[32m$FWF_RESERVE_SET$reserve_ipv4\033[0m"
else
msg_alert "\033[31m$COMMON_FAILED\033[0m"
fi
else
msg_alert "\033[31m输入有误,请重新输入!\033[0m"
msg_alert "\033[31m$FWF_RESERVE_ERR\033[0m"
fi
;;
esac
@@ -290,33 +291,33 @@ fw_filter_lan() {
get_devinfo() {
dev_ip=$(cat "$dhcpdir" | grep " $dev " | awk '{print $3}') && [ -z "$dev_ip" ] && dev_ip=$dev
dev_mac=$(cat "$dhcpdir" | grep " $dev " | awk '{print $2}') && [ -z "$dev_mac" ] && dev_mac=$dev
dev_name=$(cat "$dhcpdir" | grep " $dev " | awk '{print $4}') && [ -z "$dev_name" ] && dev_name='未知设备'
dev_name=$(cat "$dhcpdir" | grep " $dev " | awk '{print $4}') && [ -z "$dev_name" ] && dev_name="$FWF_LAN_NO_DEVICE"
}
add_mac() {
while true; do
comp_box "手动输入mac地址时仅支持\033[32mxx:xx:xx:xx:xx:xx\033[0m的形式"
content_line "已添加的mac地址"
comp_box "$FWF_MAC_HINT"
content_line "$FWF_MAC_EXISTED"
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地址"
content_line "$FWF_NONE_MAC"
fi
separator_line "="
content_line "序号 \033[33m设备IP 设备mac地址 设备名称\033[0m"
content_line "$FWF_MAC_HEADER"
if [ -s "$dhcpdir" ]; then
awk '{print NR") "$3,$2,$4}' "$dhcpdir" |
while IFS= read -r line; do
content_line "$line"
done
else
content_line "无纪录"
content_line "$FWF_MAC_NONE"
fi
btm_box "" \
"0) $COMMON_BACK"
read -r -p "请输入对应序号或直接输入mac地址> " num
"$FWF_BACK"
read -r -p "$FWF_MAC_INPUT_HINT" num
if [ -z "$num" ] || [ "$num" = 0 ]; then
i=
break
@@ -324,48 +325,48 @@ fw_filter_lan() {
if [ -z "$(cat "$CRASHDIR"/configs/mac | grep -E "$num")" ]; then
echo "$num" | grep -oE '^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$' >>"$CRASHDIR"/configs/mac
else
msg_alert "\033[31m已添加的设备,请勿重复添加!\033[0m"
msg_alert "\033[31m$FWF_MAC_DUP\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
echo "$macadd" >>"$CRASHDIR"/configs/mac
else
msg_alert "\033[31m已添加的设备,请勿重复添加!\033[0m"
msg_alert "\033[31m$FWF_MAC_DUP\033[0m"
fi
else
msg_alert "\033[31m输入有误,请重新输入!\033[0m"
msg_alert "\033[31m$FWF_RESERVE_ERR\033[0m"
fi
done
}
add_ip() {
while true; do
comp_box "手动输入时仅支持 \033[32m192.168.1.0/24\033[0m 或 \033[32m192.168.1.0\033[0m 的形式" \
"不支持ipv6地址过滤可能导致过滤失败建议使用mac地址过滤"
content_line "已添加的IP地址"
comp_box "$FWF_IP_HINT" \
"$FWF_IP_HINT2"
content_line "$FWF_IP_EXISTED"
content_line ""
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地址"
content_line "$FWF_NONE_IP"
fi
separator_line "="
content_line "\033[33m序号 设备IP 设备名称\033[32m"
content_line "$FWF_IP_HEADER"
if [ -s "$dhcpdir" ]; then
awk '{print NR") "$3, $4}' "$dhcpdir" |
while IFS= read -r line; do
content_line "$line"
done
else
content_line "无纪录"
content_line "$FWF_MAC_NONE"
fi
btm_box "" \
"0) $COMMON_BACK"
read -r -p "请输入对应序号或直接输入IP地址段> " num
"$FWF_BACK"
read -r -p "$FWF_IP_INPUT_HINT" num
if [ -z "$num" ] || [ "$num" = 0 ]; then
i=
break
@@ -373,17 +374,17 @@ fw_filter_lan() {
if [ -z "$(cat "$CRASHDIR"/configs/ip_filter | grep -E "$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
msg_alert "\033[31m已添加的地址,请勿重复添加!\033[0m"
msg_alert "\033[31m$FWF_IP_DUP\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
echo "$ipadd" >>"$CRASHDIR"/configs/ip_filter
else
msg_alert "\033[31m已添加的地址,请勿重复添加!\033[0m"
msg_alert "\033[31m$FWF_IP_DUP\033[0m"
fi
else
msg_alert "\033[31m输入有误,请重新输入!\033[0m"
msg_alert "\033[31m$FWF_RESERVE_ERR\033[0m"
fi
done
}
@@ -391,11 +392,11 @@ fw_filter_lan() {
del_all() {
while true; do
if [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ]; then
msg_alert "\033[31m列表中没有需要移除的设备!\033[0m"
msg_alert "\033[31m$FWF_REMOVE_NONE\033[0m"
break
else
comp_box "请选择需要移除的设备:"
content_line " \033[32m设备IP \033[36m设备mac地址 \033[35m设备名称\033[0m"
comp_box "$FWF_REMOVE_TITLE"
content_line "$FWF_REMOVE_HEADER"
i=1
for dev in $(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null); do
get_devinfo
@@ -404,7 +405,7 @@ fw_filter_lan() {
i=$((i + 1))
done
btm_box "" \
"0) $COMMON_BACK"
"$FWF_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)
@@ -413,13 +414,13 @@ fw_filter_lan() {
break
elif [ "$num" -le "$mac_filter_rows" ]; then
sed -i "${num}d" "$CRASHDIR"/configs/mac
msg_alert "\033[32m对应设备已移除!\033[0m"
msg_alert "\033[32m$FWF_REMOVE_OK\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
msg_alert "\033[32m对应设备已移除!\033[0m"
msg_alert "\033[32m$FWF_REMOVE_OK\033[0m"
else
msg_alert "\033[31m输入有误,请重新输入!\033[0m"
msg_alert "\033[31m$FWF_RESERVE_ERR\033[0m"
fi
fi
done
@@ -432,22 +433,24 @@ fw_filter_lan() {
[ -z "$dhcpdir" ] && [ -f /tmp/dnsmasq.leases ] && dhcpdir='/tmp/dnsmasq.leases'
[ -z "$dhcpdir" ] && dhcpdir='/dev/null'
[ -z "$macfilter_type" ] && macfilter_type='黑名单'
if [ "$macfilter_type" = "黑名单" ]; then
fw_filter_lan_over='白名单'
fw_filter_lan_scrip='不'
if [ "$macfilter_type" = '黑名单' ]; then
macfilter_type_show="$FWF_BLACK_LIST"
fw_filter_lan_over="$FWF_WHITE_LIST"
fw_filter_lan_desc="$FWF_FILTER_BLACK_DESC"
else
fw_filter_lan_over='黑名单'
fw_filter_lan_scrip=''
macfilter_type_show="$FWF_WHITE_LIST"
fw_filter_lan_over="$FWF_BLACK_LIST"
fw_filter_lan_desc="$FWF_FILTER_WHITE_DESC"
fi
comp_box "\033[30;47m请在此添加或移除设备\033[0m" \
comp_box "\033[30;47m$FWF_FILTER_MENU_TITLE\033[0m" \
"" \
"当前过滤方式为:\033[33m$macfilter_type模式\033[0m" \
"仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核"
"$FWF_FILTER_MODE\033[33m$macfilter_type_show$FWF_FILTER_MODE_SUFFIX\033[0m" \
"\033[36m$fw_filter_lan_desc\033[0m"
if [ -n "$(cat "$CRASHDIR"/configs/mac)" ]; then
content_line "当前已过滤设备为:"
content_line "$FWF_FILTER_EXISTED"
content_line ""
content_line " \033[36m设备mac/ip地址\033[0m \033[35m设备名称\033[0m"
content_line "$FWF_FILTER_HEADER"
for dev in $(cat "$CRASHDIR"/configs/mac 2>/dev/null); do
get_devinfo
content_line "$(printf "\033[36m%-20s \033[35m%s\033[0m" \
@@ -460,22 +463,26 @@ fw_filter_lan() {
done
separator_line "="
fi
btm_box "1) 切换为\033[33m$fw_filter_lan_over模式\033[0m" \
"2) \033[32m添加指定设备mac地址\033[0m" \
"3) \033[32m添加指定设备IP地址网段\033[0m" \
"4) \033[36m移除指定设备\033[0m" \
"9) \033[31m清空整个列表\033[0m" \
btm_box "$FWF_FILTER_SWITCH" \
"$FWF_FILTER_ADD_MAC" \
"$FWF_FILTER_ADD_IP" \
"$FWF_FILTER_REMOVE" \
"$FWF_FILTER_CLEAR" \
"" \
"0) $COMMON_BACK"
"$FWF_BACK"
read -r -p "$COMMON_INPUT> " num
case "$num" in
"" | 0)
break
;;
1)
macfilter_type=$fw_filter_lan_over
if setconfig macfilter_type $macfilter_type; then
msg_alert "\033[32m已切换为$macfilter_type模式\033[0m"
if [ "$macfilter_type" = '黑名单' ]; then
macfilter_type='白名单'
else
macfilter_type='黑名单'
fi
if setconfig macfilter_type "$macfilter_type"; then
msg_alert "\033[32m$FWF_SWITCH_OK\033[0m"
else
msg_alert "\033[31m$COMMON_FAILED\033[0m"
fi
@@ -492,7 +499,7 @@ fw_filter_lan() {
9)
: >"$CRASHDIR"/configs/mac
: >"$CRASHDIR"/configs/ip_filter
msg_alert "\033[31m设备列表已清空!\033[0m"
msg_alert "\033[31m$FWF_LIST_CLEARED\033[0m"
;;
*)
errornum

View File

@@ -3,6 +3,7 @@
[ -n "$__IS_MODULE_OVERRIDE" ] && return
__IS_MODULE_OVERRIDE=1
load_lang override
YAMLSDIR="$CRASHDIR"/yamls
JSONSDIR="$CRASHDIR"/jsons
@@ -12,18 +13,18 @@ override() {
while true; do
[ -z "$rule_link" ] && rule_link=1
[ -z "$server_link" ] && server_link=1
comp_box "\033[30;47m 欢迎使用配置文件覆写功能!\033[0m"
content_line "2) 管理\033[36m自定义规则\033[0m"
comp_box "\033[30;47m $OVR_TITLE\033[0m"
content_line "$OVR_MENU_2"
echo "$crashcore" | grep -q 'singbox' || {
content_line "3) 管理\033[33m自定义节点\033[0m"
content_line "4) 管理\033[36m自定义策略组\033[0m"
content_line "$OVR_MENU_3"
content_line "$OVR_MENU_4"
}
content_line "5) \033[32m自定义\033[0m高级功能"
[ "$disoverride" != 1 ] && content_line "9) \033[33m禁用\033[0m配置文件覆写"
content_line "$OVR_MENU_5"
[ "$disoverride" != 1 ] && content_line "$OVR_MENU_9"
content_line ""
content_line "0) 返回上级菜单"
content_line "$OVR_BACK"
separator_line "="
read -r -p "请输入对应数字> " num
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0)
break
@@ -46,12 +47,12 @@ override() {
sleep 3
;;
9)
comp_box "\033[33m此功能可能会导致严重问题!启用后脚本中大部分功能都将禁用!!!\033[0m" \
"如果你不是非常了解$crashcore的运行机制,切勿开启!\033[0m" \
"\033[33m继续后如出现任何问题,请务必自行解决,一切提问恕不受理!\033[0m"
comp_box "\033[33m$OVR_WARN_1\033[0m" \
"\033[33m$OVR_WARN_2\033[0m" \
"\033[33m$OVR_WARN_3\033[0m"
sleep 2
btm_box "1) 我确认遇到问题可以自行解决" \
"0) 返回上级菜单"
btm_box "$OVR_WARN_CONFIRM" \
"$OVR_CONFIRM_NO"
read -r -p "$COMMON_INPUT> " res
[ "$res" = '1' ] && {
disoverride=1
@@ -72,15 +73,15 @@ override() {
# 自定义规则
setrules() {
set_rule_type() {
comp_box "\033[33m请选择规则类型:\033[0m"
comp_box "\033[33m$OVR_RULES_TYPE\033[0m"
printf '%s\n' "$rule_type" |
awk '{for (i = 1; i <= NF; i++) print i") " $i}' |
while IFS= read -r line; do
content_line "$line"
done
btm_box "" \
"0) 返回上级菜单"
read -r -p "请输入对应数字> " num
"$OVR_BACK"
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0) ;;
[0-9]*)
@@ -88,8 +89,8 @@ setrules() {
errornum
else
rule_type_set=$(echo "$rule_type" | cut -d' ' -f"$num")
comp_box "\033[33m请输入规则语句,\n可以是域名、泛域名、IP网段或者其他匹配规则类型的内容\033[0m"
read -r -p "请输入对应规则> " rule_state_set
comp_box "\033[33m$OVR_RULES_ADD_RULE\033[0m"
read -r -p "$OVR_RULES_INPUT_RULE" rule_state_set
if [ -n "$rule_state_set" ]; then
set_group_type
else
@@ -104,16 +105,16 @@ setrules() {
}
set_group_type() {
comp_box "\033[36m请选择具体规则\033[0m" \
"\033[33m此处规则读取自现有配置文件,如果你后续更换配置文件时运行出错,请尝试重新添加\033[0m"
comp_box "\033[36m$OVR_RULES_GROUP\033[0m" \
"\033[33m$OVR_RULES_EXIST_WARN\033[0m"
printf '%s\n' "$rule_group" |
awk -F '#' '{for (i = 1; i <= NF; i++) print i") " $i}' |
while IFS= read -r line; do
content_line "$line"
done
btm_box "" \
"0) 返回上级菜单"
read -r -p "请输入对应数字> " num
"$OVR_BACK"
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0) ;;
[0-9]*)
@@ -124,7 +125,7 @@ setrules() {
rule_all="- ${rule_type_set},${rule_state_set},${rule_group_set}"
echo "IP-CIDR SRC-IP-CIDR IP-CIDR6" | grep -q -- "$rule_type_set" && rule_all="${rule_all},no-resolve"
echo "$rule_all" >>"$YAMLSDIR"/rules.yaml
msg_alert "\033[32m添加成功!\033[0m"
msg_alert "\033[32m$OVR_RULES_ADD_OK\033[0m"
fi
;;
*)
@@ -135,15 +136,15 @@ setrules() {
del_rule_type() {
while true; do
comp_box "输入对应数字即可移除相应规则:"
comp_box "$OVR_RULES_DEL_HINT"
sed -i '/^ *$/d; /^#/d' "$YAMLSDIR"/rules.yaml
awk -F '#' '!/^#/ {print NR") "$1 $2 $3}' "$YAMLSDIR/rules.yaml" |
while IFS= read -r line; do
content_line "$line"
done
btm_box "" \
"0) 返回上级菜单"
read -r -p "请输入对应数字> " num
"$OVR_BACK"
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0)
break
@@ -170,18 +171,18 @@ setrules() {
}
while true; do
comp_box "\033[33m你可以在这里快捷管理自定义规则\033[0m" \
"如需批量操作,请手动编辑:\033[36m $YAMLSDIR/rules.yaml\033[0m" \
"\033[33msingbox和clash共用此处规则可无缝切换\033[0m" \
"大量规则请尽量使用rule-set功能添加\n\033[31m此处过量添加可能导致启动卡顿\033[0m"
content_line "1) 新增自定义规则"
content_line "2) 移除自定义规则"
content_line "3) 清空规则列表"
echo "$crashcore" | grep -q 'singbox' || content_line "4) 配置节点绕过: \033[36m$proxies_bypass\033[0m"
comp_box "\033[33m$OVR_RULES_MENU_HINT\033[0m" \
"$OVR_RULES_MANUAL" \
"\033[33m$OVR_RULES_SHARED\033[0m" \
"$OVR_RULES_WARN"
content_line "$OVR_RULES_ADD"
content_line "$OVR_RULES_DEL"
content_line "$OVR_RULES_CLEAR"
echo "$crashcore" | grep -q 'singbox' || content_line "$OVR_RULES_BYPASS \033[36m$proxies_bypass\033[0m"
content_line ""
content_line "0) 返回上级菜单"
content_line "$OVR_BACK"
separator_line "="
read -r -p "请输入对应数字> " num
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0)
break
@@ -195,13 +196,13 @@ setrules() {
if [ -s "$YAMLSDIR"/rules.yaml ]; then
del_rule_type
else
msg_alert "请先添加自定义规则!"
msg_alert "$OVR_RULES_NO_RULES"
fi
;;
3)
comp_box "是否确认清空全部自定义规则?"
btm_box "1) 是" \
"0) 否,返回上级菜单"
comp_box "$OVR_RULES_CLEAR_CONFIRM"
btm_box "$OVR_CONFIRM_YES" \
"$OVR_CONFIRM_NO"
read -r -p "$COMMON_INPUT> " res
if [ "$res" = "1" ]; then
if sed -i '/^\s*[^#]/d' "$YAMLSDIR"/rules.yaml; then
@@ -213,13 +214,12 @@ setrules() {
;;
4)
if [ "$proxies_bypass" = "OFF" ]; then
comp_box "\033[33m本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量\033[0m" \
"\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同否则无法生效\033[0m" \
comp_box "\033[33m$OVR_RULES_BYPASS_WARN1\033[0m" \
"\033[33m$OVR_RULES_BYPASS_WARN2\033[0m" \
"" \
"是否启用节点绕过?"
btm_box
"1) 是" \
"0) 否,返回上级菜单"
"$OVR_RULES_BYPASS_PROMPT"
btm_box "$OVR_CONFIRM_YES" \
"$OVR_CONFIRM_NO"
read -r -p "$COMMON_INPUT> " res
if [ "$res" = "1" ]; then
proxies_bypass=ON
@@ -246,28 +246,28 @@ setrules() {
# 自定义clash策略组
setgroups() {
set_group_type() {
comp_box "\033[33m注意策略组名称必须和【自定义规则】或【自定义节点】功能中指定的策略组一致!\033[0m" \
"\033[33m建议先创建策略组,之后可在【自定义规则】或【自定义节点】功能中智能指定\033[0m" \
"\033[33m如需在当前策略组下添加节点,请手动编辑$YAMLSDIR/proxy-groups.yaml\033[0m"
btm_box "\033[36m请直接输入自定义策略组名称\033[0m\n不支持纯数字且不要包含特殊字符" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " new_group_name
comp_box "\033[33m$OVR_GROUPS_WARN1\033[0m" \
"\033[33m$OVR_GROUPS_WARN2\033[0m" \
"\033[33m$OVR_GROUPS_WARN3\033[0m"
btm_box "\033[36m$OVR_GROUPS_INPUT_NAME\033[0m" \
"$OVR_CONFIRM_NO"
read -r -p "$OVR_PROMPT" new_group_name
comp_box "\033[32m请选择策略组$new_group_name的类型:\033[0m"
comp_box "\033[32m$OVR_GROUPS_CHOOSE_TYPE$new_group_name】\033[0m"
printf '%s\n' "$group_type_cn" |
awk '{for (i = 1; i <= NF; i++) print i") " $i}' |
while IFS= read -r line; do
content_line "$line"
done
separator_line "="
read -r -p "请输入对应数字> " num
read -r -p "$OVR_GROUPS_INPUT_NUM" num
new_group_type=$(echo "$group_type" | awk '{print $'"$num"'}')
if [ "$num" = "1" ]; then
unset new_group_url interval
else
comp_box "请输入测速地址" \
"或直接回车使用默认地址https://www.gstatic.com/generate_204"
read -r -p "请输入> " new_group_url
comp_box "$OVR_GROUPS_URL" \
"$OVR_GROUPS_URL_HINT"
read -r -p "$OVR_PROMPT" new_group_url
[ -z "$new_group_url" ] && new_group_url=https://www.gstatic.com/generate_204
new_group_url="url: '$new_group_url'"
interval="interval: 300"
@@ -283,22 +283,22 @@ setgroups() {
- DIRECT
EOF
sed -i "/^ *$/d" "$YAMLSDIR"/proxy-groups.yaml
msg_alert "\033[32m添加成功!\033[0m"
msg_alert "\033[32m$OVR_GROUPS_ADD_OK\033[0m"
}
set_group_add() {
comp_box "\033[36m请选择想要将本策略添加到的策略组\033[0m" \
"\033[32m如需添加到多个策略组,请一次性输入多个数字并用空格隔开\033[0m"
comp_box "\033[36m$OVR_PROXIES_ADD_HINT\033[0m" \
"\033[32m$OVR_PROXIES_MULTI_HINT\033[0m"
printf '%s\n' "$proxy_group" |
awk -F '#' '{for (i = 1; i <= NF; i++) print i") " $i}' |
while IFS= read -r line; do
content_line "$line"
done
content_line ""
content_line "0) 跳过添加"
content_line "$OVR_GROUPS_SKIP"
separator_line "="
read -r -p "请输入对应数字(多个用空格分隔)> " char
read -r -p "$OVR_PROMPT" char
case "$char" in
"" | 0) ;;
*)
@@ -317,21 +317,21 @@ EOF
}
while true; do
comp_box "\033[33m你可以在这里快捷管理自定义策略组\033[0m" \
"\033[36m如需修改或批量操作,请手动编辑:$YAMLSDIR/proxy-groups.yaml\033[0m"
btm_box "1) 添加自定义策略组" \
"2) 查看自定义策略组" \
"3) 清空自定义策略组" \
comp_box "\033[33m$OVR_GROUPS_MENU_HINT\033[0m" \
"\033[36m$OVR_GROUPS_MANUAL\033[0m"
btm_box "$OVR_GROUPS_ADD" \
"$OVR_GROUPS_VIEW" \
"$OVR_GROUPS_CLEAR" \
"" \
"0) 返回上级菜单"
read -r -p "请输入对应数字> " num
"$OVR_BACK"
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0)
break
;;
1)
group_type="select url-test fallback load-balance"
group_type_cn="手动选择 自动选择 故障转移 负载均衡"
group_type_cn="$OVR_GROUP_TYPE_CN"
proxy_group="$(cat "$YAMLSDIR"/proxy-groups.yaml "$YAMLSDIR"/config.yaml 2>/dev/null | sed "/#自定义策略组开始/,/#自定义策略组结束/d" | grep -Ev '^#' | grep -o '\- name:.*' | sed 's/#.*//' | sed 's/- name: /#/g' | tr -d '\n' | sed 's/#//')"
set_group_type
;;
@@ -343,9 +343,9 @@ EOF
echo "==========================================================="
;;
3)
comp_box "是否确认清空全部自定义策略组?"
btm_box "1) 是" \
"0) 否,返回上级菜单"
comp_box "$OVR_GROUPS_CLEAR_CONFIRM"
btm_box "$OVR_CONFIRM_YES" \
"$OVR_CONFIRM_NO"
read -r -p "$COMMON_INPUT> " res
if [ "$res" = "1" ]; then
if echo '#用于添加自定义策略组' >"$YAMLSDIR"/proxy-groups.yaml; then
@@ -367,16 +367,16 @@ setproxies() {
set_proxy_type() {
while true; do
comp_box "\033[33m注意\n节点格式必须是单行、不包括括号、“name:”为开头,例如:\033[0m" \
comp_box "\033[33m$OVR_PROXIES_WARN1\033[0m" \
"\033[36m【name: \"test\", server: 192.168.1.1, port: 12345, type: socks5, udp: true】\033[0m" \
"更多写法请参考:\033[32mhttps://juewuy.github.io/\033[0m"
btm_box "\033[36m请直接输入自定义节点\033[0m" \
"或输入 0 返回上级菜单"
read -r -p "请输入> " proxy_state_set
"$OVR_PROXIES_WARN2"
btm_box "\033[36m$OVR_PROXIES_INPUT\033[0m" \
"$OVR_CONFIRM_NO"
read -r -p "$OVR_PROMPT" proxy_state_set
if [ "$proxy_state_set" = 0 ]; then
break
elif echo "$proxy_state_set" | grep -q "#"; then
msg_alert "\033[33m绝对禁止包含【#】号!\033[0m"
msg_alert "\033[33m$OVR_PROXIES_BLOCK_HASH\033[0m"
elif echo "$proxy_state_set" | grep -Eq "^name:"; then
set_group_add
else
@@ -386,17 +386,17 @@ setproxies() {
}
set_group_add() {
comp_box "\033[36m请选择想要将节点添加到的策略组\033[0m" \
"\033[32m如需添加到多个策略组请一次性输入多个数字并用空格隔开\033[0m" \
"\033[33m如需自定义策略组请先使用【管理自定义策略组功能】添加\033[0m"
comp_box "\033[36m$OVR_PROXIES_ADD_HINT\033[0m" \
"\033[32m$OVR_PROXIES_MULTI_HINT\033[0m" \
"\033[33m$OVR_PROXIES_GROUP_HINT\033[0m"
printf '%s\n' "$proxy_group" |
awk -F '#' '{for (i = 1; i <= NF; i++) print i") " $i}' |
while IFS= read -r line; do
content_line "$line"
done
btm_box "" \
"0) 返回上级菜单"
read -r -p "请输入对应数字(多个用空格分隔)> " char
"$OVR_BACK"
read -r -p "$OVR_PROMPT" char
case "$char" in
"" | 0) ;;
*)
@@ -406,7 +406,7 @@ setproxies() {
done
if [ -n "$rule_group_add" ]; then
echo "- {$proxy_state_set}$rule_group_add" >>"$YAMLSDIR"/proxies.yaml
msg_alert "\033[32m添加成功!\033[0m"
msg_alert "\033[32m$OVR_PROXIES_ADD_OK\033[0m"
unset rule_group_add
else
errornum
@@ -416,15 +416,15 @@ setproxies() {
}
while true; do
comp_box "\033[33m你可以在这里快捷管理自定义节点\033[0m" \
"\033[36m如需批量操作,请手动编辑:$YAMLSDIR/proxies.yaml\033[0m"
btm_box "1) 添加自定义节点" \
"2) 管理自定义节点" \
"3) 清空自定义节点" \
"4) 配置节点绕过: \033[36m$proxies_bypass\033[0m" \
comp_box "\033[33m$OVR_PROXIES_MENU_HINT\033[0m" \
"\033[36m$OVR_PROXIES_MANUAL\033[0m"
btm_box "$OVR_PROXIES_ADD" \
"$OVR_PROXIES_MANAGE" \
"$OVR_PROXIES_CLEAR" \
"$OVR_PROXIES_BYPASS \033[36m$proxies_bypass\033[0m" \
"" \
"0) 返回上级菜单"
read -r -p "请输入对应数字> " num
"$OVR_BACK"
read -r -p "$OVR_INPUT_NUM" num
case "$num" in
"" | 0)
break
@@ -437,8 +437,8 @@ setproxies() {
2)
sed -i '/^ *$/d' "$YAMLSDIR"/proxies.yaml 2>/dev/null
if [ -s "$YAMLSDIR"/proxies.yaml ]; then
comp_box "\033[33m输入节点对应数字可以移除对应节点\033[0m" \
"当前已添加的自定义节点为:"
comp_box "\033[33m$OVR_PROXIES_EXIST_HINT\033[0m" \
"$OVR_PROXIES_EXIST_TITLE"
grep -Ev '^#' "$YAMLSDIR/proxies.yaml" |
awk -F '[,}]' '{print NR") " $1 " " $NF}' |
sed 's/- {//g' |
@@ -446,8 +446,8 @@ setproxies() {
content_line "$line"
done
btm_box "" \
"0) 返回上级菜单"
read -r -p "请输入对应数字> " num
"$OVR_BACK"
read -r -p "$OVR_INPUT_NUM" num
if [ "$num" = 0 ]; then
continue
elif [ "$num" -le $(cat "$YAMLSDIR"/proxies.yaml | grep -Ev '^#' | wc -l) ]; then
@@ -460,13 +460,13 @@ setproxies() {
errornum
fi
else
msg_alert "请先添加自定义节点!"
msg_alert "$OVR_PROXIES_NO_PROXY"
fi
;;
3)
comp_box "是否确认清空全部自定义节点?"
btm_box "1) 是" \
"0) 否,返回上级菜单"
comp_box "$OVR_PROXIES_CLEAR_CONFIRM"
btm_box "$OVR_CONFIRM_YES" \
"$OVR_CONFIRM_NO"
read -r -p "$COMMON_INPUT> " res
if [ "$res" = "1" ]; then
if sed -i '/^\s*[^#]/d' "$YAMLSDIR"/proxies.yaml 2>/dev/null; then
@@ -480,12 +480,12 @@ setproxies() {
;;
4)
if [ "$proxies_bypass" = "OFF" ]; then
comp_box "\033[33m本功能会自动将当前配置文件中的节点域名或IP设置为直连规则以防止出现双重流量\033[0m" \
"\033[33m请确保下游设备使用的节点与ShellCrash中使用的节点相同否则无法生效\033[0m" \
comp_box "\033[33m$OVR_PROXIES_BYPASS_WARN1\033[0m" \
"\033[33m$OVR_PROXIES_BYPASS_WARN2\033[0m" \
"" \
"是否确定启用节点绕过:"
btm_box "1) 是" \
"0) 否,返回上级菜单"
"$OVR_PROXIES_BYPASS_PROMPT"
btm_box "$OVR_CONFIRM_YES" \
"$OVR_CONFIRM_NO"
read -r -p "$COMMON_INPUT> " res
if [ "$res" = "1" ]; then
proxies_bypass=ON
@@ -527,24 +527,24 @@ EOF
#listeners:
EOF
comp_box "\033[32m已经创建自定义设定文件:$YAMLSDIR/user.yaml \033[0m" \
"\033[33m可用于编写自定义的DNS等功能\033[0m" \
comp_box "\033[32m$OVR_ADV_USER_CREATED1\033[0m" \
"\033[33m$OVR_ADV_USER_CREATED2\033[0m" \
"" \
"\033[32m已经创建自定义功能文件:$YAMLSDIR/others.yaml \033[0m" \
"\033[33m可用于编写自定义的锚点、入站、proxy-providers、rule-set、sub-rules、script等功能\033[0m"
"\033[32m$OVR_ADV_USER_CREATED3\033[0m" \
"\033[33m$OVR_ADV_USER_CREATED4\033[0m"
btm_box "Windows下请使用\033[33mWinSCP软件\033[0m进行编辑\033[0m" \
"MacOS下请使用\033[33mSecureFX软件\033[0m进行编辑\033[0m" \
"Linux可使用\033[33mvim\033[0m进行编辑路由设备若不显示中文请勿使用\033[0m"
btm_box "\033[33m$OVR_ADV_WIN\033[0m" \
"\033[33m$OVR_ADV_MAC\033[0m" \
"\033[33m$OVR_ADV_LIN\033[0m"
}
# s自定义singbox配置文件
set_singbox_adv() {
comp_box "支持覆盖脚本设置的模块有:\033[0m" \
comp_box "\033[33m$OVR_SING_TITLE1\033[0m" \
"\033[36mlog dns ntp certificate experimental\033[0m" \
"支持与内置功能合并(但不可冲突)的模块有:\033[0m" \
"\033[33m$OVR_SING_TITLE2\033[0m" \
"\033[36mendpoints inbounds outbounds providers route services\033[0m" \
"将相应json文件放入\033[33m$JSONSDIR\033[0m目录后即可在启动时自动加载" \
"$OVR_SING_TITLE3" \
"" \
"使用前请务必参考配置教程:\033[32;4m https://juewuy.github.io/nWTjEpkSK \033[0m"
"$OVR_SING_TITLE4"
}

View File

@@ -10,7 +10,7 @@ if [ -f "$PIDFILE" ]; then
PID="$(cat "$PIDFILE")"
if [ -n "$PID" ] && [ "$PID" -eq "$PID" ] 2>/dev/null; then
if kill -0 "$PID" 2>/dev/null || [ -d "/proc/$PID" ]; then
rm -d "$LOCKDIR" 2>/dev/null
rm -fr "$LOCKDIR" 2>/dev/null
exit 0
fi
else
@@ -27,4 +27,4 @@ else
start_legacy "$CRASHDIR/menus/bot_tg.sh" "$1"
fi
rm -d "$LOCKDIR" 2>/dev/null
rm -fr "$LOCKDIR" 2>/dev/null