mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-04-25 20:10:42 +00:00
Compare commits
9 Commits
1a00022ea2
...
21c4f8400b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21c4f8400b | ||
|
|
75609fbc26 | ||
|
|
c8dfb3780a | ||
|
|
373c9aacbd | ||
|
|
5f5ea62159 | ||
|
|
a9ddbba9fe | ||
|
|
2e71e78a9d | ||
|
|
c0e3992d40 | ||
|
|
270dbd4299 |
@@ -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="访问非本机目标需在终端设置使用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删除)"
|
||||
|
||||
@@ -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="合并成功!"
|
||||
|
||||
@@ -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="(回退)"
|
||||
|
||||
85
scripts/lang/chs/fw_filter.lang
Normal file
85
scripts/lang/chs/fw_filter.lang
Normal 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="输入错误!请输入正确的数值(1~65535)!"
|
||||
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="设备列表已清空!"
|
||||
92
scripts/lang/chs/override.lang
Normal file
92
scripts/lang/chs/override.lang
Normal 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"
|
||||
@@ -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!"
|
||||
|
||||
@@ -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)"
|
||||
|
||||
85
scripts/lang/en/fw_filter.lang
Normal file
85
scripts/lang/en/fw_filter.lang
Normal 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!"
|
||||
92
scripts/lang/en/override.lang
Normal file
92
scripts/lang/en/override.lang
Normal 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"
|
||||
@@ -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" &
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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输入错误!请输入正确的数值(1~65535)!\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输入错误!请输入正确的数值(1~65535)!\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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user