14 Commits

Author SHA1 Message Date
juewuy
49c509d6ef ~1.9.5alpha13 pkg 2026-04-04 20:24:46 +08:00
juewuy
47c7331623 ~首次添加节点订阅时,不再显示生成选项 2026-04-04 20:23:33 +08:00
juewuy
987ef6ab22 ~优化提示 2026-04-04 20:17:56 +08:00
juewuy
2218161e8f ~修复多语言化导致的自动任务无法正确执行的bug 2026-04-04 20:10:43 +08:00
juewuy
74b304be6f ~修复singbox内核tun模式ipv6相关bug 2026-04-04 20:01:24 +08:00
juewuy
a968551912 ~i18n fix 2026-04-04 19:54:34 +08:00
juewuy
13fc116985 ~修复本地上传内核报错问题 2026-04-04 19:50:42 +08:00
juewuy
2e7d615f8a ~修复编码 2026-04-04 19:35:24 +08:00
juewuy
6b6740a725 ~多语言化优化 2026-04-04 19:21:04 +08:00
juewuy
5e7a46c378 ~修复自定义内核功能异常,并增加Dustinwin内核库 2026-04-04 19:11:15 +08:00
juewuy
c304ec8271 ~修复多语言化导致的一系列显示错误 2026-04-04 18:44:47 +08:00
juewuy
cff3479213 ~bug fix 2026-04-04 12:05:10 +08:00
juewuy
5b94bce400 ~适配oix 2026-04-04 12:02:04 +08:00
juewuy
08e785dc2d ~增加ipv6host获取的fallback 2026-04-04 10:40:35 +08:00
31 changed files with 319 additions and 216 deletions

Binary file not shown.

View File

@@ -1,4 +1,4 @@
meta_v=v1.19.17 meta_v=v1.19.17
singboxr_v=1.13.0-alpha.27 singboxr_v=1.13.0-alpha.27
versionsh=1.9.5alpha12 versionsh=1.9.5alpha13
GeoIP_v=20251205 GeoIP_v=20251205

View File

@@ -4,7 +4,8 @@
SET_MENU_TITLE="功能设置菜单" SET_MENU_TITLE="功能设置菜单"
SET_MENU_REDIR="路由模式设置:" SET_MENU_REDIR="路由模式设置:"
SET_MENU_DNS="DNS设置 " SET_MENU_DNS="DNS设置 "
SET_MENU_FW_FILTER="透明路由流量过滤" SET_MENU_FW_FILTER="透明路由流量过滤"
SET_MENU_FW_FILTER_DESC="端口、设备、协议或列表"
SET_MENU_SKIP_CERT="跳过证书验证:" SET_MENU_SKIP_CERT="跳过证书验证:"
SET_MENU_SNIFFER="启用域名嗅探:" SET_MENU_SNIFFER="启用域名嗅探:"
SET_MENU_ADV_PORT="自定义端口及密钥" SET_MENU_ADV_PORT="自定义端口及密钥"

View File

@@ -1,4 +1,4 @@
GW_TITLE="访问与控制菜单" GW_TITLE="访问与控制菜单"
GW_WARN="注意:" GW_WARN="注意:"
GW_FW_VPS_HINT="如在vps运行还需在vps安全策略对相关端口同时放行" GW_FW_VPS_HINT="如在vps运行还需在vps安全策略对相关端口同时放行"
GW_FW_PORT_LIMIT="最多支持设置放行10个端口请先减少一些" GW_FW_PORT_LIMIT="最多支持设置放行10个端口请先减少一些"

View File

@@ -11,9 +11,11 @@ TOOLS_ENABLE="启用"
TOOLS_CONFIGURED="已配置" TOOLS_CONFIGURED="已配置"
TOOLS_SSH_ONLY_OPENWRT="此功能仅针对使用Openwrt系统的设备生效且不依赖服务" TOOLS_SSH_ONLY_OPENWRT="此功能仅针对使用Openwrt系统的设备生效且不依赖服务"
TOOLS_SSH_UNSUPPORTED_SYSTEM="本功能不支持红米AX6S等镜像化系统设备请勿尝试" TOOLS_SSH_UNSUPPORTED_SYSTEM="本功能不支持红米AX6S等镜像化系统设备请勿尝试"
TOOLS_SSH_PORT_ITEM="1) \033[32m修改\033[0m外网访问端口\033[36m$ssh_port\033[0m" TOOLS_SSH_PORT_ITEM_PREFIX="1) \033[32m修改\033[0m外网访问端口"
TOOLS_SSH_PORT_ITEM_SUFFIX=""
TOOLS_SSH_PASS_ITEM="2) \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)" TOOLS_SSH_PASS_ITEM="2) \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)"
TOOLS_SSH_TOGGLE_ITEM="3) \033[33m$ssh_ol\033[0m外网访问SSH" TOOLS_SSH_TOGGLE_ITEM_PREFIX="3) "
TOOLS_SSH_TOGGLE_ITEM_SUFFIX="外网访问SSH"
TOOLS_PROMPT_PORT="请输入端口号(1000-65535)> " TOOLS_PROMPT_PORT="请输入端口号(1000-65535)> "
TOOLS_WARN_COMPAT="本页工具可能无法兼容全部Linux设备请酌情使用" TOOLS_WARN_COMPAT="本页工具可能无法兼容全部Linux设备请酌情使用"
TOOLS_DISK_USAGE="磁盘占用/所在目录:" TOOLS_DISK_USAGE="磁盘占用/所在目录:"
@@ -21,10 +23,14 @@ TOOLS_MENU_TEST_ITEM="1) ShellCrash\033[33m测试菜单\033[0m"
TOOLS_MENU_GUIDE_ITEM="2) ShellCrash\033[32m新手引导\033[0m" TOOLS_MENU_GUIDE_ITEM="2) ShellCrash\033[32m新手引导\033[0m"
TOOLS_MENU_LOG_ITEM="3) \033[36m日志及推送工具\033[0m" TOOLS_MENU_LOG_ITEM="3) \033[36m日志及推送工具\033[0m"
TOOLS_MENU_SSH_ITEM="4) \033[32m配置\033[0m外网访问SSH" 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_UPDATE_ITEM_PREFIX="5) "
TOOLS_MENU_MI_AUTO_SSH_ITEM="6) 小米设备软固化SSH —— \033[$mi_mi_autoSSH_type \033[0m" TOOLS_MENU_MI_UPDATE_ITEM_SUFFIX="小米系统自动更新"
TOOLS_MENU_MI_TUN_FIX_ITEM="8) 小米设备Tun模块修复 —— \033[$mi_tunfix \033[0m" TOOLS_MENU_MI_AUTO_SSH_ITEM_PREFIX="6) 小米设备软固化SSH —— "
TOOLS_MI_UPDATE_MSG="已\033[33m$mi_update\033[0m小米路由器的自动更新如未生效请在官方APP中同步设置" TOOLS_MENU_MI_AUTO_SSH_ITEM_SUFFIX=""
TOOLS_MENU_MI_TUN_FIX_ITEM_PREFIX="8) 小米设备Tun模块修复 —— "
TOOLS_MENU_MI_TUN_FIX_ITEM_SUFFIX=""
TOOLS_MI_UPDATE_MSG_PREFIX="已"
TOOLS_MI_UPDATE_MSG_SUFFIX="小米路由器的自动更新如未生效请在官方APP中同步设置"
TOOLS_UNSUPPORTED_DEVICE="不支持的设备!" TOOLS_UNSUPPORTED_DEVICE="不支持的设备!"
TOOLS_FETCHING_SCRIPT="正在获取在线脚本......" TOOLS_FETCHING_SCRIPT="正在获取在线脚本......"
TOOLS_DOWNLOAD_FAIL="文件下载失败!" TOOLS_DOWNLOAD_FAIL="文件下载失败!"
@@ -46,16 +52,25 @@ TOOLS_AUTO_SSH_WARN2="如有问题请加群反馈:"
TOOLS_AUTO_SSH_PWD_HINT1="请输入需要还原的SSH密码不影响当前密码" TOOLS_AUTO_SSH_PWD_HINT1="请输入需要还原的SSH密码不影响当前密码"
TOOLS_AUTO_SSH_PWD_HINT2="(回车可跳过)" TOOLS_AUTO_SSH_PWD_HINT2="(回车可跳过)"
TOOLS_AUTO_SSH_INPUT="请输入> " TOOLS_AUTO_SSH_INPUT="请输入> "
TOOLS_LOG_TG="1) Telegram推送\t——\033[$stat_TG\033[0m" TOOLS_LOG_TG_PREFIX="1) Telegram推送\t——"
TOOLS_LOG_DEER="2) PushDeer推送\t——\033[$stat_Deer\033[0m" TOOLS_LOG_TG_SUFFIX=""
TOOLS_LOG_BARK="3) Bark推送-IOS\t——\033[$stat_bark\033[0m" TOOLS_LOG_DEER_PREFIX="2) PushDeer推送\t——"
TOOLS_LOG_PO="4) Passover推送\t——\033[$stat_Po\033[0m" TOOLS_LOG_DEER_SUFFIX=""
TOOLS_LOG_PP="5) PushPlus推送\t——\033[$stat_PP\033[0m" TOOLS_LOG_BARK_PREFIX="3) Bark推送-IOS\t——"
TOOLS_LOG_SYNO="6) SynoChat推送\t——\033[$stat_SynoChat\033[0m" TOOLS_LOG_BARK_SUFFIX=""
TOOLS_LOG_GOTIFY="7) Gotify推送\t ——\033[$stat_Gotify\033[0m" TOOLS_LOG_PO_PREFIX="4) Passover推送\t——"
TOOLS_LOG_PO_SUFFIX=""
TOOLS_LOG_PP_PREFIX="5) PushPlus推送\t——"
TOOLS_LOG_PP_SUFFIX=""
TOOLS_LOG_SYNO_PREFIX="6) SynoChat推送\t——"
TOOLS_LOG_SYNO_SUFFIX=""
TOOLS_LOG_GOTIFY_PREFIX="7) Gotify推送\t ——"
TOOLS_LOG_GOTIFY_SUFFIX=""
TOOLS_LOG_VIEW="a) 查看\033[36m运行日志\033[0m" TOOLS_LOG_VIEW="a) 查看\033[36m运行日志\033[0m"
TOOLS_LOG_TASK="b) 推送任务日志\t——\033[$stat_task\033[0m" TOOLS_LOG_TASK_PREFIX="b) 推送任务日志\t——"
TOOLS_LOG_DEVICE="c) 设置设备名称\t——\033[$device_s\033[0m" TOOLS_LOG_TASK_SUFFIX=""
TOOLS_LOG_DEVICE_PREFIX="c) 设置设备名称\t——"
TOOLS_LOG_DEVICE_SUFFIX=""
TOOLS_LOG_CLEAR="d) 清空日志文件" TOOLS_LOG_CLEAR="d) 清空日志文件"
TOOLS_CONFIRM_CLOSE_TG="是否确认关闭TG日志推送" TOOLS_CONFIRM_CLOSE_TG="是否确认关闭TG日志推送"
TOOLS_CONFIRM_CLOSE_DEER="是否确认关闭PushDeer日志推送" TOOLS_CONFIRM_CLOSE_DEER="是否确认关闭PushDeer日志推送"
@@ -120,17 +135,22 @@ TOOLS_PROXY_NOTE="注意依赖curl不支持wget且测试结果不保
TOOLS_PROXY_OK="连接成功!响应时间为:" TOOLS_PROXY_OK="连接成功!响应时间为:"
TOOLS_PROXY_TIMEOUT="连接超时!请重试或检查节点配置!" TOOLS_PROXY_TIMEOUT="连接超时!请重试或检查节点配置!"
TOOLS_DEBUG_WARN1="注意Debug运行均会停止原本的内核服务" TOOLS_DEBUG_WARN1="注意Debug运行均会停止原本的内核服务"
TOOLS_DEBUG_WARN2="后台运行日志地址:\033[32m$TMPDIR/debug.log\033[0m" TOOLS_DEBUG_WARN2_PREFIX="后台运行日志地址:"
TOOLS_DEBUG_WARN2_SUFFIX=""
TOOLS_DEBUG_WARN3="如长时间运行后台监测日志等级推荐error防止文件过大" TOOLS_DEBUG_WARN3="如长时间运行后台监测日志等级推荐error防止文件过大"
TOOLS_DEBUG_WARN4="你亦可通过:\033[33mcrash -s debug 'warning'\033[0m命令使用其他日志等级" TOOLS_DEBUG_WARN4="你亦可通过:\033[33mcrash -s debug 'warning'\033[0m命令使用其他日志等级"
TOOLS_DEBUG_ITEM_1="1) 仅测试\033[32m$config_tmp\033[0m配置文件可用性" TOOLS_DEBUG_ITEM_1_PREFIX="1) 仅测试"
TOOLS_DEBUG_ITEM_2="2) 前台运行\033[32m$config_tmp\033[0m配置文件不配置防火墙劫持(\033[33m使用Ctrl+C手动停止\033[0m)" TOOLS_DEBUG_ITEM_1_SUFFIX="配置文件可用性"
TOOLS_DEBUG_ITEM_2_PREFIX="2) 前台运行"
TOOLS_DEBUG_ITEM_2_SUFFIX="配置文件,不配置防火墙劫持(使用Ctrl+C手动停止)"
TOOLS_DEBUG_ITEM_3="3) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[31merror\033[0m" TOOLS_DEBUG_ITEM_3="3) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[31merror\033[0m"
TOOLS_DEBUG_ITEM_4="4) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[32minfo\033[0m" TOOLS_DEBUG_ITEM_4="4) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[32minfo\033[0m"
TOOLS_DEBUG_ITEM_5="5) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[33mdebug\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_6_PREFIX="6) 后台运行完整启动流程并配置防火墙劫持,且将错误日志打印到闪存:"
TOOLS_DEBUG_ITEM_6_SUFFIX=""
TOOLS_DEBUG_ITEM_8="8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程" TOOLS_DEBUG_ITEM_8="8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
TOOLS_DEBUG_ITEM_9="9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json" TOOLS_DEBUG_ITEM_9_PREFIX="9) 将"
TOOLS_DEBUG_ITEM_9_SUFFIX="下json文件合并为"
TOOLS_FLASH_WARN="频繁写入闪存会导致闪存寿命降低如非遇到会导致设备死机或重启的bug请勿使用此功能" TOOLS_FLASH_WARN="频繁写入闪存会导致闪存寿命降低如非遇到会导致设备死机或重启的bug请勿使用此功能"
TOOLS_FLASH_CONFIRM="是否确认启用此功能?" TOOLS_FLASH_CONFIRM="是否确认启用此功能?"
TOOLS_MERGE_OK="合并成功!" TOOLS_MERGE_OK="合并成功!"

View File

@@ -52,11 +52,6 @@ UPG_PAC_GUIDE_TEXT="PAC的使用教程请参考"
UPG_THANKS_PROJECTS="感谢以下项目及其开发者们的无私奉献!" UPG_THANKS_PROJECTS="感谢以下项目及其开发者们的无私奉献!"
UPG_THANKS_SPECIAL_TEXT="特别感谢:\033[36m所有帮助及赞助过此项目的同仁们\033[0m" UPG_THANKS_SPECIAL_TEXT="特别感谢:\033[36m所有帮助及赞助过此项目的同仁们\033[0m"
UPG_GETTING_UPDATE="正在检查更新......" 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_CUR_VER_TEXT="当前脚本版本为:"
UPG_SCRIPT_NEW_VER_TEXT="最新脚本版本为:" UPG_SCRIPT_NEW_VER_TEXT="最新脚本版本为:"
UPG_UPDATE_NOW_TEXT="立即更新" UPG_UPDATE_NOW_TEXT="立即更新"
@@ -68,8 +63,10 @@ UPG_CORETYPE_CONFIRM_TEXT="请确认该自定义内核的类型:"
UPG_CORE_SWITCH_KEEP_TEXT="是否保留相关数据库文件?" UPG_CORE_SWITCH_KEEP_TEXT="是否保留相关数据库文件?"
UPG_KEEP_TEXT="保留" UPG_KEEP_TEXT="保留"
UPG_NOT_KEEP_TEXT="不保留" UPG_NOT_KEEP_TEXT="不保留"
UPG_GETTING_CORE_TEXT="正在在线获取$crashcore核心文件......" UPG_GETTING_CORE_TEXT_PREFIX="正在在线获取"
UPG_CORE_DOWNLOAD_OK_TEXT="$crashcore核心下载成功" UPG_GETTING_CORE_TEXT_SUFFIX="核心文件......"
UPG_CORE_DOWNLOAD_OK_TEXT_PREFIX=""
UPG_CORE_DOWNLOAD_OK_TEXT_SUFFIX="核心下载成功!"
UPG_CORE_DOWNLOAD_FAIL_TEXT="核心文件下载失败!" UPG_CORE_DOWNLOAD_FAIL_TEXT="核心文件下载失败!"
UPG_CORE_DOWNLOAD_VERIFY_FAIL_TEXT="核心文件下载成功但校验失败" UPG_CORE_DOWNLOAD_VERIFY_FAIL_TEXT="核心文件下载成功但校验失败"
UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT="请尝试手动指定CPU版本" UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT="请尝试手动指定CPU版本"
@@ -86,6 +83,9 @@ UPG_CUSTOM_CORE_TASK_WARN="自定义内核已适配定时任务,但不支持
UPG_CUSTOM_CORE_NET_WARN="如遇到网络错误请先启动ShellCrash服务" UPG_CUSTOM_CORE_NET_WARN="如遇到网络错误请先启动ShellCrash服务"
UPG_CUSTOM_CORE_CURRENT="当前内核为:" UPG_CUSTOM_CORE_CURRENT="当前内核为:"
UPG_CUSTOM_CORE_SELECT="请选择需要使用的核心:" UPG_CUSTOM_CORE_SELECT="请选择需要使用的核心:"
UPG_CUSTOM_CORE_MENU_OFFICIAL="版本官方内核"
UPG_CUSTOM_CORE_MENU_ALPHA="版本内核支持Smart策略"
UPG_CUSTOM_CORE_MENU_MULTI="多版本内核"
UPG_CUSTOM_CORE_LINK_HINT="请输入自定义内核的链接地址" UPG_CUSTOM_CORE_LINK_HINT="请输入自定义内核的链接地址"
UPG_CUSTOM_CORE_LINK_HINT2="(必须是以.tar.gz、.upx或.gz结尾的压缩文件" UPG_CUSTOM_CORE_LINK_HINT2="(必须是以.tar.gz、.upx或.gz结尾的压缩文件"
UPG_CUSTOM_CORE_LINK_HINT3="或者输入 0 返回上级菜单" UPG_CUSTOM_CORE_LINK_HINT3="或者输入 0 返回上级菜单"
@@ -100,18 +100,23 @@ UPG_CORE_MENU_CURRENT="当前内核:"
UPG_CORE_MENU_SYS="当前系统处理器架构:" UPG_CORE_MENU_SYS="当前系统处理器架构:"
UPG_CORE_MENU_LOCAL_HINT="如需本地上传,请将.upx .gz .tar.gz文件上传至 /tmp 目录后重新运行crash命令" UPG_CORE_MENU_LOCAL_HINT="如需本地上传,请将.upx .gz .tar.gz文件上传至 /tmp 目录后重新运行crash命令"
UPG_CORE_MENU_SELECT="请选择需要使用的核心版本:" 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_1_PREFIX="1) \033[43;30mMihomo\033[0m\033[32m"
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_1_SUFFIX=" \033[32m原meta内核支持全面\033[0m \033[33m占用略高\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_2_PREFIX="2) \033[43;30mSingBoxR\033[0m\033[32m"
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_2_SUFFIX=" \033[32m支持全面\033[0m \033[33m使用reF1nd增强分支\033[0m"
UPG_CORE_MENU_5="5) 切换版本分支及压缩方式:\033[32m$zip_type\033[0m" UPG_CORE_MENU_3_PREFIX="3) \033[43;30mSingBox\033[0m\033[32m"
UPG_CORE_MENU_6="6) \033[36m使用自定义内核\033[0m $custcore" UPG_CORE_MENU_3_SUFFIX=" \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
UPG_CORE_MENU_4_PREFIX="4) \033[43;30mClash\033[0m\033[32m"
UPG_CORE_MENU_4_SUFFIX=" \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
UPG_CORE_MENU_5_PREFIX="5) 切换版本分支及压缩方式:\033[32m"
UPG_CORE_MENU_5_SUFFIX="\033[0m"
UPG_CORE_MENU_6_PREFIX="6) \033[36m使用自定义内核\033[0m "
UPG_CORE_MENU_6_SUFFIX=""
UPG_CORE_MENU_7="7) \033[32m更新当前内核\033[0m" UPG_CORE_MENU_7="7) \033[32m更新当前内核\033[0m"
UPG_CORE_MENU_9="9) 手动指定处理器架构" UPG_CORE_MENU_9="9) 手动指定处理器架构"
UPG_GEO_GETTING="正在从服务器获取数据库文件......" UPG_GEO_GETTING="正在从服务器获取数据库文件......"
UPG_GEO_FAIL="文件下载失败!" UPG_GEO_OK_PREFIX=""
UPG_GEO_EXTRACT_FAIL="文件解压失败" UPG_GEO_OK_SUFFIX="数据库文件下载成功"
UPG_GEO_OK="$geotype数据库文件下载成功"
UPG_GEO_LINKING="正在获取数据库文件......" UPG_GEO_LINKING="正在获取数据库文件......"
UPG_GEO_FINDING="正在查找可更新的数据库文件......" UPG_GEO_FINDING="正在查找可更新的数据库文件......"
UPG_GEO_SELECT="请选择需要更新的数据库文件:" UPG_GEO_SELECT="请选择需要更新的数据库文件:"
@@ -126,20 +131,21 @@ UPG_GEO_LOCAL_ONLY2="仅限SingBox-srs"
UPG_GEO_LOCAL_ONLY3="仅限Mihomo-mrs" UPG_GEO_LOCAL_ONLY3="仅限Mihomo-mrs"
UPG_GEO_LOCAL_ONLY4="仅限Clash-GeoIP" UPG_GEO_LOCAL_ONLY4="仅限Clash-GeoIP"
UPG_GEO_CUSTOM_LINK="自定义数据库链接" UPG_GEO_CUSTOM_LINK="自定义数据库链接"
UPG_GEO_CLEAN_HINT1="这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件" UPG_GEO_CLEAN_HINT1_PREFIX="这将清理"
UPG_GEO_CLEAN_HINT1_SUFFIX="目录及/ruleset目录下所有数据库文件"
UPG_GEO_CLEAN_HINT2="清理后启动服务即可自动下载所需文件" UPG_GEO_CLEAN_HINT2="清理后启动服务即可自动下载所需文件"
UPG_GEO_CLEAN_CONFIRM="确认清理" UPG_GEO_CLEAN_CONFIRM="确认清理"
UPG_GEO_CLEAN_OK="所有数据库文件均已清理!" UPG_GEO_CLEAN_OK="所有数据库文件均已清理!"
UPG_DB_GETTING="正在连接服务器获取安装文件......" UPG_DB_GETTING="正在连接服务器获取安装文件......"
UPG_DB_DOWNLOAD_OK="下载成功,正在解压文件......" UPG_DB_DOWNLOAD_OK="下载成功,正在解压文件......"
UPG_DB_EXTRACT_FAIL="文件解压失败!"
UPG_DB_OK="面板安装成功!" UPG_DB_OK="面板安装成功!"
UPG_DB_REFRESH_HINT="如未生效请使用【Ctrl+F5】强制刷新浏览器" UPG_DB_REFRESH_HINT="如未生效请使用【Ctrl+F5】强制刷新浏览器"
UPG_DB_INSTALLED="检测到已经安装过本地面板" UPG_DB_INSTALLED="检测到已经安装过本地面板"
UPG_DB_UPGRADE="升级/覆盖安装" UPG_DB_UPGRADE="升级/覆盖安装"
UPG_DB_CANCEL="安装已取消" UPG_DB_CANCEL="安装已取消"
UPG_DB_DIR_SELECT="请选择面板安装目录:" UPG_DB_DIR_SELECT="请选择面板安装目录:"
UPG_DB_DIR_1="1) 在${CRASHDIR}/ui目录安装" UPG_DB_DIR_1_PREFIX="1) 在"
UPG_DB_DIR_1_SUFFIX="/ui目录安装"
UPG_DB_DIR_2="2) 在/www/clash目录安装" UPG_DB_DIR_2="2) 在/www/clash目录安装"
UPG_DB_TITLE="安装 dashboard 管理面板到本地" UPG_DB_TITLE="安装 dashboard 管理面板到本地"
UPG_DB_TITLE2="打开管理面板的速度更快且更稳定" UPG_DB_TITLE2="打开管理面板的速度更快且更稳定"
@@ -156,8 +162,6 @@ UPG_DB_UNINSTALL="9) \033[31m卸载本地面板\033[0m"
UPG_DB_UNINSTALL_CONFIRM="是否卸载本地面板?" UPG_DB_UNINSTALL_CONFIRM="是否卸载本地面板?"
UPG_DB_UNINSTALL_YES="1) 确认卸载" UPG_DB_UNINSTALL_YES="1) 确认卸载"
UPG_DB_UNINSTALL_OK="面板已经卸载!" UPG_DB_UNINSTALL_OK="面板已经卸载!"
UPG_CRT_DB_GETTING="正在连接服务器获取安装文件......"
UPG_CRT_DB_DOWNLOAD_FAIL="文件下载失败!"
UPG_CRT_DB_OK="证书安装成功!" UPG_CRT_DB_OK="证书安装成功!"
UPG_CRT_TITLE1="安装/更新本地根证书文件ca-certificates.crt" UPG_CRT_TITLE1="安装/更新本地根证书文件ca-certificates.crt"
UPG_CRT_TITLE2="用于解决证书校验错误x509报错等问题" UPG_CRT_TITLE2="用于解决证书校验错误x509报错等问题"
@@ -205,15 +209,18 @@ UPG_THANKS_ITEM_REF1ND_URL="项目地址https://github.com/reF1nd/sing-box"
UPG_THANKS_ITEM_DUSTIN="DustinWin 开发DustinWin" UPG_THANKS_ITEM_DUSTIN="DustinWin 开发DustinWin"
UPG_THANKS_ITEM_DUSTIN_URL="开发者地址https://github.com/DustinWin" UPG_THANKS_ITEM_DUSTIN_URL="开发者地址https://github.com/DustinWin"
UPG_CORE_GET_LINK_TITLE="正在获取内核文件链接......" UPG_CORE_GET_LINK_TITLE="正在获取内核文件链接......"
UPG_CUSTOM_CORE_CURRENT_TEXT="当前内核为:"
UPG_CUSTOM_CORE_NOTE1="不支持Gvisor、Tailscale、Wireguard、NaiveProxy" 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_PREFIX="1) \033[43;30mMihomo\033[0m\033[32m"
UPG_CORE_V1_SUFFIX=" \033[32m原meta内核支持全面\033[0m \033[33m占用略高\033[0m"
UPG_CORE_V1_DOC="说明文档:\033[36;4mhttps://wiki.metacubex.one\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_PREFIX="2) \033[43;30mSingBoxR\033[0m\033[32m"
UPG_CORE_V2_SUFFIX=" \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_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_PREFIX="3) \033[43;30mSingBox\033[0m\033[32m"
UPG_CORE_V3_SUFFIX=" \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
UPG_CORE_V3_DOC="说明文档:\033[36;4mhttps://sing-box.sagernet.org\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_PREFIX="4) \033[43;30mClash\033[0m\033[32m"
UPG_CORE_V4_SUFFIX=" \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
UPG_CORE_V4_DOC="说明文档:\033[36;4mhttps://lancellc.gitbook.io\033[0m" UPG_CORE_V4_DOC="说明文档:\033[36;4mhttps://lancellc.gitbook.io\033[0m"
UPG_CORE_ASUS_WARN="Meta内核使用的GeoSite.dat数据库在华硕设备存在被系统误删的问题可能无法使用!" UPG_CORE_ASUS_WARN="Meta内核使用的GeoSite.dat数据库在华硕设备存在被系统误删的问题可能无法使用!"
UPG_GEO_FIND_TITLE="正在查找可更新的数据库文件......" UPG_GEO_FIND_TITLE="正在查找可更新的数据库文件......"
@@ -231,16 +238,16 @@ UPG_GEO_ITEM6="6) Singbox-srs数据库常用包约0.8mb,非必要勿用)"
UPG_GEO_ITEM8="8) \033[36m自定义数据库文件\033[0m" UPG_GEO_ITEM8="8) \033[36m自定义数据库文件\033[0m"
UPG_GEO_ITEM9="9) \033[31m清理数据库文件\033[0m" UPG_GEO_ITEM9="9) \033[31m清理数据库文件\033[0m"
UPG_GEO_CLEAN_PROMPT="确认清理" UPG_GEO_CLEAN_PROMPT="确认清理"
UPG_GEO_CLEAN_WARN="这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件" UPG_GEO_CLEAN_WARN_PREFIX="这将清理"
UPG_GEO_CLEAN_WARN_SUFFIX="目录及/ruleset目录下所有数据库文件"
UPG_GEO_CLEAN_WARN2="清理后启动服务即可自动下载所需文件" UPG_GEO_CLEAN_WARN2="清理后启动服务即可自动下载所需文件"
UPG_GEO_CLEANED="所有数据库文件均已清理!" UPG_GEO_CLEANED="所有数据库文件均已清理!"
UPG_DB_CONNECTING="正在连接服务器获取安装文件......" UPG_DB_CONNECTING="正在连接服务器获取安装文件......"
UPG_DB_DOWNLOAD_FAIL="文件下载失败!"
UPG_DB_EXTRACT_FAIL_TEXT="文件解压失败!"
UPG_DB_INSTALLED_HINT="检测到已经安装过本地面板" UPG_DB_INSTALLED_HINT="检测到已经安装过本地面板"
UPG_DB_INSTALL_CANCEL="安装已取消" UPG_DB_INSTALL_CANCEL="安装已取消"
UPG_DB_DIR_TITLE="请选择面板安装目录:" UPG_DB_DIR_TITLE="请选择面板安装目录:"
UPG_DB_DIR_1_TEXT="1) 在${CRASHDIR}/ui目录安装" UPG_DB_DIR_1_TEXT_PREFIX="1) 在"
UPG_DB_DIR_1_TEXT_SUFFIX="/ui目录安装"
UPG_DB_DIR_2_TEXT="2) 在/www/clash目录安装" UPG_DB_DIR_2_TEXT="2) 在/www/clash目录安装"
UPG_DB_INSTALL_TITLE="安装 dashboard 管理面板到本地" UPG_DB_INSTALL_TITLE="安装 dashboard 管理面板到本地"
UPG_DB_INSTALL_TITLE2="打开管理面板的速度更快且更稳定" UPG_DB_INSTALL_TITLE2="打开管理面板的速度更快且更稳定"
@@ -254,7 +261,6 @@ UPG_DB_UNINSTALL_PROMPT="是否卸载本地面板?"
UPG_DB_UNINSTALL_CONFIRM_TEXT="1) 确认卸载" UPG_DB_UNINSTALL_CONFIRM_TEXT="1) 确认卸载"
UPG_DB_UNINSTALLED="面板已经卸载!" UPG_DB_UNINSTALLED="面板已经卸载!"
UPG_CRT_CONNECTING="正在连接服务器获取安装文件......" UPG_CRT_CONNECTING="正在连接服务器获取安装文件......"
UPG_CRT_INSTALL_OK="证书安装成功!"
UPG_CRT_INSTALL_TITLE1="安装/更新本地根证书文件ca-certificates.crt" UPG_CRT_INSTALL_TITLE1="安装/更新本地根证书文件ca-certificates.crt"
UPG_CRT_INSTALL_TITLE2="用于解决证书校验错误x509报错等问题" UPG_CRT_INSTALL_TITLE2="用于解决证书校验错误x509报错等问题"
UPG_CRT_INSTALL_TITLE3="无上述问题的设备请勿使用!" UPG_CRT_INSTALL_TITLE3="无上述问题的设备请勿使用!"

View File

@@ -1,8 +1,12 @@
FWF_TITLE="流量过滤" FWF_TITLE="流量过滤"
FWF_ITEM_1="1) 过滤非常用端口: \033[36m$common_ports\033[0m ———用于过滤P2P流量" FWF_ITEM_1_PREFIX="1) 过滤非常用端口:\t"
FWF_ITEM_2="2) 过滤局域网设备: \033[36m$mac_return\033[0m ———使用黑/白名单进行过滤" FWF_ITEM_1_SUFFIX="—用于过滤P2P流量"
FWF_ITEM_3="3) 过滤QUIC协议 \033[36m$quic_rj\033[0m ———优化视频性能" FWF_ITEM_2_PREFIX="2) 过滤局域网设备:\t"
FWF_ITEM_4="4) 过滤CN_IP(4&6)列表:\033[36m$cn_ip_route\033[0m ———优化性能" FWF_ITEM_2_SUFFIX="—使用黑/白名单进行过滤"
FWF_ITEM_3_PREFIX="3) 过滤QUIC协议\t"
FWF_ITEM_3_SUFFIX="—优化视频性能"
FWF_ITEM_4_PREFIX="4) 过滤CN_IP(4&6)列表:"
FWF_ITEM_4_SUFFIX="—优化性能"
FWF_ITEM_5="5) 自定义透明路由ipv4网段适合vlan等复杂网络环境" FWF_ITEM_5="5) 自定义透明路由ipv4网段适合vlan等复杂网络环境"
FWF_ITEM_6="6) 自定义保留地址ipv4网段需要以保留地址为访问目标的环境" FWF_ITEM_6="6) 自定义保留地址ipv4网段需要以保留地址为访问目标的环境"
FWF_BACK="0) $COMMON_BACK" FWF_BACK="0) $COMMON_BACK"
@@ -21,7 +25,8 @@ FWF_PASS_WORD="不"
FWF_COMMON_NOTE="注意:\n" FWF_COMMON_NOTE="注意:\n"
FWF_MIX_NOTE="MIX模式下所有fake-ip来源的非常用端口流量不会被过滤" FWF_MIX_NOTE="MIX模式下所有fake-ip来源的非常用端口流量不会被过滤"
FWF_ALLOWED_PORTS="当前已放行端口:" FWF_ALLOWED_PORTS="当前已放行端口:"
FWF_PORT_MENU_1="1) 启用/关闭端口过滤: \t\033[36m$common_ports\033[0m" FWF_PORT_MENU_1_PREFIX="1) 启用/关闭端口过滤: \t"
FWF_PORT_MENU_1_SUFFIX=""
FWF_PORT_MENU_2="2) 添加放行端口" FWF_PORT_MENU_2="2) 添加放行端口"
FWF_PORT_MENU_3="3) 移除指定放行端口" FWF_PORT_MENU_3="3) 移除指定放行端口"
FWF_PORT_MENU_4="4) 重置默认放行端口" FWF_PORT_MENU_4="4) 重置默认放行端口"
@@ -76,7 +81,8 @@ FWF_FILTER_BLACK_DESC="仅列表内设备流量不经过内核"
FWF_FILTER_WHITE_DESC="仅列表内设备流量经过内核" FWF_FILTER_WHITE_DESC="仅列表内设备流量经过内核"
FWF_FILTER_EXISTED="当前已过滤设备为:" FWF_FILTER_EXISTED="当前已过滤设备为:"
FWF_FILTER_HEADER=" \033[36m设备mac/ip地址\033[0m \033[35m设备名称\033[0m" 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_SWITCH_PREFIX="1) 切换为"
FWF_FILTER_SWITCH_SUFFIX="模式"
FWF_FILTER_ADD_MAC="2) \033[32m添加指定设备mac地址\033[0m" FWF_FILTER_ADD_MAC="2) \033[32m添加指定设备mac地址\033[0m"
FWF_FILTER_ADD_IP="3) \033[32m添加指定设备IP地址网段\033[0m" FWF_FILTER_ADD_IP="3) \033[32m添加指定设备IP地址网段\033[0m"
FWF_FILTER_REMOVE="4) \033[36m移除指定设备\033[0m" FWF_FILTER_REMOVE="4) \033[36m移除指定设备\033[0m"

View File

@@ -1,6 +1,8 @@
# ===== 通用提示 ===== # ===== 通用提示 =====
MENU_RESTART_NOTICE="检测到配置变更,是否立即重启服务以应用新配置?" MENU_RESTART_NOTICE="检测到配置变更,是否立即重启服务以应用新配置?"
MENU_RESTART_NOW="立即重启"
MENU_RESTART_LATER="暂不重启"
MENU_PORT_CONFLICT_TITLE="检测到端口被以下进程占用!内核可能无法正常启动!" MENU_PORT_CONFLICT_TITLE="检测到端口被以下进程占用!内核可能无法正常启动!"
MENU_PORT_CONFLICT_HINT="请修改默认端口配置!" MENU_PORT_CONFLICT_HINT="请修改默认端口配置!"
@@ -13,6 +15,8 @@ MENU_CFG_LOADED_OK="配置文件加载完成!"
MENU_OVERRIDE_WARN="你已经禁用了配置文件覆写功能,这会导致大量脚本功能无法使用!" MENU_OVERRIDE_WARN="你已经禁用了配置文件覆写功能,这会导致大量脚本功能无法使用!"
MENU_OVERRIDE_ASK="是否取消禁用?" MENU_OVERRIDE_ASK="是否取消禁用?"
MENU_YES="是"
MENU_NO="否"
# ===== 欢迎与状态 ===== # ===== 欢迎与状态 =====
MENU_WELCOME="欢迎使用ShellCrash" MENU_WELCOME="欢迎使用ShellCrash"
@@ -37,6 +41,8 @@ MENU_TG_CHANNEL="TG频道"
# ===== /tmp 文件检测 ===== # ===== /tmp 文件检测 =====
MENU_TMP_CORE_FOUND="发现可用的内核文件:" MENU_TMP_CORE_FOUND="发现可用的内核文件:"
MENU_TMP_CORE_ASK="是否立即加载该内核(会停止当前服务)?" MENU_TMP_CORE_ASK="是否立即加载该内核(会停止当前服务)?"
MENU_LOAD_NOW="立即加载"
MENU_LOAD_LATER="暂不加载"
MENU_TMP_CFG_FOUND="发现内核配置文件:" MENU_TMP_CFG_FOUND="发现内核配置文件:"
MENU_TMP_CFG_ASK="是否立即加载为配置文件?" MENU_TMP_CFG_ASK="是否立即加载为配置文件?"

View File

@@ -10,7 +10,8 @@ OVR_PROMPT="请输入> "
OVR_GROUPS_CHOOSE_TYPE="请选择策略组的类型:" OVR_GROUPS_CHOOSE_TYPE="请选择策略组的类型:"
OVR_GROUP_TYPE_CN="手动选择 自动选择 故障转移 负载均衡" OVR_GROUP_TYPE_CN="手动选择 自动选择 故障转移 负载均衡"
OVR_WARN_1="此功能可能会导致严重问题!启用后脚本中大部分功能都将禁用!!!" OVR_WARN_1="此功能可能会导致严重问题!启用后脚本中大部分功能都将禁用!!!"
OVR_WARN_2="如果你不是非常了解$crashcore的运行机制切勿开启" OVR_WARN_2_PREFIX="如果你不是非常了解"
OVR_WARN_2_SUFFIX="的运行机制,切勿开启!"
OVR_WARN_3="继续后如出现任何问题,请务必自行解决,一切提问恕不受理!" OVR_WARN_3="继续后如出现任何问题,请务必自行解决,一切提问恕不受理!"
OVR_WARN_CONFIRM="1) 我确认遇到问题可以自行解决" OVR_WARN_CONFIRM="1) 我确认遇到问题可以自行解决"
OVR_CONFIRM_YES="1) 是" OVR_CONFIRM_YES="1) 是"

View File

@@ -4,7 +4,8 @@
SET_MENU_TITLE="Welcome to the Function Settings Menu:" SET_MENU_TITLE="Welcome to the Function Settings Menu:"
SET_MENU_REDIR="Routing Mode:" SET_MENU_REDIR="Routing Mode:"
SET_MENU_DNS="DNS Settings:" SET_MENU_DNS="DNS Settings:"
SET_MENU_FW_FILTER="Transparent Routing Traffic Filter" SET_MENU_FW_FILTER="Transparent Routing Traffic Filter:"
SET_MENU_FW_FILTER_DESC="ports, devices, protocols, or lists"
SET_MENU_SKIP_CERT="Skip Cert Verify:" SET_MENU_SKIP_CERT="Skip Cert Verify:"
SET_MENU_SNIFFER="Enable Sniff:" SET_MENU_SNIFFER="Enable Sniff:"
SET_MENU_ADV_PORT="Custom Ports and Secrets" SET_MENU_ADV_PORT="Custom Ports and Secrets"

View File

@@ -11,9 +11,11 @@ TOOLS_ENABLE="Enable"
TOOLS_CONFIGURED="Configured" TOOLS_CONFIGURED="Configured"
TOOLS_SSH_ONLY_OPENWRT="This feature only works on OpenWrt devices and does not depend on services" 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_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_PORT_ITEM_PREFIX="1) \033[32mChange\033[0m WAN SSH port:"
TOOLS_SSH_PORT_ITEM_SUFFIX=""
TOOLS_SSH_PASS_ITEM="2) \033[32mChange\033[0m SSH password (enter twice, then press Enter)" 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_SSH_TOGGLE_ITEM_PREFIX="3) "
TOOLS_SSH_TOGGLE_ITEM_SUFFIX=" WAN SSH access"
TOOLS_PROMPT_PORT="Please enter a port number (1000-65535)> " 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_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_DISK_USAGE="Disk usage / current directory:"
@@ -21,10 +23,14 @@ TOOLS_MENU_TEST_ITEM="1) ShellCrash \033[33mTest Menu\033[0m"
TOOLS_MENU_GUIDE_ITEM="2) ShellCrash \033[32mGetting Started\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_LOG_ITEM="3) \033[36mLogs and Push Tools\033[0m"
TOOLS_MENU_SSH_ITEM="4) \033[32mConfigure\033[0m WAN SSH access" 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_UPDATE_ITEM_PREFIX="5) "
TOOLS_MENU_MI_AUTO_SSH_ITEM="6) Xiaomi device SSH hardening —— \033[$mi_mi_autoSSH_type \033[0m" TOOLS_MENU_MI_UPDATE_ITEM_SUFFIX=" Xiaomi system auto-update"
TOOLS_MENU_MI_TUN_FIX_ITEM="8) Xiaomi device Tun module repair —— \033[$mi_tunfix \033[0m" TOOLS_MENU_MI_AUTO_SSH_ITEM_PREFIX="6) Xiaomi device SSH hardening —— "
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_MENU_MI_AUTO_SSH_ITEM_SUFFIX=""
TOOLS_MENU_MI_TUN_FIX_ITEM_PREFIX="8) Xiaomi device Tun module repair —— "
TOOLS_MENU_MI_TUN_FIX_ITEM_SUFFIX=""
TOOLS_MI_UPDATE_MSG_PREFIX="Xiaomi router auto-update has been "
TOOLS_MI_UPDATE_MSG_SUFFIX=". If it does not take effect, sync the setting in the official app!"
TOOLS_UNSUPPORTED_DEVICE="Unsupported device!" TOOLS_UNSUPPORTED_DEVICE="Unsupported device!"
TOOLS_FETCHING_SCRIPT="Fetching online script..." TOOLS_FETCHING_SCRIPT="Fetching online script..."
TOOLS_DOWNLOAD_FAIL="File download failed!" TOOLS_DOWNLOAD_FAIL="File download failed!"
@@ -46,16 +52,25 @@ 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_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_PWD_HINT2="(Press Enter to skip)"
TOOLS_AUTO_SSH_INPUT="Please enter> " TOOLS_AUTO_SSH_INPUT="Please enter> "
TOOLS_LOG_TG="1) Telegram push\t——\033[$stat_TG\033[0m" TOOLS_LOG_TG_PREFIX="1) Telegram push\t——"
TOOLS_LOG_DEER="2) PushDeer push\t——\033[$stat_Deer\033[0m" TOOLS_LOG_TG_SUFFIX=""
TOOLS_LOG_BARK="3) Bark push-IOS\t——\033[$stat_bark\033[0m" TOOLS_LOG_DEER_PREFIX="2) PushDeer push\t——"
TOOLS_LOG_PO="4) Passover push\t——\033[$stat_Po\033[0m" TOOLS_LOG_DEER_SUFFIX=""
TOOLS_LOG_PP="5) PushPlus push\t——\033[$stat_PP\033[0m" TOOLS_LOG_BARK_PREFIX="3) Bark push-IOS\t——"
TOOLS_LOG_SYNO="6) SynoChat push\t——\033[$stat_SynoChat\033[0m" TOOLS_LOG_BARK_SUFFIX=""
TOOLS_LOG_GOTIFY="7) Gotify push\t ——\033[$stat_Gotify\033[0m" TOOLS_LOG_PO_PREFIX="4) Passover push\t——"
TOOLS_LOG_PO_SUFFIX=""
TOOLS_LOG_PP_PREFIX="5) PushPlus push\t——"
TOOLS_LOG_PP_SUFFIX=""
TOOLS_LOG_SYNO_PREFIX="6) SynoChat push\t——"
TOOLS_LOG_SYNO_SUFFIX=""
TOOLS_LOG_GOTIFY_PREFIX="7) Gotify push\t ——"
TOOLS_LOG_GOTIFY_SUFFIX=""
TOOLS_LOG_VIEW="a) View \033[36mruntime logs\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_TASK_PREFIX="b) Push task logs\t——"
TOOLS_LOG_DEVICE="c) Set device name\t——\033[$device_s\033[0m" TOOLS_LOG_TASK_SUFFIX=""
TOOLS_LOG_DEVICE_PREFIX="c) Set device name\t——"
TOOLS_LOG_DEVICE_SUFFIX=""
TOOLS_LOG_CLEAR="d) Clear log files" TOOLS_LOG_CLEAR="d) Clear log files"
TOOLS_CONFIRM_CLOSE_TG="Are you sure you want to disable TG log push?" 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_DEER="Are you sure you want to disable PushDeer log push?"
@@ -120,17 +135,22 @@ TOOLS_PROXY_NOTE="Note: depends on curl (wget is not supported), and the test re
TOOLS_PROXY_OK="Connection successful! Response time: " TOOLS_PROXY_OK="Connection successful! Response time: "
TOOLS_PROXY_TIMEOUT="Connection timed out! Please retry or check the node configuration!" 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_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_WARN2_PREFIX="Background log path: "
TOOLS_DEBUG_WARN2_SUFFIX=""
TOOLS_DEBUG_WARN3="For long-running background monitoring, error is recommended as the log level to avoid oversized files!" 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_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_1_PREFIX="1) Only test the availability of the "
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_1_SUFFIX=" config file"
TOOLS_DEBUG_ITEM_2_PREFIX="2) Run the "
TOOLS_DEBUG_ITEM_2_SUFFIX=" config file in foreground without firewall hijacking (use Ctrl+C to stop manually)"
TOOLS_DEBUG_ITEM_3="3) Run the full startup flow in background with firewall hijacking, log level: \033[31merror\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_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_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_6_PREFIX="6) Run the full startup flow in background with firewall hijacking and print error logs to flash: "
TOOLS_DEBUG_ITEM_6_SUFFIX=""
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_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_DEBUG_ITEM_9_PREFIX="9) Merge the json files under "
TOOLS_DEBUG_ITEM_9_SUFFIX=" into "
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_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_FLASH_CONFIRM="Confirm enabling this feature?"
TOOLS_MERGE_OK="Merged successfully!" TOOLS_MERGE_OK="Merged successfully!"

View File

@@ -52,11 +52,6 @@ UPG_PAC_GUIDE_TEXT="PAC guide: "
UPG_THANKS_PROJECTS="Thanks to the following projects and developers!" UPG_THANKS_PROJECTS="Thanks to the following projects and developers!"
UPG_THANKS_SPECIAL_TEXT="Special thanks: \033[36mall contributors and sponsors!\033[0m" UPG_THANKS_SPECIAL_TEXT="Special thanks: \033[36mall contributors and sponsors!\033[0m"
UPG_GETTING_UPDATE="Checking updates..." 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_CUR_VER_TEXT="Current script version: "
UPG_SCRIPT_NEW_VER_TEXT="Latest script version: " UPG_SCRIPT_NEW_VER_TEXT="Latest script version: "
UPG_UPDATE_NOW_TEXT="Update now" UPG_UPDATE_NOW_TEXT="Update now"
@@ -68,8 +63,10 @@ UPG_CORETYPE_CONFIRM_TEXT="Please confirm custom core type:"
UPG_CORE_SWITCH_KEEP_TEXT="Keep related database files?" UPG_CORE_SWITCH_KEEP_TEXT="Keep related database files?"
UPG_KEEP_TEXT="Keep" UPG_KEEP_TEXT="Keep"
UPG_NOT_KEEP_TEXT="Do not keep" UPG_NOT_KEEP_TEXT="Do not keep"
UPG_GETTING_CORE_TEXT="Fetching $crashcore core files online..." UPG_GETTING_CORE_TEXT_PREFIX="Fetching "
UPG_CORE_DOWNLOAD_OK_TEXT="$crashcore core downloaded successfully!" UPG_GETTING_CORE_TEXT_SUFFIX=" core files online..."
UPG_CORE_DOWNLOAD_OK_TEXT_PREFIX=""
UPG_CORE_DOWNLOAD_OK_TEXT_SUFFIX=" core downloaded successfully!"
UPG_CORE_DOWNLOAD_FAIL_TEXT="Core file download failed!" 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_FAIL_TEXT="Core file downloaded, but verification failed"
UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT="Please try selecting a CPU version manually" UPG_CORE_DOWNLOAD_VERIFY_HINT_TEXT="Please try selecting a CPU version manually"
@@ -86,6 +83,9 @@ UPG_CUSTOM_CORE_TASK_WARN="Custom cores support scheduled tasks but do not suppo
UPG_CUSTOM_CORE_NET_WARN="If you encounter network errors, start the ShellCrash service first!" UPG_CUSTOM_CORE_NET_WARN="If you encounter network errors, start the ShellCrash service first!"
UPG_CUSTOM_CORE_CURRENT="Current core: " UPG_CUSTOM_CORE_CURRENT="Current core: "
UPG_CUSTOM_CORE_SELECT="Please choose the core you want to use:" UPG_CUSTOM_CORE_SELECT="Please choose the core you want to use:"
UPG_CUSTOM_CORE_MENU_OFFICIAL=" official core"
UPG_CUSTOM_CORE_MENU_ALPHA=" core (supports Smart strategy)"
UPG_CUSTOM_CORE_MENU_MULTI=" multi-version core"
UPG_CUSTOM_CORE_LINK_HINT="Please enter the custom core URL" 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_HINT2="(must end with .tar.gz, .upx, or .gz)"
UPG_CUSTOM_CORE_LINK_HINT3="Or enter 0 to return to the previous menu" UPG_CUSTOM_CORE_LINK_HINT3="Or enter 0 to return to the previous menu"
@@ -100,18 +100,23 @@ UPG_CORE_MENU_CURRENT="Current core: "
UPG_CORE_MENU_SYS="Current CPU architecture: " 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_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_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_1_PREFIX="1) \033[43;30mMihomo\033[0m: \033[32m"
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_1_SUFFIX=" \033[32m(full meta core) highly compatible\033[0m \033[33mmore resource usage\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_2_PREFIX="2) \033[43;30mSingBoxR\033[0m: \033[32m"
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_2_SUFFIX=" \033[32mfully featured\033[0m \033[33mreF1nd enhanced branch\033[0m"
UPG_CORE_MENU_5="5) Switch branch and compression method: \033[32m$zip_type\033[0m" UPG_CORE_MENU_3_PREFIX="3) \033[43;30mSingBox\033[0m: \033[32m"
UPG_CORE_MENU_6="6) \033[36mUse custom core\033[0m $custcore" UPG_CORE_MENU_3_SUFFIX=" \033[32mlower resource usage\033[0m \033[33mproviders are not supported\033[0m"
UPG_CORE_MENU_4_PREFIX="4) \033[43;30mClash\033[0m: \033[32m"
UPG_CORE_MENU_4_SUFFIX=" \033[32mlow resource usage\033[0m \033[33munsafe, maintenance stopped\033[0m"
UPG_CORE_MENU_5_PREFIX="5) Switch branch and compression method: \033[32m"
UPG_CORE_MENU_5_SUFFIX="\033[0m"
UPG_CORE_MENU_6_PREFIX="6) \033[36mUse custom core\033[0m "
UPG_CORE_MENU_6_SUFFIX=""
UPG_CORE_MENU_7="7) \033[32mUpdate current core\033[0m" UPG_CORE_MENU_7="7) \033[32mUpdate current core\033[0m"
UPG_CORE_MENU_9="9) Manually specify CPU architecture" UPG_CORE_MENU_9="9) Manually specify CPU architecture"
UPG_GEO_GETTING="Fetching database files from the server..." UPG_GEO_GETTING="Fetching database files from the server..."
UPG_GEO_FAIL="Download failed!" UPG_GEO_OK_PREFIX=""
UPG_GEO_EXTRACT_FAIL="Extraction failed!" UPG_GEO_OK_SUFFIX=" database file downloaded successfully!"
UPG_GEO_OK="$geotype database file downloaded successfully!"
UPG_GEO_LINKING="Fetching database files..." UPG_GEO_LINKING="Fetching database files..."
UPG_GEO_FINDING="Searching for updatable database files..." UPG_GEO_FINDING="Searching for updatable database files..."
UPG_GEO_SELECT="Please choose the database file to update:" UPG_GEO_SELECT="Please choose the database file to update:"
@@ -126,20 +131,21 @@ UPG_GEO_LOCAL_ONLY2="(SingBox-srs only)"
UPG_GEO_LOCAL_ONLY3="(Mihomo-mrs only)" UPG_GEO_LOCAL_ONLY3="(Mihomo-mrs only)"
UPG_GEO_LOCAL_ONLY4="(Clash-GeoIP only)" UPG_GEO_LOCAL_ONLY4="(Clash-GeoIP only)"
UPG_GEO_CUSTOM_LINK="Custom database link" UPG_GEO_CUSTOM_LINK="Custom database link"
UPG_GEO_CLEAN_HINT1="This will clean all database files under $CRASHDIR and /ruleset!" UPG_GEO_CLEAN_HINT1_PREFIX="This will clean all database files under "
UPG_GEO_CLEAN_HINT1_SUFFIX=" and /ruleset!"
UPG_GEO_CLEAN_HINT2="After cleaning, starting the service will automatically download the required files" UPG_GEO_CLEAN_HINT2="After cleaning, starting the service will automatically download the required files"
UPG_GEO_CLEAN_CONFIRM="Confirm cleanup" UPG_GEO_CLEAN_CONFIRM="Confirm cleanup"
UPG_GEO_CLEAN_OK="All database files have been cleaned!" UPG_GEO_CLEAN_OK="All database files have been cleaned!"
UPG_DB_GETTING="Connecting to the server to fetch installation files..." UPG_DB_GETTING="Connecting to the server to fetch installation files..."
UPG_DB_DOWNLOAD_OK="Download succeeded, extracting files..." UPG_DB_DOWNLOAD_OK="Download succeeded, extracting files..."
UPG_DB_EXTRACT_FAIL="Extraction failed!"
UPG_DB_OK="Panel installed successfully!" 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_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_INSTALLED="A local panel is already installed"
UPG_DB_UPGRADE="Upgrade / overwrite install" UPG_DB_UPGRADE="Upgrade / overwrite install"
UPG_DB_CANCEL="Installation cancelled" UPG_DB_CANCEL="Installation cancelled"
UPG_DB_DIR_SELECT="Please choose the panel install directory:" UPG_DB_DIR_SELECT="Please choose the panel install directory:"
UPG_DB_DIR_1="1) Install in ${CRASHDIR}/ui" UPG_DB_DIR_1_PREFIX="1) Install in "
UPG_DB_DIR_1_SUFFIX="/ui"
UPG_DB_DIR_2="2) Install in /www/clash" UPG_DB_DIR_2="2) Install in /www/clash"
UPG_DB_TITLE="Install the dashboard management panel locally" UPG_DB_TITLE="Install the dashboard management panel locally"
UPG_DB_TITLE2="The management panel opens faster and is more stable" UPG_DB_TITLE2="The management panel opens faster and is more stable"
@@ -156,8 +162,6 @@ UPG_DB_UNINSTALL="9) \033[31mUninstall local panel\033[0m"
UPG_DB_UNINSTALL_CONFIRM="Uninstall the local panel?" UPG_DB_UNINSTALL_CONFIRM="Uninstall the local panel?"
UPG_DB_UNINSTALL_YES="1) Confirm uninstall" UPG_DB_UNINSTALL_YES="1) Confirm uninstall"
UPG_DB_UNINSTALL_OK="Panel has been uninstalled!" 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_DB_OK="Certificate installed successfully!"
UPG_CRT_TITLE1="Install / update local root certificate file (ca-certificates.crt)" 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_TITLE2="Used to fix certificate verification errors, x509 errors, and similar issues"
@@ -205,15 +209,18 @@ UPG_THANKS_ITEM_REF1ND_URL="Project: https://github.com/reF1nd/sing-box"
UPG_THANKS_ITEM_DUSTIN="DustinWin Developer: DustinWin" UPG_THANKS_ITEM_DUSTIN="DustinWin Developer: DustinWin"
UPG_THANKS_ITEM_DUSTIN_URL="Developer: https://github.com/DustinWin" UPG_THANKS_ITEM_DUSTIN_URL="Developer: https://github.com/DustinWin"
UPG_CORE_GET_LINK_TITLE="Fetching core file links..." 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_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_PREFIX="1) \033[43;30mMihomo\033[0m: \033[32m"
UPG_CORE_V1_SUFFIX=" \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_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_PREFIX="2) \033[43;30mSingBoxR\033[0m: \033[32m"
UPG_CORE_V2_SUFFIX=" \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_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_PREFIX="3) \033[43;30mSingBox\033[0m: \033[32m"
UPG_CORE_V3_SUFFIX=" \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_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_PREFIX="4) \033[43;30mClash\033[0m: \033[32m"
UPG_CORE_V4_SUFFIX=" \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_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_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_FIND_TITLE="Searching for updatable database files..."
@@ -231,16 +238,16 @@ 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_ITEM8="8) \033[36mCustom database file\033[0m"
UPG_GEO_ITEM9="9) \033[31mClean database files\033[0m" UPG_GEO_ITEM9="9) \033[31mClean database files\033[0m"
UPG_GEO_CLEAN_PROMPT="Confirm cleanup" UPG_GEO_CLEAN_PROMPT="Confirm cleanup"
UPG_GEO_CLEAN_WARN="This will clean all database files under $CRASHDIR and /ruleset!" UPG_GEO_CLEAN_WARN_PREFIX="This will clean all database files under "
UPG_GEO_CLEAN_WARN_SUFFIX=" and /ruleset!"
UPG_GEO_CLEAN_WARN2="After cleanup, start the service to download the required files automatically" 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_GEO_CLEANED="All database files have been cleaned!"
UPG_DB_CONNECTING="Connecting to the server to fetch installation files..." 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_INSTALLED_HINT="A local panel is already installed"
UPG_DB_INSTALL_CANCEL="Installation cancelled" UPG_DB_INSTALL_CANCEL="Installation cancelled"
UPG_DB_DIR_TITLE="Please choose the panel install directory:" UPG_DB_DIR_TITLE="Please choose the panel install directory:"
UPG_DB_DIR_1_TEXT="1) Install in ${CRASHDIR}/ui" UPG_DB_DIR_1_TEXT_PREFIX="1) Install in "
UPG_DB_DIR_1_TEXT_SUFFIX="/ui"
UPG_DB_DIR_2_TEXT="2) Install in /www/clash" UPG_DB_DIR_2_TEXT="2) Install in /www/clash"
UPG_DB_INSTALL_TITLE="Install the dashboard management panel locally" 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_TITLE2="The management panel opens faster and is more stable"
@@ -254,7 +261,6 @@ UPG_DB_UNINSTALL_PROMPT="Uninstall the local panel?"
UPG_DB_UNINSTALL_CONFIRM_TEXT="1) Confirm uninstall" UPG_DB_UNINSTALL_CONFIRM_TEXT="1) Confirm uninstall"
UPG_DB_UNINSTALLED="Panel has been uninstalled!" UPG_DB_UNINSTALLED="Panel has been uninstalled!"
UPG_CRT_CONNECTING="Connecting to the server to fetch installation files..." 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_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_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_INSTALL_TITLE3="Do not use on devices without the above issues!"

View File

@@ -1,8 +1,12 @@
FWF_TITLE="Traffic Filter" 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_1_PREFIX="1) Filter Common ports: "
FWF_ITEM_2="2) Filter LAN devices: \t\033[36m$mac_return\033[0m\t--- use blacklist/whitelist filtering" FWF_ITEM_1_SUFFIX="--- filter P2P traffic"
FWF_ITEM_3="3) Filter QUIC protocol: \t\033[36m$quic_rj\033[0m\t--- improve video performance" FWF_ITEM_2_PREFIX="2) Filter LAN devices: "
FWF_ITEM_4="4) Filter CN_IP (4&6) list: \033[36m$cn_ip_route\033[0m\t--- improve performance" FWF_ITEM_2_SUFFIX="--- use black/white list"
FWF_ITEM_3_PREFIX="3) Filter QUIC protocol: "
FWF_ITEM_3_SUFFIX="--- improve video"
FWF_ITEM_4_PREFIX="4) Filter CN_IP list: "
FWF_ITEM_4_SUFFIX="--- improve performance"
FWF_ITEM_5="5) Custom transparent routing IPv4 subnet: suitable for vlan and other complex networks" 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_ITEM_6="6) Custom reserved-address IPv4 subnet: for environments that need reserved addresses as targets"
FWF_BACK="0) $COMMON_BACK" FWF_BACK="0) $COMMON_BACK"
@@ -21,7 +25,8 @@ FWF_PASS_WORD="not"
FWF_COMMON_NOTE="Note:\n" FWF_COMMON_NOTE="Note:\n"
FWF_MIX_NOTE="In MIX mode, non-common port traffic from fake-ip sources will not be filtered" 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_ALLOWED_PORTS="Currently allowed ports: "
FWF_PORT_MENU_1="1) Enable/disable port filtering: \t\033[36m$common_ports\033[0m" FWF_PORT_MENU_1_PREFIX="1) Enable/disable port filtering: \t"
FWF_PORT_MENU_1_SUFFIX=""
FWF_PORT_MENU_2="2) Add allowed port" FWF_PORT_MENU_2="2) Add allowed port"
FWF_PORT_MENU_3="3) Remove specified allowed port" FWF_PORT_MENU_3="3) Remove specified allowed port"
FWF_PORT_MENU_4="4) Reset default allowed ports" FWF_PORT_MENU_4="4) Reset default allowed ports"
@@ -76,7 +81,8 @@ 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_WHITE_DESC="Only the devices in the list pass through the core"
FWF_FILTER_EXISTED="Currently filtered devices:" FWF_FILTER_EXISTED="Currently filtered devices:"
FWF_FILTER_HEADER=" \033[36mDevice MAC/IP\033[0m \033[35mDevice name\033[0m" 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_SWITCH_PREFIX="1) Switch to "
FWF_FILTER_SWITCH_SUFFIX=" mode"
FWF_FILTER_ADD_MAC="2) \033[32mAdd specified device (MAC)\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_ADD_IP="3) \033[32mAdd specified device (IP/subnet)\033[0m"
FWF_FILTER_REMOVE="4) \033[36mRemove specified device\033[0m" FWF_FILTER_REMOVE="4) \033[36mRemove specified device\033[0m"

View File

@@ -1,6 +1,8 @@
# ===== Common Prompts ===== # ===== Common Prompts =====
MENU_RESTART_NOTICE="Changes have been detected. Please restart the service!" MENU_RESTART_NOTICE="Changes have been detected. Please restart the service!"
MENU_RESTART_NOW="Restart now"
MENU_RESTART_LATER="Not now"
MENU_PORT_CONFLICT_TITLE="The port is occupied by the following process. The core may fail to start!" MENU_PORT_CONFLICT_TITLE="The port is occupied by the following process. The core may fail to start!"
MENU_PORT_CONFLICT_HINT="Please modify the default port configuration!" MENU_PORT_CONFLICT_HINT="Please modify the default port configuration!"
@@ -13,6 +15,8 @@ MENU_CFG_LOADED_OK="Configuration file loaded successfully!"
MENU_OVERRIDE_WARN="You have disabled configuration overwrite. This will cause many features to be unavailable!" MENU_OVERRIDE_WARN="You have disabled configuration overwrite. This will cause many features to be unavailable!"
MENU_OVERRIDE_ASK="Cancel the disable setting?" MENU_OVERRIDE_ASK="Cancel the disable setting?"
MENU_YES="Yes"
MENU_NO="No"
# ===== Welcome & Status ===== # ===== Welcome & Status =====
MENU_WELCOME="Welcome to ShellCrash!" MENU_WELCOME="Welcome to ShellCrash!"
@@ -37,6 +41,8 @@ MENU_TG_CHANNEL="Telegram Channel: "
# ===== /tmp File Detection ===== # ===== /tmp File Detection =====
MENU_TMP_CORE_FOUND="Available core file found:" MENU_TMP_CORE_FOUND="Available core file found:"
MENU_TMP_CORE_ASK="Load this core file? (The current service will be stopped)" MENU_TMP_CORE_ASK="Load this core file? (The current service will be stopped)"
MENU_LOAD_NOW="Load now"
MENU_LOAD_LATER="Not now"
MENU_TMP_CFG_FOUND="Kernel configuration file found:" MENU_TMP_CFG_FOUND="Kernel configuration file found:"
MENU_TMP_CFG_ASK="Load as the configuration file? (1/0) > " MENU_TMP_CFG_ASK="Load as the configuration file? (1/0) > "

View File

@@ -10,7 +10,8 @@ OVR_PROMPT="Please enter> "
OVR_GROUPS_CHOOSE_TYPE="Please choose the proxy group type:" OVR_GROUPS_CHOOSE_TYPE="Please choose the proxy group type:"
OVR_GROUP_TYPE_CN="Manual Select Auto Select Failover Load Balance" 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_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_2_PREFIX="If you are not very familiar with how "
OVR_WARN_2_SUFFIX=" 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_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_WARN_CONFIRM="1) I confirm I can solve any problems myself"
OVR_CONFIRM_YES="1) Yes" OVR_CONFIRM_YES="1) Yes"

View File

@@ -3,6 +3,6 @@ load_lang() {
i18n=$(cat "$CRASHDIR"/configs/i18n.cfg 2>/dev/null) i18n=$(cat "$CRASHDIR"/configs/i18n.cfg 2>/dev/null)
[ -z "$i18n" ] && i18n=chs [ -z "$i18n" ] && i18n=chs
file="$CRASHDIR/lang/$i18n/$1.lang" i18n_file="$CRASHDIR/lang/$i18n/$1.lang"
[ -s "$file" ] && . "$file" [ -s "$i18n_file" ] && . "$i18n_file"
} }

View File

@@ -33,8 +33,8 @@ load_lang menu
checkrestart() { checkrestart() {
comp_box "\033[32m$MENU_RESTART_NOTICE\033[0m" comp_box "\033[32m$MENU_RESTART_NOTICE\033[0m"
btm_box "1) 立即重启" \ btm_box "1) $MENU_RESTART_NOW" \
"0) 暂不重启" "0) $MENU_RESTART_LATER"
read -r -p "$COMMON_INPUT> " res read -r -p "$COMMON_INPUT> " res
if [ "$res" = 1 ]; then if [ "$res" = 1 ]; then
start_service start_service
@@ -144,20 +144,21 @@ ckstatus() {
# 检查/tmp内核文件 # 检查/tmp内核文件
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do
comp_box "$MENU_TMP_CORE_FOUND \033[36m/tmp/$file\033[0m" \ local tmp_file="/tmp/$file"
comp_box "$MENU_TMP_CORE_FOUND \033[36m$tmp_file\033[0m" \
"$MENU_TMP_CORE_ASK" "$MENU_TMP_CORE_ASK"
btm_box "1) 立即加载" \ btm_box "1) $MENU_LOAD_NOW" \
"0) 暂不加载" "0) $MENU_LOAD_LATER"
read -r -p "$COMMON_INPUT> " res read -r -p "$COMMON_INPUT> " res
[ "$res" = 1 ] && { [ "$res" = 1 ] && {
zip_type=$(echo "$file" | grep -oE 'tar.gz$|upx$|gz$') zip_type=$(echo "$tmp_file" | grep -oE 'tar.gz$|upx$|gz$')
. "$CRASHDIR"/menus/9_upgrade.sh && setcoretype . "$CRASHDIR"/menus/9_upgrade.sh && setcoretype
. "$CRASHDIR"/libs/core_tools.sh && core_check "/tmp/$file" . "$CRASHDIR"/libs/core_tools.sh && core_check "$tmp_file"
if [ "$?" = 0 ] && [ -n "$crashcore" ]; then if [ "$?" = 0 ] && [ -n "$crashcore" ]; then
msg_alert "\033[32m$MENU_CORE_LOADED_OK\033[0m" msg_alert "\033[32m$MENU_CORE_LOADED_OK\033[0m"
switch_core switch_core
else else
rm -rf /tmp/"$file" rm -rf "$tmp_file"
msg_alert "\033[33m$MENU_CORE_LOADED_BAD\033[0m" \ msg_alert "\033[33m$MENU_CORE_LOADED_BAD\033[0m" \
"\033[33m$MENU_CORE_REMOVED\033[0m" "\033[33m$MENU_CORE_REMOVED\033[0m"
fi fi
@@ -166,17 +167,17 @@ ckstatus() {
# 检查/tmp配置文件 # 检查/tmp配置文件
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do
tmp_file=/tmp/$file local tmp_file="/tmp/$file"
comp_box "$MENU_TMP_CFG_FOUND\033[36m/tmp/$file\033[0m" \ comp_box "$MENU_TMP_CFG_FOUND\033[36m$tmp_file\033[0m" \
"$MENU_TMP_CFG_ASK" "$MENU_TMP_CFG_ASK"
btm_box "1) 立即加载" \ btm_box "1) $MENU_LOAD_NOW" \
"0) 暂不加载" "0) $MENU_LOAD_LATER"
read -p "$COMMON_INPUT> " res read -p "$COMMON_INPUT> " res
[ "$res" = 1 ] && { [ "$res" = 1 ] && {
if [ -n "$(echo /tmp/$file | grep -iE '.json$')" ]; then if [ -n "$(echo $tmp_file | grep -iE '.json$')" ]; then
mv -f /tmp/$file "$CRASHDIR"/jsons/config.json mv -f "$tmp_file" "$CRASHDIR"/jsons/config.json
else else
mv -f /tmp/$file "$CRASHDIR"/yamls/config.yaml mv -f "$tmp_file" "$CRASHDIR"/yamls/config.yaml
fi fi
msg_alert "\033[32m$MENU_CFG_LOADED_OK\033[0m " msg_alert "\033[32m$MENU_CFG_LOADED_OK\033[0m "
} }
@@ -186,8 +187,8 @@ ckstatus() {
[ "$disoverride" = "1" ] && { [ "$disoverride" = "1" ] && {
comp_box "\033[33m$MENU_OVERRIDE_WARN\033[0m" \ comp_box "\033[33m$MENU_OVERRIDE_WARN\033[0m" \
"$MENU_OVERRIDE_ASK" "$MENU_OVERRIDE_ASK"
btm_box "1) " \ btm_box "1) $MENU_YES" \
"0) " "0) $MENU_NO"
read -p "$COMMON_INPUT> " res read -p "$COMMON_INPUT> " res
[ "$res" = 1 ] && unset disoverride && setconfig disoverride [ "$res" = 1 ] && unset disoverride && setconfig disoverride
} }

View File

@@ -20,7 +20,7 @@ settings() {
comp_box "\033[30;47m$SET_MENU_TITLE\033[0m" comp_box "\033[30;47m$SET_MENU_TITLE\033[0m"
content_line "1) $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m" content_line "1) $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m"
content_line "2) $SET_MENU_DNS\t\033[36m$dns_mod\033[0m" content_line "2) $SET_MENU_DNS\t\033[36m$dns_mod\033[0m"
content_line "3) $SET_MENU_FW_FILTER" content_line "3) $SET_MENU_FW_FILTER\t$SET_MENU_FW_FILTER_DESC"
[ "$disoverride" != "1" ] && { [ "$disoverride" != "1" ] && {
content_line "4) $SET_MENU_SKIP_CERT\t\033[36m$skip_cert\033[0m" content_line "4) $SET_MENU_SKIP_CERT\t\033[36m$skip_cert\033[0m"
content_line "5) $SET_MENU_SNIFFER\t\033[36m$sniffer\033[0m" content_line "5) $SET_MENU_SNIFFER\t\033[36m$sniffer\033[0m"
@@ -265,6 +265,7 @@ set_redir_mod() {
[ -z "$firewall_area" ] && firewall_area=1 [ -z "$firewall_area" ] && firewall_area=1
[ "$firewall_area" = 4 ] && redir_mod="$MENU_PURE_MOD" [ "$firewall_area" = 4 ] && redir_mod="$MENU_PURE_MOD"
[ -z "$redir_mod" ] && redir_mod='Redir' [ -z "$redir_mod" ] && redir_mod='Redir'
[ -z "$vm_redir" ] && vm_redir='OFF'
firewall_area_dsc=$(echo "$SET_FW_AREA_DESC($bypass_host)" | cut -d'|' -f$firewall_area) firewall_area_dsc=$(echo "$SET_FW_AREA_DESC($bypass_host)" | cut -d'|' -f$firewall_area)
comp_box "\033[33m$SET_REDIR_RESTART_HINT\033[0m" \ comp_box "\033[33m$SET_REDIR_RESTART_HINT\033[0m" \
"$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m" "$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m"
@@ -550,7 +551,6 @@ set_adv_config() {
set_firewall_area() { set_firewall_area() {
while true; do while true; do
[ -z "$vm_redir" ] && vm_redir='OFF'
comp_box "\033[33m$FW_AREA_NOTE_1\033[0m" \ comp_box "\033[33m$FW_AREA_NOTE_1\033[0m" \
"\033[33m$FW_AREA_NOTE_2\033[0m" \ "\033[33m$FW_AREA_NOTE_2\033[0m" \
"" \ "" \

View File

@@ -122,8 +122,8 @@ task_add() {
;; ;;
[1-9] | [1-9][0-9]) [1-9] | [1-9][0-9])
if [ "$num" -le "$(echo "$list" | wc -l)" ]; then if [ "$num" -le "$(echo "$list" | wc -l)" ]; then
task_id=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}') task_id=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}')
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}') task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}')
task_type task_type
break break
else else
@@ -292,7 +292,7 @@ task_manager() {
fi fi
else else
task_des=$(echo "$task_txt" | awk '{print $2}') task_des=$(echo "$task_txt" | awk '{print $2}')
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m" comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m"
btm_box "1) $TASK5_EDIT_TASK" \ btm_box "1) $TASK5_EDIT_TASK" \
"2) $TASK5_DEL_TASK" \ "2) $TASK5_DEL_TASK" \
@@ -313,7 +313,7 @@ task_manager() {
common_success common_success
;; ;;
3) 3)
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL" eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL"
msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des$task_res\033[0m" msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des$task_res\033[0m"
;; ;;

View File

@@ -143,9 +143,9 @@ setproviders() {
content_line "d) $CORECFG_DEL_PROVIDER" content_line "d) $CORECFG_DEL_PROVIDER"
content_line "" content_line ""
content_line "\033[36m$CORECFG_MORE_CONFIG_HINT\033[0m" content_line "\033[36m$CORECFG_MORE_CONFIG_HINT\033[0m"
[ -n "$link" ] && [ -n "$2" ] &&
content_line "b) $CORECFG_GEN_LOCAL_ONE" content_line "b) $CORECFG_GEN_LOCAL_ONE"
echo "$link$link_uri" | grep -q '://' && echo "$2" | grep -q '://' &&
content_line "c) $CORECFG_GEN_ONLINE_ONE" content_line "c) $CORECFG_GEN_ONLINE_ONE"
echo "$link" | grep -q '^http' && echo "$link" | grep -q '^http' &&
content_line "e) $CORECFG_GET_ONLINE_DIRECT" content_line "e) $CORECFG_GET_ONLINE_DIRECT"

View File

@@ -19,9 +19,9 @@ ssh_tools() {
[ -z "$ssh_port" ] && ssh_port=10022 [ -z "$ssh_port" ] && ssh_port=10022
comp_box "\033[33m$TOOLS_SSH_ONLY_OPENWRT\033[0m" \ comp_box "\033[33m$TOOLS_SSH_ONLY_OPENWRT\033[0m" \
"\033[31m$TOOLS_SSH_UNSUPPORTED_SYSTEM\033[0m" "\033[31m$TOOLS_SSH_UNSUPPORTED_SYSTEM\033[0m"
btm_box "$TOOLS_SSH_PORT_ITEM" \ btm_box "${TOOLS_SSH_PORT_ITEM_PREFIX}\033[36m$ssh_port\033[0m${TOOLS_SSH_PORT_ITEM_SUFFIX}" \
"$TOOLS_SSH_PASS_ITEM" \ "$TOOLS_SSH_PASS_ITEM" \
"$TOOLS_SSH_TOGGLE_ITEM" \ "${TOOLS_SSH_TOGGLE_ITEM_PREFIX}\033[33m$ssh_ol\033[0m${TOOLS_SSH_TOGGLE_ITEM_SUFFIX}" \
"" \ "" \
"0) $COMMON_BACK \033[0m" "0) $COMMON_BACK \033[0m"
read -r -p "$COMMON_INPUT> " num read -r -p "$COMMON_INPUT> " num
@@ -88,9 +88,9 @@ tools() {
content_line "$TOOLS_MENU_GUIDE_ITEM" content_line "$TOOLS_MENU_GUIDE_ITEM"
content_line "$TOOLS_MENU_LOG_ITEM" content_line "$TOOLS_MENU_LOG_ITEM"
[ -f /etc/firewall.user ] && content_line "$TOOLS_MENU_SSH_ITEM" [ -f /etc/firewall.user ] && content_line "$TOOLS_MENU_SSH_ITEM"
[ -x /usr/sbin/otapredownload ] && content_line "$TOOLS_MENU_MI_UPDATE_ITEM" [ -x /usr/sbin/otapredownload ] && content_line "${TOOLS_MENU_MI_UPDATE_ITEM_PREFIX}\033[33m$mi_update\033[0m${TOOLS_MENU_MI_UPDATE_ITEM_SUFFIX}"
[ "$systype" = "mi_snapshot" ] && content_line "$TOOLS_MENU_MI_AUTO_SSH_ITEM" [ "$systype" = "mi_snapshot" ] && content_line "${TOOLS_MENU_MI_AUTO_SSH_ITEM_PREFIX}\033[$mi_mi_autoSSH_type \033[0m${TOOLS_MENU_MI_AUTO_SSH_ITEM_SUFFIX}"
[ "$systype" = "mi_snapshot" ] && content_line "$TOOLS_MENU_MI_TUN_FIX_ITEM" [ "$systype" = "mi_snapshot" ] && content_line "${TOOLS_MENU_MI_TUN_FIX_ITEM_PREFIX}\033[$mi_tunfix \033[0m${TOOLS_MENU_MI_TUN_FIX_ITEM_SUFFIX}"
btm_box "" \ btm_box "" \
"0) $COMMON_BACK" "0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num read -r -p "$COMMON_INPUT> " num
@@ -123,7 +123,8 @@ tools() {
sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root || sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root ||
echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
fi fi
msg_alert "\033[32m$TOOLS_MI_UPDATE_MSG" [ "$mi_update" = "$TOOLS_DISABLE" ] && mi_update=$TOOLS_ENABLE || mi_update=$TOOLS_DISABLE
msg_alert "\033[32m${TOOLS_MI_UPDATE_MSG_PREFIX}\033[33m$mi_update\033[0m${TOOLS_MI_UPDATE_MSG_SUFFIX}\033[0m"
fi fi
;; ;;
6) 6)
@@ -227,17 +228,17 @@ log_pusher() {
[ -n "$push_Gotify" ] && stat_Gotify=32mON || stat_Gotify=33mOFF [ -n "$push_Gotify" ] && stat_Gotify=32mON || stat_Gotify=33mOFF
[ "$task_push" = 1 ] && stat_task=32mON || stat_task=33mOFF [ "$task_push" = 1 ] && stat_task=32mON || stat_task=33mOFF
[ -n "$device_name" ] && device_s=32m$device_name || device_s=33m$COMMON_UNSET [ -n "$device_name" ] && device_s=32m$device_name || device_s=33m$COMMON_UNSET
comp_box "$TOOLS_LOG_TG" \ comp_box "${TOOLS_LOG_TG_PREFIX}\033[$stat_TG\033[0m${TOOLS_LOG_TG_SUFFIX}" \
"$TOOLS_LOG_DEER" \ "${TOOLS_LOG_DEER_PREFIX}\033[$stat_Deer\033[0m${TOOLS_LOG_DEER_SUFFIX}" \
"$TOOLS_LOG_BARK" \ "${TOOLS_LOG_BARK_PREFIX}\033[$stat_bark\033[0m${TOOLS_LOG_BARK_SUFFIX}" \
"$TOOLS_LOG_PO" \ "${TOOLS_LOG_PO_PREFIX}\033[$stat_Po\033[0m${TOOLS_LOG_PO_SUFFIX}" \
"$TOOLS_LOG_PP" \ "${TOOLS_LOG_PP_PREFIX}\033[$stat_PP\033[0m${TOOLS_LOG_PP_SUFFIX}" \
"$TOOLS_LOG_SYNO" \ "${TOOLS_LOG_SYNO_PREFIX}\033[$stat_SynoChat\033[0m${TOOLS_LOG_SYNO_SUFFIX}" \
"$TOOLS_LOG_GOTIFY" \ "${TOOLS_LOG_GOTIFY_PREFIX}\033[$stat_Gotify\033[0m${TOOLS_LOG_GOTIFY_SUFFIX}" \
"" \ "" \
"$TOOLS_LOG_VIEW" \ "$TOOLS_LOG_VIEW" \
"$TOOLS_LOG_TASK" \ "${TOOLS_LOG_TASK_PREFIX}\033[$stat_task\033[0m${TOOLS_LOG_TASK_SUFFIX}" \
"$TOOLS_LOG_DEVICE" \ "${TOOLS_LOG_DEVICE_PREFIX}\033[$device_s\033[0m${TOOLS_LOG_DEVICE_SUFFIX}" \
"$TOOLS_LOG_CLEAR" \ "$TOOLS_LOG_CLEAR" \
"" \ "" \
"0) $COMMON_BACK" "0) $COMMON_BACK"
@@ -685,18 +686,18 @@ testcommand() {
debug() { debug() {
echo "$crashcore" | grep -q 'singbox' && config_tmp="$TMPDIR"/jsons || config_tmp="$TMPDIR"/config.yaml echo "$crashcore" | grep -q 'singbox' && config_tmp="$TMPDIR"/jsons || config_tmp="$TMPDIR"/config.yaml
comp_box "\033[36m$TOOLS_DEBUG_WARN1\033[0m" \ comp_box "\033[36m$TOOLS_DEBUG_WARN1\033[0m" \
"$TOOLS_DEBUG_WARN2" \ "${TOOLS_DEBUG_WARN2_PREFIX}\033[32m$TMPDIR/debug.log\033[0m${TOOLS_DEBUG_WARN2_SUFFIX}" \
"$TOOLS_DEBUG_WARN3" \ "$TOOLS_DEBUG_WARN3" \
"$TOOLS_DEBUG_WARN4" "$TOOLS_DEBUG_WARN4"
content_line "$TOOLS_DEBUG_ITEM_1" content_line "${TOOLS_DEBUG_ITEM_1_PREFIX}\033[32m$config_tmp\033[0m${TOOLS_DEBUG_ITEM_1_SUFFIX}"
content_line "$TOOLS_DEBUG_ITEM_2" content_line "${TOOLS_DEBUG_ITEM_2_PREFIX}\033[32m$config_tmp\033[0m${TOOLS_DEBUG_ITEM_2_SUFFIX}"
content_line "$TOOLS_DEBUG_ITEM_3" content_line "$TOOLS_DEBUG_ITEM_3"
content_line "$TOOLS_DEBUG_ITEM_4" content_line "$TOOLS_DEBUG_ITEM_4"
content_line "$TOOLS_DEBUG_ITEM_5" content_line "$TOOLS_DEBUG_ITEM_5"
content_line "$TOOLS_DEBUG_ITEM_6" content_line "${TOOLS_DEBUG_ITEM_6_PREFIX}\033[32m$CRASHDIR/debug.log\033[0m${TOOLS_DEBUG_ITEM_6_SUFFIX}"
content_line "" content_line ""
content_line "$TOOLS_DEBUG_ITEM_8" content_line "$TOOLS_DEBUG_ITEM_8"
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "$TOOLS_DEBUG_ITEM_9" [ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "${TOOLS_DEBUG_ITEM_9_PREFIX}\033[32m$config_tmp\033[0m${TOOLS_DEBUG_ITEM_9_SUFFIX}\033[32m$TMPDIR/debug.json\033[0m"
btm_box "" \ btm_box "" \
"0) $COMMON_BACK" "0) $COMMON_BACK"
read -r -p "$COMMON_INPUT> " num read -r -p "$COMMON_INPUT> " num
@@ -765,4 +766,3 @@ debug() {
;; ;;
esac esac
} }

View File

@@ -300,11 +300,11 @@ getcore() {
# 获取在线内核文件 # 获取在线内核文件
line_break line_break
separator_line "=" separator_line "="
content_line "$UPG_GETTING_CORE_TEXT" content_line "${UPG_GETTING_CORE_TEXT_PREFIX}${crashcore}${UPG_GETTING_CORE_TEXT_SUFFIX}"
core_webget core_webget
case "$?" in case "$?" in
0) 0)
content_line "\033[32m$UPG_CORE_DOWNLOAD_OK_TEXT\033[0m" content_line "\033[32m${UPG_CORE_DOWNLOAD_OK_TEXT_PREFIX}${crashcore}${UPG_CORE_DOWNLOAD_OK_TEXT_SUFFIX}\033[0m"
separator_line "=" separator_line "="
sleep 1 sleep 1
switch_core switch_core
@@ -338,7 +338,7 @@ checkcustcore() {
release_date=$(cat "$TMPDIR"/github_api | grep '"published_at":' | awk -F '"' '{print $4}') release_date=$(cat "$TMPDIR"/github_api | grep '"published_at":' | awk -F '"' '{print $4}')
update_date=$(cat "$TMPDIR"/github_api | grep '"updated_at":' | head -n 1 | awk -F '"' '{print $4}') update_date=$(cat "$TMPDIR"/github_api | grep '"updated_at":' | head -n 1 | awk -F '"' '{print $4}')
echo "$cpucore" | grep -q 'mips' && cpu_type=mips || cpu_type=$cpucore echo "$cpucore" | grep -q 'mips' && cpu_type=mips || cpu_type=$cpucore
cat "$TMPDIR"/github_api | grep "browser_download_url" | grep -oE "https://github.com/${project}/releases/download.*linux.*${cpu_type}.*\.gz\"$" | sed 's/"//' >"$TMPDIR"/core.list cat "$TMPDIR"/github_api | grep "browser_download_url" | grep -oE "https://github.com/${project}/releases/download.*linux.*${cpu_type}.*\.(gz|upx)\"$" | sed 's/"//' >"$TMPDIR"/core.list
rm -rf "$TMPDIR"/github_api rm -rf "$TMPDIR"/github_api
if [ -s "$TMPDIR"/core.list ]; then if [ -s "$TMPDIR"/core.list ]; then
@@ -391,6 +391,7 @@ checkcustcore() {
setcustcore() { setcustcore() {
while true; do while true; do
[ -z "$cpucore" ] && check_cpucore [ -z "$cpucore" ] && check_cpucore
[ -n "$custcorelink" ] && custcore="$(echo "$custcorelink" | sed 's#.*github.com##; s#/releases/download/#@#')"
line_break line_break
separator_line "=" separator_line "="
content_line "\033[36m$UPG_CUSTOM_CORE_SOURCE\033[0m" content_line "\033[36m$UPG_CUSTOM_CORE_SOURCE\033[0m"
@@ -398,15 +399,16 @@ setcustcore() {
content_line "\033[31m$UPG_CUSTOM_CORE_TASK_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" content_line "\033[32m$UPG_CUSTOM_CORE_NET_WARN\033[0m"
[ -n "$custcore" ] && { [ -n "$custcore" ] && {
content_line "$UPG_CUSTOM_CORE_CURRENT_TEXT\033[36m$custcore\033[0m" content_line "$UPG_CUSTOM_CORE_CURRENT\033[36m$custcore\033[0m"
} }
separator_line "=" separator_line "="
content_line "$UPG_CUSTOM_CORE_SELECT" content_line "$UPG_CUSTOM_CORE_SELECT"
separator_line "-" separator_line "-"
btm_box "$UPG_CORE_MENU_1" \ btm_box "1) \033[36mMetaCubeX/mihomo\033[32m@release\033[0m$UPG_CUSTOM_CORE_MENU_OFFICIAL" \
"$UPG_CORE_MENU_2" \ "2) \033[36mvernesong/mihomo\033[32m@alpha\033[0m$UPG_CUSTOM_CORE_MENU_ALPHA" \
"$UPG_CORE_MENU_3" \ "3) \033[36mSagerNet/sing-box\033[32m@release\033[0m$UPG_CUSTOM_CORE_MENU_OFFICIAL" \
"$UPG_CORE_MENU_4" \ "4) \033[36mDustinWin/mihomo\033[0m$UPG_CUSTOM_CORE_MENU_MULTI" \
"5) \033[36mDustinWin/sing-boxr\033[0m$UPG_CUSTOM_CORE_MENU_MULTI" \
"$UPG_CORE_MENU_9" \ "$UPG_CORE_MENU_9" \
"" \ "" \
"0) $COMMON_BACK" "0) $COMMON_BACK"
@@ -434,9 +436,15 @@ setcustcore() {
checkcustcore checkcustcore
;; ;;
4) 4)
project=juewuy/ShellCrash project=DustinWin/proxy-tools
api_tag=clash.premium.latest api_tag=mihomo
crashcore=clashpre crashcore=meta
checkcustcore
;;
5)
project=DustinWin/proxy-tools
api_tag=sing-box
crashcore=singboxr
checkcustcore checkcustcore
;; ;;
9) 9)
@@ -496,7 +504,6 @@ setcore() {
[ -z "$crashcore" ] && crashcore="unknow" [ -z "$crashcore" ] && crashcore="unknow"
[ -z "$zip_type" ] && zip_type="tar.gz" [ -z "$zip_type" ] && zip_type="tar.gz"
echo "$crashcore" | grep -q 'singbox' && core_old=singbox || core_old=clash echo "$crashcore" | grep -q 'singbox' && core_old=singbox || core_old=clash
[ -n "$custcorelink" ] && custcore="$(echo "$custcorelink" | sed 's#.*github.com##; s#/releases/download/#@#')"
[ -z "$cpucore" ] && check_cpucore [ -z "$cpucore" ] && check_cpucore
@@ -506,22 +513,22 @@ setcore() {
"" \ "" \
"\033[33m$UPG_CORE_MENU_SELECT\033[0m" "\033[33m$UPG_CORE_MENU_SELECT\033[0m"
content_line "$UPG_CORE_V1" content_line "${UPG_CORE_V1_PREFIX}${meta_v}${UPG_CORE_V1_SUFFIX}"
sub_content_line "$UPG_CORE_V1_DOC" sub_content_line "$UPG_CORE_V1_DOC"
content_line "$UPG_CORE_V2" content_line "${UPG_CORE_V2_PREFIX}${singboxr_v}${UPG_CORE_V2_SUFFIX}"
sub_content_line "$UPG_CORE_V2_DOC" sub_content_line "$UPG_CORE_V2_DOC"
[ "$zip_type" = 'upx' ] && { [ "$zip_type" = 'upx' ] && {
content_line "$UPG_CORE_V3" content_line "${UPG_CORE_V3_PREFIX}${singbox_v}${UPG_CORE_V3_SUFFIX}"
sub_content_line "$UPG_CORE_V3_DOC" sub_content_line "$UPG_CORE_V3_DOC"
} }
[ "$zip_type" = 'upx' ] && { [ "$zip_type" = 'upx' ] && {
content_line "$UPG_CORE_V4" content_line "${UPG_CORE_V4_PREFIX}${clash_v}${UPG_CORE_V4_SUFFIX}"
sub_content_line "$UPG_CORE_V4_DOC" sub_content_line "$UPG_CORE_V4_DOC"
} }
btm_box "$UPG_CORE_MENU_5" \ btm_box "${UPG_CORE_MENU_5_PREFIX}${zip_type}${UPG_CORE_MENU_5_SUFFIX}" \
"$UPG_CORE_MENU_6" \ "${UPG_CORE_MENU_6_PREFIX}${UPG_CORE_MENU_6_SUFFIX}" \
"$UPG_CORE_MENU_7" \ "$UPG_CORE_MENU_7" \
"$UPG_CORE_MENU_9" \ "$UPG_CORE_MENU_9" \
"" \ "" \
@@ -588,7 +595,7 @@ getgeo() {
content_line "$UPG_GEO_GETTING" content_line "$UPG_GEO_GETTING"
get_bin "$TMPDIR"/"${geoname}" bin/geodata/"$geotype" get_bin "$TMPDIR"/"${geoname}" bin/geodata/"$geotype"
if [ "$?" = "1" ]; then if [ "$?" = "1" ]; then
content_line "\033[31m$UPG_GEO_FAIL\033[0m" content_line "\033[31m$UPG_DOWNLOAD_FAIL\033[0m"
error_down error_down
else else
echo "$geoname" | grep -Eq '.mrs|.srs|.tar.gz' && { echo "$geoname" | grep -Eq '.mrs|.srs|.tar.gz' && {
@@ -598,7 +605,7 @@ getgeo() {
if echo "$geoname" | grep -Eq '.tar.gz'; then if echo "$geoname" | grep -Eq '.tar.gz'; then
tar -zxf "$TMPDIR"/"${geoname}" ${tar_para} -C "$BINDIR"/"${geofile}" >/dev/null tar -zxf "$TMPDIR"/"${geoname}" ${tar_para} -C "$BINDIR"/"${geofile}" >/dev/null
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
content_line "$UPG_GEO_EXTRACT_FAIL" content_line "$UPG_EXTRACT_FAIL"
separator_line "=" separator_line "="
sleep 1 sleep 1
line_break line_break
@@ -609,7 +616,7 @@ getgeo() {
else else
mv -f "$TMPDIR"/"${geoname}" "$BINDIR"/"${geofile}""${geoname}" mv -f "$TMPDIR"/"${geoname}" "$BINDIR"/"${geofile}""${geoname}"
fi fi
content_line "\033[32m$UPG_GEO_OK\033[0m" content_line "\033[32m${UPG_GEO_OK_PREFIX}${geotype}${UPG_GEO_OK_SUFFIX}\033[0m"
geo_v="$(echo "$geotype" | awk -F "." '{print $1}')_v" geo_v="$(echo "$geotype" | awk -F "." '{print $1}')_v"
setconfig "$geo_v" "$GeoIP_v" setconfig "$geo_v" "$GeoIP_v"
fi fi
@@ -622,7 +629,7 @@ getcustgeo() {
content_line "$UPG_GEO_LINKING" content_line "$UPG_GEO_LINKING"
webget "$TMPDIR"/"$geoname" "$custgeolink" webget "$TMPDIR"/"$geoname" "$custgeolink"
if [ "$?" = "1" ]; then if [ "$?" = "1" ]; then
content_line "\033[31m$UPG_GEO_FAIL\033[0m" content_line "\033[31m$UPG_DOWNLOAD_FAIL\033[0m"
error_down error_down
else else
echo "$geoname" | grep -Eq '.mrs|.srs' && { echo "$geoname" | grep -Eq '.mrs|.srs' && {
@@ -630,7 +637,7 @@ getcustgeo() {
[ ! -d "$BINDIR"/ruleset ] && mkdir -p "$BINDIR"/ruleset [ ! -d "$BINDIR"/ruleset ] && mkdir -p "$BINDIR"/ruleset
} }
mv -f "$TMPDIR"/"${geoname}" "$BINDIR"/"${geofile}""${geoname}" mv -f "$TMPDIR"/"${geoname}" "$BINDIR"/"${geofile}""${geoname}"
content_line "\033[32m$UPG_GEO_OK\033[0m" content_line "\033[32m${UPG_GEO_OK_PREFIX}${geotype}${UPG_GEO_OK_SUFFIX}\033[0m"
separator_line "=" separator_line "="
fi fi
sleep 1 sleep 1
@@ -818,7 +825,7 @@ setgeo() {
;; ;;
9) 9)
while true; do while true; do
comp_box "\033[33m$UPG_GEO_CLEAN_HINT1\033[0m" \ comp_box "\033[33m${UPG_GEO_CLEAN_HINT1_PREFIX}${CRASHDIR}${UPG_GEO_CLEAN_HINT1_SUFFIX}\033[0m" \
"$UPG_GEO_CLEAN_HINT2" "$UPG_GEO_CLEAN_HINT2"
btm_box "$UPG_GEO_CLEAN_CONFIRM" \ btm_box "$UPG_GEO_CLEAN_CONFIRM" \
"0) $COMMON_BACK" "0) $COMMON_BACK"
@@ -859,7 +866,7 @@ getdb() {
content_line "$UPG_DB_GETTING" content_line "$UPG_DB_GETTING"
get_bin "$TMPDIR"/clashdb.tar.gz bin/dashboard/${db_type}.tar.gz get_bin "$TMPDIR"/clashdb.tar.gz bin/dashboard/${db_type}.tar.gz
if [ "$?" = "1" ]; then if [ "$?" = "1" ]; then
content_line "\033[31m$UPG_GEO_FAIL\033[0m" content_line "\033[31m$UPG_DOWNLOAD_FAIL\033[0m"
error_down error_down
return 1 return 1
else else
@@ -867,7 +874,7 @@ getdb() {
mkdir -p "$dbdir" >/dev/null mkdir -p "$dbdir" >/dev/null
tar -zxf "$TMPDIR/clashdb.tar.gz" ${tar_para} -C "$dbdir" >/dev/null tar -zxf "$TMPDIR/clashdb.tar.gz" ${tar_para} -C "$dbdir" >/dev/null
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
content_line "$UPG_GEO_EXTRACT_FAIL" content_line "$UPG_EXTRACT_FAIL"
separator_line "=" separator_line "="
line_break line_break
sleep 1 sleep 1
@@ -912,7 +919,7 @@ dbdir() {
fi fi
elif [ -w /www ] && [ -n "$(pidof nginx)" ]; then elif [ -w /www ] && [ -n "$(pidof nginx)" ]; then
comp_box "$UPG_DB_DIR_SELECT" comp_box "$UPG_DB_DIR_SELECT"
btm_box "$UPG_DB_DIR_1" \ btm_box "${UPG_DB_DIR_1_PREFIX}${CRASHDIR}${UPG_DB_DIR_1_SUFFIX}" \
"$UPG_DB_DIR_2" \ "$UPG_DB_DIR_2" \
"" \ "" \
"0) $COMMON_BACK" "0) $COMMON_BACK"
@@ -1028,7 +1035,7 @@ getcrt() {
content_line "$UPG_DB_GETTING" content_line "$UPG_DB_GETTING"
get_bin "$TMPDIR"/ca-certificates.crt bin/fix/ca-certificates.crt echooff get_bin "$TMPDIR"/ca-certificates.crt bin/fix/ca-certificates.crt echooff
if [ "$?" = "1" ]; then if [ "$?" = "1" ]; then
content_line "\033[31m$UPG_GEO_FAIL\033[0m" content_line "\033[31m$UPG_DOWNLOAD_FAIL\033[0m"
error_down error_down
else else
[ "$systype" = 'mi_snapshot' ] && cp -f "$TMPDIR"/ca-certificates.crt "$CRASHDIR"/tools #镜像化设备特殊处理 [ "$systype" = 'mi_snapshot' ] && cp -f "$TMPDIR"/ca-certificates.crt "$CRASHDIR"/tools #镜像化设备特殊处理

View File

@@ -12,11 +12,11 @@ set_fw_filter() {
[ -z "$quic_rj" ] && quic_rj=OFF [ -z "$quic_rj" ] && quic_rj=OFF
[ -z "$cn_ip_route" ] && cn_ip_route=OFF [ -z "$cn_ip_route" ] && cn_ip_route=OFF
touch "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 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 [ -z "$(cat "$CRASHDIR"/configs/mac "$CRASHDIR"/configs/ip_filter 2>/dev/null)" ] && mac_filter_info=OFF || mac_filter_info=ON
comp_box "$FWF_ITEM_1" \ comp_box "${FWF_ITEM_1_PREFIX}\033[36m$common_ports\033[0m\t${FWF_ITEM_1_SUFFIX}" \
"$FWF_ITEM_2" \ "${FWF_ITEM_2_PREFIX}\033[36m$mac_filter_info\033[0m\t${FWF_ITEM_2_SUFFIX}" \
"$FWF_ITEM_3" \ "${FWF_ITEM_3_PREFIX}\033[36m$quic_rj\033[0m\t${FWF_ITEM_3_SUFFIX}" \
"$FWF_ITEM_4" \ "${FWF_ITEM_4_PREFIX}\033[36m$cn_ip_route\033[0m\t${FWF_ITEM_4_SUFFIX}" \
"$FWF_ITEM_5" \ "$FWF_ITEM_5" \
"$FWF_ITEM_6" \ "$FWF_ITEM_6" \
"" \ "" \
@@ -94,7 +94,7 @@ set_common_ports() {
content_line "$FWF_ALLOWED_PORTS\033[36m$multiport\033[0m" content_line "$FWF_ALLOWED_PORTS\033[36m$multiport\033[0m"
fi fi
separator_line "=" separator_line "="
btm_box "$FWF_PORT_MENU_1" \ btm_box "${FWF_PORT_MENU_1_PREFIX}\033[36m$common_ports\033[0m${FWF_PORT_MENU_1_SUFFIX}" \
"$FWF_PORT_MENU_2" \ "$FWF_PORT_MENU_2" \
"$FWF_PORT_MENU_3" \ "$FWF_PORT_MENU_3" \
"$FWF_PORT_MENU_4" \ "$FWF_PORT_MENU_4" \
@@ -463,7 +463,7 @@ fw_filter_lan() {
done done
separator_line "=" separator_line "="
fi fi
btm_box "$FWF_FILTER_SWITCH" \ btm_box "${FWF_FILTER_SWITCH_PREFIX}\033[33m$fw_filter_lan_over\033[0m${FWF_FILTER_SWITCH_SUFFIX}" \
"$FWF_FILTER_ADD_MAC" \ "$FWF_FILTER_ADD_MAC" \
"$FWF_FILTER_ADD_IP" \ "$FWF_FILTER_ADD_IP" \
"$FWF_FILTER_REMOVE" \ "$FWF_FILTER_REMOVE" \

View File

@@ -3,10 +3,9 @@
[ -n "$__IS_MODULE_OVERRIDE" ] && return [ -n "$__IS_MODULE_OVERRIDE" ] && return
__IS_MODULE_OVERRIDE=1 __IS_MODULE_OVERRIDE=1
load_lang override
YAMLSDIR="$CRASHDIR"/yamls YAMLSDIR="$CRASHDIR"/yamls
JSONSDIR="$CRASHDIR"/jsons JSONSDIR="$CRASHDIR"/jsons
load_lang override
# 配置文件覆写 # 配置文件覆写
override() { override() {
@@ -48,7 +47,7 @@ override() {
;; ;;
9) 9)
comp_box "\033[33m$OVR_WARN_1\033[0m" \ comp_box "\033[33m$OVR_WARN_1\033[0m" \
"\033[33m$OVR_WARN_2\033[0m" \ "\033[33m${OVR_WARN_2_PREFIX}$crashcore${OVR_WARN_2_SUFFIX}\033[0m" \
"\033[33m$OVR_WARN_3\033[0m" "\033[33m$OVR_WARN_3\033[0m"
sleep 2 sleep 2
btm_box "$OVR_WARN_CONFIRM" \ btm_box "$OVR_WARN_CONFIRM" \

View File

@@ -117,6 +117,7 @@ EOF
fi fi
# 通用部分生成 # 通用部分生成
[ "$skip_cert" != "OFF" ] && override_tls='true' || override_tls='false' [ "$skip_cert" != "OFF" ] && override_tls='true' || override_tls='false'
[ -n "$(echo "$2" | grep 'oics.net')" ] && domain_resolver='dns_oix' || domain_resolver='dns_resolver'
cat >>"$TMPDIR"/providers/providers.json <<EOF cat >>"$TMPDIR"/providers/providers.json <<EOF
"health_check": { "health_check": {
"enabled": true, "enabled": true,
@@ -124,6 +125,9 @@ EOF
"interval": "${interval}m", "interval": "${interval}m",
"timeout": "3s" "timeout": "3s"
}, },
"override_dialer": {
"domain_resolver": "$domain_resolver"
},
"override_tls": { "override_tls": {
"enabled": true, "enabled": true,
"insecure": $override_tls "insecure": $override_tls

View File

@@ -140,8 +140,8 @@ hotupdate() { #热更新订阅
case "$1" in case "$1" in
[1-9][0-9][0-9]) [1-9][0-9][0-9])
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}') task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}')
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}') task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}')
#task_logger "任务$task_name 开始执行" #task_logger "任务$task_name 开始执行"
eval $task_command && task_res="$TASK_CMD_RES_OK" || task_res="$TASK_CMD_RES_FAIL" eval $task_command && task_res="$TASK_CMD_RES_OK" || task_res="$TASK_CMD_RES_FAIL"
task_logger "$TASK_CMD_EXEC_PREFIX$2$TASK_CMD_EXEC_MID$task_res" task_logger "$TASK_CMD_EXEC_PREFIX$2$TASK_CMD_EXEC_MID$task_res"

View File

@@ -56,6 +56,8 @@ EOF
respect-rules: true respect-rules: true
nameserver-policy: {'rule-set:cn': [ $dns_nameserver ]} nameserver-policy: {'rule-set:cn': [ $dns_nameserver ]}
proxy-server-nameserver : [ $dns_resolver ] proxy-server-nameserver : [ $dns_resolver ]
proxy-server-nameserver-policy:
'*.oix_nodes.com': '124.221.68.73:1053'
nameserver: [ $dns_final ] nameserver: [ $dns_final ]
EOF EOF
else else

View File

@@ -11,6 +11,7 @@ getlanip() { #获取局域网host地址
ip -6 addr show dev $iface 2>/dev/null ip -6 addr show dev $iface 2>/dev/null
done | grep 'scope global' | awk '{print $2}' | tr '\n' ' ' | sed 's/ $//' done | grep 'scope global' | awk '{print $2}' | tr '\n' ' ' | sed 's/ $//'
) )
[ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//')
} }
[ -f "$TMPDIR"/ShellCrash.log ] && break [ -f "$TMPDIR"/ShellCrash.log ] && break
[ -n "$host_ipv4" -a "$ipv6_redir" != "ON" ] && break [ -n "$host_ipv4" -a "$ipv6_redir" != "ON" ] && break

View File

@@ -3,7 +3,7 @@
ckcmd iptables && iptables -h | grep -q '\-w' && iptable='iptables -w' || iptable=iptables ckcmd iptables && iptables -h | grep -q '\-w' && iptable='iptables -w' || iptable=iptables
ckcmd ip6tables && ip6tables -h | grep -q '\-w' && ip6table='ip6tables -w' || ip6table=ip6tables ckcmd ip6tables && ip6tables -h | grep -q '\-w' && ip6table='ip6tables -w' || ip6table=ip6tables
start_ipt_route() { #iptables-route通用工具 start_ipt_route() { #iptables-route通用工具
#$1:iptables/ip6tables $2:所在的表(nat/mangle) $3:所在的链(OUTPUT/PREROUTING) $4:新创建的shellcrash链表 $5:tcp/udp/all #$1:iptables/ip6tables $2:所在的表(nat/mangle) $3:所在的链(OUTPUT/PREROUTING) $4:新创建的shellcrash链表 $5:tcp/udp/all
#区分ipv4/ipv6 #区分ipv4/ipv6
@@ -37,6 +37,7 @@ start_ipt_route() { #iptables-route通用工具
} }
#跳过目标保留地址及目标本机网段 #跳过目标保留地址及目标本机网段
for ip in $HOST_IP $RESERVED_IP; do for ip in $HOST_IP $RESERVED_IP; do
[ "$ip" = "default" ] && continue
"$1" $w -t "$2" -A "$4" -d $ip -j RETURN "$1" $w -t "$2" -A "$4" -d $ip -j RETURN
done done
#绕过CN_IP #绕过CN_IP
@@ -65,7 +66,8 @@ start_ipt_route() { #iptables-route通用工具
"$1" $w -t "$2" -A "$4" -p "$5" -s $ip -j $JUMP "$1" $w -t "$2" -A "$4" -p "$5" -s $ip -j $JUMP
done done
else else
for ip in $HOST_IP; do #仅限指定网段流量 for ip in $HOST_IP; do #仅限指定网段流量 (已修复 default 报错)
[ "$ip" = "default" ] && continue
"$1" $w -t "$2" -A "$4" -p "$5" -s $ip -j $JUMP "$1" $w -t "$2" -A "$4" -p "$5" -s $ip -j $JUMP
done done
fi fi
@@ -123,7 +125,8 @@ start_ipt_dns() { #iptables-dns通用工具
"$1" $w -t nat -A "$3" -p udp -s $ip -j REDIRECT --to-ports "$dns_redir_port" "$1" $w -t nat -A "$3" -p udp -s $ip -j REDIRECT --to-ports "$dns_redir_port"
done done
else else
for ip in $HOST_IP; do #仅限指定网段流量 for ip in $HOST_IP; do #仅限指定网段流量 (已修复 default 报错)
[ "$ip" = "default" ] && continue
"$1" $w -t nat -A "$3" -p tcp -s $ip -j REDIRECT --to-ports "$dns_redir_port" "$1" $w -t nat -A "$3" -p tcp -s $ip -j REDIRECT --to-ports "$dns_redir_port"
"$1" $w -t nat -A "$3" -p udp -s $ip -j REDIRECT --to-ports "$dns_redir_port" "$1" $w -t nat -A "$3" -p udp -s $ip -j REDIRECT --to-ports "$dns_redir_port"
done done
@@ -256,7 +259,8 @@ start_iptables() { #iptables配置总入口
fi fi
} }
} }
[ "$vm_redir" = "ON" ] && [ -n "$$vm_ipv4" ] && { # 修复了原本双刀号 $$vm_ipv4 会变为进程 PID_ipv4 的语法错误问题
[ "$vm_redir" = "ON" ] && [ -n "$vm_ipv4" ] && {
JUMP="REDIRECT --to-ports $redir_port" #跳转劫持的具体命令 JUMP="REDIRECT --to-ports $redir_port" #跳转劫持的具体命令
start_ipt_dns iptables PREROUTING shellcrash_vm_dns #ipv4-局域网dns转发 start_ipt_dns iptables PREROUTING shellcrash_vm_dns #ipv4-局域网dns转发
start_ipt_route iptables nat PREROUTING shellcrash_vm tcp #ipv4-局域网tcp转发 start_ipt_route iptables nat PREROUTING shellcrash_vm tcp #ipv4-局域网tcp转发
@@ -289,4 +293,4 @@ start_iptables() { #iptables配置总入口
$ip6table -I INPUT -p udp --dport 443 $set_cn_ip6 -j REJECT >/dev/null 2>&1 $ip6table -I INPUT -p udp --dport 443 $set_cn_ip6 -j REJECT >/dev/null 2>&1
} }
} }
} }

View File

@@ -178,6 +178,11 @@ EOF
"tag": "dns_resolver", "tag": "dns_resolver",
$(parse_singbox_dns "$dns_resolver") $(parse_singbox_dns "$dns_resolver")
"routing_mark": $routing_mark "routing_mark": $routing_mark
},
{
"tag": "dns_oix",
"type": "udp", "server": "124.221.68.73", "server_port": 1053,
"routing_mark": $routing_mark
} }
], ],
"rules": [ "rules": [
@@ -267,8 +272,8 @@ EOF
. "$CRASHDIR"/configs/gateway.cfg . "$CRASHDIR"/configs/gateway.cfg
. "$CRASHDIR"/libs/sb_inbounds.sh . "$CRASHDIR"/libs/sb_inbounds.sh
} }
if [ "$redir_mod" = "Mix" -o "$redir_mod" = "Tun" ]; then if [ "$redir_mod" = "Mix" ] || [ "$redir_mod" = "Tun" ]; then
[ "ipv6_redir" = 'ON' ] && ipv6_address='"fe80::e5c5:2469:d09b:609a/64",' [ "$ipv6_redir" = 'ON' ] && ipv6_address='"fd00:face:b00c::1/126",'
cat >>"$TMPDIR"/jsons/tun.json <<EOF cat >>"$TMPDIR"/jsons/tun.json <<EOF
{ {
"inbounds": [ "inbounds": [

View File

@@ -1 +1 @@
1.9.5alpha12 1.9.5alpha13