Compare commits
208 Commits
1.9.5alpha
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
950432aebc | ||
|
|
8e95c6a292 | ||
|
|
b9c50e825d | ||
|
|
bcb3d9cabd | ||
|
|
49c509d6ef | ||
|
|
47c7331623 | ||
|
|
987ef6ab22 | ||
|
|
2218161e8f | ||
|
|
74b304be6f | ||
|
|
a968551912 | ||
|
|
13fc116985 | ||
|
|
2e7d615f8a | ||
|
|
6b6740a725 | ||
|
|
5e7a46c378 | ||
|
|
c304ec8271 | ||
|
|
cff3479213 | ||
|
|
5b94bce400 | ||
|
|
08e785dc2d | ||
|
|
feb8ff9f80 | ||
|
|
2d5df04dd4 | ||
|
|
b4a9702c82 | ||
|
|
ee2fd53675 | ||
|
|
39084ffd1e | ||
|
|
200d1729fb | ||
|
|
687e72a53f | ||
|
|
8d51f0aab6 | ||
|
|
837f99727a | ||
|
|
ab29b5c036 | ||
|
|
3e2ad3da2e | ||
|
|
13aa2f20cf | ||
|
|
b1622958e0 | ||
|
|
3dad12584a | ||
|
|
91ae2c88de | ||
|
|
5076a29996 | ||
|
|
23571b4f45 | ||
|
|
4f3dc3b70d | ||
|
|
afad3ebb5c | ||
|
|
cf35708a2a | ||
|
|
b750469047 | ||
|
|
96f04a2225 | ||
|
|
b734fc6e1d | ||
|
|
c61c637e0d | ||
|
|
7ed66026be | ||
|
|
21c4f8400b | ||
|
|
75609fbc26 | ||
|
|
c8dfb3780a | ||
|
|
373c9aacbd | ||
|
|
5f5ea62159 | ||
|
|
a9ddbba9fe | ||
|
|
2e71e78a9d | ||
|
|
c0e3992d40 | ||
|
|
1a00022ea2 | ||
|
|
8f781874e3 | ||
|
|
b4363195f3 | ||
|
|
8bcaac1f66 | ||
|
|
e84bca30b9 | ||
|
|
81d6b36c51 | ||
|
|
0f96cc8c0e | ||
|
|
c5da0da08a | ||
|
|
270dbd4299 | ||
|
|
ed635b871a | ||
|
|
a32b05a391 | ||
|
|
9e78370c5c | ||
|
|
c66c642ca2 | ||
|
|
bd9abee53f | ||
|
|
4f9b066015 | ||
|
|
2c9eda6cc6 | ||
|
|
a6cc498cbd | ||
|
|
d032742984 | ||
|
|
c373b0b7b0 | ||
|
|
31bf9915c6 | ||
|
|
cae9613225 | ||
|
|
02a342cbd1 | ||
|
|
1fbade025a | ||
|
|
65244e51da | ||
|
|
1087f57893 | ||
|
|
f5394120e1 | ||
|
|
0a52ef2531 | ||
|
|
24fc10a59f | ||
|
|
5d4fcc2271 | ||
|
|
8083166256 | ||
|
|
a15b431e97 | ||
|
|
0589bc7881 | ||
|
|
3b578c7988 | ||
|
|
7f73133657 | ||
|
|
952e1a8f63 | ||
|
|
2c6e23e54d | ||
|
|
b3ac793f6e | ||
|
|
37269ef851 | ||
|
|
f2ce2fb9b4 | ||
|
|
d86969bf9b | ||
|
|
cd170e9b27 | ||
|
|
1c1d2ddac2 | ||
|
|
e5489f3c91 | ||
|
|
93ad3c133c | ||
|
|
b6bc1e9f72 | ||
|
|
dfc6910bc3 | ||
|
|
1afb261d0e | ||
|
|
e693b7ad35 | ||
|
|
fa72c49f2f | ||
|
|
32d73c18c4 | ||
|
|
cb9d5a783b | ||
|
|
c4bdd18195 | ||
|
|
7f0b0fa870 | ||
|
|
d5d9fab8e0 | ||
|
|
053f05d394 | ||
|
|
fc1c3c4415 | ||
|
|
623414bfa9 | ||
|
|
09bbe6f402 | ||
|
|
524c8a4268 | ||
|
|
b883e20b3e | ||
|
|
347f4668b4 | ||
|
|
5e05fea6f0 | ||
|
|
77113c81a4 | ||
|
|
3f39be82c4 | ||
|
|
3aeaec6ae4 | ||
|
|
aad43f15b3 | ||
|
|
1b2521290f | ||
|
|
642ac95ae9 | ||
|
|
2fc3a18df4 | ||
|
|
abb7d462a1 | ||
|
|
6a1d4086f3 | ||
|
|
b59da3be8a | ||
|
|
76efd54d03 | ||
|
|
ace8b08407 | ||
|
|
f70e642fea | ||
|
|
614bc696bb | ||
|
|
cd7d4232b6 | ||
|
|
f8e4450222 | ||
|
|
c92355742e | ||
|
|
fd3cfe3881 | ||
|
|
6e83081865 | ||
|
|
901b4b30c0 | ||
|
|
3aaa8b6460 | ||
|
|
8a37ff52b6 | ||
|
|
a34dac4e22 | ||
|
|
70aa90f584 | ||
|
|
228badb65f | ||
|
|
dec6b6bf6f | ||
|
|
e244730f16 | ||
|
|
28eea7c2bc | ||
|
|
fd4ca02ff3 | ||
|
|
b3010958ae | ||
|
|
47e668152b | ||
|
|
6fc2adc9b0 | ||
|
|
25c48ecc4b | ||
|
|
ac088c1adf | ||
|
|
7d2e1c54c4 | ||
|
|
f3cd3ff18a | ||
|
|
1196557d4c | ||
|
|
1af6cf36d2 | ||
|
|
1f59a971cf | ||
|
|
9cad2c21e8 | ||
|
|
0b1d297622 | ||
|
|
0ca7bb8eb2 | ||
|
|
1bd16b5ca6 | ||
|
|
643cd7ccae | ||
|
|
65996d6a54 | ||
|
|
111b151cba | ||
|
|
b1366df6b1 | ||
|
|
de154158fa | ||
|
|
eac695a0f5 | ||
|
|
b65cd1f54c | ||
|
|
ce1295610d | ||
|
|
1f6535c532 | ||
|
|
84008a81bd | ||
|
|
5ea24d1ca4 | ||
|
|
a38c50fa1c | ||
|
|
be60423f08 | ||
|
|
88ae50bc43 | ||
|
|
fe27f4c3e4 | ||
|
|
8cab9b5419 | ||
|
|
41bd93766b | ||
|
|
7f52ee60d9 | ||
|
|
d7f93d1e62 | ||
|
|
346d480a13 | ||
|
|
89cf950490 | ||
|
|
ced3c3ac59 | ||
|
|
3682a99a79 | ||
|
|
70b2816c04 | ||
|
|
b348535414 | ||
|
|
8fc3f34ca8 | ||
|
|
1129eb79b5 | ||
|
|
4e96a8c9b1 | ||
|
|
dfae7195b3 | ||
|
|
b493fba176 | ||
|
|
6fd9f9df03 | ||
|
|
da23b70ca4 | ||
|
|
70bd8ed591 | ||
|
|
b17286b73b | ||
|
|
d63b75b790 | ||
|
|
2536cae8fe | ||
|
|
07920b35ce | ||
|
|
01174fa6d4 | ||
|
|
7aa4a49ec9 | ||
|
|
83bed2f3f3 | ||
|
|
2625d7f4e4 | ||
|
|
6fdc38b4b0 | ||
|
|
44907fb3a2 | ||
|
|
a5c2dcd482 | ||
|
|
7c7ce098cb | ||
|
|
6170a0461d | ||
|
|
48705a0dd9 | ||
|
|
4a2a982c8d | ||
|
|
1dadeb8d7a | ||
|
|
f128560d97 | ||
|
|
4f119380a4 | ||
|
|
17f30cba33 |
13
.editorconfig
Normal file
13
.editorconfig
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
|
||||||
|
[*.sh]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
shell_variant = posix
|
||||||
|
simplify = true
|
||||||
|
switch_case_indent = true
|
||||||
|
|
||||||
2
.github/workflows/core_auto_update.yml
vendored
2
.github/workflows/core_auto_update.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
uses: juewuy/ShellCrash/.github/workflows/update_singbox_core.yaml@dev
|
uses: juewuy/ShellCrash/.github/workflows/update_singbox_core.yaml@dev
|
||||||
with:
|
with:
|
||||||
tag1: reF1nd/sing-box
|
tag1: reF1nd/sing-box
|
||||||
tag2: reF1nd-dev
|
tag2: reF1nd-testing
|
||||||
tag4: singboxr
|
tag4: singboxr
|
||||||
tag5: with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_shadowsocksr,with_acme,with_clash_api,with_tailscale
|
tag5: with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_shadowsocksr,with_acme,with_clash_api,with_tailscale
|
||||||
tag6: gz
|
tag6: gz
|
||||||
|
|||||||
1
.github/workflows/core_easy_update.yaml
vendored
1
.github/workflows/core_easy_update.yaml
vendored
@@ -20,6 +20,7 @@ jobs:
|
|||||||
[ "${{ inputs.tag1 }}" = singbox ] && repo="SagerNet/sing-box"
|
[ "${{ inputs.tag1 }}" = singbox ] && repo="SagerNet/sing-box"
|
||||||
[ "${{ inputs.tag1 }}" = singboxr ] && repo="SagerNet/sing-box"
|
[ "${{ inputs.tag1 }}" = singboxr ] && repo="SagerNet/sing-box"
|
||||||
latest_tag=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | jq -r .tag_name)
|
latest_tag=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | jq -r .tag_name)
|
||||||
|
[ "${{ inputs.tag1 }}" = singboxr ] && latest_tag="${latest_tag}-reF1nd"
|
||||||
echo "version=$latest_tag" >> $GITHUB_OUTPUT
|
echo "version=$latest_tag" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
update_meta_upx:
|
update_meta_upx:
|
||||||
|
|||||||
@@ -57,8 +57,7 @@ RUN apk add --no-cache \
|
|||||||
ca-certificates \
|
ca-certificates \
|
||||||
tzdata \
|
tzdata \
|
||||||
nftables \
|
nftables \
|
||||||
iproute2 \
|
iproute2
|
||||||
dcron
|
|
||||||
|
|
||||||
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
|
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
|
||||||
echo "${TZ}" > /etc/timezone
|
echo "${TZ}" > /etc/timezone
|
||||||
|
|||||||
@@ -188,5 +188,4 @@ crash -h # 查看命令帮助列表
|
|||||||
|
|
||||||
## :airplane: 机场推荐
|
## :airplane: 机场推荐
|
||||||
|
|
||||||
- [**Dler-墙洞**](https://dler.pro/auth/register?affid=89698),多年稳定运行,功能齐全。
|
|
||||||
- [**大米**](https://1s.bigmeok.me/user#/register?code=2PuWY9I7),群友力荐,流媒体解锁,月付推荐。
|
- [**大米**](https://1s.bigmeok.me/user#/register?code=2PuWY9I7),群友力荐,流媒体解锁,月付推荐。
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
meta_v=v1.19.17
|
meta_v=v1.19.17
|
||||||
singboxr_v=1.13.0-alpha.27
|
singboxr_v=1.13.0-alpha.27
|
||||||
versionsh=1.9.5alpha6.3
|
versionsh=1.9.5alpha13
|
||||||
GeoIP_v=20251205
|
GeoIP_v=20251205
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ docker run -d \
|
|||||||
--cap-add NET_ADMIN \
|
--cap-add NET_ADMIN \
|
||||||
--cap-add NET_RAW \
|
--cap-add NET_RAW \
|
||||||
--cap-add SYS_ADMIN \
|
--cap-add SYS_ADMIN \
|
||||||
|
--sysctl net.ipv4.ip_forward=1 \
|
||||||
--device /dev/net/tun:/dev/net/tun \
|
--device /dev/net/tun:/dev/net/tun \
|
||||||
--restart unless-stopped \
|
--restart unless-stopped \
|
||||||
juewuy/shellcrash:latest
|
juewuy/shellcrash:latest
|
||||||
@@ -87,14 +88,10 @@ mkdir -p /root/ShellCrash
|
|||||||
```shell
|
```shell
|
||||||
docker run -d \
|
docker run -d \
|
||||||
………………
|
………………
|
||||||
-v /root/ShellCrash:/etc/ShellCrash \
|
-v shellcrash_configs:/etc/ShellCrash/configs \
|
||||||
………………
|
………………
|
||||||
```
|
```
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
## Compose Deployment(Compose部署)
|
## Compose Deployment(Compose部署)
|
||||||
@@ -102,8 +99,8 @@ docker run -d \
|
|||||||
### 1. 创建宿主机目录并进入目录
|
### 1. 创建宿主机目录并进入目录
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mkdir -p /root/ShellCrash
|
mkdir -p /tmp/ShellCrash
|
||||||
cd /root/ShellCrash
|
cd /tmp/ShellCrash
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 下载Compose模版
|
### 2. 下载Compose模版
|
||||||
@@ -126,8 +123,29 @@ docker compose up -d
|
|||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
### Notes
|
## Delete(移除容器镜像或删除卷)
|
||||||
|
|
||||||
|
### Docker删除容器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker rm -f shellcrash
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker删除卷
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker volume rm shellcrash_configs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compose删除容器&卷
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- 内置公网防火墙功能无法管理宿主机网络,请自行做好宿主机7890/9999端口的网络防护!
|
||||||
- 旁路由模式需要宿主机支持 `TUN`
|
- 旁路由模式需要宿主机支持 `TUN`
|
||||||
- macvlan 网络下宿主机默认无法直接访问容器 IP
|
- macvlan 网络下宿主机默认无法直接访问容器 IP
|
||||||
- 透明代理场景可能需要额外的网络规划
|
- 透明代理场景可能需要额外的网络规划
|
||||||
|
|||||||
@@ -14,11 +14,15 @@ services:
|
|||||||
devices:
|
devices:
|
||||||
- "/dev/net/tun:/dev/net/tun"
|
- "/dev/net/tun:/dev/net/tun"
|
||||||
sysctls:
|
sysctls:
|
||||||
net.ipv4.ip_forward: 1
|
- net.ipv4.ip_forward: 1
|
||||||
|
# - net.ipv6.conf.all.forwarding=1
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/ShellCrash:/root/ShellCrash
|
- shellcrash_configs:/etc/ShellCrash/configs:rw
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
shellcrash_configs:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
macvlan_lan:
|
macvlan_lan:
|
||||||
name: macvlan_lan
|
name: macvlan_lan
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
+.bing.com
|
|
||||||
+.linkedin.com
|
|
||||||
30
public/servers_en.list
Normal file
30
public/servers_en.list
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# ID&类型 说明 地址 其他说明 (类型:100-三版全通源;200-单一源;300-基础sub;400-meta_sub;500-规则地址)
|
||||||
|
|
||||||
|
101 Jsdelivr_CDN https://cdn.jsdelivr.net/gh/juewuy/ShellCrash
|
||||||
|
102 Github https://raw.githubusercontent.com/juewuy/ShellCrash
|
||||||
|
103 ShellClash https://gh.jwsc.eu.org
|
||||||
|
104 Cloudflare https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash
|
||||||
|
|
||||||
|
401 ... https://sub.jwsc.eu.org ua
|
||||||
|
402 ... https://api.v1.mk diyua
|
||||||
|
403 ... https://url.v1.mk diyua
|
||||||
|
|
||||||
|
501 Acl4SSR全能优化版 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash.ini (推荐)
|
||||||
|
502 Acl4SSR精简优化版 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Mini.ini (推荐)
|
||||||
|
503 Acl4SSR全能优化+去广告增强 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Block.ini
|
||||||
|
504 Acl4SSR极简版 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Nano.ini (适合自建节点)
|
||||||
|
505 Acl4SSR分流&游戏增强 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Full.ini
|
||||||
|
506 Acl4SSR分流&游戏&去广告增强 https://github.com/juewuy/ShellCrash/raw/dev/rules/ShellClash_Full_Block.ini (低性能设备慎用)
|
||||||
|
507 洞主规则精简版 https://github.com/juewuy/ShellCrash/raw/dev/rules/lhie1_clash.ini
|
||||||
|
508 洞主规则重度完整版 https://github.com/juewuy/ShellCrash/raw/dev/rules/lhie1_dler.ini
|
||||||
|
509 Acl4SSR多国精简 https://github.com/juewuy/ShellCrash/raw/dev/rules/ACL4SSR_Online_Mini_MultiCountry.ini
|
||||||
|
510 Acl4SSR回国专用 https://github.com/juewuy/ShellCrash/raw/dev/rules/ACL4SSR_BackCN.ini
|
||||||
|
511 Acl4SSR增强国外GFW https://github.com/juewuy/ShellCrash/raw/dev/rules/ACL4SSR_WithGFW.ini (适合黑名单模式使用)
|
||||||
|
512 DustinWin全分组规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Full.ini
|
||||||
|
513 DustinWin无广告全分组规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Full_NoAds.ini
|
||||||
|
514 DustinWin精简规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Lite.ini (推荐)
|
||||||
|
515 DustinWin无广告精简规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Lite_NoAds.ini
|
||||||
|
516 DustinWin黑名单模式规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Blacklist.ini
|
||||||
|
517 DustinWin无广告黑名单模式规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Blacklist_NoAds.ini
|
||||||
|
518 DustinWin轻量规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Light.ini
|
||||||
|
519 DustinWin极简规则 https://raw.githubusercontent.com/DustinWin/ruleset_geodata/master/rule_templates/DustinWin_Nano.ini
|
||||||
19
public/task_en.list
Normal file
19
public/task_en.list
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#TaskID#TaskCommand#TaskDescription (use # as separator; # is not allowed in command or description)
|
||||||
|
|
||||||
|
101#$CRASHDIR/start.sh start#Start ShellCrash
|
||||||
|
102#$CRASHDIR/start.sh stop#Stop ShellCrash service
|
||||||
|
103#$CRASHDIR/start.sh restart#Restart ShellCrash service
|
||||||
|
104#$CRASHDIR/task/task.sh update_config#Update online subscriptions and restart service
|
||||||
|
105#$CRASHDIR/task/task.sh hotupdate#Hot update online subscriptions (without restart)
|
||||||
|
106#$CRASHDIR/task/task.sh web_save_auto#Automatically save panel configuration
|
||||||
|
107#$CRASHDIR/task/task.sh ntp#Automatically sync NTP time
|
||||||
|
|
||||||
|
111#$CRASHDIR/task/task.sh update_core#Automatically update core
|
||||||
|
112#$CRASHDIR/task/task.sh update_scripts#Automatically update scripts
|
||||||
|
113#$CRASHDIR/task/task.sh update_mmdb#Automatically update database files
|
||||||
|
|
||||||
|
121#$CRASHDIR/task/task.sh reset_firewall#Reset transparent routing firewall
|
||||||
|
122#sleep 70 && touch /etc/banner && reboot#Reboot router device – use with caution
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,25 +1,24 @@
|
|||||||
#DustinWin-geosite全分组规则+去广告
|
#DustinWin-geosite全分组规则+去广告
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🕹️ 游戏平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
||||||
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -34,20 +33,18 @@ proxy-groups:
|
|||||||
rules:
|
rules:
|
||||||
- GEOSITE,private,🔒 私有网络
|
- GEOSITE,private,🔒 私有网络
|
||||||
- GEOSITE,ads,🛑 广告域名
|
- GEOSITE,ads,🛑 广告域名
|
||||||
- GEOSITE,trackerslist,📋 Trackerslist
|
|
||||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||||
- GEOSITE,apple-cn,🍎 苹果服务
|
- GEOSITE,apple-cn,🍎 苹果服务
|
||||||
- GEOSITE,google-cn,🇬 谷歌服务
|
- GEOSITE,google-cn,🇬 谷歌服务
|
||||||
- GEOSITE,games-cn,🎮 游戏服务
|
- GEOSITE,games-cn,🎮 游戏服务
|
||||||
|
- GEOSITE,games,🕹️ 游戏平台
|
||||||
- GEOSITE,media,🌍 国外媒体
|
- GEOSITE,media,🌍 国外媒体
|
||||||
- GEOSITE,games,🎮 游戏平台
|
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,media,🌍 国外媒体
|
|
||||||
- GEOIP,games,🎮 游戏平台
|
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
|
- GEOIP,media,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
#DustinWin-geosite全分组规则
|
#DustinWin-geosite全分组规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🕹️ 游戏平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -30,20 +29,18 @@ proxy-groups:
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
- GEOSITE,private,🔒 私有网络
|
- GEOSITE,private,🔒 私有网络
|
||||||
- GEOSITE,trackerslist,📋 Trackerslist
|
|
||||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||||
- GEOSITE,apple-cn,🍎 苹果服务
|
- GEOSITE,apple-cn,🍎 苹果服务
|
||||||
- GEOSITE,google-cn,🇬 谷歌服务
|
- GEOSITE,google-cn,🇬 谷歌服务
|
||||||
- GEOSITE,games-cn,🎮 游戏服务
|
- GEOSITE,games-cn,🎮 游戏服务
|
||||||
|
- GEOSITE,games,🕹️ 游戏平台
|
||||||
- GEOSITE,media,🌍 国外媒体
|
- GEOSITE,media,🌍 国外媒体
|
||||||
- GEOSITE,games,🎮 游戏平台
|
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,media,🌍 国外媒体
|
|
||||||
- GEOIP,games,🎮 游戏平台
|
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
|
- GEOIP,media,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
#DustinWin-gesite轻量规则
|
#DustinWin-gesite轻量规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [全球直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -20,9 +20,9 @@ proxy-groups:
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
- GEOSITE,private,🔒 私有网络
|
- GEOSITE,private,🔒 私有网络
|
||||||
- GEOSITE,tld-proxy,🧱 代理域名
|
- GEOSITE,tld-proxy,🌎 国外域名
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,23 +1,22 @@
|
|||||||
#DustinWin-geosite标准规则+去广告
|
#DustinWin-geosite标准规则+去广告
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
||||||
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -32,16 +31,15 @@ proxy-groups:
|
|||||||
rules:
|
rules:
|
||||||
- GEOSITE,private,🔒 私有网络
|
- GEOSITE,private,🔒 私有网络
|
||||||
- GEOSITE,ads,🛑 广告域名
|
- GEOSITE,ads,🛑 广告域名
|
||||||
- GEOSITE,trackerslist,📋 Trackerslist
|
|
||||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||||
- GEOSITE,apple-cn,🍎 苹果服务
|
- GEOSITE,apple-cn,🍎 苹果服务
|
||||||
- GEOSITE,google-cn,🇬 谷歌服务
|
- GEOSITE,google-cn,🇬 谷歌服务
|
||||||
- GEOSITE,games-cn,🎮 游戏服务
|
- GEOSITE,games-cn,🎮 游戏服务
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,20 +1,19 @@
|
|||||||
#DustinWin-geosite标准规则
|
#DustinWin-geosite标准规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -28,16 +27,15 @@ proxy-groups:
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
- GEOSITE,private,🔒 私有网络
|
- GEOSITE,private,🔒 私有网络
|
||||||
- GEOSITE,trackerslist,📋 Trackerslist
|
|
||||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||||
- GEOSITE,apple-cn,🍎 苹果服务
|
- GEOSITE,apple-cn,🍎 苹果服务
|
||||||
- GEOSITE,google-cn,🇬 谷歌服务
|
- GEOSITE,google-cn,🇬 谷歌服务
|
||||||
- GEOSITE,games-cn,🎮 游戏服务
|
- GEOSITE,games-cn,🎮 游戏服务
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,27 +1,26 @@
|
|||||||
#DustinWin-ruleset全分组规则+去广告
|
#DustinWin-ruleset全分组规则+去广告
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🕹️ 游戏平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🎥 奈飞视频, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🎥 奈飞视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🎯 全球直连, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
||||||
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -34,28 +33,20 @@ proxy-groups:
|
|||||||
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 100, include-all: true, filter: "(?i)(🇺🇸|美|us|unitedstates|united states)"}
|
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 100, include-all: true, filter: "(?i)(🇺🇸|美|us|unitedstates|united states)"}
|
||||||
|
|
||||||
rule-providers:
|
rule-providers:
|
||||||
private:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/private.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/private.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
ads:
|
ads:
|
||||||
type: http
|
type: http
|
||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/ads.mrs
|
path: ./ruleset/ads.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/ads.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ads.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
trackerslist:
|
private:
|
||||||
type: http
|
type: http
|
||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/trackerslist.mrs
|
path: ./ruleset/private.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/trackerslist.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
microsoft-cn:
|
microsoft-cn:
|
||||||
@@ -63,7 +54,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/microsoft-cn.mrs
|
path: ./ruleset/microsoft-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/microsoft-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/microsoft-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
apple-cn:
|
apple-cn:
|
||||||
@@ -71,7 +62,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/apple-cn.mrs
|
path: ./ruleset/apple-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/apple-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/apple-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
google-cn:
|
google-cn:
|
||||||
@@ -79,7 +70,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/google-cn.mrs
|
path: ./ruleset/google-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/google-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/google-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
games-cn:
|
games-cn:
|
||||||
@@ -87,15 +78,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/games-cn.mrs
|
path: ./ruleset/games-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games-cn.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
media:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/media.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/media.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
games:
|
games:
|
||||||
@@ -103,7 +86,31 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/games.mrs
|
path: ./ruleset/games.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
netflix:
|
||||||
|
type: http
|
||||||
|
behavior: domain
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/netflix.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/netflix.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
youtube:
|
||||||
|
type: http
|
||||||
|
behavior: domain
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/youtube.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/youtube.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
media:
|
||||||
|
type: http
|
||||||
|
behavior: domain
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/media.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/media.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
ai:
|
ai:
|
||||||
@@ -111,7 +118,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/ai.mrs
|
path: ./ruleset/ai.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/ai.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ai.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
networktest:
|
networktest:
|
||||||
@@ -119,7 +126,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/networktest.mrs
|
path: ./ruleset/networktest.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/networktest.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/networktest.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
@@ -127,7 +134,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/proxy.mrs
|
path: ./ruleset/proxy.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/proxy.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/proxy.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cn:
|
cn:
|
||||||
@@ -135,7 +142,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cn.mrs
|
path: ./ruleset/cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
privateip:
|
privateip:
|
||||||
@@ -143,7 +150,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/privateip.mrs
|
path: ./ruleset/privateip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/privateip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/privateip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cnip:
|
cnip:
|
||||||
@@ -151,23 +158,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cnip.mrs
|
path: ./ruleset/cnip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cnip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
mediaip:
|
|
||||||
type: http
|
|
||||||
behavior: ipcidr
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/mediaip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/mediaip.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
gamesip:
|
|
||||||
type: http
|
|
||||||
behavior: ipcidr
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/gamesip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/gamesip.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
telegramip:
|
telegramip:
|
||||||
@@ -175,26 +166,43 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/telegramip.mrs
|
path: ./ruleset/telegramip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
netflixip:
|
||||||
|
type: http
|
||||||
|
behavior: ipcidr
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/netflixip.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/netflixip.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
mediaip:
|
||||||
|
type: http
|
||||||
|
behavior: ipcidr
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/mediaip.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/mediaip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,private,🔒 私有网络
|
- RULE-SET,private,🔒 私有网络
|
||||||
- RULE-SET,ads,🛑 广告域名
|
- RULE-SET,ads,🛑 广告域名
|
||||||
- RULE-SET,trackerslist,📋 Trackerslist
|
|
||||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||||
- RULE-SET,apple-cn,🍎 苹果服务
|
- RULE-SET,apple-cn,🍎 苹果服务
|
||||||
- RULE-SET,google-cn,🇬 谷歌服务
|
- RULE-SET,google-cn,🇬 谷歌服务
|
||||||
- RULE-SET,games-cn,🎮 游戏服务
|
- RULE-SET,games-cn,🎮 游戏服务
|
||||||
|
- RULE-SET,games,🕹️ 游戏平台
|
||||||
|
- RULE-SET,netflix,🎥 奈飞视频
|
||||||
|
- RULE-SET,youtube,📹 油管视频
|
||||||
- RULE-SET,media,🌍 国外媒体
|
- RULE-SET,media,🌍 国外媒体
|
||||||
- RULE-SET,games,🎮 游戏平台
|
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,mediaip,🌍 国外媒体
|
|
||||||
- RULE-SET,gamesip,🎮 游戏平台
|
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
|
- RULE-SET,netflixip,🎥 奈飞视频
|
||||||
|
- RULE-SET,mediaip,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,24 +1,23 @@
|
|||||||
#DustinWin-ruleset全分组规则
|
#DustinWin-ruleset全分组规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🕹️ 游戏平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🎥 奈飞视频, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🎥 奈飞视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🎯 全球直连, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -36,15 +35,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/private.mrs
|
path: ./ruleset/private.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/private.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
trackerslist:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/trackerslist.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/trackerslist.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
microsoft-cn:
|
microsoft-cn:
|
||||||
@@ -52,7 +43,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/microsoft-cn.mrs
|
path: ./ruleset/microsoft-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/microsoft-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/microsoft-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
apple-cn:
|
apple-cn:
|
||||||
@@ -60,7 +51,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/apple-cn.mrs
|
path: ./ruleset/apple-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/apple-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/apple-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
google-cn:
|
google-cn:
|
||||||
@@ -68,7 +59,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/google-cn.mrs
|
path: ./ruleset/google-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/google-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/google-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
games-cn:
|
games-cn:
|
||||||
@@ -76,31 +67,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/games-cn.mrs
|
path: ./ruleset/games-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games-cn.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
netflix:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/netflix.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/netflix.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
youtube:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/youtube.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/youtube.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
media:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/media.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/media.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
games:
|
games:
|
||||||
@@ -108,7 +75,31 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/games.mrs
|
path: ./ruleset/games.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
netflix:
|
||||||
|
type: http
|
||||||
|
behavior: domain
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/netflix.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/netflix.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
youtube:
|
||||||
|
type: http
|
||||||
|
behavior: domain
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/youtube.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/youtube.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
media:
|
||||||
|
type: http
|
||||||
|
behavior: domain
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/media.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/media.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
ai:
|
ai:
|
||||||
@@ -116,7 +107,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/ai.mrs
|
path: ./ruleset/ai.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/ai.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ai.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
networktest:
|
networktest:
|
||||||
@@ -124,7 +115,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/networktest.mrs
|
path: ./ruleset/networktest.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/networktest.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/networktest.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
@@ -132,7 +123,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/proxy.mrs
|
path: ./ruleset/proxy.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/proxy.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/proxy.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cn:
|
cn:
|
||||||
@@ -140,7 +131,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cn.mrs
|
path: ./ruleset/cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
privateip:
|
privateip:
|
||||||
@@ -148,7 +139,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/privateip.mrs
|
path: ./ruleset/privateip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/privateip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/privateip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cnip:
|
cnip:
|
||||||
@@ -156,31 +147,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cnip.mrs
|
path: ./ruleset/cnip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cnip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
netflixip:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/netflixip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/netflixip.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
mediaip:
|
|
||||||
type: http
|
|
||||||
behavior: ipcidr
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/mediaip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/mediaip.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
gamesip:
|
|
||||||
type: http
|
|
||||||
behavior: ipcidr
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/gamesip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/gamesip.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
telegramip:
|
telegramip:
|
||||||
@@ -188,28 +155,42 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/telegramip.mrs
|
path: ./ruleset/telegramip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
netflixip:
|
||||||
|
type: http
|
||||||
|
behavior: ipcidr
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/netflixip.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/netflixip.mrs"
|
||||||
|
interval: 86400
|
||||||
|
|
||||||
|
mediaip:
|
||||||
|
type: http
|
||||||
|
behavior: ipcidr
|
||||||
|
format: mrs
|
||||||
|
path: ./ruleset/mediaip.mrs
|
||||||
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/mediaip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,private,🔒 私有网络
|
- RULE-SET,private,🔒 私有网络
|
||||||
- RULE-SET,trackerslist,📋 Trackerslist
|
|
||||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||||
- RULE-SET,apple-cn,🍎 苹果服务
|
- RULE-SET,apple-cn,🍎 苹果服务
|
||||||
- RULE-SET,google-cn,🇬 谷歌服务
|
- RULE-SET,google-cn,🇬 谷歌服务
|
||||||
- RULE-SET,games-cn,🎮 游戏服务
|
- RULE-SET,games-cn,🎮 游戏服务
|
||||||
|
- RULE-SET,games,🕹️ 游戏平台
|
||||||
- RULE-SET,netflix,🎥 奈飞视频
|
- RULE-SET,netflix,🎥 奈飞视频
|
||||||
- RULE-SET,youtube,📹 油管视频
|
- RULE-SET,youtube,📹 油管视频
|
||||||
- RULE-SET,media,🌍 国外媒体
|
- RULE-SET,media,🌍 国外媒体
|
||||||
- RULE-SET,games,🎮 游戏平台
|
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- RULE-SET,netflixip,🎥 奈飞视频
|
- RULE-SET,netflixip,🎥 奈飞视频
|
||||||
- RULE-SET,mediaip,🌍 国外媒体
|
- RULE-SET,mediaip,🌍 国外媒体
|
||||||
- RULE-SET,gamesip,🎮 游戏平台
|
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
#DustinWin-ruleset轻量规则
|
#DustinWin-ruleset轻量规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, DIRECT]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -17,20 +18,12 @@ proxy-groups:
|
|||||||
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 100, include-all: true, filter: "(?i)(🇺🇸|美|us|unitedstates|united states)"}
|
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 100, include-all: true, filter: "(?i)(🇺🇸|美|us|unitedstates|united states)"}
|
||||||
|
|
||||||
rule-providers:
|
rule-providers:
|
||||||
cn:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/cn.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cn.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
type: http
|
type: http
|
||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/private.mrs
|
path: ./ruleset/private.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/private.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
tld-proxy:
|
tld-proxy:
|
||||||
@@ -38,7 +31,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/tld-proxy.mrs
|
path: ./ruleset/tld-proxy.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/tld-proxy.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/tld-proxy.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
@@ -46,7 +39,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/proxy.mrs
|
path: ./ruleset/proxy.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/proxy.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/proxy.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
privateip:
|
privateip:
|
||||||
@@ -54,7 +47,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/privateip.mrs
|
path: ./ruleset/privateip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/privateip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/privateip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cnip:
|
cnip:
|
||||||
@@ -62,7 +55,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cnip.mrs
|
path: ./ruleset/cnip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cnip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
telegramip:
|
telegramip:
|
||||||
@@ -70,15 +63,14 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/telegramip.mrs
|
path: ./ruleset/telegramip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,private,DIRECT
|
- RULE-SET,private,DIRECT
|
||||||
- RULE-SET,tld-proxy,🧱 代理域名
|
- RULE-SET,tld-proxy,🌎 国外域名
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🎯 全球直连
|
|
||||||
- RULE-SET,privateip,DIRECT,no-resolve
|
- RULE-SET,privateip,DIRECT,no-resolve
|
||||||
- RULE-SET,cnip,🎯 全球直连
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,23 +1,22 @@
|
|||||||
#DustinWin-ruleset标准规则+去广告
|
#DustinWin-ruleset标准规则+去广告
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], hidden: true}
|
||||||
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
- {name: 🟢 全球绕过, type: select, proxies: [PASS], hidden: true}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -35,7 +34,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/private.mrs
|
path: ./ruleset/private.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/private.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
ads:
|
ads:
|
||||||
@@ -43,15 +42,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/ads.mrs
|
path: ./ruleset/ads.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/ads.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ads.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
trackerslist:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/trackerslist.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/trackerslist.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
microsoft-cn:
|
microsoft-cn:
|
||||||
@@ -59,7 +50,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/microsoft-cn.mrs
|
path: ./ruleset/microsoft-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/microsoft-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/microsoft-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
apple-cn:
|
apple-cn:
|
||||||
@@ -67,7 +58,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/apple-cn.mrs
|
path: ./ruleset/apple-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/apple-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/apple-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
google-cn:
|
google-cn:
|
||||||
@@ -75,7 +66,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/google-cn.mrs
|
path: ./ruleset/google-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/google-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/google-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
games-cn:
|
games-cn:
|
||||||
@@ -83,7 +74,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/games-cn.mrs
|
path: ./ruleset/games-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
ai:
|
ai:
|
||||||
@@ -91,7 +82,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/ai.mrs
|
path: ./ruleset/ai.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/ai.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ai.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
networktest:
|
networktest:
|
||||||
@@ -99,7 +90,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/networktest.mrs
|
path: ./ruleset/networktest.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/networktest.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/networktest.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
@@ -107,7 +98,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/proxy.mrs
|
path: ./ruleset/proxy.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/proxy.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/proxy.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cn:
|
cn:
|
||||||
@@ -115,7 +106,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cn.mrs
|
path: ./ruleset/cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
privateip:
|
privateip:
|
||||||
@@ -123,7 +114,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/privateip.mrs
|
path: ./ruleset/privateip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/privateip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/privateip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cnip:
|
cnip:
|
||||||
@@ -131,7 +122,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cnip.mrs
|
path: ./ruleset/cnip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cnip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
telegramip:
|
telegramip:
|
||||||
@@ -139,22 +130,21 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/telegramip.mrs
|
path: ./ruleset/telegramip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,private,🔒 私有网络
|
- RULE-SET,private,🔒 私有网络
|
||||||
- RULE-SET,ads,🛑 广告域名
|
- RULE-SET,ads,🛑 广告域名
|
||||||
- RULE-SET,trackerslist,📋 Trackerslist
|
|
||||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||||
- RULE-SET,apple-cn,🍎 苹果服务
|
- RULE-SET,apple-cn,🍎 苹果服务
|
||||||
- RULE-SET,google-cn,🇬 谷歌服务
|
- RULE-SET,google-cn,🇬 谷歌服务
|
||||||
- RULE-SET,games-cn,🎮 游戏服务
|
- RULE-SET,games-cn,🎮 游戏服务
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,20 +1,19 @@
|
|||||||
#DustinWin-ruleset标准规则
|
#DustinWin-ruleset标准规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🎮 游戏服务, type: select, proxies: [🎯 本地直连, 👑 高级节点, 🚀 节点选择]}
|
||||||
- {name: 🎮 游戏服务, type: select, proxies: [🎯 全球直连, 👑 高级节点, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||||
|
|
||||||
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
- {name: 👑 高级节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(专线|专用|高级|直连|急速|高倍率|游戏|game|IEPL|IPLC|AIA|CTM|CC|AC)"}
|
||||||
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
- {name: 📉 省流节点, type: url-test, tolerance: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||||
@@ -32,15 +31,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/private.mrs
|
path: ./ruleset/private.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/private.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
trackerslist:
|
|
||||||
type: http
|
|
||||||
behavior: domain
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/trackerslist.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/trackerslist.mrs"
|
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
microsoft-cn:
|
microsoft-cn:
|
||||||
@@ -48,7 +39,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/microsoft-cn.mrs
|
path: ./ruleset/microsoft-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/microsoft-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/microsoft-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
apple-cn:
|
apple-cn:
|
||||||
@@ -56,7 +47,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/apple-cn.mrs
|
path: ./ruleset/apple-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/apple-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/apple-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
google-cn:
|
google-cn:
|
||||||
@@ -64,7 +55,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/google-cn.mrs
|
path: ./ruleset/google-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/google-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/google-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
games-cn:
|
games-cn:
|
||||||
@@ -72,7 +63,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/games-cn.mrs
|
path: ./ruleset/games-cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games-cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games-cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
ai:
|
ai:
|
||||||
@@ -80,7 +71,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/ai.mrs
|
path: ./ruleset/ai.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/ai.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ai.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
networktest:
|
networktest:
|
||||||
@@ -88,7 +79,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/networktest.mrs
|
path: ./ruleset/networktest.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/networktest.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/networktest.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
@@ -96,7 +87,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/proxy.mrs
|
path: ./ruleset/proxy.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/proxy.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/proxy.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cn:
|
cn:
|
||||||
@@ -104,7 +95,7 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cn.mrs
|
path: ./ruleset/cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cn-lite.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
privateip:
|
privateip:
|
||||||
@@ -112,7 +103,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/privateip.mrs
|
path: ./ruleset/privateip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/privateip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/privateip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
cnip:
|
cnip:
|
||||||
@@ -120,7 +111,7 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cnip.mrs
|
path: ./ruleset/cnip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cnip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
telegramip:
|
telegramip:
|
||||||
@@ -128,21 +119,20 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/telegramip.mrs
|
path: ./ruleset/telegramip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,private,🔒 私有网络
|
- RULE-SET,private,🔒 私有网络
|
||||||
- RULE-SET,trackerslist,📋 Trackerslist
|
|
||||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||||
- RULE-SET,apple-cn,🍎 苹果服务
|
- RULE-SET,apple-cn,🍎 苹果服务
|
||||||
- RULE-SET,google-cn,🇬 谷歌服务
|
- RULE-SET,google-cn,🇬 谷歌服务
|
||||||
- RULE-SET,games-cn,🎮 游戏服务
|
- RULE-SET,games-cn,🎮 游戏服务
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#ShellCrash-geosite极简规则
|
#ShellCrash-geosite极简规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [{providers_tags}], include-all: true}
|
- {name: 🚀 节点选择, type: select, proxies: [{providers_tags}], include-all: true}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||||
rules:
|
rules:
|
||||||
- GEOIP,cn,🎯 全球直连
|
- GEOIP,cn,🎯 本地直连
|
||||||
- MATCH,🚀 节点选择
|
- MATCH,🚀 节点选择
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ proxy-groups:
|
|||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🧲 BT下载, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
|
||||||
- {name: 📈 网络测速, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📈 网络测速, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: ↔️ 直连软件, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, {providers_tags}]}
|
- {name: ↔️ 直连软件, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, {providers_tags}]}
|
||||||
- {name: 🀄️ 国内流量, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, {providers_tags}]}
|
- {name: 🀄️ 国内流量, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, {providers_tags}]}
|
||||||
@@ -85,13 +84,6 @@ rule-providers:
|
|||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
proxy: DIRECT
|
proxy: DIRECT
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/telegramip.mrs"
|
||||||
trackerslist:
|
|
||||||
type: http
|
|
||||||
format: mrs
|
|
||||||
interval: 86400
|
|
||||||
behavior: domain
|
|
||||||
proxy: DIRECT
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/trackerslist.mrs"
|
|
||||||
applications:
|
applications:
|
||||||
type: http
|
type: http
|
||||||
format: text
|
format: text
|
||||||
@@ -169,13 +161,6 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
proxy: DIRECT
|
proxy: DIRECT
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
|
||||||
gamesip:
|
|
||||||
type: http
|
|
||||||
format: mrs
|
|
||||||
interval: 86400
|
|
||||||
behavior: ipcidr
|
|
||||||
proxy: DIRECT
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/gamesip.mrs"
|
|
||||||
mediaip:
|
mediaip:
|
||||||
type: http
|
type: http
|
||||||
format: mrs
|
format: mrs
|
||||||
@@ -231,7 +216,6 @@ rules:
|
|||||||
|
|
||||||
- RULE-SET,networktest,📈 网络测速
|
- RULE-SET,networktest,📈 网络测速
|
||||||
- RULE-SET,applications,↔️ 直连软件
|
- RULE-SET,applications,↔️ 直连软件
|
||||||
- RULE-SET,trackerslist,🧲 BT下载
|
|
||||||
- RULE-SET,apple-cn,🍎 苹果服务
|
- RULE-SET,apple-cn,🍎 苹果服务
|
||||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||||
- RULE-SET,google-cn,🇬 谷歌服务
|
- RULE-SET,google-cn,🇬 谷歌服务
|
||||||
@@ -247,7 +231,6 @@ rules:
|
|||||||
|
|
||||||
- RULE-SET,proxy,🌐 国际流量
|
- RULE-SET,proxy,🌐 国际流量
|
||||||
- RULE-SET,cn,🀄️ 国内流量
|
- RULE-SET,cn,🀄️ 国内流量
|
||||||
- RULE-SET,gamesip,🎮 外服游戏
|
|
||||||
- RULE-SET,mediaip,🌍 国际媒体
|
- RULE-SET,mediaip,🌍 国际媒体
|
||||||
- RULE-SET,cnip,🀄️ 国内流量
|
- RULE-SET,cnip,🀄️ 国内流量
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
#ShellCrash-ruleset极简规则
|
#ShellCrash-ruleset极简规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [{providers_tags}], include-all: true}
|
- {name: 🚀 节点选择, type: select, proxies: [{providers_tags}], include-all: true}
|
||||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||||
rule-providers:
|
rule-providers:
|
||||||
cn:
|
cn:
|
||||||
type: http
|
type: http
|
||||||
behavior: domain
|
behavior: domain
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cn.mrs
|
path: ./ruleset/cn.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cn.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cn.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
privateip:
|
privateip:
|
||||||
type: http
|
type: http
|
||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/privateip.mrs
|
path: ./ruleset/privateip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/privateip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/privateip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
cnip:
|
cnip:
|
||||||
type: http
|
type: http
|
||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
format: mrs
|
format: mrs
|
||||||
path: ./ruleset/cnip.mrs
|
path: ./ruleset/cnip.mrs
|
||||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/cnip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,privateip,🎯 全球直连,no-resolve
|
- RULE-SET,privateip,🎯 本地直连,no-resolve
|
||||||
- RULE-SET,cn,🎯 全球直连
|
- RULE-SET,cn,🎯 本地直连
|
||||||
- RULE-SET,cnip,🎯 全球直连
|
- RULE-SET,cnip,🎯 本地直连
|
||||||
- MATCH,🚀 节点选择
|
- MATCH,🚀 节点选择
|
||||||
|
|||||||
@@ -3,19 +3,18 @@
|
|||||||
"outbounds": [
|
"outbounds": [
|
||||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
{ "tag": "🕹️ 游戏平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🎥 奈飞视频", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🎥 奈飞视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🎮 游戏平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
||||||
@@ -36,37 +35,27 @@
|
|||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "ads" ], "outbound": "🛑 广告域名" },
|
{ "rule_set": [ "ads" ], "outbound": "🛑 广告域名" },
|
||||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
|
||||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||||
|
{ "rule_set": [ "games" ], "outbound": "🕹️ 游戏平台" },
|
||||||
{ "rule_set": [ "netflix" ], "outbound": "🎥 奈飞视频" },
|
{ "rule_set": [ "netflix" ], "outbound": "🎥 奈飞视频" },
|
||||||
{ "rule_set": [ "youtube" ], "outbound": "📹 油管视频" },
|
{ "rule_set": [ "youtube" ], "outbound": "📹 油管视频" },
|
||||||
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
||||||
{ "rule_set": [ "games" ], "outbound": "🎮 游戏平台" },
|
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" },
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
|
||||||
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
||||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" },
|
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
||||||
{ "rule_set": [ "gamesip" ], "outbound": "🎮 游戏平台" }
|
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
{
|
|
||||||
"tag": "private",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/private.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "ads",
|
"tag": "ads",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -76,11 +65,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "trackerslist",
|
"tag": "private",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/trackerslist.srs",
|
"path": "./ruleset/private.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/trackerslist.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -115,6 +104,14 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tag": "games",
|
||||||
|
"type": "remote",
|
||||||
|
"format": "binary",
|
||||||
|
"path": "./ruleset/games.srs",
|
||||||
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs",
|
||||||
|
"download_detour": "DIRECT"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tag": "netflix",
|
"tag": "netflix",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -139,14 +136,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "games",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/games.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "ai",
|
"tag": "ai",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -180,11 +169,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "privateip",
|
"tag": "telegramip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/privateip.srs",
|
"path": "./ruleset/telegramip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -210,22 +199,6 @@
|
|||||||
"path": "./ruleset/mediaip.srs",
|
"path": "./ruleset/mediaip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/mediaip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/mediaip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "gamesip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/gamesip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/gamesip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "telegramip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/telegramip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"final": "🐟 漏网之鱼"
|
"final": "🐟 漏网之鱼"
|
||||||
|
|||||||
@@ -3,19 +3,18 @@
|
|||||||
"outbounds": [
|
"outbounds": [
|
||||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
{ "tag": "🕹️ 游戏平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🎥 奈飞视频", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🎥 奈飞视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🎮 游戏平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||||
@@ -33,27 +32,25 @@
|
|||||||
"route": {
|
"route": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
|
||||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||||
|
{ "rule_set": [ "games" ], "outbound": "🕹️ 游戏平台" },
|
||||||
{ "rule_set": [ "netflix" ], "outbound": "🎥 奈飞视频" },
|
{ "rule_set": [ "netflix" ], "outbound": "🎥 奈飞视频" },
|
||||||
{ "rule_set": [ "youtube" ], "outbound": "📹 油管视频" },
|
{ "rule_set": [ "youtube" ], "outbound": "📹 油管视频" },
|
||||||
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
||||||
{ "rule_set": [ "games" ], "outbound": "🎮 游戏平台" },
|
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" },
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
|
||||||
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
||||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" },
|
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
||||||
{ "rule_set": [ "gamesip" ], "outbound": "🎮 游戏平台" }
|
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
{
|
{
|
||||||
@@ -64,14 +61,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "trackerslist",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/trackerslist.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/trackerslist.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "microsoft-cn",
|
"tag": "microsoft-cn",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -104,6 +93,14 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"tag": "games",
|
||||||
|
"type": "remote",
|
||||||
|
"format": "binary",
|
||||||
|
"path": "./ruleset/games.srs",
|
||||||
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs",
|
||||||
|
"download_detour": "DIRECT"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"tag": "netflix",
|
"tag": "netflix",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -128,14 +125,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "games",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/games.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "ai",
|
"tag": "ai",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -169,11 +158,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "privateip",
|
"tag": "telegramip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/privateip.srs",
|
"path": "./ruleset/telegramip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -199,22 +188,6 @@
|
|||||||
"path": "./ruleset/mediaip.srs",
|
"path": "./ruleset/mediaip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/mediaip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/mediaip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "gamesip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/gamesip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/gamesip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "telegramip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/telegramip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"final": "🐟 漏网之鱼"
|
"final": "🐟 漏网之鱼"
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
{
|
{
|
||||||
"outbounds": [
|
"outbounds": [
|
||||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||||
@@ -20,24 +21,15 @@
|
|||||||
"route": {
|
"route": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "tld-proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "tld-proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🎯 本地直连" }
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
{
|
|
||||||
"tag": "cn",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/cn.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "private",
|
"tag": "private",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -63,11 +55,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "privateip",
|
"tag": "telegramip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/privateip.srs",
|
"path": "./ruleset/telegramip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -77,14 +69,6 @@
|
|||||||
"path": "./ruleset/cnip.srs",
|
"path": "./ruleset/cnip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "telegramip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/telegramip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"final": "🐟 漏网之鱼"
|
"final": "🐟 漏网之鱼"
|
||||||
|
|||||||
@@ -3,15 +3,14 @@
|
|||||||
"outbounds": [
|
"outbounds": [
|
||||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
|
||||||
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
||||||
@@ -32,30 +31,21 @@
|
|||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "ads" ], "outbound": "🛑 广告域名" },
|
{ "rule_set": [ "ads" ], "outbound": "🛑 广告域名" },
|
||||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
|
||||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" }
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
{
|
|
||||||
"tag": "private",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/private.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "ads",
|
"tag": "ads",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -65,11 +55,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "trackerslist",
|
"tag": "private",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/trackerslist.srs",
|
"path": "./ruleset/private.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/trackerslist.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -137,11 +127,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "privateip",
|
"tag": "telegramip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/privateip.srs",
|
"path": "./ruleset/telegramip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -151,14 +141,6 @@
|
|||||||
"path": "./ruleset/cnip.srs",
|
"path": "./ruleset/cnip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "telegramip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/telegramip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"final": "🐟 漏网之鱼"
|
"final": "🐟 漏网之鱼"
|
||||||
|
|||||||
@@ -3,15 +3,14 @@
|
|||||||
"outbounds": [
|
"outbounds": [
|
||||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
|
||||||
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
{ "tag": "🎮 游戏服务", "type": "selector", "outbounds": [ "🎯 本地直连", "👑 高级节点", "🚀 节点选择" ] },
|
||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||||
@@ -29,20 +28,19 @@
|
|||||||
"route": {
|
"route": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
|
||||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" }
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||||
|
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
@@ -54,14 +52,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "trackerslist",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/trackerslist.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/trackerslist.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "microsoft-cn",
|
"tag": "microsoft-cn",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -127,11 +117,11 @@
|
|||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"tag": "privateip",
|
"tag": "telegramip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"format": "binary",
|
"format": "binary",
|
||||||
"path": "./ruleset/privateip.srs",
|
"path": "./ruleset/telegramip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -141,14 +131,6 @@
|
|||||||
"path": "./ruleset/cnip.srs",
|
"path": "./ruleset/cnip.srs",
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
|
||||||
{
|
|
||||||
"tag": "telegramip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/telegramip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"final": "🐟 漏网之鱼"
|
"final": "🐟 漏网之鱼"
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
||||||
{ "tag": "🧲 BT下载", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
|
||||||
{ "tag": "📈 网络测速", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
{ "tag": "📈 网络测速", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
||||||
{ "tag": "↔️ 直连软件", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", {providers_tags}] },
|
{ "tag": "↔️ 直连软件", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", {providers_tags}] },
|
||||||
{ "tag": "🀄️ 国内流量", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", {providers_tags}] },
|
{ "tag": "🀄️ 国内流量", "type": "selector", "outbounds": ["🎯 本地直连", "🚀 节点选择", "♻️ 自动选择", "🛠️ 手动切换", {providers_tags}] },
|
||||||
@@ -56,7 +55,6 @@
|
|||||||
|
|
||||||
{ "rule_set": ["networktest"], "outbound": "📈 网络测速" },
|
{ "rule_set": ["networktest"], "outbound": "📈 网络测速" },
|
||||||
{ "rule_set": ["applications"], "outbound": "↔️ 直连软件" },
|
{ "rule_set": ["applications"], "outbound": "↔️ 直连软件" },
|
||||||
{ "rule_set": ["trackerslist"], "outbound": "🧲 BT下载" },
|
|
||||||
{ "rule_set": ["apple-cn"], "outbound": "🍎 苹果服务" },
|
{ "rule_set": ["apple-cn"], "outbound": "🍎 苹果服务" },
|
||||||
{ "rule_set": ["microsoft-cn"], "outbound": "🪟 微软服务" },
|
{ "rule_set": ["microsoft-cn"], "outbound": "🪟 微软服务" },
|
||||||
{ "rule_set": ["google-cn"], "outbound": "🇬 谷歌服务" },
|
{ "rule_set": ["google-cn"], "outbound": "🇬 谷歌服务" },
|
||||||
@@ -77,7 +75,6 @@
|
|||||||
{ "rule_set": ["telegramip"], "outbound": "📲 电报消息" },
|
{ "rule_set": ["telegramip"], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" },
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" },
|
||||||
{ "rule_set": ["gamesip"], "outbound": "🎮 外服游戏" },
|
|
||||||
{ "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" },
|
{ "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" },
|
||||||
{ "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" }
|
{ "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" }
|
||||||
],
|
],
|
||||||
@@ -114,14 +111,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/applications.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/applications.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "trackerslist",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/trackerslist.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/trackerslist.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "apple-cn",
|
"tag": "apple-cn",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
@@ -242,14 +231,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "gamesip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/gamesip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/gamesip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "mediaip",
|
"tag": "mediaip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
],
|
],
|
||||||
"route": {
|
"route": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
@@ -21,14 +21,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "privateip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/privateip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "cnip",
|
"tag": "cnip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
||||||
[ -w "/var/mnt/cfg/firewall" ] && systype=ng_snapshot #NETGEAR设备
|
[ -w "/var/mnt/cfg/firewall" ] && systype=ng_snapshot #NETGEAR设备
|
||||||
#容器内环境
|
#容器内环境
|
||||||
grep -qE '/(docker|lxc|kubepods|crio|containerd)/' /proc/1/cgroup || [ -f /run/.containerenv ] || [ -f /.dockerenv ] && systype='container'
|
grep -qE '/(docker|lxc|kubepods|crio|containerd)/' /proc/1/cgroup 2>/dev/null || [ -f /run/.containerenv ] || [ -f /.dockerenv ] && systype='container'
|
||||||
#检查环境变量
|
#检查环境变量
|
||||||
[ "$systype" = 'container' ] && CRASHDIR='/etc/ShellCrash'
|
[ "$systype" = 'container' ] && CRASHDIR='/etc/ShellCrash'
|
||||||
[ -z "$CRASHDIR" ] && [ -n "$clashdir" ] && CRASHDIR="$clashdir"
|
[ -z "$CRASHDIR" ] && [ -n "$clashdir" ] && CRASHDIR="$clashdir"
|
||||||
@@ -37,11 +37,11 @@ mkdir -p "$CRASHDIR"/configs
|
|||||||
#判断系统类型写入不同的启动文件
|
#判断系统类型写入不同的启动文件
|
||||||
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
[ -w /usr/lib/systemd/system ] && sysdir=/usr/lib/systemd/system
|
||||||
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
[ -w /etc/systemd/system ] && sysdir=/etc/systemd/system
|
||||||
if [ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ]; then
|
if [ -f /etc/rc.common -a "$(cat /proc/1/comm 2>/dev/null)" = "procd" ]; then
|
||||||
#设为init.d方式启动
|
#设为init.d方式启动
|
||||||
cp -f "$CRASHDIR"/starts/shellcrash.procd /etc/init.d/shellcrash
|
cp -f "$CRASHDIR"/starts/shellcrash.procd /etc/init.d/shellcrash
|
||||||
chmod 755 /etc/init.d/shellcrash
|
chmod 755 /etc/init.d/shellcrash
|
||||||
elif [ -n "$sysdir" -a "$USER" = "root" -a "$(cat /proc/1/comm)" = "systemd" ]; then
|
elif [ -n "$sysdir" -a "$USER" = "root" -a "$(cat /proc/1/comm 2>/dev/null)" = "systemd" ]; then
|
||||||
#创建shellcrash用户
|
#创建shellcrash用户
|
||||||
userdel shellcrash 2>/dev/null
|
userdel shellcrash 2>/dev/null
|
||||||
sed -i '/0:7890/d' /etc/passwd
|
sed -i '/0:7890/d' /etc/passwd
|
||||||
@@ -81,11 +81,8 @@ done
|
|||||||
setconfig versionsh_l $version
|
setconfig versionsh_l $version
|
||||||
#生成用于执行启动服务的变量文件
|
#生成用于执行启动服务的变量文件
|
||||||
[ ! -f "$CRASHDIR"/configs/command.env ] && {
|
[ ! -f "$CRASHDIR"/configs/command.env ] && {
|
||||||
TMPDIR='/tmp/ShellCrash'
|
echo 'TMPDIR=/tmp/ShellCrash' > "$CRASHDIR"/configs/command.env
|
||||||
BINDIR="$CRASHDIR"
|
echo "BINDIR=$CRASHDIR" >> "$CRASHDIR"/configs/command.env
|
||||||
touch "$CRASHDIR"/configs/command.env
|
|
||||||
setconfig TMPDIR "$TMPDIR" "$CRASHDIR"/configs/command.env
|
|
||||||
setconfig BINDIR "$BINDIR" "$CRASHDIR"/configs/command.env
|
|
||||||
}
|
}
|
||||||
if [ -n "$(grep 'crashcore=singbox' "$CFG_PATH")" ]; then
|
if [ -n "$(grep 'crashcore=singbox' "$CFG_PATH")" ]; then
|
||||||
COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
|
COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
|
||||||
@@ -190,7 +187,7 @@ for file in config.yaml.bak user.yaml proxies.yaml proxy-groups.yaml rules.yaml
|
|||||||
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/yamls/"$file" 2>/dev/null
|
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/yamls/"$file" 2>/dev/null
|
||||||
done
|
done
|
||||||
[ ! -L "$CRASHDIR"/config.yaml ] && mv -f "$CRASHDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml 2>/dev/null
|
[ ! -L "$CRASHDIR"/config.yaml ] && mv -f "$CRASHDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml 2>/dev/null
|
||||||
for file in fake_ip_filter mac web_save servers.list fake_ip_filter.list fallback_filter.list singbox_providers.list clash_providers.list; do
|
for file in fake_ip_filter mac web_save servers_chs.list servers_en.list fake_ip_filter.list singbox_providers.list clash_providers.list; do
|
||||||
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/configs/"$file" 2>/dev/null
|
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/configs/"$file" 2>/dev/null
|
||||||
done
|
done
|
||||||
#配置文件改名
|
#配置文件改名
|
||||||
@@ -205,7 +202,7 @@ mv -f "$CRASHDIR"/*.mrs "$CRASHDIR"/ruleset/ 2>/dev/null
|
|||||||
for file in dropbear_rsa_host_key authorized_keys tun.ko ShellDDNS.sh; do
|
for file in dropbear_rsa_host_key authorized_keys tun.ko ShellDDNS.sh; do
|
||||||
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/tools/"$file" 2>/dev/null
|
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/tools/"$file" 2>/dev/null
|
||||||
done
|
done
|
||||||
for file in cron task.list; do
|
for file in cron task_chs.list task_en.list; do
|
||||||
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/task/"$file" 2>/dev/null
|
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/task/"$file" 2>/dev/null
|
||||||
done
|
done
|
||||||
mv -f "$CRASHDIR"/menus/task_cmd.sh "$CRASHDIR"/task/task.sh 2>/dev/null
|
mv -f "$CRASHDIR"/menus/task_cmd.sh "$CRASHDIR"/task/task.sh 2>/dev/null
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
SET_MENU_TITLE="功能设置菜单"
|
SET_MENU_TITLE="功能设置菜单"
|
||||||
SET_MENU_REDIR="路由模式设置:"
|
SET_MENU_REDIR="路由模式设置:"
|
||||||
SET_MENU_DNS="DNS设置: "
|
SET_MENU_DNS="DNS设置: "
|
||||||
SET_MENU_FW_FILTER="透明路由流量过滤"
|
SET_MENU_FW_FILTER="透明路由流量过滤:"
|
||||||
|
SET_MENU_FW_FILTER_DESC="端口、设备、协议或列表"
|
||||||
SET_MENU_SKIP_CERT="跳过证书验证:"
|
SET_MENU_SKIP_CERT="跳过证书验证:"
|
||||||
SET_MENU_SNIFFER="启用域名嗅探:"
|
SET_MENU_SNIFFER="启用域名嗅探:"
|
||||||
SET_MENU_ADV_PORT="自定义端口及密钥"
|
SET_MENU_ADV_PORT="自定义端口及密钥"
|
||||||
@@ -24,7 +25,7 @@ SET_SNIFFER_CORE_SWITCH="已自动切换至Meta内核(域名嗅探需要)"
|
|||||||
SET_SNIFFER_LOCKED="当前内核与DNS模式组合下,域名嗅探无法关闭!"
|
SET_SNIFFER_LOCKED="当前内核与DNS模式组合下,域名嗅探无法关闭!"
|
||||||
|
|
||||||
SET_CORE_RUNNING="检测到服务正在运行,需要先停止服务!"
|
SET_CORE_RUNNING="检测到服务正在运行,需要先停止服务!"
|
||||||
SET_CORE_STOP_CONFIRM="是否确认停止服务:"
|
SET_CORE_STOP_CONFIRM="是否确认停止服务?"
|
||||||
|
|
||||||
# =================================================
|
# =================================================
|
||||||
# Backup / Restore / Reset
|
# Backup / Restore / Reset
|
||||||
@@ -131,3 +132,33 @@ ADV_TABLE_INPUT="请输入路由表编号(不清楚请勿修改,建议 102-1
|
|||||||
# =================================================
|
# =================================================
|
||||||
IPV6_REDIR="IPv6透明路由(劫持IPv6流量)"
|
IPV6_REDIR="IPv6透明路由(劫持IPv6流量)"
|
||||||
IPV6_DNS="IPv6-DNS解析(是否返回IPv6地址)"
|
IPV6_DNS="IPv6-DNS解析(是否返回IPv6地址)"
|
||||||
|
SET_YES="是"
|
||||||
|
SET_NO_BACK="否,返回上级菜单"
|
||||||
|
SET_SKIP_CERT_NOW="当前"
|
||||||
|
SET_ENABLED="已启用"
|
||||||
|
SET_DISABLED="已禁用"
|
||||||
|
SET_SKIP_CERT_ENABLE_Q="跳过本地证书验证,是否确认启用?"
|
||||||
|
SET_SKIP_CERT_DISABLE_Q="跳过本地证书验证,是否确认禁用?"
|
||||||
|
SET_SNIFFER_NOW="当前"
|
||||||
|
SET_SNIFFER_ENABLE_Q="域名嗅探,是否确认启用?"
|
||||||
|
SET_SNIFFER_DISABLE_Q="域名嗅探,是否确认禁用?"
|
||||||
|
SET_LANG_ZH="简体中文"
|
||||||
|
SET_LANG_EN="English"
|
||||||
|
SET_SWITCH_RERUN="切换成功!请重新运行脚本!"
|
||||||
|
SET_SWITCH_OK="切换成功!"
|
||||||
|
SET_MODE_SUFFIX="模式"
|
||||||
|
SET_SET_TO="设为"
|
||||||
|
SET_BYPASS_TCP="TCP旁路转发"
|
||||||
|
SET_BYPASS_TU="T&U旁路转发"
|
||||||
|
SET_BYPASS_TCP_DESC="仅转发TCP流量至旁路由"
|
||||||
|
SET_BYPASS_TU_DESC="转发TCP&UDP流量至旁路由"
|
||||||
|
SET_FW_AREA_CURRENT="当前路由劫持范围:"
|
||||||
|
SET_WARN="注意:"
|
||||||
|
SET_DESC="说明:"
|
||||||
|
SET_BYPASS_WARN_1="此功能存在多种风险如无网络基础请勿尝试!"
|
||||||
|
SET_BYPASS_WARN_2="如需代理UDP,请确保旁路由运行了支持UDP代理的模式!"
|
||||||
|
SET_BYPASS_WARN_3="如使用systemd方式启动,内核依然会空载运行,建议使用保守模式!"
|
||||||
|
SET_BYPASS_DESC_1="此功能不启动内核仅配置防火墙转发,且子设备无需额外设置网关DNS"
|
||||||
|
SET_BYPASS_DESC_2="支持防火墙分流及设备过滤,支持部分定时任务,但不支持ipv6"
|
||||||
|
SET_INPUT_BYPASS_IPV4="请直接输入旁路由IPV4地址"
|
||||||
|
SET_TIPS_ENTER_BACK="Tips:直接回车确认可返回上级菜单"
|
||||||
|
|||||||
100
scripts/lang/chs/5_task.lang
Normal file
100
scripts/lang/chs/5_task.lang
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# 推荐任务配置
|
||||||
|
TASK_RECOM_TITLE="是否启用以下推荐的自动任务配置:"
|
||||||
|
|
||||||
|
TASK_RECOM_ITEM_1="运行时每10分钟自动保存面板配置"
|
||||||
|
TASK_RECOM_ITEM_2="服务启动后自动同步 NTP 时间"
|
||||||
|
TASK_RECOM_ITEM_3="在每日的3点0分重启服务"
|
||||||
|
TASK5_RUN_TASK="执行任务:"
|
||||||
|
TASK5_CONFIRM_ADD_CRON="是否确认添加定时任务?"
|
||||||
|
TASK5_YES="是"
|
||||||
|
TASK5_NO="否"
|
||||||
|
TASK5_TASK_PREFIX="任务【"
|
||||||
|
TASK5_TASK_ADDED="】\033[32m已添加!\033[0m"
|
||||||
|
TASK5_USER_ADD_HINT1="命令可包含空格,请确保命令可执行!"
|
||||||
|
TASK5_USER_ADD_HINT2="请勿附带执行条件,执行条件请在命令添加完成后再返回设置!"
|
||||||
|
TASK5_USER_ADD_HINT3="亦可手动编辑"
|
||||||
|
TASK5_USER_ADD_HINT4="以添加命令"
|
||||||
|
TASK5_INPUT_CMD="请直接输入命令语句"
|
||||||
|
TASK5_OR_BACK="或输入 0 返回上级菜单"
|
||||||
|
TASK5_INPUT="请输入"
|
||||||
|
TASK5_CHECK_INPUT="请检查输入:"
|
||||||
|
TASK5_INPUT_REMARK="请输入任务备注"
|
||||||
|
TASK5_CUSTOM_TASK="自定义任务"
|
||||||
|
TASK5_CUSTOM_ADDED="自定义任务已添加!"
|
||||||
|
TASK5_INPUT_ERROR="输入错误,请重新输入!"
|
||||||
|
TASK5_USER_DEL_HINT1="请输入对应ID移除对应自定义任务(不会影响内置任务)"
|
||||||
|
TASK5_USER_DEL_HINT2="也可以手动编辑"
|
||||||
|
TASK5_NO_CUSTOM_TASK="你暂未添加任何自定义任务"
|
||||||
|
TASK5_SELECT_ADD="请选择需要添加的任务:"
|
||||||
|
TASK5_SELECT_COND="请选择任务"
|
||||||
|
TASK5_SELECT_COND2="执行条件:"
|
||||||
|
TASK5_COND_1="定时任务\033[32m每周执行\033[0m"
|
||||||
|
TASK5_COND_2="定时任务\033[32m每日执行\033[0m"
|
||||||
|
TASK5_COND_3="定时任务\033[32m每小时执行\033[0m"
|
||||||
|
TASK5_COND_4="定时任务\033[32m每分钟执行\033[0m"
|
||||||
|
TASK5_WARN_LINE1=" - - - - - - - - -\033[31m注意\033[0m- - - - - - - - -"
|
||||||
|
TASK5_WARN_LINE2=" 逻辑水平不及格的请勿使用下方触发条件!"
|
||||||
|
TASK5_WARN_LINE3=" - - - - - - - - - - - - - - - - - - - -"
|
||||||
|
TASK5_COND_5="服务\033[33m启动前执行\033[0m"
|
||||||
|
TASK5_COND_6="服务\033[33m启动后执行\033[0m"
|
||||||
|
TASK5_COND_7="服务\033[33m运行时每分钟执行\033[0m"
|
||||||
|
TASK5_COND_8="防火墙服务\033[33m重启后执行\033[0m"
|
||||||
|
TASK5_WEEK_HINT1="输入 1~7 对应\033[33m每周的指定某天\033[0m运行(7=周日)"
|
||||||
|
TASK5_WEEK_HINT2="输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行"
|
||||||
|
TASK5_WEEK_HINT3="输入 1~5 代表\033[36m周一至周五\033[0m运行"
|
||||||
|
TASK5_WEEK_INPUT="在每周哪天执行?"
|
||||||
|
TASK5_HOUR_INPUT1="想在该日的具体哪个小时执行?(0~23)"
|
||||||
|
TASK5_CRON_WEEK="在每周"
|
||||||
|
TASK5_CRON_WEEK2="的"
|
||||||
|
TASK5_OCLOCK="点整"
|
||||||
|
TASK5_DAY_HINT1="输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行"
|
||||||
|
TASK5_DAY_HINT2="输入 6~18 代表\033[36m早6点至晚18点间每小时\033[0m运行"
|
||||||
|
TASK5_HOUR_INPUT2="想在每日的具体哪个小时执行?(0~23)"
|
||||||
|
TASK5_MIN_INPUT="想在具体哪分钟执行?(0~59的整数)"
|
||||||
|
TASK5_CRON_DAY="在每日的"
|
||||||
|
TASK5_POINT="点"
|
||||||
|
TASK5_MINUTE="分"
|
||||||
|
TASK5_EVERY_HOUR_INPUT="想每隔多少小时执行一次?(1~23的整数)"
|
||||||
|
TASK5_EVERY="每隔"
|
||||||
|
TASK5_HOUR="小时"
|
||||||
|
TASK5_EVERY_MIN_INPUT="想每隔多少分钟执行一次?(1~59的整数)"
|
||||||
|
TASK5_MIN="分钟"
|
||||||
|
TASK5_BFSTART="服务启动前"
|
||||||
|
TASK5_AFSTART="服务启动后"
|
||||||
|
TASK5_RUNNING_HINT1="输入10即每隔10分钟运行一次,1440即每隔24小时运行一次"
|
||||||
|
TASK5_RUNNING_HINT2="大于60分钟的数值将按小时取整,且按当前时区记时"
|
||||||
|
TASK5_RUNNING_INPUT="想每隔多少分钟执行一次?(1~1440的整数)"
|
||||||
|
TASK5_RUNNING_PREFIX="运行时每"
|
||||||
|
TASK5_AFFW_HINT="该功能会将相关启动代码注入到/etc/init.d/firewall中"
|
||||||
|
TASK5_CONFIRM_CONTINUE="是否确认继续?"
|
||||||
|
TASK5_AFFW_PREFIX="防火墙重启后"
|
||||||
|
TASK5_GUARD_WORD="守护"
|
||||||
|
TASK5_OLD_PREFIX="旧版任务-"
|
||||||
|
TASK5_NONE_TO_MANAGE="当前没有可供管理的任务!"
|
||||||
|
TASK5_ADDED_TASKS="已添加的任务:"
|
||||||
|
TASK5_CLEAR_OLD="清空旧版任务"
|
||||||
|
TASK5_CLEAR_ALL="清空任务列表"
|
||||||
|
TASK5_OLD_CLEARED="旧版任务已清空!"
|
||||||
|
TASK5_ALL_CLEARED="全部任务已清空!"
|
||||||
|
TASK5_OLD_NOT_SUPPORT="旧版任务不支持管理,是否移除?"
|
||||||
|
TASK5_NO_BACK="否,返回上级菜单"
|
||||||
|
TASK5_CURRENT_TASK="当前任务为:"
|
||||||
|
TASK5_EDIT_TASK="\033[33m修改\033[0m当前任务"
|
||||||
|
TASK5_DEL_TASK="\033[31m删除\033[0m当前任务"
|
||||||
|
TASK5_RUN_ONCE="\033[32m立即执行\033[0m一次"
|
||||||
|
TASK5_VIEW_RECORD="查看\033[33m执行记录\033[0m"
|
||||||
|
TASK5_RUN_OK="执行成功!"
|
||||||
|
TASK5_RUN_FAIL="执行失败!"
|
||||||
|
TASK5_RECORD_NOT_FOUND="未找到相关执行记录!"
|
||||||
|
TASK5_USER_FILE_HEADER="#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)"
|
||||||
|
TASK5_MENU_TITLE="自动任务菜单"
|
||||||
|
TASK5_MENU_1="添加\033[32m自动任务\033[0m"
|
||||||
|
TASK5_MENU_2="管理\033[33m任务列表\033[0m"
|
||||||
|
TASK5_MENU_3="查看\033[36m任务日志\033[0m"
|
||||||
|
TASK5_MENU_4="配置\033[36m日志推送\033[0m"
|
||||||
|
TASK5_MENU_5="添加\033[33m自定义任务\033[0m"
|
||||||
|
TASK5_MENU_6="删除\033[33m自定义任务\033[0m"
|
||||||
|
TASK5_MENU_7="使用\033[32m推荐设置\033[0m"
|
||||||
|
TASK5_TASK_GREP="任务【"
|
||||||
|
TASK5_LOG_NOT_FOUND="未找到任务相关执行日志!"
|
||||||
|
TASK5_PUSH_HINT="请在日志工具中配置相关推送通道及推送开关"
|
||||||
67
scripts/lang/chs/6_core_config.lang
Normal file
67
scripts/lang/chs/6_core_config.lang
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
CORECFG_TITLE="配置文件管理"
|
||||||
|
CORECFG_HINT_SELECT_PROVIDER="输入数字可管理对应提供者"
|
||||||
|
CORECFG_MENU_A="\033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)"
|
||||||
|
CORECFG_MENU_B="\033[36m本地生成配置文件\033[0m"
|
||||||
|
CORECFG_MENU_C="\033[33m在线生成配置文件\033[0m"
|
||||||
|
CORECFG_MENU_D="\033[31m清空提供者列表\033[0m"
|
||||||
|
CORECFG_MENU_E="\033[36m自定义配置文件\033[0m"
|
||||||
|
CORECFG_CORE_ONLY="仅限Mihomo/singboxr内核使用,请更换内核!"
|
||||||
|
CORECFG_ADD_PROVIDER_FIRST="请先添加提供者!"
|
||||||
|
CORECFG_CLEAR_WARN="警告:这将删除所有提供者且无法还原!"
|
||||||
|
CORECFG_CLEAR_CONFIRM="是否确认清空提供者列表:"
|
||||||
|
CORECFG_YES="是"
|
||||||
|
CORECFG_NO="否"
|
||||||
|
CORECFG_NO_BACK="否,返回上级菜单"
|
||||||
|
CORECFG_INPUT_ALNUM="请输入对应字母或数字"
|
||||||
|
CORECFG_INPUT="请输入"
|
||||||
|
CORECFG_FILL_REQUIRED="请先完成必填选项!"
|
||||||
|
CORECFG_START_APPLY="是否启动服务以使配置文件生效:"
|
||||||
|
CORECFG_PROVIDER_SUPPORT="支持添加订阅链接/分享链接/本地文件作为提供者"
|
||||||
|
CORECFG_SET_NAME="设置\033[36m名称或代号\033[0m\t"
|
||||||
|
CORECFG_SET_LINK="设置\033[32m链接或路径\033[0m:\t"
|
||||||
|
CORECFG_SET_OVERRIDE="设置\033[33m本地生成覆写\033[0m"
|
||||||
|
CORECFG_SAVE_PROVIDER="\033[36m保存此提供者\033[0m"
|
||||||
|
CORECFG_DEL_PROVIDER="\033[31m删除此提供者\033[0m"
|
||||||
|
CORECFG_MORE_CONFIG_HINT="以下方式的详细配置请前往对应功能页面进行设置!"
|
||||||
|
CORECFG_GEN_LOCAL_ONE="\033[32m本地生成\033[0m仅包含此提供者的配置文件"
|
||||||
|
CORECFG_GEN_ONLINE_ONE="\033[33m在线生成\033[0m仅包含此提供者的配置文件"
|
||||||
|
CORECFG_GET_ONLINE_DIRECT="在线获取此配置文件(不使用订阅转换)"
|
||||||
|
CORECFG_USE_DIRECT="直接使用此文件作为配置文件(不使用本地生成)"
|
||||||
|
CORECFG_NAME_HINT="注意:\n名称或代号不可重复,不支持纯数字,且不要超过4个汉字!"
|
||||||
|
CORECFG_INPUT_NAME="请直接输入具体名称或代号"
|
||||||
|
CORECFG_OR_BACK="或输入 0 返回上级菜单"
|
||||||
|
CORECFG_LINK_HINT1="\033[33m订阅链接\033[0m:\nhttps/http开头的clash配置文件订阅链接"
|
||||||
|
CORECFG_LINK_HINT2="\033[36m分享链接\033[0m:"
|
||||||
|
CORECFG_LINK_HINT3="\033[33m本地文件\033[0m:\n必须放在"
|
||||||
|
CORECFG_LINK_HINT4="目录下"
|
||||||
|
CORECFG_LINK_HINT5="\033[36mBase64 \033[0m:\n请直接写入本地文件"
|
||||||
|
CORECFG_INPUT0_BACK="输入 0 返回上级菜单"
|
||||||
|
CORECFG_SELECT_FILE_OR_LINK="请选择对应文件或输入具体链接"
|
||||||
|
CORECFG_INPUT_LINK="请直接输入具体链接"
|
||||||
|
CORECFG_DANGER1="注意:\n此功能不兼容“跳过证书验证”功能"
|
||||||
|
CORECFG_DANGER2="请确认你完全理解自己在做什么"
|
||||||
|
CORECFG_DANGER_CONFIRM="我确认遇到问题可以自行解决"
|
||||||
|
CORECFG_INTERVAL1="设置\033[33m健康检查间隔\033[0m:\t"
|
||||||
|
CORECFG_INTERVAL2="设置\033[36m自动更新间隔\033[0m:\t"
|
||||||
|
CORECFG_MIN="分钟"
|
||||||
|
CORECFG_HOUR="小时"
|
||||||
|
CORECFG_SET_UA="设置\033[33m虚拟浏览器UA\033[0m:\t"
|
||||||
|
CORECFG_SET_EXCLUDE="设置\033[31m排除节点正则\033[0m:\t"
|
||||||
|
CORECFG_SET_INCLUDE="设置\033[32m包含节点正则\033[0m:\t"
|
||||||
|
CORECFG_CUR_INTERVAL="当前健康检查间隔:"
|
||||||
|
CORECFG_INPUT_INTERVAL1="请直接健康检查间隔(单位:分钟)"
|
||||||
|
CORECFG_RESET_INTERVAL1="或输入 r 重置健康检查间隔为默认值(3 分钟)"
|
||||||
|
CORECFG_INPUT_INTERVAL2="请直接输入自动更新间隔(单位:小时)"
|
||||||
|
CORECFG_RESET_INTERVAL2="或输入 r 重置自动更新间隔为默认值(12 小时)"
|
||||||
|
CORECFG_CUR_UA_NONE="当前浏览器UA:无"
|
||||||
|
CORECFG_CUR_UA="当前浏览器UA:"
|
||||||
|
CORECFG_INPUT_UA="请直接输入浏览器UA"
|
||||||
|
CORECFG_RESET_UA="或输入 r 重置浏览器UA为默认值(clash.meta)"
|
||||||
|
CORECFG_CUR_EXCLUDE_NONE="当前排除规则:无"
|
||||||
|
CORECFG_CUR_EXCLUDE="当前排除规则:"
|
||||||
|
CORECFG_INPUT_EXCLUDE="请直接输入需要排除的节点关键字(支持正则,不支持空格)"
|
||||||
|
CORECFG_CLEAR_EXCLUDE="或输入 c 清空排除规则"
|
||||||
|
CORECFG_CUR_INCLUDE_NONE="当前包含规则:无"
|
||||||
|
CORECFG_CUR_INCLUDE="当前包含规则:"
|
||||||
|
CORECFG_INPUT_INCLUDE="请直接输入需要包含的节点关键字(支持正则,不支持空格)"
|
||||||
|
CORECFG_CLEAR_INCLUDE="或输入 c 清空包含规则"
|
||||||
97
scripts/lang/chs/7_gateway.lang
Normal file
97
scripts/lang/chs/7_gateway.lang
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
GW_TITLE="访问与控制菜单"
|
||||||
|
GW_WARN="注意:"
|
||||||
|
GW_FW_VPS_HINT="如在vps运行,还需在vps安全策略对相关端口同时放行"
|
||||||
|
GW_FW_PORT_LIMIT="最多支持设置放行10个端口,请先减少一些!"
|
||||||
|
GW_INPUT_ALLOW_PORT="请输入要放行的端口号"
|
||||||
|
GW_OK="操作成功"
|
||||||
|
GW_CORE_UNSUPPORTED="内核暂不支持此功能,请先更换内核!"
|
||||||
|
GW_TG_DONE_PREFIX="已完成Telegram机器人设置!请使用"
|
||||||
|
GW_TG_DONE_SUFFIX="呼出功能菜单!"
|
||||||
|
GW_SET="已设置"
|
||||||
|
GW_BOUND="已绑定"
|
||||||
|
GW_INPUT_PORT_DEL0="请输入端口号(输入0删除)"
|
||||||
|
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删除)"
|
||||||
156
scripts/lang/chs/8_tools.lang
Normal file
156
scripts/lang/chs/8_tools.lang
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
TOOLS_TITLE="工具与优化"
|
||||||
|
TOOLS_SSH_DISABLE="禁止"
|
||||||
|
TOOLS_SSH_ENABLE="开启"
|
||||||
|
TOOLS_ERR_PORT="输入错误!请输入正确的数值(1000-65535)!"
|
||||||
|
TOOLS_ERR_PORT_OCCUPIED="当前端口已被其他进程占用,请重新输入!"
|
||||||
|
TOOLS_SSH_SET_OK="设置成功,请重新开启外网访问SSH功能!"
|
||||||
|
TOOLS_SSH_ENABLED="已开启外网访问SSH功能!"
|
||||||
|
TOOLS_SSH_DISABLED="已禁止外网访问SSH!"
|
||||||
|
TOOLS_DISABLE="禁用"
|
||||||
|
TOOLS_ENABLE="启用"
|
||||||
|
TOOLS_CONFIGURED="已配置"
|
||||||
|
TOOLS_SSH_ONLY_OPENWRT="此功能仅针对使用Openwrt系统的设备生效,且不依赖服务"
|
||||||
|
TOOLS_SSH_UNSUPPORTED_SYSTEM="本功能不支持红米AX6S等镜像化系统设备,请勿尝试!"
|
||||||
|
TOOLS_SSH_PORT_ITEM_PREFIX="1) \033[32m修改\033[0m外网访问端口:"
|
||||||
|
TOOLS_SSH_PORT_ITEM_SUFFIX=""
|
||||||
|
TOOLS_SSH_PASS_ITEM="2) \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)"
|
||||||
|
TOOLS_SSH_TOGGLE_ITEM_PREFIX="3) "
|
||||||
|
TOOLS_SSH_TOGGLE_ITEM_SUFFIX="外网访问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_PREFIX="5) "
|
||||||
|
TOOLS_MENU_MI_UPDATE_ITEM_SUFFIX="小米系统自动更新"
|
||||||
|
TOOLS_MENU_MI_AUTO_SSH_ITEM_PREFIX="6) 小米设备软固化SSH —— "
|
||||||
|
TOOLS_MENU_MI_AUTO_SSH_ITEM_SUFFIX=""
|
||||||
|
TOOLS_MENU_MI_TUN_FIX_ITEM_PREFIX="8) 小米设备Tun模块修复 —— "
|
||||||
|
TOOLS_MENU_MI_TUN_FIX_ITEM_SUFFIX=""
|
||||||
|
TOOLS_MI_UPDATE_MSG_PREFIX="已"
|
||||||
|
TOOLS_MI_UPDATE_MSG_SUFFIX="小米路由器的自动更新,如未生效,请在官方APP中同步设置!"
|
||||||
|
TOOLS_UNSUPPORTED_DEVICE="不支持的设备!"
|
||||||
|
TOOLS_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_PREFIX="1) Telegram推送\t——"
|
||||||
|
TOOLS_LOG_TG_SUFFIX=""
|
||||||
|
TOOLS_LOG_DEER_PREFIX="2) PushDeer推送\t——"
|
||||||
|
TOOLS_LOG_DEER_SUFFIX=""
|
||||||
|
TOOLS_LOG_BARK_PREFIX="3) Bark推送-IOS\t——"
|
||||||
|
TOOLS_LOG_BARK_SUFFIX=""
|
||||||
|
TOOLS_LOG_PO_PREFIX="4) Passover推送\t——"
|
||||||
|
TOOLS_LOG_PO_SUFFIX=""
|
||||||
|
TOOLS_LOG_PP_PREFIX="5) PushPlus推送\t——"
|
||||||
|
TOOLS_LOG_PP_SUFFIX=""
|
||||||
|
TOOLS_LOG_SYNO_PREFIX="6) SynoChat推送\t——"
|
||||||
|
TOOLS_LOG_SYNO_SUFFIX=""
|
||||||
|
TOOLS_LOG_GOTIFY_PREFIX="7) Gotify推送\t ——"
|
||||||
|
TOOLS_LOG_GOTIFY_SUFFIX=""
|
||||||
|
TOOLS_LOG_VIEW="a) 查看\033[36m运行日志\033[0m"
|
||||||
|
TOOLS_LOG_TASK_PREFIX="b) 推送任务日志\t——"
|
||||||
|
TOOLS_LOG_TASK_SUFFIX=""
|
||||||
|
TOOLS_LOG_DEVICE_PREFIX="c) 设置设备名称\t——"
|
||||||
|
TOOLS_LOG_DEVICE_SUFFIX=""
|
||||||
|
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_PREFIX="后台运行日志地址:"
|
||||||
|
TOOLS_DEBUG_WARN2_SUFFIX=""
|
||||||
|
TOOLS_DEBUG_WARN3="如长时间运行后台监测,日志等级推荐error!防止文件过大!"
|
||||||
|
TOOLS_DEBUG_WARN4="你亦可通过:\033[33mcrash -s debug 'warning'\033[0m命令使用其他日志等级"
|
||||||
|
TOOLS_DEBUG_ITEM_1_PREFIX="1) 仅测试"
|
||||||
|
TOOLS_DEBUG_ITEM_1_SUFFIX="配置文件可用性"
|
||||||
|
TOOLS_DEBUG_ITEM_2_PREFIX="2) 前台运行"
|
||||||
|
TOOLS_DEBUG_ITEM_2_SUFFIX="配置文件,不配置防火墙劫持(使用Ctrl+C手动停止)"
|
||||||
|
TOOLS_DEBUG_ITEM_3="3) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[31merror\033[0m"
|
||||||
|
TOOLS_DEBUG_ITEM_4="4) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[32minfo\033[0m"
|
||||||
|
TOOLS_DEBUG_ITEM_5="5) 后台运行完整启动流程并配置防火墙劫持,日志等级:\033[33mdebug\033[0m"
|
||||||
|
TOOLS_DEBUG_ITEM_6_PREFIX="6) 后台运行完整启动流程并配置防火墙劫持,且将错误日志打印到闪存:"
|
||||||
|
TOOLS_DEBUG_ITEM_6_SUFFIX=""
|
||||||
|
TOOLS_DEBUG_ITEM_8="8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
|
||||||
|
TOOLS_DEBUG_ITEM_9_PREFIX="9) 将"
|
||||||
|
TOOLS_DEBUG_ITEM_9_SUFFIX="下json文件合并为"
|
||||||
|
TOOLS_FLASH_WARN="频繁写入闪存会导致闪存寿命降低,如非遇到会导致设备死机或重启的bug,请勿使用此功能!"
|
||||||
|
TOOLS_FLASH_CONFIRM="是否确认启用此功能?"
|
||||||
|
TOOLS_MERGE_OK="合并成功!"
|
||||||
295
scripts/lang/chs/9_upgrade.lang
Normal file
295
scripts/lang/chs/9_upgrade.lang
Normal file
@@ -0,0 +1,295 @@
|
|||||||
|
UPG_ERR_TRY_OTHER_SOURCE="请尝试切换至其他安装源后重新下载!"
|
||||||
|
UPG_ERR_LOCAL_INSTALL="或者参考 \033[32;4mhttps://juewuy.github.io/bdaz\033[0m 进行本地安装!"
|
||||||
|
UPG_TITLE="更新与支持"
|
||||||
|
UPG_CUR_DIR_SPACE="当前目录"
|
||||||
|
UPG_LOW_SPACE_HINT="当前目录剩余空间较低,建议开启小闪存模式!"
|
||||||
|
UPG_MENU_SCRIPT="更新"
|
||||||
|
UPG_MENU_SCRIPT_NAME="管理脚本"
|
||||||
|
UPG_MENU_CORE="切换/更新"
|
||||||
|
UPG_MENU_CORE_NAME="内核文件"
|
||||||
|
UPG_MENU_GEO="安装/更新本地"
|
||||||
|
UPG_MENU_GEO_NAME="数据库文件"
|
||||||
|
UPG_MENU_DB="安装/更新本地"
|
||||||
|
UPG_MENU_DB_NAME="Dashboard面板"
|
||||||
|
UPG_MENU_CRT="安装/更新本地"
|
||||||
|
UPG_MENU_CRT_NAME="根证书文件"
|
||||||
|
UPG_MENU_PAC="自动代理查看"
|
||||||
|
UPG_MENU_SOURCE="切换"
|
||||||
|
UPG_MENU_SOURCE_NAME="安装源及版本分支"
|
||||||
|
UPG_MENU_UNINSTALL="卸载ShellCrash"
|
||||||
|
UPG_MENU_THANKS="感谢列表!"
|
||||||
|
UPG_PAC_LINK="PAC配置链接为:"
|
||||||
|
UPG_PAC_GUIDE="PAC的使用教程请参考:"
|
||||||
|
UPG_THANKS_TITLE="感谢以下项目及其开发者们的无私奉献!"
|
||||||
|
UPG_THANKS_SPECIAL="特别感谢:\033[36m所有帮助及赞助过此项目的同仁们!\033[0m"
|
||||||
|
UPG_CHECKING="正在检查更新......"
|
||||||
|
UPG_CHECK_OK="检查更新成功"
|
||||||
|
UPG_CHECK_FAIL="检查更新失败!请尝试切换其他安装源!"
|
||||||
|
UPG_DOWNLOAD_FAIL="文件下载失败!"
|
||||||
|
UPG_EXTRACTING="开始解压文件......"
|
||||||
|
UPG_EXTRACT_FAIL="文件解压失败!"
|
||||||
|
UPG_SCRIPT_OK="脚本更新成功!"
|
||||||
|
UPG_SCRIPT_WARN="注意:更新时会停止服务!"
|
||||||
|
UPG_SCRIPT_CUR_VER="当前脚本版本为:"
|
||||||
|
UPG_SCRIPT_NEW_VER="最新脚本版本为:"
|
||||||
|
UPG_UPDATE_NOW="立即更新"
|
||||||
|
UPG_SCRIPT_MGR_OK="管理脚本更新成功!"
|
||||||
|
UPG_CPUCORE_HINT1="仅适合脚本无法正确识别核心或核心无法正常运行时使用!"
|
||||||
|
UPG_CPUCORE_HINT2="不知道如何获取核心版本?"
|
||||||
|
UPG_CPUCORE_HINT3="请参考:"
|
||||||
|
UPG_CPUCORE_LIST="当前可供在线下载的处理器架构为:"
|
||||||
|
UPG_CPUCORE_ERR="请输入正确的处理器架构!"
|
||||||
|
UPG_CORETYPE_CONFIRM="请确认该自定义内核的类型:"
|
||||||
|
UPG_CORE_SWITCH_PREFIX="已从"
|
||||||
|
UPG_CORE_SWITCH_MID="内核切换至"
|
||||||
|
UPG_CORE_SWITCH_SUFFIX="内核"
|
||||||
|
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_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_PREFIX="正在在线获取"
|
||||||
|
UPG_GETTING_CORE_TEXT_SUFFIX="核心文件......"
|
||||||
|
UPG_CORE_DOWNLOAD_OK_TEXT_PREFIX=""
|
||||||
|
UPG_CORE_DOWNLOAD_OK_TEXT_SUFFIX="核心下载成功!"
|
||||||
|
UPG_CORE_DOWNLOAD_FAIL_TEXT="核心文件下载失败!"
|
||||||
|
UPG_CORE_DOWNLOAD_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_MENU_OFFICIAL="版本官方内核"
|
||||||
|
UPG_CUSTOM_CORE_MENU_ALPHA="版本内核(支持Smart策略)"
|
||||||
|
UPG_CUSTOM_CORE_MENU_MULTI="多版本内核"
|
||||||
|
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_PREFIX="1) \033[43;30mMihomo\033[0m:\033[32m"
|
||||||
|
UPG_CORE_MENU_1_SUFFIX=" \033[32m(原meta内核)支持全面\033[0m \033[33m占用略高\033[0m"
|
||||||
|
UPG_CORE_MENU_2_PREFIX="2) \033[43;30mSingBoxR\033[0m:\033[32m"
|
||||||
|
UPG_CORE_MENU_2_SUFFIX=" \033[32m支持全面\033[0m \033[33m使用reF1nd增强分支\033[0m"
|
||||||
|
UPG_CORE_MENU_3_PREFIX="3) \033[43;30mSingBox\033[0m:\033[32m"
|
||||||
|
UPG_CORE_MENU_3_SUFFIX=" \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
|
||||||
|
UPG_CORE_MENU_4_PREFIX="4) \033[43;30mClash\033[0m:\033[32m"
|
||||||
|
UPG_CORE_MENU_4_SUFFIX=" \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
|
||||||
|
UPG_CORE_MENU_5_PREFIX="5) 切换版本分支及压缩方式:\033[32m"
|
||||||
|
UPG_CORE_MENU_5_SUFFIX="\033[0m"
|
||||||
|
UPG_CORE_MENU_6_PREFIX="6) \033[36m使用自定义内核\033[0m "
|
||||||
|
UPG_CORE_MENU_6_SUFFIX=""
|
||||||
|
UPG_CORE_MENU_7="7) \033[32m更新当前内核\033[0m"
|
||||||
|
UPG_CORE_MENU_9="9) 手动指定处理器架构"
|
||||||
|
UPG_GEO_GETTING="正在从服务器获取数据库文件......"
|
||||||
|
UPG_GEO_OK_PREFIX=""
|
||||||
|
UPG_GEO_OK_SUFFIX="数据库文件下载成功!"
|
||||||
|
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_PREFIX="这将清理"
|
||||||
|
UPG_GEO_CLEAN_HINT1_SUFFIX="目录及/ruleset目录下所有数据库文件!"
|
||||||
|
UPG_GEO_CLEAN_HINT2="清理后启动服务即可自动下载所需文件"
|
||||||
|
UPG_GEO_CLEAN_CONFIRM="确认清理"
|
||||||
|
UPG_GEO_CLEAN_OK="所有数据库文件均已清理!"
|
||||||
|
UPG_DB_GETTING="正在连接服务器获取安装文件......"
|
||||||
|
UPG_DB_DOWNLOAD_OK="下载成功,正在解压文件......"
|
||||||
|
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_PREFIX="1) 在"
|
||||||
|
UPG_DB_DIR_1_SUFFIX="/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_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_NOTE1="不支持Gvisor、Tailscale、Wireguard、NaiveProxy"
|
||||||
|
UPG_CORE_V1_PREFIX="1) \033[43;30mMihomo\033[0m:\033[32m"
|
||||||
|
UPG_CORE_V1_SUFFIX=" \033[32m(原meta内核)支持全面\033[0m \033[33m占用略高\033[0m"
|
||||||
|
UPG_CORE_V1_DOC="说明文档:\033[36;4mhttps://wiki.metacubex.one\033[0m"
|
||||||
|
UPG_CORE_V2_PREFIX="2) \033[43;30mSingBoxR\033[0m:\033[32m"
|
||||||
|
UPG_CORE_V2_SUFFIX=" \033[32m支持全面\033[0m \033[33m使用reF1nd增强分支\033[0m"
|
||||||
|
UPG_CORE_V2_DOC="说明文档:\033[36;4mhttps://sing-boxr.dustinwin.us.kg\033[0m"
|
||||||
|
UPG_CORE_V3_PREFIX="3) \033[43;30mSingBox\033[0m:\033[32m"
|
||||||
|
UPG_CORE_V3_SUFFIX=" \033[32m占用较低\033[0m \033[33m不支持providers\033[0m"
|
||||||
|
UPG_CORE_V3_DOC="说明文档:\033[36;4mhttps://sing-box.sagernet.org\033[0m"
|
||||||
|
UPG_CORE_V4_PREFIX="4) \033[43;30mClash\033[0m:\033[32m"
|
||||||
|
UPG_CORE_V4_SUFFIX=" \033[32m占用低\033[0m \033[33m不安全,已停止维护\033[0m"
|
||||||
|
UPG_CORE_V4_DOC="说明文档:\033[36;4mhttps://lancellc.gitbook.io\033[0m"
|
||||||
|
UPG_CORE_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_PREFIX="这将清理"
|
||||||
|
UPG_GEO_CLEAN_WARN_SUFFIX="目录及/ruleset目录下所有数据库文件!"
|
||||||
|
UPG_GEO_CLEAN_WARN2="清理后启动服务即可自动下载所需文件"
|
||||||
|
UPG_GEO_CLEANED="所有数据库文件均已清理!"
|
||||||
|
UPG_DB_CONNECTING="正在连接服务器获取安装文件......"
|
||||||
|
UPG_DB_INSTALLED_HINT="检测到已经安装过本地面板"
|
||||||
|
UPG_DB_INSTALL_CANCEL="安装已取消"
|
||||||
|
UPG_DB_DIR_TITLE="请选择面板安装目录:"
|
||||||
|
UPG_DB_DIR_1_TEXT_PREFIX="1) 在"
|
||||||
|
UPG_DB_DIR_1_TEXT_SUFFIX="/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_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="(回退)"
|
||||||
68
scripts/lang/chs/bot_tg.lang
Normal file
68
scripts/lang/chs/bot_tg.lang
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
BOT_TG_PRIVATE_HINT="请先通过 \033[32;4mhttps://t.me/BotFather\033[0m 申请TG机器人并获取其\033[36mAPI TOKEN\033[0m"
|
||||||
|
BOT_TG_INPUT_TOKEN="请输入你获取到的API TOKEN"
|
||||||
|
BOT_TG_PRIVATE_TOP="请向\033[32m你申请的机器人\033[33m而不是BotFather!\033[0m"
|
||||||
|
BOT_TG_PUBLIC_HINT="请向机器人:\033[32;4mhttps://t.me/ShellCrashtg_bot\033[0m"
|
||||||
|
BOT_TG_SET_DONE="已完成Telegram日志推送设置!"
|
||||||
|
BOT_TG_CHATID_RETRY_PREFIX="第"
|
||||||
|
BOT_TG_CHATID_RETRY_SUFFIX="次尝试获取对话ID失败,正在重试..."
|
||||||
|
BOT_TG_SEND_KEY="发送此秘钥:"
|
||||||
|
BOT_TG_SENT_CONFIRM="我已经发送完成"
|
||||||
|
BOT_TG_CHATID_FAIL="无法获取对话ID,请返回重新设置或手动输入ChatID!"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT="通常访问"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT2="即可看到ChatID"
|
||||||
|
BOT_TG_INPUT_CHATID="请手动输入ChatID"
|
||||||
|
BOT_TG_CHATID_RECONFIG="无法获取对话ID,请重新配置!"
|
||||||
|
BOT_TG_CRON_NAME="TG_BOT守护进程"
|
||||||
|
|
||||||
|
BOT_TG_HELP_GROUP="进群讨论:"
|
||||||
|
BOT_TG_HELP_PROJECT="项目地址:"
|
||||||
|
BOT_TG_HELP_GUIDE="相关教程:"
|
||||||
|
BOT_TG_HELP_COFFEE="请喝咖啡:"
|
||||||
|
BOT_TG_HELP_AIRPORT="友情机场:"
|
||||||
|
BOT_TG_RUN_ON="🟢正在运行"
|
||||||
|
BOT_TG_RUN_OFF="🟡未运行"
|
||||||
|
BOT_TG_WELCOME="欢迎使用ShellCrash!"
|
||||||
|
BOT_TG_SERVICE="服务"
|
||||||
|
BOT_TG_MEM_USED="内存占用:"
|
||||||
|
BOT_TG_RUNNING_TIME="已运行:"
|
||||||
|
BOT_TG_SELECT_ACTION="请选择操作:"
|
||||||
|
BOT_TG_SELECT_FILE="请选择需要上传或下载的具体文件:"
|
||||||
|
BOT_TG_BTN_START="✈️ 启用劫持"
|
||||||
|
BOT_TG_BTN_PURE="💧 纯净模式"
|
||||||
|
BOT_TG_BTN_RESTART="🕹 重启服务"
|
||||||
|
BOT_TG_BTN_LOG="📄 查看日志"
|
||||||
|
BOT_TG_BTN_TRANSFER="🔃 文件传输"
|
||||||
|
BOT_TG_BTN_GET_LOG="📥 下载日志"
|
||||||
|
BOT_TG_BTN_GET_BAK="💾 备份设置"
|
||||||
|
BOT_TG_BTN_GET_CFG="⬇️ 下载配置"
|
||||||
|
BOT_TG_BTN_UP_CORE="🪐 上传内核"
|
||||||
|
BOT_TG_BTN_UP_BAK="🔄 还原设置"
|
||||||
|
BOT_TG_BTN_UP_CFG="⬆️ 上传配置"
|
||||||
|
BOT_TG_NO_CURL="⚠️ 因当前设备缺少curl应用,仅支持上传功能!"
|
||||||
|
BOT_TG_UPLOAD_OK="成功!即将重启服务!"
|
||||||
|
BOT_TG_UPLOAD_FAIL="失败,请仔细检查文件或重试!"
|
||||||
|
BOT_TG_CORE_UPDATE="内核更新"
|
||||||
|
BOT_TG_CFG_RESTORED="配置文件已还原,请手动重启服务!"
|
||||||
|
BOT_TG_RESTORE_FAIL="解压还原失败,请仔细检查文件或重试!"
|
||||||
|
BOT_TG_CFG_UPLOADED="配置文件已上传,请手动重启服务!"
|
||||||
|
BOT_TG_UPLOAD_FAIL2="上传失败,请仔细检查文件或重试!"
|
||||||
|
BOT_TG_NET_UPLOAD_FAIL="网络错误,上传失败!请重试!"
|
||||||
|
BOT_TG_FILE_FORMAT_FAIL="文件格式不匹配,上传失败!"
|
||||||
|
BOT_TG_FW_ENABLED="ShellCrash 透明路由"
|
||||||
|
BOT_TG_FW_ENABLED_SUFFIX="已启用!"
|
||||||
|
BOT_TG_SWITCH_PURE="已切换到纯净模式!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED="ShellCrash 服务已重启!"
|
||||||
|
BOT_TG_UNFINISHED="错误,还未完成的功能!"
|
||||||
|
BOT_TG_SEND_CORE="请发送需要上传的内核,必须是以tar.gz,.gz或.upx结尾的【"
|
||||||
|
BOT_TG_SEND_CORE_SUFFIX="】内核!"
|
||||||
|
BOT_TG_SEND_BAK="请发送需要还原的备份文件,必须是【.tar.gz】格式!"
|
||||||
|
BOT_TG_SEND_CFG="请发送需要上传的配置文件,必须是【"
|
||||||
|
BOT_TG_SEND_CFG_SUFFIX="】格式,支持自定义配置文件"
|
||||||
|
BOT_TG_SWITCH_TO="已切换到"
|
||||||
|
BOT_TG_ALREADY="当前已经是"
|
||||||
|
BOT_TG_ALREADY_PURE="当前已经是纯净模式!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED_SHORT="🔄 服务已重启"
|
||||||
|
BOT_TG_LOG_CONTENT="📄 日志内容如下(已过滤任务日志):"
|
||||||
|
BOT_TG_TASK_WORD="任务"
|
||||||
|
BOT_TG_INPUT_SUB="✏ 请输入新的订阅链接:"
|
||||||
|
BOT_TG_SUB_UPDATED="订阅更新完成:"
|
||||||
3
scripts/lang/chs/check_port.lang
Normal file
3
scripts/lang/chs/check_port.lang
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
CHECK_PORT_RANGE_ERR="输入错误!请输入正确的数值(1-65535)!"
|
||||||
|
CHECK_PORT_DUP_ERR="输入错误!请不要输入重复的端口!"
|
||||||
|
CHECK_PORT_OCCUPIED_ERR="当前端口已被其他进程占用,请重新输入!"
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
COMMON_INPUT="请输入对应数字"
|
COMMON_INPUT="请输入对应数字"
|
||||||
COMMON_INPUT_L="请输入对应字母或数字"
|
COMMON_INPUT_L="请输入对应字母或数字"
|
||||||
|
COMMON_INPUT_R="是否启用?(1/0) > "
|
||||||
COMMON_BACK="返回上级菜单"
|
COMMON_BACK="返回上级菜单"
|
||||||
COMMON_SUCCESS="操作成功!"
|
COMMON_SUCCESS="操作成功!"
|
||||||
COMMON_FAILED="操作失败!"
|
COMMON_FAILED="操作失败!"
|
||||||
|
|||||||
35
scripts/lang/chs/ddns.lang
Normal file
35
scripts/lang/chs/ddns.lang
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
DDNS_WELCOME="欢迎使用DDNS!"
|
||||||
|
DDNS_ADD_DONE="服务已经添加!"
|
||||||
|
DDNS_INPUT_DOMAIN="请输入你的域名"
|
||||||
|
DDNS_INPUT_USER="请输入用户名或邮箱"
|
||||||
|
DDNS_INPUT_PASS="请输入密码或令牌秘钥"
|
||||||
|
DDNS_INPUT_CHECK_INTERVAL="请输入检测更新间隔(单位:分钟;默认为10)"
|
||||||
|
DDNS_INPUT_FORCE_INTERVAL="请输入强制更新间隔(单位:小时;默认为24)"
|
||||||
|
DDNS_CONFIRM_INFO="请核对如下信息:"
|
||||||
|
DDNS_FIELD_SERVICE="服务商:"
|
||||||
|
DDNS_FIELD_DOMAIN="域名:"
|
||||||
|
DDNS_FIELD_USER="用户名:"
|
||||||
|
DDNS_FIELD_INTERVAL="检测间隔:"
|
||||||
|
DDNS_CONFIRM_ADD="是否确认添加:"
|
||||||
|
DDNS_YES="是"
|
||||||
|
DDNS_REINPUT="否,重新輸入"
|
||||||
|
DDNS_LIST_NOT_FOUND="未找到DDNS列表文件,尝试在线获取……"
|
||||||
|
DDNS_DOWNLOAD_FAILED="下载失败,请重试!"
|
||||||
|
DDNS_SELECT_PROVIDER="请选择服务提供商:"
|
||||||
|
DDNS_INPUT_ERROR="输入错误,请重新输入!"
|
||||||
|
DDNS_SELECT_NETMODE="请选择网络模式:"
|
||||||
|
DDNS_IPV4="IPV4"
|
||||||
|
DDNS_IPV6="IPV6"
|
||||||
|
DDNS_DISABLE="停用"
|
||||||
|
DDNS_ENABLE="启用"
|
||||||
|
DDNS_UPDATE_NOW="立即更新"
|
||||||
|
DDNS_EDIT_CURRENT="编辑当前服务"
|
||||||
|
DDNS_CURRENT_SERVICE="当前服务"
|
||||||
|
DDNS_REMOVE_CURRENT="移除当前服务"
|
||||||
|
DDNS_VIEW_LOG="查看运行日志"
|
||||||
|
DDNS_NOT_SUPPORTED="本脚本依赖OpenWrt内置的DDNS服务,当前设备无法运行,已退出!"
|
||||||
|
DDNS_LIST_HEADER=" 列表 域名 启用 IP地址"
|
||||||
|
DDNS_ADD_SERVICE="添加DDNS服务"
|
||||||
|
DDNS_EXIT="退出"
|
||||||
|
DDNS_INPUT_INDEX="请输入对应序号"
|
||||||
|
DDNS_INPUT_NUM_ERROR="请输入正确数字!"
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
DNS_CURRENT_MODE="当前DNS运行模式为:"
|
DNS_CURRENT_MODE="当前DNS运行模式为:"
|
||||||
DNS_RESTART_NOTICE="切换模式后需要手动重启服务以生效!"
|
DNS_RESTART_NOTICE="切换模式后需要手动重启服务以生效!"
|
||||||
|
|
||||||
DNS_MODE_MIX_DESC="CN域名real-ip,其它fake-ip分流"
|
DNS_MODE_MIX_DESC="CN域名DIRECT-DNS,其它fake-ip"
|
||||||
DNS_MODE_ROUTE_DESC="CN域名real-ip,其它dns2proxy分流"
|
DNS_MODE_ROUTE_DESC="CN域名DIRECT-DNS,其它PROXY-DNS"
|
||||||
DNS_MODE_REDIR_DESC="不安全,需搭配第三方DNS服务使用"
|
DNS_MODE_REDIR_DESC="建议搭配加密/第三方DNS服务使用"
|
||||||
|
|
||||||
DNS_MENU_PROTECT="DNS防泄漏"
|
DNS_MENU_PROTECT="DNS防泄漏"
|
||||||
DNS_MENU_HOSTS="Hosts优化"
|
DNS_MENU_HOSTS="Hosts优化"
|
||||||
@@ -50,3 +50,23 @@ DNS_IPV6_NOT_SUPPORT="该选项暂不支持IPv6加密DNS!"
|
|||||||
|
|
||||||
DNS_ENCRYPT_OK="已设置加密DNS,如遇DNS解析问题,请重置DNS配置!"
|
DNS_ENCRYPT_OK="已设置加密DNS,如遇DNS解析问题,请重置DNS配置!"
|
||||||
DNS_CORE_REQUIRE="请使用Mihomo或SingBox内核"
|
DNS_CORE_REQUIRE="请使用Mihomo或SingBox内核"
|
||||||
|
DNS_SET_TO="设为"
|
||||||
|
DNS_REMOVE_OK="移除成功"
|
||||||
|
DNS_REMOVE_FAIL="移除失败"
|
||||||
|
DNS_INPUT_REDIR_PORT="请直接输入旁路由IPV4地址"
|
||||||
|
DNS_INPUT_REDIR_RESET="或输入 r 重置DNS劫持端口"
|
||||||
|
DNS_INPUT_REDIR_BACK="或输入 0 返回上级菜单"
|
||||||
|
DNS_INPUT="请输入"
|
||||||
|
DNS_CONFIRM_ADD="请确认需要添加的地址:"
|
||||||
|
DNS_CONFIRM_OK="确认无误"
|
||||||
|
DNS_ADD_OK="添加成功"
|
||||||
|
DNS_ADD_FAIL="添加失败"
|
||||||
|
DNS_DIRECT_NOW="当前DIRECT-DNS:"
|
||||||
|
DNS_PROXY_NOW="当前PROXY-DNS:"
|
||||||
|
DNS_DEFAULT_NOW="当前DEFAULT-DNS:"
|
||||||
|
DNS_INPUT_DIRECT_NEW="请直接输入新的DIRECT-DNS地址"
|
||||||
|
DNS_INPUT_DIRECT_RESET="或输入 r 重置DIRECT-DNS地址"
|
||||||
|
DNS_INPUT_PROXY_NEW="请直接输入新的PROXY-DNS地址"
|
||||||
|
DNS_INPUT_PROXY_RESET="或输入 r 重置PROXY-DNS地址"
|
||||||
|
DNS_INPUT_DEFAULT_NEW="请直接输入新的DEFAULT-DNS地址"
|
||||||
|
DNS_INPUT_DEFAULT_RESET="或输入 r 重置DEFAULT-DNS地址"
|
||||||
|
|||||||
91
scripts/lang/chs/fw_filter.lang
Normal file
91
scripts/lang/chs/fw_filter.lang
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
FWF_TITLE="流量过滤"
|
||||||
|
FWF_ITEM_1_PREFIX="1) 过滤非常用端口:\t"
|
||||||
|
FWF_ITEM_1_SUFFIX="—用于过滤P2P流量"
|
||||||
|
FWF_ITEM_2_PREFIX="2) 过滤局域网设备:\t"
|
||||||
|
FWF_ITEM_2_SUFFIX="—使用黑/白名单进行过滤"
|
||||||
|
FWF_ITEM_3_PREFIX="3) 过滤QUIC协议:\t"
|
||||||
|
FWF_ITEM_3_SUFFIX="—优化视频性能"
|
||||||
|
FWF_ITEM_4_PREFIX="4) 过滤CN_IP(4&6)列表:"
|
||||||
|
FWF_ITEM_4_SUFFIX="—优化性能"
|
||||||
|
FWF_ITEM_5="5) 自定义透明路由ipv4网段:适合vlan等复杂网络环境"
|
||||||
|
FWF_ITEM_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_PREFIX="1) 启用/关闭端口过滤: \t"
|
||||||
|
FWF_PORT_MENU_1_SUFFIX=""
|
||||||
|
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_PREFIX="1) 切换为"
|
||||||
|
FWF_FILTER_SWITCH_SUFFIX="模式"
|
||||||
|
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="设备列表已清空!"
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# ===== 通用提示 =====
|
# ===== 通用提示 =====
|
||||||
|
|
||||||
MENU_RESTART_NOTICE="检测到配置变更,是否立即重启服务以应用新配置:"
|
MENU_RESTART_NOTICE="检测到配置变更,是否立即重启服务以应用新配置?"
|
||||||
|
MENU_RESTART_NOW="立即重启"
|
||||||
|
MENU_RESTART_LATER="暂不重启"
|
||||||
|
|
||||||
MENU_PORT_CONFLICT_TITLE="检测到端口被以下进程占用!内核可能无法正常启动!"
|
MENU_PORT_CONFLICT_TITLE="检测到端口被以下进程占用!内核可能无法正常启动!"
|
||||||
MENU_PORT_CONFLICT_HINT="请修改默认端口配置!"
|
MENU_PORT_CONFLICT_HINT="请修改默认端口配置!"
|
||||||
@@ -12,7 +14,9 @@ MENU_CORE_REMOVED="内核文件已移除,请认真检查后重新上传!"
|
|||||||
MENU_CFG_LOADED_OK="配置文件加载完成!"
|
MENU_CFG_LOADED_OK="配置文件加载完成!"
|
||||||
|
|
||||||
MENU_OVERRIDE_WARN="你已经禁用了配置文件覆写功能,这会导致大量脚本功能无法使用!"
|
MENU_OVERRIDE_WARN="你已经禁用了配置文件覆写功能,这会导致大量脚本功能无法使用!"
|
||||||
MENU_OVERRIDE_ASK="是否取消禁用:"
|
MENU_OVERRIDE_ASK="是否取消禁用?"
|
||||||
|
MENU_YES="是"
|
||||||
|
MENU_NO="否"
|
||||||
|
|
||||||
# ===== 欢迎与状态 =====
|
# ===== 欢迎与状态 =====
|
||||||
MENU_WELCOME="欢迎使用ShellCrash!"
|
MENU_WELCOME="欢迎使用ShellCrash!"
|
||||||
@@ -36,10 +40,12 @@ MENU_TG_CHANNEL="TG频道:"
|
|||||||
|
|
||||||
# ===== /tmp 文件检测 =====
|
# ===== /tmp 文件检测 =====
|
||||||
MENU_TMP_CORE_FOUND="发现可用的内核文件:"
|
MENU_TMP_CORE_FOUND="发现可用的内核文件:"
|
||||||
MENU_TMP_CORE_ASK="是否立即加载该内核(会停止当前服务):"
|
MENU_TMP_CORE_ASK="是否立即加载该内核(会停止当前服务)?"
|
||||||
|
MENU_LOAD_NOW="立即加载"
|
||||||
|
MENU_LOAD_LATER="暂不加载"
|
||||||
|
|
||||||
MENU_TMP_CFG_FOUND="发现内核配置文件:"
|
MENU_TMP_CFG_FOUND="发现内核配置文件:"
|
||||||
MENU_TMP_CFG_ASK="是否立即加载为配置文件:"
|
MENU_TMP_CFG_ASK="是否立即加载为配置文件?"
|
||||||
|
|
||||||
MENU_MAIN_1="启动/重启服务"
|
MENU_MAIN_1="启动/重启服务"
|
||||||
MENU_MAIN_2="功能设置"
|
MENU_MAIN_2="功能设置"
|
||||||
|
|||||||
93
scripts/lang/chs/override.lang
Normal file
93
scripts/lang/chs/override.lang
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
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_PREFIX="如果你不是非常了解"
|
||||||
|
OVR_WARN_2_SUFFIX="的运行机制,切勿开启!"
|
||||||
|
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"
|
||||||
25
scripts/lang/chs/providers.lang
Normal file
25
scripts/lang/chs/providers.lang
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
PROVIDERS_MENU_GEN="生成包含全部提供者的配置文件"
|
||||||
|
PROVIDERS_MENU_TEMPLATE="选择\033[33m规则模版\033[0m"
|
||||||
|
PROVIDERS_MENU_CLEAN="\033[33m清理\033[0mproviders目录文件"
|
||||||
|
PROVIDERS_INPUT="请输入对应字母或数字"
|
||||||
|
|
||||||
|
PROVIDERS_EMPTY_HINT="你还未添加链接或本地配置文件,请先添加!"
|
||||||
|
PROVIDERS_TEMPLATE_CURRENT="当前规则模版为:"
|
||||||
|
PROVIDERS_TEMPLATE_SELECT="请选择在线模版:"
|
||||||
|
PROVIDERS_TEMPLATE_LOCAL="使用\033[36m本地模版\033[0m"
|
||||||
|
PROVIDERS_TEMPLATE_PATH="请输入模版的路径(绝对路径)"
|
||||||
|
PROVIDERS_TEMPLATE_NOT_FOUND="输入错误,找不到对应模版文件!"
|
||||||
|
|
||||||
|
PROVIDERS_CLEAN_WARN="将清空"
|
||||||
|
PROVIDERS_CLEAN_WARN_END="目录下所有内容"
|
||||||
|
PROVIDERS_CLEAN_CONFIRM="是否继续?"
|
||||||
|
|
||||||
|
PROVIDERS_FETCHING_TEMPLATE="正在获取在线模版......"
|
||||||
|
PROVIDERS_DOWNLOAD_FAILED="下载失败,请尝试更换安装源!"
|
||||||
|
PROVIDERS_GEN_OK="配置文件生成成功!"
|
||||||
|
PROVIDERS_GEN_OK_SINGBOX="配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!"
|
||||||
|
PROVIDERS_GEN_FAILED="生成配置文件出错,请仔细检查输入!"
|
||||||
|
PROVIDERS_RESTART_ASK="是否立即启动/重启服务?"
|
||||||
|
PROVIDERS_YES="是"
|
||||||
|
PROVIDERS_NO="否"
|
||||||
|
PROVIDERS_CRON_SUB_UPDATE="更新订阅"
|
||||||
34
scripts/lang/chs/set_crashdir.lang
Normal file
34
scripts/lang/chs/set_crashdir.lang
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
SCD_SELECT_INSTALL_DIR="请选择安装目录:"
|
||||||
|
SCD_INPUT_NUM="请输入相应数字"
|
||||||
|
SCD_INPUT_ERROR="输入错误!请重新设置!"
|
||||||
|
SCD_XIAOMI_DETECTED="检测到当前设备为小米官方系统,请选择安装位置:"
|
||||||
|
SCD_CUSTOM_DIR_WARN="自定义目录(不推荐,不明勿用!)"
|
||||||
|
SCD_EXIT_INSTALL="退出安装"
|
||||||
|
SCD_SELECT_USB_DIR="请选择U盘目录:"
|
||||||
|
SCD_ASUS_DM_NOT_FOUND="未找到下载大师自启文件:"
|
||||||
|
SCD_CHECK_SETTING="请检查设置!"
|
||||||
|
SCD_ASUS_DETECTED="检测到当前设备为华硕固件,请选择安装方式"
|
||||||
|
SCD_ASUS_INSTALL_DM="基于U盘+下载大师安装(支持所有固件,限ARM设备,须插入U盘或移动硬盘)"
|
||||||
|
SCD_ASUS_INSTALL_SCRIPT="基于自启脚本安装(仅持部分梅林固件)"
|
||||||
|
SCD_ASUS_DM_HINT="请先在路由器网页后台安装下载大师并启用,之后选择外置存储所在目录!"
|
||||||
|
SCD_ASUS_REINSTALL_HINT="如开机无法正常自启,请重新使用U盘+下载大师安装!"
|
||||||
|
SCD_PATH_FORMAT_HINT="路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!"
|
||||||
|
SCD_PATH_FREE_SPACE="可用路径 剩余空间:"
|
||||||
|
SCD_INPUT_CUSTOM_DIR="请输入自定义路径"
|
||||||
|
SCD_PATH_ERROR="路径错误!请重新设置!"
|
||||||
|
SCD_INSTALL_SPACE_HINT="注意:安装ShellCrash至少需要预留约1MB的磁盘空间"
|
||||||
|
SCD_INSTALL_ETC="在\033[32m/etc目录\033[0m下安装(适合root用户)"
|
||||||
|
SCD_INSTALL_USR="在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)"
|
||||||
|
SCD_INSTALL_HOME="在\033[32m当前用户目录\033[0m下安装(适合非root用户)"
|
||||||
|
SCD_INSTALL_USB="在\033[32m外置存储\033[0m中安装"
|
||||||
|
SCD_INSTALL_MANUAL="手动设置安装目录"
|
||||||
|
SCD_INSTALL_CANCELED="安装已取消"
|
||||||
|
SCD_NO_WRITE_PREFIX="没有"
|
||||||
|
SCD_NO_WRITE_SUFFIX="目录写入权限!请重新设置!"
|
||||||
|
SCD_TARGET_DIR_PREFIX="目标目录"
|
||||||
|
SCD_TARGET_DIR_SPACE="空间剩余:"
|
||||||
|
SCD_CONFIRM_INSTALL="是否确认安装?"
|
||||||
|
SCD_YES="是"
|
||||||
|
SCD_NO="否"
|
||||||
|
SCD_DIR_FREE="目录,剩余空间:"
|
||||||
|
SCD_SOFT_SOLID="(支持软固化功能)"
|
||||||
52
scripts/lang/chs/setboot.lang
Normal file
52
scripts/lang/chs/setboot.lang
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
SETBOOT_NOT_SET="未设置"
|
||||||
|
SETBOOT_SECOND="秒"
|
||||||
|
SETBOOT_TITLE="启动设置菜单"
|
||||||
|
SETBOOT_ITEM_AUTO="开机自启动:"
|
||||||
|
SETBOOT_ITEM_OLD="使用保守模式:"
|
||||||
|
SETBOOT_ITEM_OLD_DESC="———基于定时任务(每分钟检测)"
|
||||||
|
SETBOOT_ITEM_DELAY="设置自启延时:"
|
||||||
|
SETBOOT_ITEM_DELAY_DESC="———用于解决自启后服务受限"
|
||||||
|
SETBOOT_ITEM_MINI="启用小闪存模式:"
|
||||||
|
SETBOOT_ITEM_MINI_DESC="———用于闪存空间不足的设备"
|
||||||
|
SETBOOT_ITEM_MINI_DIR="设置小闪存目录:"
|
||||||
|
SETBOOT_ITEM_NETCHK="自启网络检查:"
|
||||||
|
SETBOOT_ITEM_NETCHK_DESC="———禁用则跳过自启时网络检查"
|
||||||
|
SETBOOT_VIEW_LOG="查看启动日志"
|
||||||
|
SETBOOT_AUTO_OFF="已禁止ShellCrash开机自启动!"
|
||||||
|
SETBOOT_AUTO_ON="已设置ShellCrash开机自启动!"
|
||||||
|
SETBOOT_CRON_INIT="ShellCrash初始化"
|
||||||
|
SETBOOT_OLDMODE_ON="改为使用保守模式启动服务!"
|
||||||
|
SETBOOT_OLDMODE_OFF="改为使用系统守护进程启动服务!"
|
||||||
|
SETBOOT_MODE_UNSUPPORTED="当前设备不支持以其他模式启动!"
|
||||||
|
SETBOOT_DELAY_HINT1="如果你的设备启动后可以正常使用,则无需设置!"
|
||||||
|
SETBOOT_DELAY_HINT2="推荐设置为30~120秒之间,请根据设备问题自行试验"
|
||||||
|
SETBOOT_DELAY_INPUT="请输入启动延迟时间(0~300秒)"
|
||||||
|
SETBOOT_SET_OK="设置成功!"
|
||||||
|
SETBOOT_DELAY_INVALID="输入有误,或超过300秒,请重新输入!"
|
||||||
|
SETBOOT_MINI_NEEDED_NO="您的设备空间充足(>20M),无需开启!"
|
||||||
|
SETBOOT_SYSTEMD_WARN="不支持systemd启动模式,请先启用保守模式!"
|
||||||
|
SETBOOT_MINI_ENABLED="已经启用小闪存功能!"
|
||||||
|
SETBOOT_MINI_DIR_HINT="如需更换目录,请使用【设置小闪存目录】功能"
|
||||||
|
SETBOOT_MINI_DISABLE_WARN="您的设备剩余空间不足8M,停用后可能无法正常运行!"
|
||||||
|
SETBOOT_MINI_DISABLE_CONFIRM="是否确认停用此功能?"
|
||||||
|
SETBOOT_YES="是"
|
||||||
|
SETBOOT_NO_BACK="否,返回上级菜单"
|
||||||
|
SETBOOT_MINI_DISABLED="已经停用小闪存功能!"
|
||||||
|
SETBOOT_BINDIR_HINT1="如设置到内存,则每次开机后都自动重新下载相关文件"
|
||||||
|
SETBOOT_BINDIR_HINT2="请确保安装源可用裸连,否则会导致启动失败"
|
||||||
|
SETBOOT_BINDIR_TMP="使用内存(/tmp)"
|
||||||
|
SETBOOT_BINDIR_USB="选择U盘目录"
|
||||||
|
SETBOOT_BINDIR_CUSTOM="自定义目录"
|
||||||
|
SETBOOT_SELECT_INSTALL_DIR="请选择安装目录:"
|
||||||
|
SETBOOT_SPACE_USED="已占用的储存空间:"
|
||||||
|
SETBOOT_INPUT_ERROR="输入错误!请重新设置!"
|
||||||
|
SETBOOT_INPUT_CMD="请直接输入命令语句"
|
||||||
|
SETBOOT_INPUT_OR_BACK="或输入 0 返回上级菜单"
|
||||||
|
SETBOOT_INPUT="请输入"
|
||||||
|
SETBOOT_NETCHK_HINT1="如果你的设备启动后可以正常使用,则无需变更设置!"
|
||||||
|
SETBOOT_NETCHK_HINT2="禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!"
|
||||||
|
SETBOOT_NETCHK_HINT3="启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!"
|
||||||
|
SETBOOT_NETCHK_OFF_CONFIRM="当前\033[33m已禁用\033[0m自启网络检查,是否确认启用?"
|
||||||
|
SETBOOT_NETCHK_ON_CONFIRM="当前\033[33m已启用\033[0m自启网络检查,是否确认禁用?"
|
||||||
|
SETBOOT_TASK_WORD="任务"
|
||||||
|
SETBOOT_LOG_NOT_FOUND="未找到相关日志!"
|
||||||
33
scripts/lang/chs/subconverter.lang
Normal file
33
scripts/lang/chs/subconverter.lang
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
SUBCONVERTER_MENU_GEN="生成包含全部节点、订阅的配置文件"
|
||||||
|
SUBCONVERTER_MENU_EXCLUDE="设置\033[31m排除节点正则\033[0m"
|
||||||
|
SUBCONVERTER_MENU_INCLUDE="设置\033[32m包含节点正则\033[0m"
|
||||||
|
SUBCONVERTER_MENU_RULE="选择\033[33m在线规则模版\033[0m"
|
||||||
|
SUBCONVERTER_MENU_SERVER="选择Subconverter服务器"
|
||||||
|
SUBCONVERTER_MENU_UA="自定义浏览器UA"
|
||||||
|
|
||||||
|
SUBCONVERTER_INPUT="请输入"
|
||||||
|
SUBCONVERTER_BACK="或输入 0 返回上级菜单"
|
||||||
|
|
||||||
|
SUBCONVERTER_EXCLUDE_HINT1="匹配关键字的节点会在导入时被【屏蔽】!"
|
||||||
|
SUBCONVERTER_INCLUDE_HINT1="仅有匹配关键字的节点才会被【导入】!!!"
|
||||||
|
SUBCONVERTER_KEYWORD_SPLIT="多个关键字可以用\033[30;47m | \033[0m号分隔"
|
||||||
|
SUBCONVERTER_REGEX_HINT="\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代"
|
||||||
|
SUBCONVERTER_EXCLUDE_INPUT="请直接输入节点过滤关键字"
|
||||||
|
SUBCONVERTER_INCLUDE_INPUT="请直接输入节点匹配关键字"
|
||||||
|
SUBCONVERTER_EXCLUDE_CLEAR="或输入 d \033[31m清空\033[0m节点过滤关键字"
|
||||||
|
SUBCONVERTER_INCLUDE_CLEAR="或输入 d \033[31m清空\033[0m节点匹配关键字"
|
||||||
|
|
||||||
|
SUBCONVERTER_RULE_CURRENT="当前使用规则为:"
|
||||||
|
SUBCONVERTER_SERVER_HINT="以下为互联网采集的第三方服务器,具体安全性请自行斟酌!"
|
||||||
|
SUBCONVERTER_SERVER_THANKS="感谢以下作者的无私奉献!!!"
|
||||||
|
SUBCONVERTER_SERVER_CURRENT="当前使用后端为:"
|
||||||
|
SUBCONVERTER_SET_OK="设置成功!返回上级菜单"
|
||||||
|
|
||||||
|
SUBCONVERTER_UA_HINT="无法正确获取配置文件时可尝试使用"
|
||||||
|
SUBCONVERTER_UA_CURRENT="当前UA:"
|
||||||
|
SUBCONVERTER_UA_AUTO="使用自动UA(默认)"
|
||||||
|
SUBCONVERTER_UA_NONE="不使用UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM="使用自定义UA"
|
||||||
|
SUBCONVERTER_UA_CLEAR="清空UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_WARN="注意:\n自定义UA不可包含空格或特殊符号!"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_INPUT="请直接输入自定义UA"
|
||||||
19
scripts/lang/chs/task_cmd.lang
Normal file
19
scripts/lang/chs/task_cmd.lang
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
TASK_CMD_EVERY="每隔"
|
||||||
|
TASK_CMD_HOURLY="时每"
|
||||||
|
TASK_CMD_MIN="分钟"
|
||||||
|
TASK_CMD_CORE_SKIP="任务【自动更新内核】中止-未检测到版本更新"
|
||||||
|
TASK_CMD_CORE_DONE="任务【自动更新内核】下载完成,正在重启服务!"
|
||||||
|
TASK_CMD_CORE_DL_FAIL="任务【自动更新内核】出错-下载失败!"
|
||||||
|
TASK_CMD_CORE_VERIFY_FAIL="任务【自动更新内核】出错-内核校验失败!"
|
||||||
|
TASK_CMD_SCRIPT_SKIP="任务【自动更新脚本】中止-未检测到版本更新"
|
||||||
|
TASK_CMD_SCRIPT_UNZIP_FAIL="任务【自动更新脚本】出错-解压失败!"
|
||||||
|
TASK_CMD_DB_SKIP_PREFIX="任务【自动更新数据库文件】跳过-未检测到"
|
||||||
|
TASK_CMD_DB_SKIP_SUFFIX="版本更新"
|
||||||
|
TASK_CMD_DB_DL_FAIL_PREFIX="任务【自动更新数据库文件】更新【"
|
||||||
|
TASK_CMD_DB_DL_FAIL_SUFFIX="】下载失败!"
|
||||||
|
TASK_CMD_DB_OK_PREFIX="任务【自动更新数据库文件】更新【"
|
||||||
|
TASK_CMD_DB_OK_SUFFIX="】成功!"
|
||||||
|
TASK_CMD_RES_OK="成功"
|
||||||
|
TASK_CMD_RES_FAIL="失败"
|
||||||
|
TASK_CMD_EXEC_PREFIX="任务【"
|
||||||
|
TASK_CMD_EXEC_MID="】执行"
|
||||||
13
scripts/lang/chs/uninstall.lang
Normal file
13
scripts/lang/chs/uninstall.lang
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
UNINSTALL_WARN="警告:该操作不可逆!"
|
||||||
|
UNINSTALL_CONFIRM="是否确认卸载ShellCrash?"
|
||||||
|
UNINSTALL_YES="是"
|
||||||
|
UNINSTALL_NO="否"
|
||||||
|
UNINSTALL_KEEP_CONFIRM="是否保留脚本配置及订阅文件?"
|
||||||
|
UNINSTALL_ENV_ERROR="环境变量配置有误,请尝试手动移除安装目录!"
|
||||||
|
UNINSTALL_DONE="已卸载ShellCrash相关文件!有缘再会!"
|
||||||
|
UNINSTALL_CLOSE_HINT="请手动关闭当前窗口以重置环境变量!"
|
||||||
|
UNINSTALL_CANCELED="操作已取消!"
|
||||||
|
UNINSTALL_CRON_CLASH="clash服务"
|
||||||
|
UNINSTALL_CRON_SUB="订阅链接"
|
||||||
|
UNINSTALL_CRON_INIT="ShellCrash初始化"
|
||||||
|
UNINSTALL_SSH_MARK="启用外网访问SSH服务"
|
||||||
17
scripts/lang/chs/userguide.lang
Normal file
17
scripts/lang/chs/userguide.lang
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# 新手引导
|
||||||
|
UG_WELCOME="欢迎使用新手引导!"
|
||||||
|
UG_CHOOSE_ENV="请先选择你的使用环境:"
|
||||||
|
UG_TIP_CONFIG="(你之后依然可以在设置中更改各种配置)"
|
||||||
|
UG_OPTION_1="路由设备配置局域网透明代理"
|
||||||
|
UG_OPTION_2="Linux设备仅配置本机代理"
|
||||||
|
UG_OPTION_3="还原之前备份的设置"
|
||||||
|
UG_RESTORE_OK="脚本设置已还原!请重新启动脚本!"
|
||||||
|
UG_IP_FORWARD_WARN="检测到你的设备尚未开启ip转发,局域网设备将无法正常连接网络,是否立即开启?"
|
||||||
|
UG_ENABLE_LOW_MEM="检测到你的安装目录空间不足10M,是否开启小闪存模式?"
|
||||||
|
UG_IMPORT_CONFIG="这是运行前的最后一步"
|
||||||
|
UG_CONFIG_TIP="你必须拥有一份配置文件才能运行服务!"
|
||||||
|
UG_CONFIG_RES="是否立即导入配置文件?"
|
||||||
|
UG_FINAL_TIP="很好!现在只需要执行启动就可以愉快的使用了!"
|
||||||
|
|
||||||
|
UG_IMPORT_NOW="立即导入"
|
||||||
|
UG_IMPORT_LATER="暂不导入"
|
||||||
@@ -4,7 +4,8 @@
|
|||||||
SET_MENU_TITLE="Welcome to the Function Settings Menu:"
|
SET_MENU_TITLE="Welcome to the Function Settings Menu:"
|
||||||
SET_MENU_REDIR="Routing Mode:"
|
SET_MENU_REDIR="Routing Mode:"
|
||||||
SET_MENU_DNS="DNS Settings:"
|
SET_MENU_DNS="DNS Settings:"
|
||||||
SET_MENU_FW_FILTER="Transparent Routing Traffic Filter"
|
SET_MENU_FW_FILTER="Transparent Routing Traffic Filter:"
|
||||||
|
SET_MENU_FW_FILTER_DESC="ports, devices, protocols, or lists"
|
||||||
SET_MENU_SKIP_CERT="Skip Cert Verify:"
|
SET_MENU_SKIP_CERT="Skip Cert Verify:"
|
||||||
SET_MENU_SNIFFER="Enable Sniff:"
|
SET_MENU_SNIFFER="Enable Sniff:"
|
||||||
SET_MENU_ADV_PORT="Custom Ports and Secrets"
|
SET_MENU_ADV_PORT="Custom Ports and Secrets"
|
||||||
@@ -126,3 +127,32 @@ ADV_TABLE_INPUT="Please enter the routing table ID (do not modify unless necessa
|
|||||||
# =================================================
|
# =================================================
|
||||||
IPV6_REDIR="IPv6 Transparent Routing (Hijack IPv6 Traffic)"
|
IPV6_REDIR="IPv6 Transparent Routing (Hijack IPv6 Traffic)"
|
||||||
IPV6_DNS="IPv6 DNS Resolution (Return IPv6 addresses)"
|
IPV6_DNS="IPv6 DNS Resolution (Return IPv6 addresses)"
|
||||||
|
SET_YES="Yes"
|
||||||
|
SET_NO_BACK="No, back"
|
||||||
|
SET_SKIP_CERT_NOW="Current status: "
|
||||||
|
SET_ENABLED="enabled"
|
||||||
|
SET_DISABLED="disabled"
|
||||||
|
SET_SKIP_CERT_ENABLE_Q=" skip local certificate verification. Enable now?"
|
||||||
|
SET_SKIP_CERT_DISABLE_Q=" skip local certificate verification. Disable now?"
|
||||||
|
SET_SNIFFER_NOW="Current status: "
|
||||||
|
SET_SNIFFER_ENABLE_Q=" domain sniffer. Enable now?"
|
||||||
|
SET_SNIFFER_DISABLE_Q=" domain sniffer. Disable now?"
|
||||||
|
SET_LANG_ZH="简体中文"
|
||||||
|
SET_LANG_EN="English"
|
||||||
|
SET_SWITCH_OK="Switched successfully!"
|
||||||
|
SET_MODE_SUFFIX="mode"
|
||||||
|
SET_SET_TO="Set to "
|
||||||
|
SET_BYPASS_TCP="TCP bypass forwarding"
|
||||||
|
SET_BYPASS_TU="TCP&UDP bypass forwarding"
|
||||||
|
SET_BYPASS_TCP_DESC="forward TCP traffic only to bypass router"
|
||||||
|
SET_BYPASS_TU_DESC="forward TCP&UDP traffic to bypass router"
|
||||||
|
SET_FW_AREA_CURRENT="Current hijack scope: "
|
||||||
|
SET_WARN="Notice:"
|
||||||
|
SET_DESC="Description:"
|
||||||
|
SET_BYPASS_WARN_1="This feature has risks. Do not use without network knowledge!"
|
||||||
|
SET_BYPASS_WARN_2="For UDP proxy, ensure bypass router runs a UDP-capable mode!"
|
||||||
|
SET_BYPASS_WARN_3="With systemd startup, core still runs idle. Conservative mode is recommended!"
|
||||||
|
SET_BYPASS_DESC_1="This mode does not start core; it only configures firewall forwarding and downstream devices need no extra gateway/DNS setup"
|
||||||
|
SET_BYPASS_DESC_2="Supports firewall routing split and device filtering, supports some cron tasks, but not IPv6"
|
||||||
|
SET_INPUT_BYPASS_IPV4="Please enter bypass-router IPv4 address"
|
||||||
|
SET_TIPS_ENTER_BACK="Tip: press Enter directly to return"
|
||||||
|
|||||||
100
scripts/lang/en/5_task.lang
Normal file
100
scripts/lang/en/5_task.lang
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# Recommended task configuration
|
||||||
|
TASK_RECOM_TITLE="Enable the following recommended automatic tasks?"
|
||||||
|
|
||||||
|
TASK_RECOM_ITEM_1="Save Dashboard select every 10 minutes"
|
||||||
|
TASK_RECOM_ITEM_2="Synchronize NTP after service startup"
|
||||||
|
TASK_RECOM_ITEM_3="Daily service restart at 03:00"
|
||||||
|
TASK5_RUN_TASK=" run task: "
|
||||||
|
TASK5_CONFIRM_ADD_CRON="Confirm adding scheduled task?"
|
||||||
|
TASK5_YES="Yes"
|
||||||
|
TASK5_NO="No"
|
||||||
|
TASK5_TASK_PREFIX="Task ["
|
||||||
|
TASK5_TASK_ADDED="] \033[32madded!\033[0m"
|
||||||
|
TASK5_USER_ADD_HINT1="Command may contain spaces, please ensure it is executable!"
|
||||||
|
TASK5_USER_ADD_HINT2="Do not append conditions. Set conditions after adding command."
|
||||||
|
TASK5_USER_ADD_HINT3="You can also edit "
|
||||||
|
TASK5_USER_ADD_HINT4=" manually to add commands"
|
||||||
|
TASK5_INPUT_CMD="Please input command directly"
|
||||||
|
TASK5_OR_BACK="Or input 0 to return"
|
||||||
|
TASK5_INPUT="Please enter"
|
||||||
|
TASK5_CHECK_INPUT="Please check input: "
|
||||||
|
TASK5_INPUT_REMARK="Please enter task remark"
|
||||||
|
TASK5_CUSTOM_TASK="custom_task_"
|
||||||
|
TASK5_CUSTOM_ADDED="Custom task added!"
|
||||||
|
TASK5_INPUT_ERROR="Invalid input, please retry!"
|
||||||
|
TASK5_USER_DEL_HINT1="Input ID to remove custom task (built-in tasks won't be affected)"
|
||||||
|
TASK5_USER_DEL_HINT2="You may also edit "
|
||||||
|
TASK5_NO_CUSTOM_TASK="No custom task has been added yet"
|
||||||
|
TASK5_SELECT_ADD="Please select task to add:"
|
||||||
|
TASK5_SELECT_COND="Select execution condition for task "
|
||||||
|
TASK5_SELECT_COND2=":"
|
||||||
|
TASK5_COND_1="Scheduled task \033[32mweekly\033[0m"
|
||||||
|
TASK5_COND_2="Scheduled task \033[32mdaily\033[0m"
|
||||||
|
TASK5_COND_3="Scheduled task \033[32mhourly\033[0m"
|
||||||
|
TASK5_COND_4="Scheduled task \033[32mminutely\033[0m"
|
||||||
|
TASK5_WARN_LINE1=" --------- \033[31mWARNING\033[0m ---------"
|
||||||
|
TASK5_WARN_LINE2=" Do not use advanced triggers unless you know what you are doing!"
|
||||||
|
TASK5_WARN_LINE3=" ----------------------------------------"
|
||||||
|
TASK5_COND_5="Service \033[33mbefore start\033[0m"
|
||||||
|
TASK5_COND_6="Service \033[33mafter start\033[0m"
|
||||||
|
TASK5_COND_7="Service \033[33mrun every minute\033[0m"
|
||||||
|
TASK5_COND_8="After firewall service \033[33mrestart\033[0m"
|
||||||
|
TASK5_WEEK_HINT1="Input 1~7 for day of week (7=Sunday)"
|
||||||
|
TASK5_WEEK_HINT2="Input like 1,4,0 for Monday/Thursday/Sunday"
|
||||||
|
TASK5_WEEK_HINT3="Input 1~5 for Monday to Friday"
|
||||||
|
TASK5_WEEK_INPUT="Run on which weekday"
|
||||||
|
TASK5_HOUR_INPUT1="Run at which hour of that day (0~23)"
|
||||||
|
TASK5_CRON_WEEK="Weekly "
|
||||||
|
TASK5_CRON_WEEK2=" @ "
|
||||||
|
TASK5_OCLOCK=":00"
|
||||||
|
TASK5_DAY_HINT1="Input 1,7,15 for run at 1/7/15 o'clock"
|
||||||
|
TASK5_DAY_HINT2="Input 6~18 for every hour between 6 and 18"
|
||||||
|
TASK5_HOUR_INPUT2="Run at which hour daily (0~23)"
|
||||||
|
TASK5_MIN_INPUT="Run at which minute (0~59)"
|
||||||
|
TASK5_CRON_DAY="Daily "
|
||||||
|
TASK5_POINT=":"
|
||||||
|
TASK5_MINUTE=""
|
||||||
|
TASK5_EVERY_HOUR_INPUT="Run every how many hours (1~23)"
|
||||||
|
TASK5_EVERY="Every "
|
||||||
|
TASK5_HOUR=" hour(s)"
|
||||||
|
TASK5_EVERY_MIN_INPUT="Run every how many minutes (1~59)"
|
||||||
|
TASK5_MIN=" minute(s)"
|
||||||
|
TASK5_BFSTART="Before service start "
|
||||||
|
TASK5_AFSTART="After service start "
|
||||||
|
TASK5_RUNNING_HINT1="Input 10 for every 10 mins, 1440 for every 24 hrs"
|
||||||
|
TASK5_RUNNING_HINT2="Values >60 mins will be rounded by hour under current timezone"
|
||||||
|
TASK5_RUNNING_INPUT="Run every how many minutes (1~1440)"
|
||||||
|
TASK5_RUNNING_PREFIX="During runtime every "
|
||||||
|
TASK5_AFFW_HINT="This will inject startup code into /etc/init.d/firewall"
|
||||||
|
TASK5_CONFIRM_CONTINUE="Continue?"
|
||||||
|
TASK5_AFFW_PREFIX="After firewall restart "
|
||||||
|
TASK5_GUARD_WORD="guard"
|
||||||
|
TASK5_OLD_PREFIX="legacy-"
|
||||||
|
TASK5_NONE_TO_MANAGE="No task available to manage!"
|
||||||
|
TASK5_ADDED_TASKS="Added tasks:"
|
||||||
|
TASK5_CLEAR_OLD="Clear legacy tasks"
|
||||||
|
TASK5_CLEAR_ALL="Clear task list"
|
||||||
|
TASK5_OLD_CLEARED="Legacy tasks cleared!"
|
||||||
|
TASK5_ALL_CLEARED="All tasks cleared!"
|
||||||
|
TASK5_OLD_NOT_SUPPORT="Legacy tasks cannot be managed, remove them?"
|
||||||
|
TASK5_NO_BACK="No, return"
|
||||||
|
TASK5_CURRENT_TASK="Current task: "
|
||||||
|
TASK5_EDIT_TASK="\033[33mEdit\033[0m current task"
|
||||||
|
TASK5_DEL_TASK="\033[31mDelete\033[0m current task"
|
||||||
|
TASK5_RUN_ONCE="\033[32mRun once\033[0m now"
|
||||||
|
TASK5_VIEW_RECORD="View \033[33mexecution record\033[0m"
|
||||||
|
TASK5_RUN_OK="success!"
|
||||||
|
TASK5_RUN_FAIL="failed!"
|
||||||
|
TASK5_RECORD_NOT_FOUND="No execution record found!"
|
||||||
|
TASK5_USER_FILE_HEADER="#task_id(>200 in order)#task_command#task_desc(no # in cmd or desc)"
|
||||||
|
TASK5_MENU_TITLE="Scheduled Tasks"
|
||||||
|
TASK5_MENU_1="Add \033[32mautomatic task\033[0m"
|
||||||
|
TASK5_MENU_2="Manage \033[33mtask list\033[0m"
|
||||||
|
TASK5_MENU_3="View \033[36mtask logs\033[0m"
|
||||||
|
TASK5_MENU_4="Configure \033[36mlog push\033[0m"
|
||||||
|
TASK5_MENU_5="Add \033[33mcustom task\033[0m"
|
||||||
|
TASK5_MENU_6="Delete \033[33mcustom task\033[0m"
|
||||||
|
TASK5_MENU_7="Use \033[32mrecommended settings\033[0m"
|
||||||
|
TASK5_TASK_GREP="Task ["
|
||||||
|
TASK5_LOG_NOT_FOUND="No task-related log found!"
|
||||||
|
TASK5_PUSH_HINT="Please configure push channel and switch in log tools"
|
||||||
67
scripts/lang/en/6_core_config.lang
Normal file
67
scripts/lang/en/6_core_config.lang
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
CORECFG_TITLE="Configuration Management"
|
||||||
|
CORECFG_HINT_SELECT_PROVIDER="Input a number to manage corresponding provider"
|
||||||
|
CORECFG_MENU_A="\033[32mAdd provider\033[0m (subscription/share link/local file)"
|
||||||
|
CORECFG_MENU_B="\033[36mGenerate local config\033[0m"
|
||||||
|
CORECFG_MENU_C="\033[33mGenerate online config\033[0m"
|
||||||
|
CORECFG_MENU_D="\033[31mClear provider list\033[0m"
|
||||||
|
CORECFG_MENU_E="\033[36mCustom config file\033[0m"
|
||||||
|
CORECFG_CORE_ONLY="Only for Mihomo/singboxr core, please switch core!"
|
||||||
|
CORECFG_ADD_PROVIDER_FIRST="Please add provider first!"
|
||||||
|
CORECFG_CLEAR_WARN="Warning: this will delete all providers and cannot be undone!"
|
||||||
|
CORECFG_CLEAR_CONFIRM="Confirm clearing provider list:"
|
||||||
|
CORECFG_YES="Yes"
|
||||||
|
CORECFG_NO="No"
|
||||||
|
CORECFG_NO_BACK="No, return"
|
||||||
|
CORECFG_INPUT_ALNUM="Please input letter or number"
|
||||||
|
CORECFG_INPUT="Please enter"
|
||||||
|
CORECFG_FILL_REQUIRED="Please complete required fields first!"
|
||||||
|
CORECFG_START_APPLY="Start service to apply config now?"
|
||||||
|
CORECFG_PROVIDER_SUPPORT="Supports adding subscription/share link/local file as provider"
|
||||||
|
CORECFG_SET_NAME="Set \033[36mname/alias\033[0m\t"
|
||||||
|
CORECFG_SET_LINK="Set \033[32mlink/path\033[0m:\t"
|
||||||
|
CORECFG_SET_OVERRIDE="Set \033[33mlocal generation override\033[0m"
|
||||||
|
CORECFG_SAVE_PROVIDER="\033[36mSave this provider\033[0m"
|
||||||
|
CORECFG_DEL_PROVIDER="\033[31mDelete this provider\033[0m"
|
||||||
|
CORECFG_MORE_CONFIG_HINT="For detailed settings below, go to corresponding feature page."
|
||||||
|
CORECFG_GEN_LOCAL_ONE="\033[32mLocal generate\033[0m config with this provider only"
|
||||||
|
CORECFG_GEN_ONLINE_ONE="\033[33mOnline generate\033[0m config with this provider only"
|
||||||
|
CORECFG_GET_ONLINE_DIRECT="Fetch this config online directly (without conversion)"
|
||||||
|
CORECFG_USE_DIRECT="Use this file directly as config (without local generation)"
|
||||||
|
CORECFG_NAME_HINT="Note:\nName/alias cannot duplicate, cannot be pure digits, and should not be too long!"
|
||||||
|
CORECFG_INPUT_NAME="Please input name/alias"
|
||||||
|
CORECFG_OR_BACK="or input 0 to return"
|
||||||
|
CORECFG_LINK_HINT1="\033[33mSubscription link\033[0m:\nClash config subscription URL starting with https/http"
|
||||||
|
CORECFG_LINK_HINT2="\033[36mShare link\033[0m:"
|
||||||
|
CORECFG_LINK_HINT3="\033[33mLocal file\033[0m:\nMust be placed under "
|
||||||
|
CORECFG_LINK_HINT4=""
|
||||||
|
CORECFG_LINK_HINT5="\033[36mBase64 \033[0m:\nPlease write to local file directly"
|
||||||
|
CORECFG_INPUT0_BACK="Input 0 to return"
|
||||||
|
CORECFG_SELECT_FILE_OR_LINK="Select file or input link"
|
||||||
|
CORECFG_INPUT_LINK="Please input link directly"
|
||||||
|
CORECFG_DANGER1="Warning:\nThis feature is incompatible with skip certificate verification"
|
||||||
|
CORECFG_DANGER2="Please make sure you fully understand what you are doing"
|
||||||
|
CORECFG_DANGER_CONFIRM="I confirm I can troubleshoot by myself"
|
||||||
|
CORECFG_INTERVAL1="Set \033[33mhealth-check interval\033[0m:\t"
|
||||||
|
CORECFG_INTERVAL2="Set \033[36mauto-update interval\033[0m:\t"
|
||||||
|
CORECFG_MIN="min"
|
||||||
|
CORECFG_HOUR="hour"
|
||||||
|
CORECFG_SET_UA="Set \033[33mbrowser UA\033[0m:\t"
|
||||||
|
CORECFG_SET_EXCLUDE="Set \033[31mexclude regex\033[0m:\t"
|
||||||
|
CORECFG_SET_INCLUDE="Set \033[32minclude regex\033[0m:\t"
|
||||||
|
CORECFG_CUR_INTERVAL="Current health-check interval:"
|
||||||
|
CORECFG_INPUT_INTERVAL1="Input health-check interval (minutes)"
|
||||||
|
CORECFG_RESET_INTERVAL1="or input r to reset to default (3 min)"
|
||||||
|
CORECFG_INPUT_INTERVAL2="Input auto-update interval (hours)"
|
||||||
|
CORECFG_RESET_INTERVAL2="or input r to reset to default (12 hours)"
|
||||||
|
CORECFG_CUR_UA_NONE="Current browser UA: none"
|
||||||
|
CORECFG_CUR_UA="Current browser UA: "
|
||||||
|
CORECFG_INPUT_UA="Input browser UA"
|
||||||
|
CORECFG_RESET_UA="or input r to reset UA to default (clash.meta)"
|
||||||
|
CORECFG_CUR_EXCLUDE_NONE="Current exclude rule: none"
|
||||||
|
CORECFG_CUR_EXCLUDE="Current exclude rule: "
|
||||||
|
CORECFG_INPUT_EXCLUDE="Input exclude keyword(s) (regex supported, no spaces)"
|
||||||
|
CORECFG_CLEAR_EXCLUDE="or input c to clear exclude rule"
|
||||||
|
CORECFG_CUR_INCLUDE_NONE="Current include rule: none"
|
||||||
|
CORECFG_CUR_INCLUDE="Current include rule: "
|
||||||
|
CORECFG_INPUT_INCLUDE="Input include keyword(s) (regex supported, no spaces)"
|
||||||
|
CORECFG_CLEAR_INCLUDE="or input c to clear include rule"
|
||||||
97
scripts/lang/en/7_gateway.lang
Normal file
97
scripts/lang/en/7_gateway.lang
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
GW_TITLE="Access & Control Menu"
|
||||||
|
GW_WARN="Notice: "
|
||||||
|
GW_FW_VPS_HINT="If running on a VPS, also allow related ports in your VPS security policy."
|
||||||
|
GW_FW_PORT_LIMIT="Up to 10 allowed ports are supported. Please remove some first."
|
||||||
|
GW_INPUT_ALLOW_PORT="Enter the port to allow"
|
||||||
|
GW_OK="Done"
|
||||||
|
GW_CORE_UNSUPPORTED=" core does not support this feature yet, please switch core first!"
|
||||||
|
GW_TG_DONE_PREFIX="Telegram bot setup completed! Use"
|
||||||
|
GW_TG_DONE_SUFFIX="to open the function menu!"
|
||||||
|
GW_SET="Configured"
|
||||||
|
GW_BOUND="Bound"
|
||||||
|
GW_INPUT_PORT_DEL0="Enter port (0 to delete)"
|
||||||
|
GW_INPUT_WSPATH="Enter ws-path (0 to delete)"
|
||||||
|
GW_INPUT_UUID="Enter UUID (0 to delete)"
|
||||||
|
GW_INPUT_HOST="Enter your public IP (v4/v6) or domain"
|
||||||
|
GW_SHARE_LINK_HINT="Your share link (do not share casually):"
|
||||||
|
GW_MENU_FW_WAN="Configure WAN Firewall"
|
||||||
|
GW_MENU_TG_BOT="Configure Telegram Control Bot"
|
||||||
|
GW_MENU_DDNS="Configure DDNS Domain"
|
||||||
|
GW_MENU_VMESS="Custom Public Vmess Inbound"
|
||||||
|
GW_MENU_SHADOWSOCKS="Custom Public ShadowSocks Inbound"
|
||||||
|
GW_MENU_TS="Configure Tailscale Intranet (Singbox only)"
|
||||||
|
GW_MENU_WG="Configure Wireguard Client (Singbox only)"
|
||||||
|
GW_FW_STOP_WARN="WAN firewall requires stopping the service first"
|
||||||
|
GW_CONFIRM_CONTINUE="Continue?"
|
||||||
|
GW_YES="Yes"
|
||||||
|
GW_NO="No"
|
||||||
|
GW_NO_BACK="No, back to previous menu"
|
||||||
|
GW_FW_MANUAL_PORTS="Manual allowed ports: "
|
||||||
|
GW_FW_AUTO_PORTS="Auto allowed ports: "
|
||||||
|
GW_FW_DEFAULT_BLOCK="Default blocked ports: "
|
||||||
|
GW_FW_TOGGLE="Enable/Disable WAN firewall: "
|
||||||
|
GW_FW_ADD_PORT="Add allowed ports (can include default blocked ports)"
|
||||||
|
GW_FW_REMOVE_PORT="Remove a specific manual port"
|
||||||
|
GW_FW_CLEAR_PORTS="Clear all manual allowed ports"
|
||||||
|
GW_FW_DISABLE_CONFIRM="Confirm disabling firewall?"
|
||||||
|
GW_FW_DISABLE_RISK="This can pose a serious security risk!"
|
||||||
|
GW_ERR_DUP_PORT="Invalid input! Do not add duplicates!"
|
||||||
|
GW_ERR_PORT_RANGE="Invalid input! Enter a valid number (1-65535)!"
|
||||||
|
GW_ERR_INPUT="Invalid input!"
|
||||||
|
GW_INPUT_REMOVE_PORT="Enter the port to remove"
|
||||||
|
GW_INPUT_0_BACK="Or enter 0 to go back"
|
||||||
|
GW_ERR_PORT_NOT_FOUND="Please enter a port that was added!"
|
||||||
|
GW_TG_CMD_MENU="Open ShellCrash menu"
|
||||||
|
GW_TG_CMD_HELP="View help"
|
||||||
|
GW_TG_WARN="Due to network conditions, this bot only runs when the service is started!"
|
||||||
|
GW_TG_TOGGLE="Enable/Disable TG-BOT service"
|
||||||
|
GW_TG_BIND="TG-BOT binding"
|
||||||
|
GW_TG_MENUPUSH="Push menu on start"
|
||||||
|
GW_TG_BIND_FIRST="Please bind TG-BOT first!"
|
||||||
|
GW_TG_BOUND_DETECTED="Detected an existing TG push bot binding"
|
||||||
|
GW_TG_USE_DIRECT="Use it directly?"
|
||||||
|
GW_INBOUND_WARN_PORT="The configured port will be added to the WAN firewall and allowed automatically!"
|
||||||
|
GW_INBOUND_WARN_BASIC="This script provides basic features only. Use custom config for more needs!"
|
||||||
|
GW_INBOUND_WARN_ILLEGAL="Do not use it for illegal proxying. You are responsible for consequences!"
|
||||||
|
GW_VMS_TOGGLE="Enable/Disable Vmess inbound"
|
||||||
|
GW_SET_LISTEN_PORT="Set listen port:"
|
||||||
|
GW_SET_WSPATH="Set WS-path (optional):"
|
||||||
|
GW_SET_UUID="Set key-uuid:"
|
||||||
|
GW_GEN_RANDOM_KEY="Generate random key"
|
||||||
|
GW_SET_OBFS_HOST="Set obfs host (optional):"
|
||||||
|
GW_GEN_SHARE_LINK="Generate share link"
|
||||||
|
GW_FILL_REQUIRED="Please complete required settings first!"
|
||||||
|
GW_ERR_WSPATH="Invalid path. It must start with '/'."
|
||||||
|
GW_ERR_UUID="Invalid UUID format. Re-enter or use random generation."
|
||||||
|
GW_INPUT_OBFS_HOST="Enter obfs host (0 to delete)"
|
||||||
|
GW_SS_TOGGLE="Enable/Disable ShadowSocks inbound"
|
||||||
|
GW_SS_SELECT_CIPHER="Select cipher to use:"
|
||||||
|
GW_SS_SET_PWD="Set password:"
|
||||||
|
GW_SS_2022_NOTE_HEADER=" - - - - - - -\033[31mNotice\033[0m- - - - - - -"
|
||||||
|
GW_SS_2022_REQUIRE=" 2022 ciphers require a randomly generated password!"
|
||||||
|
GW_SS_2022_PASSWORD_ONLY="2022 ciphers require a script-generated password!"
|
||||||
|
GW_TS_WARN="The default core is built without the Tailscale module to save memory.\nPlease switch to a full custom core if you need it!"
|
||||||
|
GW_TS_KEY_URL="Create key:\033[32;4mhttps://login.tailscale.com/admin/settings/keys\033[0m"
|
||||||
|
GW_TS_ALLOW_URL="Allow advertised routes for non-local targets:\033[32;4mhttps://login.tailscale.com\033[0m"
|
||||||
|
GW_TS_SUBNET_EXIT_HINT="For non-local targets, use Subnet or EXIT-NODE mode in the client"
|
||||||
|
GW_TS_TOGGLE="Enable/Disable Tailscale service"
|
||||||
|
GW_TS_SET_AUTHKEY="Set Auth Key"
|
||||||
|
GW_TS_SUBNET="Advertise subnet routes"
|
||||||
|
GW_TS_EXIT_NODE="Advertise all traffic (EXIT-NODE)"
|
||||||
|
GW_TS_HOSTNAME="Set device name (optional)"
|
||||||
|
GW_TS_SET_KEY_FIRST="Please set the Auth Key first!"
|
||||||
|
GW_TS_INPUT_KEY="Enter Auth Key (0 to delete)"
|
||||||
|
GW_TS_EXITNODE_WARN="The official exitnode DNS has a bug. Either enable domain sniffing and disable Tailscale DNS,\nor set Globalname servers to this device subnet IP in the web UI and enable override."
|
||||||
|
GW_TS_INPUT_NAME="Enter the device name to show in Tailscale"
|
||||||
|
GW_WG_WARN="The default core is built without the WireGuard module to save memory.\nPlease switch to a full custom core if you need it!"
|
||||||
|
GW_WG_TOGGLE="Enable/Disable Wireguard service"
|
||||||
|
GW_WG_SET_ENDPOINT="Set Endpoint address:"
|
||||||
|
GW_WG_SET_ENDPOINT_PORT="Set Endpoint port:"
|
||||||
|
GW_WG_SET_PUBLIC="Set PublicKey:"
|
||||||
|
GW_WG_SET_PRESHARED="Set PresharedKey:"
|
||||||
|
GW_WG_SET_PRIVATE="Set PrivateKey:"
|
||||||
|
GW_WG_SET_IPV4="Set IPv4 address:"
|
||||||
|
GW_WG_SET_IPV6="Optional IPv6 address:"
|
||||||
|
GW_INPUT_TEXT_DEL0="Enter value (Enter or 0 to delete)"
|
||||||
|
GW_INPUT_PLAIN="Enter"
|
||||||
|
GW_INPUT_PWD_DEL0="Enter password (0 to delete)"
|
||||||
156
scripts/lang/en/8_tools.lang
Normal file
156
scripts/lang/en/8_tools.lang
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
TOOLS_TITLE="Tools & Optimization"
|
||||||
|
TOOLS_SSH_DISABLE="Disable"
|
||||||
|
TOOLS_SSH_ENABLE="Enable"
|
||||||
|
TOOLS_ERR_PORT="Invalid input! Please enter a valid number (1000-65535)!"
|
||||||
|
TOOLS_ERR_PORT_OCCUPIED="This port is occupied by another process, please try another one!"
|
||||||
|
TOOLS_SSH_SET_OK="Set successfully, please re-enable WAN SSH access!"
|
||||||
|
TOOLS_SSH_ENABLED="WAN SSH access enabled!"
|
||||||
|
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_PREFIX="1) \033[32mChange\033[0m WAN SSH port:"
|
||||||
|
TOOLS_SSH_PORT_ITEM_SUFFIX=""
|
||||||
|
TOOLS_SSH_PASS_ITEM="2) \033[32mChange\033[0m SSH password (enter twice, then press Enter)"
|
||||||
|
TOOLS_SSH_TOGGLE_ITEM_PREFIX="3) "
|
||||||
|
TOOLS_SSH_TOGGLE_ITEM_SUFFIX=" 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_PREFIX="5) "
|
||||||
|
TOOLS_MENU_MI_UPDATE_ITEM_SUFFIX=" Xiaomi system auto-update"
|
||||||
|
TOOLS_MENU_MI_AUTO_SSH_ITEM_PREFIX="6) Xiaomi device SSH hardening —— "
|
||||||
|
TOOLS_MENU_MI_AUTO_SSH_ITEM_SUFFIX=""
|
||||||
|
TOOLS_MENU_MI_TUN_FIX_ITEM_PREFIX="8) Xiaomi device Tun module repair —— "
|
||||||
|
TOOLS_MENU_MI_TUN_FIX_ITEM_SUFFIX=""
|
||||||
|
TOOLS_MI_UPDATE_MSG_PREFIX="Xiaomi router auto-update has been "
|
||||||
|
TOOLS_MI_UPDATE_MSG_SUFFIX=". If it does not take effect, sync the setting in the official app!"
|
||||||
|
TOOLS_UNSUPPORTED_DEVICE="Unsupported device!"
|
||||||
|
TOOLS_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_PREFIX="1) Telegram push\t——"
|
||||||
|
TOOLS_LOG_TG_SUFFIX=""
|
||||||
|
TOOLS_LOG_DEER_PREFIX="2) PushDeer push\t——"
|
||||||
|
TOOLS_LOG_DEER_SUFFIX=""
|
||||||
|
TOOLS_LOG_BARK_PREFIX="3) Bark push-IOS\t——"
|
||||||
|
TOOLS_LOG_BARK_SUFFIX=""
|
||||||
|
TOOLS_LOG_PO_PREFIX="4) Passover push\t——"
|
||||||
|
TOOLS_LOG_PO_SUFFIX=""
|
||||||
|
TOOLS_LOG_PP_PREFIX="5) PushPlus push\t——"
|
||||||
|
TOOLS_LOG_PP_SUFFIX=""
|
||||||
|
TOOLS_LOG_SYNO_PREFIX="6) SynoChat push\t——"
|
||||||
|
TOOLS_LOG_SYNO_SUFFIX=""
|
||||||
|
TOOLS_LOG_GOTIFY_PREFIX="7) Gotify push\t ——"
|
||||||
|
TOOLS_LOG_GOTIFY_SUFFIX=""
|
||||||
|
TOOLS_LOG_VIEW="a) View \033[36mruntime logs\033[0m"
|
||||||
|
TOOLS_LOG_TASK_PREFIX="b) Push task logs\t——"
|
||||||
|
TOOLS_LOG_TASK_SUFFIX=""
|
||||||
|
TOOLS_LOG_DEVICE_PREFIX="c) Set device name\t——"
|
||||||
|
TOOLS_LOG_DEVICE_SUFFIX=""
|
||||||
|
TOOLS_LOG_CLEAR="d) Clear log files"
|
||||||
|
TOOLS_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_PREFIX="Background log path: "
|
||||||
|
TOOLS_DEBUG_WARN2_SUFFIX=""
|
||||||
|
TOOLS_DEBUG_WARN3="For long-running background monitoring, error is recommended as the log level to avoid oversized files!"
|
||||||
|
TOOLS_DEBUG_WARN4="You can also use: \033[33mcrash -s debug 'warning'\033[0m to select another log level"
|
||||||
|
TOOLS_DEBUG_ITEM_1_PREFIX="1) Only test the availability of the "
|
||||||
|
TOOLS_DEBUG_ITEM_1_SUFFIX=" config file"
|
||||||
|
TOOLS_DEBUG_ITEM_2_PREFIX="2) Run the "
|
||||||
|
TOOLS_DEBUG_ITEM_2_SUFFIX=" config file in foreground without firewall hijacking (use Ctrl+C to stop manually)"
|
||||||
|
TOOLS_DEBUG_ITEM_3="3) Run the full startup flow in background with firewall hijacking, log level: \033[31merror\033[0m"
|
||||||
|
TOOLS_DEBUG_ITEM_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_PREFIX="6) Run the full startup flow in background with firewall hijacking and print error logs to flash: "
|
||||||
|
TOOLS_DEBUG_ITEM_6_SUFFIX=""
|
||||||
|
TOOLS_DEBUG_ITEM_8="8) Run the full startup flow in background, print execution errors and inspect context, then close the process"
|
||||||
|
TOOLS_DEBUG_ITEM_9_PREFIX="9) Merge the json files under "
|
||||||
|
TOOLS_DEBUG_ITEM_9_SUFFIX=" into "
|
||||||
|
TOOLS_FLASH_WARN="Frequent flash writes will shorten flash lifespan. Unless you are dealing with a bug that would otherwise crash or reboot the device, do not use this feature!"
|
||||||
|
TOOLS_FLASH_CONFIRM="Confirm enabling this feature?"
|
||||||
|
TOOLS_MERGE_OK="Merged successfully!"
|
||||||
295
scripts/lang/en/9_upgrade.lang
Normal file
295
scripts/lang/en/9_upgrade.lang
Normal file
@@ -0,0 +1,295 @@
|
|||||||
|
UPG_ERR_TRY_OTHER_SOURCE="Please switch to another source and try downloading again!"
|
||||||
|
UPG_ERR_LOCAL_INSTALL="Or refer to \033[32;4mhttps://juewuy.github.io/bdaz\033[0m for local installation!"
|
||||||
|
UPG_TITLE="Update & Support"
|
||||||
|
UPG_CUR_DIR_SPACE="Current directory"
|
||||||
|
UPG_LOW_SPACE_HINT="Low free space in current directory, consider enabling low-flash mode!"
|
||||||
|
UPG_MENU_SCRIPT="Update "
|
||||||
|
UPG_MENU_SCRIPT_NAME="script"
|
||||||
|
UPG_MENU_CORE="Switch/Update "
|
||||||
|
UPG_MENU_CORE_NAME="core"
|
||||||
|
UPG_MENU_GEO="Install/Update local "
|
||||||
|
UPG_MENU_GEO_NAME="database files"
|
||||||
|
UPG_MENU_DB="Install/Update local "
|
||||||
|
UPG_MENU_DB_NAME="Dashboard"
|
||||||
|
UPG_MENU_CRT="Install/Update local "
|
||||||
|
UPG_MENU_CRT_NAME="certificates"
|
||||||
|
UPG_MENU_PAC=" proxy view"
|
||||||
|
UPG_MENU_SOURCE="Switch "
|
||||||
|
UPG_MENU_SOURCE_NAME="source and branch"
|
||||||
|
UPG_MENU_UNINSTALL="Uninstall ShellCrash"
|
||||||
|
UPG_MENU_THANKS="Thanks list"
|
||||||
|
UPG_PAC_LINK="PAC URL: "
|
||||||
|
UPG_PAC_GUIDE="PAC guide: "
|
||||||
|
UPG_THANKS_TITLE="Thanks to the following projects and developers!"
|
||||||
|
UPG_THANKS_SPECIAL="Special thanks: \033[36mall contributors and sponsors!\033[0m"
|
||||||
|
UPG_CHECKING="Checking updates..."
|
||||||
|
UPG_CHECK_OK="Update check succeeded"
|
||||||
|
UPG_CHECK_FAIL="Update check failed! Please switch source and retry!"
|
||||||
|
UPG_DOWNLOAD_FAIL="Download failed!"
|
||||||
|
UPG_EXTRACTING="Extracting files..."
|
||||||
|
UPG_EXTRACT_FAIL="Extraction failed!"
|
||||||
|
UPG_SCRIPT_OK="Script update succeeded!"
|
||||||
|
UPG_SCRIPT_WARN="Note: service will be stopped during update!"
|
||||||
|
UPG_SCRIPT_CUR_VER="Current script version: "
|
||||||
|
UPG_SCRIPT_NEW_VER="Latest script version: "
|
||||||
|
UPG_UPDATE_NOW="Update now"
|
||||||
|
UPG_SCRIPT_MGR_OK="Manager script updated successfully!"
|
||||||
|
UPG_CPUCORE_HINT1="Use only when CPU architecture detection fails or core cannot run!"
|
||||||
|
UPG_CPUCORE_HINT2="Not sure how to get core arch?"
|
||||||
|
UPG_CPUCORE_HINT3="Refer to: "
|
||||||
|
UPG_CPUCORE_LIST="Available online CPU architectures:"
|
||||||
|
UPG_CPUCORE_ERR="Please enter a valid CPU architecture!"
|
||||||
|
UPG_CORETYPE_CONFIRM="Please confirm custom core type:"
|
||||||
|
UPG_CORE_SWITCH_PREFIX="Switched from "
|
||||||
|
UPG_CORE_SWITCH_MID=" to "
|
||||||
|
UPG_CORE_SWITCH_SUFFIX=" core"
|
||||||
|
UPG_CORE_SWITCH_WARN="Geo DB and yaml/json configs are not compatible between the two cores"
|
||||||
|
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_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_PREFIX="Fetching "
|
||||||
|
UPG_GETTING_CORE_TEXT_SUFFIX=" core files online..."
|
||||||
|
UPG_CORE_DOWNLOAD_OK_TEXT_PREFIX=""
|
||||||
|
UPG_CORE_DOWNLOAD_OK_TEXT_SUFFIX=" core downloaded successfully!"
|
||||||
|
UPG_CORE_DOWNLOAD_FAIL_TEXT="Core file download failed!"
|
||||||
|
UPG_CORE_DOWNLOAD_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_MENU_OFFICIAL=" official core"
|
||||||
|
UPG_CUSTOM_CORE_MENU_ALPHA=" core (supports Smart strategy)"
|
||||||
|
UPG_CUSTOM_CORE_MENU_MULTI=" multi-version core"
|
||||||
|
UPG_CUSTOM_CORE_LINK_HINT="Please enter the custom core URL"
|
||||||
|
UPG_CUSTOM_CORE_LINK_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_PREFIX="1) \033[43;30mMihomo\033[0m: \033[32m"
|
||||||
|
UPG_CORE_MENU_1_SUFFIX=" \033[32m(full meta core) highly compatible\033[0m \033[33mmore resource usage\033[0m"
|
||||||
|
UPG_CORE_MENU_2_PREFIX="2) \033[43;30mSingBoxR\033[0m: \033[32m"
|
||||||
|
UPG_CORE_MENU_2_SUFFIX=" \033[32mfully featured\033[0m \033[33mreF1nd enhanced branch\033[0m"
|
||||||
|
UPG_CORE_MENU_3_PREFIX="3) \033[43;30mSingBox\033[0m: \033[32m"
|
||||||
|
UPG_CORE_MENU_3_SUFFIX=" \033[32mlower resource usage\033[0m \033[33mproviders are not supported\033[0m"
|
||||||
|
UPG_CORE_MENU_4_PREFIX="4) \033[43;30mClash\033[0m: \033[32m"
|
||||||
|
UPG_CORE_MENU_4_SUFFIX=" \033[32mlow resource usage\033[0m \033[33munsafe, maintenance stopped\033[0m"
|
||||||
|
UPG_CORE_MENU_5_PREFIX="5) Switch branch and compression method: \033[32m"
|
||||||
|
UPG_CORE_MENU_5_SUFFIX="\033[0m"
|
||||||
|
UPG_CORE_MENU_6_PREFIX="6) \033[36mUse custom core\033[0m "
|
||||||
|
UPG_CORE_MENU_6_SUFFIX=""
|
||||||
|
UPG_CORE_MENU_7="7) \033[32mUpdate current core\033[0m"
|
||||||
|
UPG_CORE_MENU_9="9) Manually specify CPU architecture"
|
||||||
|
UPG_GEO_GETTING="Fetching database files from the server..."
|
||||||
|
UPG_GEO_OK_PREFIX=""
|
||||||
|
UPG_GEO_OK_SUFFIX=" 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_PREFIX="This will clean all database files under "
|
||||||
|
UPG_GEO_CLEAN_HINT1_SUFFIX=" and /ruleset!"
|
||||||
|
UPG_GEO_CLEAN_HINT2="After cleaning, starting the service will automatically download the required files"
|
||||||
|
UPG_GEO_CLEAN_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_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_PREFIX="1) Install in "
|
||||||
|
UPG_DB_DIR_1_SUFFIX="/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_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_NOTE1="Gvisor, Tailscale, Wireguard, and NaiveProxy are not supported"
|
||||||
|
UPG_CORE_V1_PREFIX="1) \033[43;30mMihomo\033[0m: \033[32m"
|
||||||
|
UPG_CORE_V1_SUFFIX=" \033[32m(full meta core) highly compatible\033[0m \033[33mmore resource usage\033[0m"
|
||||||
|
UPG_CORE_V1_DOC="Docs: \033[36;4mhttps://wiki.metacubex.one\033[0m"
|
||||||
|
UPG_CORE_V2_PREFIX="2) \033[43;30mSingBoxR\033[0m: \033[32m"
|
||||||
|
UPG_CORE_V2_SUFFIX=" \033[32mfully featured\033[0m \033[33mreF1nd enhanced branch\033[0m"
|
||||||
|
UPG_CORE_V2_DOC="Docs: \033[36;4mhttps://sing-boxr.dustinwin.us.kg\033[0m"
|
||||||
|
UPG_CORE_V3_PREFIX="3) \033[43;30mSingBox\033[0m: \033[32m"
|
||||||
|
UPG_CORE_V3_SUFFIX=" \033[32mlower resource usage\033[0m \033[33mproviders are not supported\033[0m"
|
||||||
|
UPG_CORE_V3_DOC="Docs: \033[36;4mhttps://sing-box.sagernet.org\033[0m"
|
||||||
|
UPG_CORE_V4_PREFIX="4) \033[43;30mClash\033[0m: \033[32m"
|
||||||
|
UPG_CORE_V4_SUFFIX=" \033[32mlow resource usage\033[0m \033[33munsafe, maintenance stopped\033[0m"
|
||||||
|
UPG_CORE_V4_DOC="Docs: \033[36;4mhttps://lancellc.gitbook.io\033[0m"
|
||||||
|
UPG_CORE_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_PREFIX="This will clean all database files under "
|
||||||
|
UPG_GEO_CLEAN_WARN_SUFFIX=" and /ruleset!"
|
||||||
|
UPG_GEO_CLEAN_WARN2="After cleanup, start the service to download the required files automatically"
|
||||||
|
UPG_GEO_CLEANED="All database files have been cleaned!"
|
||||||
|
UPG_DB_CONNECTING="Connecting to the server to fetch installation files..."
|
||||||
|
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_PREFIX="1) Install in "
|
||||||
|
UPG_DB_DIR_1_TEXT_SUFFIX="/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_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)"
|
||||||
68
scripts/lang/en/bot_tg.lang
Normal file
68
scripts/lang/en/bot_tg.lang
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
BOT_TG_PRIVATE_HINT="Please apply for a Telegram bot via \033[32;4mhttps://t.me/BotFather\033[0m and get its \033[36mAPI TOKEN\033[0m first"
|
||||||
|
BOT_TG_INPUT_TOKEN="Please enter your API TOKEN"
|
||||||
|
BOT_TG_PRIVATE_TOP="Please send to \033[32myour bot\033[33m, NOT BotFather!\033[0m"
|
||||||
|
BOT_TG_PUBLIC_HINT="Please message the bot: \033[32;4mhttps://t.me/ShellCrashtg_bot\033[0m"
|
||||||
|
BOT_TG_SET_DONE="Telegram log push has been configured!"
|
||||||
|
BOT_TG_CHATID_RETRY_PREFIX="Attempt"
|
||||||
|
BOT_TG_CHATID_RETRY_SUFFIX="to get chat ID failed, retrying..."
|
||||||
|
BOT_TG_SEND_KEY="Send this key:"
|
||||||
|
BOT_TG_SENT_CONFIRM="I have sent it"
|
||||||
|
BOT_TG_CHATID_FAIL="Unable to get chat ID. Please reconfigure or input ChatID manually!"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT="Usually visit"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT2="to find ChatID"
|
||||||
|
BOT_TG_INPUT_CHATID="Please input ChatID manually"
|
||||||
|
BOT_TG_CHATID_RECONFIG="Unable to get chat ID. Please reconfigure!"
|
||||||
|
BOT_TG_CRON_NAME="TG_BOT watchdog"
|
||||||
|
|
||||||
|
BOT_TG_HELP_GROUP="Group chat:"
|
||||||
|
BOT_TG_HELP_PROJECT="Project:"
|
||||||
|
BOT_TG_HELP_GUIDE="Guide:"
|
||||||
|
BOT_TG_HELP_COFFEE="Buy me a coffee:"
|
||||||
|
BOT_TG_HELP_AIRPORT="Partner provider:"
|
||||||
|
BOT_TG_RUN_ON="🟢Running"
|
||||||
|
BOT_TG_RUN_OFF="🟡Stopped"
|
||||||
|
BOT_TG_WELCOME="Welcome to ShellCrash!"
|
||||||
|
BOT_TG_SERVICE=" service "
|
||||||
|
BOT_TG_MEM_USED="Memory usage: "
|
||||||
|
BOT_TG_RUNNING_TIME="Running: "
|
||||||
|
BOT_TG_SELECT_ACTION="Please choose:"
|
||||||
|
BOT_TG_SELECT_FILE="Please choose file upload/download action:"
|
||||||
|
BOT_TG_BTN_START="✈️ Enable redirect"
|
||||||
|
BOT_TG_BTN_PURE="💧 Pure mode"
|
||||||
|
BOT_TG_BTN_RESTART="🕹 Restart service"
|
||||||
|
BOT_TG_BTN_LOG="📄 View logs"
|
||||||
|
BOT_TG_BTN_TRANSFER="🔃 File transfer"
|
||||||
|
BOT_TG_BTN_GET_LOG="📥 Download log"
|
||||||
|
BOT_TG_BTN_GET_BAK="💾 Backup settings"
|
||||||
|
BOT_TG_BTN_GET_CFG="⬇️ Download config"
|
||||||
|
BOT_TG_BTN_UP_CORE="🪐 Upload core"
|
||||||
|
BOT_TG_BTN_UP_BAK="🔄 Restore settings"
|
||||||
|
BOT_TG_BTN_UP_CFG="⬆️ Upload config"
|
||||||
|
BOT_TG_NO_CURL="⚠️ curl is missing on this device, only upload is supported!"
|
||||||
|
BOT_TG_UPLOAD_OK="success! Service will restart soon!"
|
||||||
|
BOT_TG_UPLOAD_FAIL="failed, please check file and retry!"
|
||||||
|
BOT_TG_CORE_UPDATE="Core update "
|
||||||
|
BOT_TG_CFG_RESTORED="Config restored, please restart service manually!"
|
||||||
|
BOT_TG_RESTORE_FAIL="Restore failed while extracting backup, please retry!"
|
||||||
|
BOT_TG_CFG_UPLOADED="Config uploaded, please restart service manually!"
|
||||||
|
BOT_TG_UPLOAD_FAIL2="Upload failed, please retry!"
|
||||||
|
BOT_TG_NET_UPLOAD_FAIL="Network error, upload failed! Please retry!"
|
||||||
|
BOT_TG_FILE_FORMAT_FAIL="File format mismatch, upload failed!"
|
||||||
|
BOT_TG_FW_ENABLED="ShellCrash redirect mode "
|
||||||
|
BOT_TG_FW_ENABLED_SUFFIX=" enabled!"
|
||||||
|
BOT_TG_SWITCH_PURE="Switched to pure mode!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED="ShellCrash service restarted!"
|
||||||
|
BOT_TG_UNFINISHED="Error: unfinished feature!"
|
||||||
|
BOT_TG_SEND_CORE="Please send core file ending with tar.gz/.gz/.upx for ["
|
||||||
|
BOT_TG_SEND_CORE_SUFFIX="]"
|
||||||
|
BOT_TG_SEND_BAK="Please send backup file in [.tar.gz] format!"
|
||||||
|
BOT_TG_SEND_CFG="Please send config file in ["
|
||||||
|
BOT_TG_SEND_CFG_SUFFIX="] format, custom config is supported"
|
||||||
|
BOT_TG_SWITCH_TO="Switched to "
|
||||||
|
BOT_TG_ALREADY="Already in "
|
||||||
|
BOT_TG_ALREADY_PURE="Already in pure mode!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED_SHORT="🔄 Service restarted"
|
||||||
|
BOT_TG_LOG_CONTENT="📄 Logs (task logs filtered):"
|
||||||
|
BOT_TG_TASK_WORD="Task"
|
||||||
|
BOT_TG_INPUT_SUB="✏ Please enter new subscription URL:"
|
||||||
|
BOT_TG_SUB_UPDATED="Subscription update finished:"
|
||||||
3
scripts/lang/en/check_port.lang
Normal file
3
scripts/lang/en/check_port.lang
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
CHECK_PORT_RANGE_ERR="Invalid input! Please enter a valid value (1-65535)!"
|
||||||
|
CHECK_PORT_DUP_ERR="Invalid input! Please do not enter duplicate ports!"
|
||||||
|
CHECK_PORT_OCCUPIED_ERR="This port is already occupied by another process. Please enter a different one!"
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
COMMON_INPUT="Please enter a number"
|
COMMON_INPUT="Please enter a number"
|
||||||
COMMON_INPUT_L="Enter a letter or a number"
|
COMMON_INPUT_L="Enter a letter or a number"
|
||||||
|
COMMON_INPUT_R="Enable? (1/0) > "
|
||||||
COMMON_BACK="Back"
|
COMMON_BACK="Back"
|
||||||
COMMON_SUCCESS="Setup Success!"
|
COMMON_SUCCESS="Setup Success!"
|
||||||
COMMON_FAILED="Setup failed!"
|
COMMON_FAILED="Setup failed!"
|
||||||
|
|||||||
35
scripts/lang/en/ddns.lang
Normal file
35
scripts/lang/en/ddns.lang
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
DDNS_WELCOME="Welcome to DDNS!"
|
||||||
|
DDNS_ADD_DONE="Service has been added!"
|
||||||
|
DDNS_INPUT_DOMAIN="Please enter your domain"
|
||||||
|
DDNS_INPUT_USER="Please enter username or email"
|
||||||
|
DDNS_INPUT_PASS="Please enter password or token"
|
||||||
|
DDNS_INPUT_CHECK_INTERVAL="Please enter check interval (minutes, default 10)"
|
||||||
|
DDNS_INPUT_FORCE_INTERVAL="Please enter force update interval (hours, default 24)"
|
||||||
|
DDNS_CONFIRM_INFO="Please confirm the following info:"
|
||||||
|
DDNS_FIELD_SERVICE="Provider:"
|
||||||
|
DDNS_FIELD_DOMAIN="Domain:"
|
||||||
|
DDNS_FIELD_USER="Username:"
|
||||||
|
DDNS_FIELD_INTERVAL="Check interval:"
|
||||||
|
DDNS_CONFIRM_ADD="Confirm add:"
|
||||||
|
DDNS_YES="Yes"
|
||||||
|
DDNS_REINPUT="No, re-enter"
|
||||||
|
DDNS_LIST_NOT_FOUND="DDNS list file not found, trying online update..."
|
||||||
|
DDNS_DOWNLOAD_FAILED="Download failed, please retry!"
|
||||||
|
DDNS_SELECT_PROVIDER="Please select provider:"
|
||||||
|
DDNS_INPUT_ERROR="Invalid input, please retry!"
|
||||||
|
DDNS_SELECT_NETMODE="Please select network mode:"
|
||||||
|
DDNS_IPV4="IPV4"
|
||||||
|
DDNS_IPV6="IPV6"
|
||||||
|
DDNS_DISABLE="Disable"
|
||||||
|
DDNS_ENABLE="Enable"
|
||||||
|
DDNS_UPDATE_NOW="Update now"
|
||||||
|
DDNS_EDIT_CURRENT="Edit current service"
|
||||||
|
DDNS_CURRENT_SERVICE=" current service"
|
||||||
|
DDNS_REMOVE_CURRENT="Remove current service"
|
||||||
|
DDNS_VIEW_LOG="View logs"
|
||||||
|
DDNS_NOT_SUPPORTED="This feature depends on OpenWrt built-in DDNS service; unsupported on current device."
|
||||||
|
DDNS_LIST_HEADER=" List Domain On IP Address"
|
||||||
|
DDNS_ADD_SERVICE="Add DDNS service"
|
||||||
|
DDNS_EXIT="Exit"
|
||||||
|
DDNS_INPUT_INDEX="Please enter index"
|
||||||
|
DDNS_INPUT_NUM_ERROR="Please enter a valid number!"
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
DNS_CURRENT_MODE="Current DNS running mode:"
|
DNS_CURRENT_MODE="Current DNS running mode:"
|
||||||
DNS_RESTART_NOTICE="Changes require a manual service restart to take effect."
|
DNS_RESTART_NOTICE="Changes require a manual service restart to take effect."
|
||||||
|
|
||||||
DNS_MODE_MIX_DESC="CN domains use real-ip, others use fake-ip routing"
|
DNS_MODE_MIX_DESC="CN domains use DIRECT-DNS, others use fake-ip"
|
||||||
DNS_MODE_ROUTE_DESC="CN domains use real-ip, others use dns2proxy routing"
|
DNS_MODE_ROUTE_DESC="CN domains use DIRECT-DNS, others use PROXY-DNS"
|
||||||
DNS_MODE_REDIR_DESC="Insecure. Must be used with a third-party DNS service."
|
DNS_MODE_REDIR_DESC="All domains use DIRECT-DNS"
|
||||||
|
|
||||||
DNS_MENU_PROTECT="DNS Leak Protect"
|
DNS_MENU_PROTECT="DNS Leak Protect"
|
||||||
DNS_MENU_HOSTS="Hosts Optimization"
|
DNS_MENU_HOSTS="Hosts Optimization"
|
||||||
@@ -52,3 +52,23 @@ DNS_IPV6_NOT_SUPPORT="This option does not support IPv6 encrypted DNS!"
|
|||||||
|
|
||||||
DNS_ENCRYPT_OK="Encrypted DNS has been configured. If DNS issues occur, please reset DNS settings."
|
DNS_ENCRYPT_OK="Encrypted DNS has been configured. If DNS issues occur, please reset DNS settings."
|
||||||
DNS_CORE_REQUIRE="Please use the Mihomo or SingBox core"
|
DNS_CORE_REQUIRE="Please use the Mihomo or SingBox core"
|
||||||
|
DNS_SET_TO="Set to"
|
||||||
|
DNS_REMOVE_OK="Removed successfully"
|
||||||
|
DNS_REMOVE_FAIL="Remove failed"
|
||||||
|
DNS_INPUT_REDIR_PORT="Please input bypass-router IPv4 address"
|
||||||
|
DNS_INPUT_REDIR_RESET="or input r to reset DNS redirect port"
|
||||||
|
DNS_INPUT_REDIR_BACK="or input 0 to go back"
|
||||||
|
DNS_INPUT="Please enter"
|
||||||
|
DNS_CONFIRM_ADD="Please confirm the address to add: "
|
||||||
|
DNS_CONFIRM_OK="Confirm"
|
||||||
|
DNS_ADD_OK="Added successfully"
|
||||||
|
DNS_ADD_FAIL="Add failed"
|
||||||
|
DNS_DIRECT_NOW="Current DIRECT-DNS: "
|
||||||
|
DNS_PROXY_NOW="Current PROXY-DNS: "
|
||||||
|
DNS_DEFAULT_NOW="Current DEFAULT-DNS: "
|
||||||
|
DNS_INPUT_DIRECT_NEW="Please input new DIRECT-DNS"
|
||||||
|
DNS_INPUT_DIRECT_RESET="or input r to reset DIRECT-DNS"
|
||||||
|
DNS_INPUT_PROXY_NEW="Please input new PROXY-DNS"
|
||||||
|
DNS_INPUT_PROXY_RESET="or input r to reset PROXY-DNS"
|
||||||
|
DNS_INPUT_DEFAULT_NEW="Please input new DEFAULT-DNS"
|
||||||
|
DNS_INPUT_DEFAULT_RESET="or input r to reset DEFAULT-DNS"
|
||||||
|
|||||||
91
scripts/lang/en/fw_filter.lang
Normal file
91
scripts/lang/en/fw_filter.lang
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
FWF_TITLE="Traffic Filter"
|
||||||
|
FWF_ITEM_1_PREFIX="1) Filter Common ports: "
|
||||||
|
FWF_ITEM_1_SUFFIX="--- filter P2P traffic"
|
||||||
|
FWF_ITEM_2_PREFIX="2) Filter LAN devices: "
|
||||||
|
FWF_ITEM_2_SUFFIX="--- use black/white list"
|
||||||
|
FWF_ITEM_3_PREFIX="3) Filter QUIC protocol: "
|
||||||
|
FWF_ITEM_3_SUFFIX="--- improve video"
|
||||||
|
FWF_ITEM_4_PREFIX="4) Filter CN_IP list: "
|
||||||
|
FWF_ITEM_4_SUFFIX="--- improve performance"
|
||||||
|
FWF_ITEM_5="5) Custom transparent routing IPv4 subnet: suitable for vlan and other complex networks"
|
||||||
|
FWF_ITEM_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_PREFIX="1) Enable/disable port filtering: \t"
|
||||||
|
FWF_PORT_MENU_1_SUFFIX=""
|
||||||
|
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_PREFIX="1) Switch to "
|
||||||
|
FWF_FILTER_SWITCH_SUFFIX=" mode"
|
||||||
|
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!"
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# ===== Common Prompts =====
|
# ===== Common Prompts =====
|
||||||
|
|
||||||
MENU_RESTART_NOTICE="Changes have been detected. Please restart the service!"
|
MENU_RESTART_NOTICE="Changes have been detected. Please restart the service!"
|
||||||
|
MENU_RESTART_NOW="Restart now"
|
||||||
|
MENU_RESTART_LATER="Not now"
|
||||||
|
|
||||||
MENU_PORT_CONFLICT_TITLE="The port is occupied by the following process. The core may fail to start!"
|
MENU_PORT_CONFLICT_TITLE="The port is occupied by the following process. The core may fail to start!"
|
||||||
MENU_PORT_CONFLICT_HINT="Please modify the default port configuration!"
|
MENU_PORT_CONFLICT_HINT="Please modify the default port configuration!"
|
||||||
@@ -13,6 +15,8 @@ MENU_CFG_LOADED_OK="Configuration file loaded successfully!"
|
|||||||
|
|
||||||
MENU_OVERRIDE_WARN="You have disabled configuration overwrite. This will cause many features to be unavailable!"
|
MENU_OVERRIDE_WARN="You have disabled configuration overwrite. This will cause many features to be unavailable!"
|
||||||
MENU_OVERRIDE_ASK="Cancel the disable setting?"
|
MENU_OVERRIDE_ASK="Cancel the disable setting?"
|
||||||
|
MENU_YES="Yes"
|
||||||
|
MENU_NO="No"
|
||||||
|
|
||||||
# ===== Welcome & Status =====
|
# ===== Welcome & Status =====
|
||||||
MENU_WELCOME="Welcome to ShellCrash!"
|
MENU_WELCOME="Welcome to ShellCrash!"
|
||||||
@@ -37,6 +41,8 @@ MENU_TG_CHANNEL="Telegram Channel: "
|
|||||||
# ===== /tmp File Detection =====
|
# ===== /tmp File Detection =====
|
||||||
MENU_TMP_CORE_FOUND="Available core file found:"
|
MENU_TMP_CORE_FOUND="Available core file found:"
|
||||||
MENU_TMP_CORE_ASK="Load this core file? (The current service will be stopped)"
|
MENU_TMP_CORE_ASK="Load this core file? (The current service will be stopped)"
|
||||||
|
MENU_LOAD_NOW="Load now"
|
||||||
|
MENU_LOAD_LATER="Not now"
|
||||||
|
|
||||||
MENU_TMP_CFG_FOUND="Kernel configuration file found:"
|
MENU_TMP_CFG_FOUND="Kernel configuration file found:"
|
||||||
MENU_TMP_CFG_ASK="Load as the configuration file? (1/0) > "
|
MENU_TMP_CFG_ASK="Load as the configuration file? (1/0) > "
|
||||||
|
|||||||
93
scripts/lang/en/override.lang
Normal file
93
scripts/lang/en/override.lang
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
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_PREFIX="If you are not very familiar with how "
|
||||||
|
OVR_WARN_2_SUFFIX=" works, do not enable it!"
|
||||||
|
OVR_WARN_3="If any problem occurs after continuing, you must solve it yourself. No questions will be accepted!"
|
||||||
|
OVR_WARN_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"
|
||||||
25
scripts/lang/en/providers.lang
Normal file
25
scripts/lang/en/providers.lang
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
PROVIDERS_MENU_GEN="Generate config including all providers"
|
||||||
|
PROVIDERS_MENU_TEMPLATE="Select \033[33mrule template\033[0m"
|
||||||
|
PROVIDERS_MENU_CLEAN="\033[33mClean\033[0m providers directory"
|
||||||
|
PROVIDERS_INPUT="Please enter a letter or number"
|
||||||
|
|
||||||
|
PROVIDERS_EMPTY_HINT="No link or local config file has been added yet. Please add one first!"
|
||||||
|
PROVIDERS_TEMPLATE_CURRENT="Current rule template: "
|
||||||
|
PROVIDERS_TEMPLATE_SELECT="Please select an online template:"
|
||||||
|
PROVIDERS_TEMPLATE_LOCAL="Use \033[36mlocal template\033[0m"
|
||||||
|
PROVIDERS_TEMPLATE_PATH="Please enter template path (absolute path)"
|
||||||
|
PROVIDERS_TEMPLATE_NOT_FOUND="Invalid input, template file not found!"
|
||||||
|
|
||||||
|
PROVIDERS_CLEAN_WARN="This will clear all files under"
|
||||||
|
PROVIDERS_CLEAN_WARN_END=""
|
||||||
|
PROVIDERS_CLEAN_CONFIRM="Continue?"
|
||||||
|
|
||||||
|
PROVIDERS_FETCHING_TEMPLATE="Fetching online template..."
|
||||||
|
PROVIDERS_DOWNLOAD_FAILED="Download failed. Please try switching install source!"
|
||||||
|
PROVIDERS_GEN_OK="Configuration file generated successfully!"
|
||||||
|
PROVIDERS_GEN_OK_SINGBOX="Configuration generated successfully! If startup times out, install the Singbox-srs common database package from Update menu."
|
||||||
|
PROVIDERS_GEN_FAILED="Failed to generate configuration file. Please check your input carefully!"
|
||||||
|
PROVIDERS_RESTART_ASK="Start/Restart service now?"
|
||||||
|
PROVIDERS_YES="Yes"
|
||||||
|
PROVIDERS_NO="No"
|
||||||
|
PROVIDERS_CRON_SUB_UPDATE="Update subscription"
|
||||||
34
scripts/lang/en/set_crashdir.lang
Normal file
34
scripts/lang/en/set_crashdir.lang
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
SCD_SELECT_INSTALL_DIR="Please select install directory:"
|
||||||
|
SCD_INPUT_NUM="Please enter a number"
|
||||||
|
SCD_INPUT_ERROR="Invalid input! Please retry!"
|
||||||
|
SCD_XIAOMI_DETECTED="Xiaomi stock firmware detected, select installation location:"
|
||||||
|
SCD_CUSTOM_DIR_WARN="Custom directory (not recommended)"
|
||||||
|
SCD_EXIT_INSTALL="Exit installation"
|
||||||
|
SCD_SELECT_USB_DIR="Please select USB directory:"
|
||||||
|
SCD_ASUS_DM_NOT_FOUND="Download Master startup file not found:"
|
||||||
|
SCD_CHECK_SETTING="please check your settings!"
|
||||||
|
SCD_ASUS_DETECTED="Asus firmware detected, please select installation method"
|
||||||
|
SCD_ASUS_INSTALL_DM="Install via USB + Download Master (all firmwares, ARM only)"
|
||||||
|
SCD_ASUS_INSTALL_SCRIPT="Install via startup script (some Merlin firmwares only)"
|
||||||
|
SCD_ASUS_DM_HINT="Install and enable Download Master in router web UI first, then select external storage directory."
|
||||||
|
SCD_ASUS_REINSTALL_HINT="If boot auto-start fails, please reinstall with USB + Download Master."
|
||||||
|
SCD_PATH_FORMAT_HINT="Path must start with /. Files under virtual memory (/tmp,/opt,/sys...) will be lost after reboot!"
|
||||||
|
SCD_PATH_FREE_SPACE="Available paths free space:"
|
||||||
|
SCD_INPUT_CUSTOM_DIR="Please input custom path"
|
||||||
|
SCD_PATH_ERROR="Invalid path! Please retry!"
|
||||||
|
SCD_INSTALL_SPACE_HINT="Notice: ShellCrash requires at least ~1MB free space"
|
||||||
|
SCD_INSTALL_ETC="Install in \033[32m/etc\033[0m (root users)"
|
||||||
|
SCD_INSTALL_USR="Install in \033[32m/usr/share\033[0m (Linux systems)"
|
||||||
|
SCD_INSTALL_HOME="Install in \033[32mcurrent user dir\033[0m (non-root users)"
|
||||||
|
SCD_INSTALL_USB="Install in \033[32mexternal storage\033[0m"
|
||||||
|
SCD_INSTALL_MANUAL="Set install directory manually"
|
||||||
|
SCD_INSTALL_CANCELED="Installation canceled"
|
||||||
|
SCD_NO_WRITE_PREFIX="No write permission on "
|
||||||
|
SCD_NO_WRITE_SUFFIX=", please retry!"
|
||||||
|
SCD_TARGET_DIR_PREFIX="Target directory "
|
||||||
|
SCD_TARGET_DIR_SPACE=" free space: "
|
||||||
|
SCD_CONFIRM_INSTALL="Confirm installation?"
|
||||||
|
SCD_YES="Yes"
|
||||||
|
SCD_NO="No"
|
||||||
|
SCD_DIR_FREE=" dir, free: "
|
||||||
|
SCD_SOFT_SOLID="(supports soft solidification)"
|
||||||
52
scripts/lang/en/setboot.lang
Normal file
52
scripts/lang/en/setboot.lang
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
SETBOOT_NOT_SET="Not set"
|
||||||
|
SETBOOT_SECOND="s"
|
||||||
|
SETBOOT_TITLE="Startup Settings"
|
||||||
|
SETBOOT_ITEM_AUTO="Autostart:"
|
||||||
|
SETBOOT_ITEM_OLD="Conservative mode:"
|
||||||
|
SETBOOT_ITEM_OLD_DESC="--- cron based check (every minute)"
|
||||||
|
SETBOOT_ITEM_DELAY="Startup delay:"
|
||||||
|
SETBOOT_ITEM_DELAY_DESC="--- helps when service is restricted right after boot"
|
||||||
|
SETBOOT_ITEM_MINI="Low-flash mode:"
|
||||||
|
SETBOOT_ITEM_MINI_DESC="--- for devices with limited flash space"
|
||||||
|
SETBOOT_ITEM_MINI_DIR="Low-flash directory:"
|
||||||
|
SETBOOT_ITEM_NETCHK="Startup network check:"
|
||||||
|
SETBOOT_ITEM_NETCHK_DESC="--- disable to skip network check on startup"
|
||||||
|
SETBOOT_VIEW_LOG="View startup logs"
|
||||||
|
SETBOOT_AUTO_OFF="ShellCrash autostart disabled!"
|
||||||
|
SETBOOT_AUTO_ON="ShellCrash autostart enabled!"
|
||||||
|
SETBOOT_CRON_INIT="ShellCrash initialization"
|
||||||
|
SETBOOT_OLDMODE_ON="Switched to conservative startup mode!"
|
||||||
|
SETBOOT_OLDMODE_OFF="Switched to system daemon startup mode!"
|
||||||
|
SETBOOT_MODE_UNSUPPORTED="Current device does not support other startup modes!"
|
||||||
|
SETBOOT_DELAY_HINT1="If your device runs normally after boot, no need to configure this."
|
||||||
|
SETBOOT_DELAY_HINT2="Recommended between 30~120 seconds, tune according to your device issue."
|
||||||
|
SETBOOT_DELAY_INPUT="Please enter startup delay (0~300s)"
|
||||||
|
SETBOOT_SET_OK="Set successfully!"
|
||||||
|
SETBOOT_DELAY_INVALID="Invalid input or over 300s, please retry!"
|
||||||
|
SETBOOT_MINI_NEEDED_NO="Your device has enough space (>20M), no need to enable!"
|
||||||
|
SETBOOT_SYSTEMD_WARN="systemd startup is unsupported here, enable conservative mode first!"
|
||||||
|
SETBOOT_MINI_ENABLED="Low-flash mode has been enabled!"
|
||||||
|
SETBOOT_MINI_DIR_HINT="To change directory, use [Set low-flash directory]."
|
||||||
|
SETBOOT_MINI_DISABLE_WARN="Remaining space is below 8M; disabling may break runtime!"
|
||||||
|
SETBOOT_MINI_DISABLE_CONFIRM="Confirm disabling this feature?"
|
||||||
|
SETBOOT_YES="Yes"
|
||||||
|
SETBOOT_NO_BACK="No, return"
|
||||||
|
SETBOOT_MINI_DISABLED="Low-flash mode has been disabled!"
|
||||||
|
SETBOOT_BINDIR_HINT1="If set to memory, related files will be re-downloaded after each boot."
|
||||||
|
SETBOOT_BINDIR_HINT2="Ensure install source is directly reachable, or startup may fail."
|
||||||
|
SETBOOT_BINDIR_TMP="Use memory (/tmp)"
|
||||||
|
SETBOOT_BINDIR_USB="Select USB directory"
|
||||||
|
SETBOOT_BINDIR_CUSTOM="Custom directory"
|
||||||
|
SETBOOT_SELECT_INSTALL_DIR="Please select install directory:"
|
||||||
|
SETBOOT_SPACE_USED="Used storage:"
|
||||||
|
SETBOOT_INPUT_ERROR="Invalid input, please retry!"
|
||||||
|
SETBOOT_INPUT_CMD="Please input command/path directly"
|
||||||
|
SETBOOT_INPUT_OR_BACK="Or input 0 to return"
|
||||||
|
SETBOOT_INPUT="Please enter"
|
||||||
|
SETBOOT_NETCHK_HINT1="If your device can run normally after boot, no need to change this."
|
||||||
|
SETBOOT_NETCHK_HINT2="When disabled, low-flash or online rules (e.g. rule-set) may fail due to no network."
|
||||||
|
SETBOOT_NETCHK_HINT3="When enabled, low-performance/slow-dial devices may timeout and fail startup."
|
||||||
|
SETBOOT_NETCHK_OFF_CONFIRM="Network check is \033[33mdisabled\033[0m. Enable it?"
|
||||||
|
SETBOOT_NETCHK_ON_CONFIRM="Network check is \033[33menabled\033[0m. Disable it?"
|
||||||
|
SETBOOT_TASK_WORD="Task"
|
||||||
|
SETBOOT_LOG_NOT_FOUND="Related log not found!"
|
||||||
33
scripts/lang/en/subconverter.lang
Normal file
33
scripts/lang/en/subconverter.lang
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
SUBCONVERTER_MENU_GEN="Generate config including all nodes and subscriptions"
|
||||||
|
SUBCONVERTER_MENU_EXCLUDE="Set \033[31mexclude node regex\033[0m"
|
||||||
|
SUBCONVERTER_MENU_INCLUDE="Set \033[32minclude node regex\033[0m"
|
||||||
|
SUBCONVERTER_MENU_RULE="Select \033[33monline rule template\033[0m"
|
||||||
|
SUBCONVERTER_MENU_SERVER="Select Subconverter server"
|
||||||
|
SUBCONVERTER_MENU_UA="Custom browser UA"
|
||||||
|
|
||||||
|
SUBCONVERTER_INPUT="Please enter"
|
||||||
|
SUBCONVERTER_BACK="or enter 0 to return"
|
||||||
|
|
||||||
|
SUBCONVERTER_EXCLUDE_HINT1="Nodes matching keywords will be blocked during import!"
|
||||||
|
SUBCONVERTER_INCLUDE_HINT1="Only nodes matching keywords will be imported!!!"
|
||||||
|
SUBCONVERTER_KEYWORD_SPLIT="Use \033[30;47m | \033[0m to separate multiple keywords"
|
||||||
|
SUBCONVERTER_REGEX_HINT="\033[32mRegex is supported\033[0m. Use \033[30;47m + \033[0m instead of spaces"
|
||||||
|
SUBCONVERTER_EXCLUDE_INPUT="Enter exclude keyword(s) directly"
|
||||||
|
SUBCONVERTER_INCLUDE_INPUT="Enter include keyword(s) directly"
|
||||||
|
SUBCONVERTER_EXCLUDE_CLEAR="or enter d to \033[31mclear\033[0m exclude keywords"
|
||||||
|
SUBCONVERTER_INCLUDE_CLEAR="or enter d to \033[31mclear\033[0m include keywords"
|
||||||
|
|
||||||
|
SUBCONVERTER_RULE_CURRENT="Current rule: "
|
||||||
|
SUBCONVERTER_SERVER_HINT="The following third-party servers are collected from the internet. Please evaluate their security by yourself!"
|
||||||
|
SUBCONVERTER_SERVER_THANKS="Thanks to the contributors below for their great work!!!"
|
||||||
|
SUBCONVERTER_SERVER_CURRENT="Current backend: "
|
||||||
|
SUBCONVERTER_SET_OK="Settings saved. Returning to previous menu"
|
||||||
|
|
||||||
|
SUBCONVERTER_UA_HINT="Try this if the config file cannot be fetched correctly"
|
||||||
|
SUBCONVERTER_UA_CURRENT="Current UA: "
|
||||||
|
SUBCONVERTER_UA_AUTO="Use auto UA (default)"
|
||||||
|
SUBCONVERTER_UA_NONE="Do not use UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM="Use custom UA"
|
||||||
|
SUBCONVERTER_UA_CLEAR="Clear UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_WARN="Note:\nCustom UA cannot contain spaces or special symbols!"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_INPUT="Enter custom UA"
|
||||||
19
scripts/lang/en/task_cmd.lang
Normal file
19
scripts/lang/en/task_cmd.lang
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
TASK_CMD_EVERY="every"
|
||||||
|
TASK_CMD_HOURLY="hourly"
|
||||||
|
TASK_CMD_MIN="minute"
|
||||||
|
TASK_CMD_CORE_SKIP="Task [Auto update core] skipped - no new version detected"
|
||||||
|
TASK_CMD_CORE_DONE="Task [Auto update core] download complete, restarting service"
|
||||||
|
TASK_CMD_CORE_DL_FAIL="Task [Auto update core] failed - download error"
|
||||||
|
TASK_CMD_CORE_VERIFY_FAIL="Task [Auto update core] failed - core verification error"
|
||||||
|
TASK_CMD_SCRIPT_SKIP="Task [Auto update script] skipped - no new version detected"
|
||||||
|
TASK_CMD_SCRIPT_UNZIP_FAIL="Task [Auto update script] failed - extract error"
|
||||||
|
TASK_CMD_DB_SKIP_PREFIX="Task [Auto update database] skipped - no new version for "
|
||||||
|
TASK_CMD_DB_SKIP_SUFFIX=""
|
||||||
|
TASK_CMD_DB_DL_FAIL_PREFIX="Task [Auto update database] failed downloading ["
|
||||||
|
TASK_CMD_DB_DL_FAIL_SUFFIX="]"
|
||||||
|
TASK_CMD_DB_OK_PREFIX="Task [Auto update database] updated ["
|
||||||
|
TASK_CMD_DB_OK_SUFFIX="] successfully"
|
||||||
|
TASK_CMD_RES_OK="success"
|
||||||
|
TASK_CMD_RES_FAIL="failed"
|
||||||
|
TASK_CMD_EXEC_PREFIX="Task ["
|
||||||
|
TASK_CMD_EXEC_MID="] result: "
|
||||||
13
scripts/lang/en/uninstall.lang
Normal file
13
scripts/lang/en/uninstall.lang
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
UNINSTALL_WARN="Warning: this action is irreversible!"
|
||||||
|
UNINSTALL_CONFIRM="Are you sure you want to uninstall ShellCrash?"
|
||||||
|
UNINSTALL_YES="Yes"
|
||||||
|
UNINSTALL_NO="No"
|
||||||
|
UNINSTALL_KEEP_CONFIRM="Keep script configs and subscription files?"
|
||||||
|
UNINSTALL_ENV_ERROR="Environment variable configuration is incorrect. Please remove the installation directory manually!"
|
||||||
|
UNINSTALL_DONE="ShellCrash related files have been removed. Goodbye!"
|
||||||
|
UNINSTALL_CLOSE_HINT="Please close the current terminal window manually to reset environment variables!"
|
||||||
|
UNINSTALL_CANCELED="Operation canceled!"
|
||||||
|
UNINSTALL_CRON_CLASH="clash service"
|
||||||
|
UNINSTALL_CRON_SUB="subscription link"
|
||||||
|
UNINSTALL_CRON_INIT="ShellCrash initialization"
|
||||||
|
UNINSTALL_SSH_MARK="Enable SSH access from WAN"
|
||||||
17
scripts/lang/en/userguide.lang
Normal file
17
scripts/lang/en/userguide.lang
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
UG_WELCOME="Welcome to User Guide!"
|
||||||
|
UG_CHOOSE_ENV="Please select your usage environment:"
|
||||||
|
UG_TIP_CONFIG="(You can still change various settings later)"
|
||||||
|
UG_OPTION_1="Router: LAN transparent proxy"
|
||||||
|
UG_OPTION_2="Linux device: local proxy only"
|
||||||
|
UG_OPTION_3="Restore previous backup settings"
|
||||||
|
UG_RESTORE_OK="Script settings have been restored! Please restart the script!"
|
||||||
|
UG_IP_FORWARD_WARN="Your device has not enabled IP forwarding, LAN devices will not connect properly. Enable now?"
|
||||||
|
UG_ENABLE_LOW_MEM="Your installation directory is less than 10MB, enable low-flash mode?"
|
||||||
|
UG_IMPORT_CONFIG="Import configuration file? (Last step before running)"
|
||||||
|
UG_CONFIG_TIP="You must have a configuration file to run the service!"
|
||||||
|
UG_CONFIG_RES="Importing now? "
|
||||||
|
UG_FINAL_TIP="Great! Now just start the service to enjoy!"
|
||||||
|
|
||||||
|
UG_IMPORT_NOW="Import now"
|
||||||
|
UG_IMPORT_LATER="Not now"
|
||||||
@@ -3,6 +3,7 @@ check_autostart(){
|
|||||||
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
||||||
elif [ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ]; then
|
elif [ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ]; then
|
||||||
[ -n "$(find /etc/rc.d -name '*shellcrash')" ] && return 0
|
[ -n "$(find /etc/rc.d -name '*shellcrash')" ] && return 0
|
||||||
|
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
||||||
elif ckcmd systemctl; then
|
elif ckcmd systemctl; then
|
||||||
[ "$(systemctl is-enabled shellcrash.service 2>&1)" = enabled ] && return 0
|
[ "$(systemctl is-enabled shellcrash.service 2>&1)" = enabled ] && return 0
|
||||||
elif grep -q 's6' /proc/1/comm; then
|
elif grep -q 's6' /proc/1/comm; then
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ core_unzip() { #$1:需要解压的文件 $2:目标文件名
|
|||||||
}
|
}
|
||||||
core_find(){
|
core_find(){
|
||||||
if [ ! -f "$TMPDIR"/CrashCore ];then
|
if [ ! -f "$TMPDIR"/CrashCore ];then
|
||||||
core_dir=$(find "$BINDIR"/CrashCore.* $find_para 2>/dev/null)
|
[ -n "$(find "$CRASHDIR"/CrashCore.* $find_para 2>/dev/null)" ] && [ "$CRASHDIR" != "$BINDIR" ] &&
|
||||||
|
mv -f "$CRASHDIR"/CrashCore.* "$BINDIR"/
|
||||||
|
core_dir=$(find "$BINDIR"/CrashCore.* $find_para 2>/dev/null | head -n 1)
|
||||||
[ -n "$core_dir" ] && core_unzip "$core_dir" CrashCore
|
[ -n "$core_dir" ] && core_unzip "$core_dir" CrashCore
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -49,7 +51,12 @@ core_check(){
|
|||||||
else
|
else
|
||||||
mv -f "$1" "$BINDIR/CrashCore.$zip_type"
|
mv -f "$1" "$BINDIR/CrashCore.$zip_type"
|
||||||
fi
|
fi
|
||||||
|
if [ "$zip_type" = 'upx' ];then
|
||||||
|
rm -f "$1" "$TMPDIR"/core_new
|
||||||
|
ln -sf "$TMPDIR/CrashCore.upx" "$TMPDIR/CrashCore"
|
||||||
|
else
|
||||||
mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore"
|
mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore"
|
||||||
|
fi
|
||||||
core_v="$v"
|
core_v="$v"
|
||||||
setconfig COMMAND "$COMMAND" "$CRASHDIR"/configs/command.env && . "$CRASHDIR"/configs/command.env
|
setconfig COMMAND "$COMMAND" "$CRASHDIR"/configs/command.env && . "$CRASHDIR"/configs/command.env
|
||||||
setconfig crashcore "$crashcore"
|
setconfig crashcore "$crashcore"
|
||||||
@@ -65,15 +72,18 @@ core_webget(){
|
|||||||
[ -z "$zip_type" ] && zip_type='tar.gz'
|
[ -z "$zip_type" ] && zip_type='tar.gz'
|
||||||
get_bin "$TMPDIR/Coretmp.$zip_type" "bin/$crashcore/${target}-linux-${cpucore}.$zip_type"
|
get_bin "$TMPDIR/Coretmp.$zip_type" "bin/$crashcore/${target}-linux-${cpucore}.$zip_type"
|
||||||
else
|
else
|
||||||
zip_type=$(echo "$custcorelink" | grep -oE 'tar.gz$')
|
case "$custcorelink" in
|
||||||
[ -z "$zip_type" ] && zip_type=$(echo "$custcorelink" | grep -oE 'gz$')
|
*.tar.gz) zip_type="tar.gz" ;;
|
||||||
|
*.gz) zip_type="gz" ;;
|
||||||
|
*.upx) zip_type="upx" ;;
|
||||||
|
esac
|
||||||
[ -n "$zip_type" ] && webget "$TMPDIR/Coretmp.$zip_type" "$custcorelink"
|
[ -n "$zip_type" ] && webget "$TMPDIR/Coretmp.$zip_type" "$custcorelink"
|
||||||
fi
|
fi
|
||||||
#校验内核
|
#校验内核
|
||||||
if [ "$?" = 0 ];then
|
if [ "$?" = 0 ];then
|
||||||
core_check "$TMPDIR/Coretmp.$zip_type"
|
core_check "$TMPDIR/Coretmp.$zip_type"
|
||||||
else
|
else
|
||||||
rm -rf "$TMPDIR/Coretmp.$zip_type"
|
rm -f "$TMPDIR/Coretmp.$zip_type"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ routing_mark=$((fwmark + 2))
|
|||||||
|
|
||||||
[ -z "$dns_nameserver" ] && {
|
[ -z "$dns_nameserver" ] && {
|
||||||
dns_nameserver='223.5.5.5, 1.2.4.8'
|
dns_nameserver='223.5.5.5, 1.2.4.8'
|
||||||
cat /proc/net/udp | grep -q '0035' && dns_nameserver='127.0.0.1'
|
netstat -ntlup 2>/dev/null | grep -q '127.0.0.1:53' && dns_nameserver='127.0.0.1'
|
||||||
}
|
}
|
||||||
[ -z "$dns_fallback" ] && dns_fallback="1.1.1.1, 8.8.8.8"
|
[ -z "$dns_fallback" ] && dns_fallback="1.1.1.1, 8.8.8.8"
|
||||||
[ -z "$dns_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1"
|
[ -z "$dns_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1"
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ load_lang() {
|
|||||||
i18n=$(cat "$CRASHDIR"/configs/i18n.cfg 2>/dev/null)
|
i18n=$(cat "$CRASHDIR"/configs/i18n.cfg 2>/dev/null)
|
||||||
[ -z "$i18n" ] && i18n=chs
|
[ -z "$i18n" ] && i18n=chs
|
||||||
|
|
||||||
file="$CRASHDIR/lang/$i18n/$1.lang"
|
i18n_file="$CRASHDIR/lang/$i18n/$1.lang"
|
||||||
[ -s "$file" ] && . "$file"
|
[ -s "$i18n_file" ] && . "$i18n_file"
|
||||||
}
|
}
|
||||||
@@ -4,15 +4,16 @@ __IS_LIB_LOGGER=1
|
|||||||
|
|
||||||
#日志工具
|
#日志工具
|
||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
#$1日志内容$2显示颜色$3是否推送
|
#$1日志内容$2显示颜色$3是否推送$4是否覆盖上一条
|
||||||
logger() {
|
logger() {
|
||||||
TMPDIR=/tmp/ShellCrash
|
TMPDIR=/tmp/ShellCrash
|
||||||
[ -n "$2" -a "$2" != 0 ] && printf "\033[%sm%s\033[0m\n" "$2" "$1"
|
[ -n "$2" -a "$2" != 0 ] && printf "\033[%sm%s\033[0m\n" "$2" "$1"
|
||||||
log_text="$(date "+%G-%m-%d_%H:%M:%S")~$1"
|
log_text="$(date "+%G-%m-%d_%H:%M:%S")~$1"
|
||||||
|
[ "$4" = on ] && sed -i "/$1/d" "$TMPDIR"/ShellCrash.log
|
||||||
echo "$log_text" >>"$TMPDIR"/ShellCrash.log
|
echo "$log_text" >>"$TMPDIR"/ShellCrash.log
|
||||||
[ "$(wc -l "$TMPDIR"/ShellCrash.log | awk '{print $1}')" -gt 199 ] && sed -i '1,20d' "$TMPDIR"/ShellCrash.log
|
[ "$(wc -l "$TMPDIR"/ShellCrash.log | awk '{print $1}')" -gt 199 ] && sed -i '1,20d' "$TMPDIR"/ShellCrash.log
|
||||||
#推送远程日志
|
#推送远程日志
|
||||||
[ -z "$3" ] && {
|
[ "$3" != off ] && {
|
||||||
[ -n "$device_name" ] && log_text="$log_text($device_name)"
|
[ -n "$device_name" ] && log_text="$log_text($device_name)"
|
||||||
[ -n "$push_TG" ] && {
|
[ -n "$push_TG" ] && {
|
||||||
url="https://api.telegram.org/bot${push_TG}/sendMessage"
|
url="https://api.telegram.org/bot${push_TG}/sendMessage"
|
||||||
@@ -26,7 +27,8 @@ logger() {
|
|||||||
web_json_post "$url" "$content" &
|
web_json_post "$url" "$content" &
|
||||||
}
|
}
|
||||||
[ -n "$push_Deer" ] && {
|
[ -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\"}"
|
content="{\"pushkey\":\"${push_Deer}\",\"text\":\"$log_text\"}"
|
||||||
web_json_post "$url" "$content" &
|
web_json_post "$url" "$content" &
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +1,39 @@
|
|||||||
|
|
||||||
crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}')"
|
crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}'| tr -d ' ')"
|
||||||
[ ! -w "$crondir" ] && crondir="/etc/storage/cron/crontabs"
|
[ ! -w "$crondir" ] && crondir="/etc/storage/cron/crontabs"
|
||||||
[ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs"
|
[ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs"
|
||||||
[ ! -w "$crondir" ] && crondir="/var/spool/cron"
|
[ ! -w "$crondir" ] && crondir="/var/spool/cron"
|
||||||
tmpcron="$TMPDIR"/cron_tmp
|
[ -z "$USER" ] && USER=$(whoami 2>/dev/null)
|
||||||
|
tmpcron=/tmp/cron_tmp
|
||||||
|
touch "$tmpcron"
|
||||||
|
|
||||||
croncmd() { #定时任务工具
|
cronadd() { #定时任务工具
|
||||||
if [ -n "$(crontab -h 2>&1 | grep '\-l')" ]; then
|
if crontab -h 2>&1 | grep -q '\-l'; then
|
||||||
crontab "$1"
|
crontab "$1"
|
||||||
elif [ -w "$crondir" ] && [ -n "$USER" ];then
|
elif [ -f "$crondir/$USER" ];then
|
||||||
[ "$1" = "-l" ] && cat "$crondir"/"$USER" 2>/dev/null
|
cat "$1" >"$crondir"/"$USER" && cru a REFRESH "0 0 1 1 * /bin/true" 2>/dev/null
|
||||||
[ -f "$1" ] && cat "$1" >"$crondir"/"$USER"
|
|
||||||
killall -HUP crond 2>/dev/null
|
|
||||||
else
|
else
|
||||||
echo "找不到可用的crond或者crontab应用!No available crond or crontab application can be found!"
|
echo "找不到可用的crond或者crontab应用!No available crond or crontab application can be found!"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
cronload() { #定时任务工具
|
||||||
|
if crontab -h 2>&1 | grep -q '\-l'; then
|
||||||
|
crontab -l
|
||||||
|
elif [ -f "$crondir/$USER" ];then
|
||||||
|
cat "$crondir"/"$USER" 2>/dev/null
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
cronset() { #定时任务设置
|
cronset() { #定时任务设置
|
||||||
# 参数1代表要移除的关键字,参数2代表要添加的任务语句
|
# 参数1代表要移除的关键字,参数2代表要添加的任务语句
|
||||||
croncmd -l >"$tmpcron"
|
cronload | grep -v '^$' | grep -vF "$1" >"$tmpcron"
|
||||||
sed -i "/$1/d" "$tmpcron"
|
[ -n "$2" ] && echo "$2" >>"$tmpcron"
|
||||||
sed -i '/^$/d' "$tmpcron"
|
cronadd "$tmpcron"
|
||||||
echo "$2" >>"$tmpcron"
|
#华硕/Padavan固件存档在本地,其他则删除
|
||||||
croncmd "$tmpcron"
|
if [ -d /jffs ] || [ -d /etc/storage/ShellCrash ];then
|
||||||
|
mv -f "$tmpcron" "$CRASHDIR"/task/cron
|
||||||
|
else
|
||||||
rm -f "$tmpcron"
|
rm -f "$tmpcron"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ set_profile() {
|
|||||||
echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量
|
echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量
|
||||||
sed -i '/export CRASHDIR=*/'d "$1"
|
sed -i '/export CRASHDIR=*/'d "$1"
|
||||||
echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量
|
echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量
|
||||||
|
. "$1" >/dev/null 2>&1 || true
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
webget(){
|
webget(){
|
||||||
if pidof CrashCore >/dev/null; then
|
if pidof CrashCore >/dev/null; then
|
||||||
setproxy #设置临时代理
|
setproxy #设置临时代理,【$1】代表下载目录,【$2】代表在线地址
|
||||||
url=$(printf '%s\n' "$2" |
|
url=$(printf '%s\n' "$2" |
|
||||||
sed -e 's#https://.*jsdelivr.net/gh/juewuy/ShellCrash[@|/]#https://raw.githubusercontent.com/juewuy/ShellCrash/#' \
|
sed -e 's#https://.*jsdelivr.net/gh/juewuy/ShellCrash[@|/]#https://raw.githubusercontent.com/juewuy/ShellCrash/#' \
|
||||||
-e 's#https://gh.jwsc.eu.org/#https://raw.githubusercontent.com/juewuy/ShellCrash/#')
|
-e 's#https://gh.jwsc.eu.org/#https://raw.githubusercontent.com/juewuy/ShellCrash/#')
|
||||||
@@ -10,31 +10,59 @@ webget(){
|
|||||||
url=$(printf '%s\n' "$2" |
|
url=$(printf '%s\n' "$2" |
|
||||||
sed 's#https://raw.githubusercontent.com/juewuy/ShellCrash/#https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@#')
|
sed 's#https://raw.githubusercontent.com/juewuy/ShellCrash/#https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@#')
|
||||||
fi
|
fi
|
||||||
|
# ===============================================
|
||||||
|
|
||||||
#参数【$1】代表下载目录,【$2】代表在线地址
|
#参数【$1】代表下载目录,【$2】代表在线地址
|
||||||
#参数【$3】代表输出显示,【$4】不启用重定向
|
#参数【$3】代表输出显示,【$4】不启用重定向
|
||||||
#参数【$5】代表验证证书,【$6】使用自定义UA
|
#参数【$5】代表验证证书,【$6】使用自定义UA
|
||||||
[ -n "$6" ] && agent="--user-agent \"$6\""
|
[ -n "$6" ] && agent="--user-agent $6"
|
||||||
if wget --help 2>&1 | grep -q 'show-progress' >/dev/null 2>&1; then
|
if wget --help 2>&1 | grep -q 'show-progress' >/dev/null 2>&1; then
|
||||||
[ "$3" = "echooff" ] && progress='-q' || progress='-q --show-progress'
|
[ "$3" = "echooff" ] && progress='-q' || progress='-q --show-progress'
|
||||||
[ "$4" = "rediroff" ] && redirect='--max-redirect=0' || redirect=''
|
[ "$4" = "rediroff" ] && redirect='--max-redirect=0' || redirect=''
|
||||||
[ "$5" = "skipceroff" ] && certificate='' || certificate='--no-check-certificate'
|
if [ "$5" = "skipceroff" ] || [ "$skip_cert" = OFF ];then
|
||||||
|
certificate=''
|
||||||
|
else
|
||||||
|
certificate='--no-check-certificate'
|
||||||
|
fi
|
||||||
wget -Y on $agent $progress $redirect $certificate --timeout=3 -O "$1" "$url" && return 0 #成功则退出否则重试
|
wget -Y on $agent $progress $redirect $certificate --timeout=3 -O "$1" "$url" && return 0 #成功则退出否则重试
|
||||||
wget -Y off $agent $progress $redirect $certificate --timeout=5 -O "$1" "$2"
|
wget -Y off $agent $progress $redirect $certificate --timeout=5 -O "$1" "$2"
|
||||||
return $?
|
return $?
|
||||||
elif curl --version >/dev/null 2>&1; then
|
elif curl --version >/dev/null 2>&1; then
|
||||||
[ "$3" = "echooff" ] && progress='-s' || progress='-#'
|
if [ "$3" = "echooff" ];then
|
||||||
|
progress='-s'
|
||||||
|
elif echo "$url" | grep -q 'jsdelivr.net';then
|
||||||
|
progress='-#'
|
||||||
|
. "$CRASHDIR"/libs/web_get_curlbar.sh && curl_fsize
|
||||||
|
else
|
||||||
|
progress='-#'
|
||||||
|
fi
|
||||||
[ "$4" = "rediroff" ] && redirect='' || redirect='-L'
|
[ "$4" = "rediroff" ] && redirect='' || redirect='-L'
|
||||||
[ "$5" = "skipceroff" ] && certificate='' || certificate='-k'
|
if [ "$5" = "skipceroff" ] || [ "$skip_cert" = OFF ];then
|
||||||
|
certificate=''
|
||||||
|
else
|
||||||
|
certificate='-k'
|
||||||
|
fi
|
||||||
|
# curl 特殊版本兼容
|
||||||
|
auth_arg=""
|
||||||
if curl --version | grep -q '^curl 8.' && ckcmd base64; then
|
if curl --version | grep -q '^curl 8.' && ckcmd base64; then
|
||||||
auth_b64=$(printf '%s' "$authentication" | base64)
|
auth_b64=$(printf '%s' "$authentication" | base64)
|
||||||
result=$(curl $agent -w '%{http_code}' --connect-timeout 3 --proxy-header "Proxy-Authorization: Basic $auth_b64" $progress $redirect $certificate -o "$1" "$url")
|
[ -n "$auth_b64" ] && auth_arg="--proxy-header Proxy-Authorization:Basic $auth_b64"
|
||||||
else
|
|
||||||
result=$(curl $agent -w '%{http_code}' --connect-timeout 3 $progress $redirect $certificate -o "$1" "$url")
|
|
||||||
fi
|
fi
|
||||||
|
if [ -n "$fsize_raw" ] && [ "$fsize_raw" -gt 204800 ]; then
|
||||||
|
result=$(execute_curl "$1" "$url" "$fsize_raw" "$agent $auth_arg $redirect $certificate")
|
||||||
|
else
|
||||||
|
result=$(curl $agent $auth_arg -w '%{http_code}' --connect-timeout 3 $progress $redirect $certificate -o "$1" "$url")
|
||||||
|
fi
|
||||||
|
|
||||||
[ "$result" = "200" ] && return 0 #成功则退出否则重试
|
[ "$result" = "200" ] && return 0 #成功则退出否则重试
|
||||||
export https_proxy=""
|
export https_proxy=""
|
||||||
export http_proxy=""
|
export http_proxy=""
|
||||||
|
|
||||||
|
if [ -n "$fsize_raw" ] && [ "$fsize_raw" -gt 204800 ]; then
|
||||||
|
result=$(execute_curl "$1" "$2" "$fsize_raw" "$agent $redirect $certificate")
|
||||||
|
else
|
||||||
result=$(curl $agent -w '%{http_code}' --connect-timeout 5 $progress $redirect $certificate -o "$1" "$2")
|
result=$(curl $agent -w '%{http_code}' --connect-timeout 5 $progress $redirect $certificate -o "$1" "$2")
|
||||||
|
fi
|
||||||
[ "$result" = "200" ]
|
[ "$result" = "200" ]
|
||||||
return $?
|
return $?
|
||||||
elif ckcmd wget;then
|
elif ckcmd wget;then
|
||||||
|
|||||||
47
scripts/libs/web_get_curlbar.sh
Normal file
47
scripts/libs/web_get_curlbar.sh
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
bar_max=42 #进度条长度
|
||||||
|
|
||||||
|
curl_fsize(){ # 获取文件大小
|
||||||
|
fsize_raw=0
|
||||||
|
header=$(curl -sIL --connect-timeout 2 "$url")
|
||||||
|
# 代理容错
|
||||||
|
[ -z "$header" ] && { export https_proxy=""; export http_proxy=""; header=$(curl -sIL --connect-timeout 2 "$url"); }
|
||||||
|
# 提取大小 (优先 Content-Length,其次 ETag)
|
||||||
|
fsize_raw=$(echo "$header" | grep -i 'Content-Length' | tail -n 1 | awk '{print $2}' | tr -d '\r' | awk '{print int($1)}')
|
||||||
|
if [ -z "$fsize_raw" ] || [ "$fsize_raw" -eq 0 ]; then
|
||||||
|
etag=$(echo "$header" | grep -i 'etag' | tail -n 1 | cut -d '"' -f2 | cut -d '-' -f1)
|
||||||
|
[ -n "$etag" ] && fsize_raw=$(printf "%d" 0x$etag 2>/dev/null)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
execute_curl(){ # 手搓curl进度条
|
||||||
|
local path="$1" target_url="$2" total_size="$3" extra_args="$4"
|
||||||
|
rm -f /tmp/webget_res
|
||||||
|
# 后台静默下载,状态码写入临时文件
|
||||||
|
curl $extra_args -s -L -w '%{http_code}' "$target_url" -o "$path" > /tmp/webget_res &
|
||||||
|
local pid=$!
|
||||||
|
|
||||||
|
# 循环监控
|
||||||
|
while kill -0 $pid 2>/dev/null; do
|
||||||
|
if [ -f "$path" ]; then
|
||||||
|
local curr=$(wc -c < "$path")
|
||||||
|
local pct=$(awk -v c=$curr -v t=$total_size 'BEGIN {p=(c*100/t); if(p>100)p=100; printf "%.1f", p}')
|
||||||
|
local num=$(awk -v p=$pct -v w=$bar_max 'BEGIN {printf "%d", p*w/100}')
|
||||||
|
local bar=$(printf "%${num}s" | tr ' ' '#'); local spc_n=$((bar_max - num))
|
||||||
|
local spc=""; [ "$spc_n" -gt 0 ] && spc=$(printf "%${spc_n}s")
|
||||||
|
local size=$(( fsize_raw * 100 / 1048576 ))
|
||||||
|
local fs="$((size / 100)).$((size % 100)) MB"
|
||||||
|
printf "\r\033[2K%s%s %6s%%(%s)" "$bar" "$spc" "$pct" "$fs" >&2
|
||||||
|
fi
|
||||||
|
usleep 200000 2>/dev/null || sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
local code=$(cat /tmp/webget_res 2>/dev/null)
|
||||||
|
if [ "$code" = "200" ] || [ "$code" = "206" ]; then
|
||||||
|
local full=$(printf "%${bar_max}s" | tr ' ' '#')
|
||||||
|
printf "\r\033[2K%s 100.0%%(%s)\n" "$full" "$fs" >&2
|
||||||
|
else
|
||||||
|
printf "\r\033[2K" >&2; [ -f "$path" ] && rm -f "$path"
|
||||||
|
fi
|
||||||
|
echo "$code"
|
||||||
|
}
|
||||||
@@ -1,32 +1,42 @@
|
|||||||
|
get_save() { #获取面板信息并内部处理所有异常
|
||||||
#
|
local response exit_code
|
||||||
get_save() { #获取面板信息
|
|
||||||
if curl --version >/dev/null 2>&1; then
|
if curl --version >/dev/null 2>&1; then
|
||||||
curl -s -H "Authorization: Bearer ${secret}" -H "Content-Type:application/json" "$1"
|
response=$(curl -sf -H "Authorization: Bearer ${secret}" -H "Content-Type:application/json" "$1" 2>&1)
|
||||||
elif [ -n "$(wget --help 2>&1 | grep '\-\-method')" ]; then
|
exit_code=$?
|
||||||
wget -q --header="Authorization: Bearer ${secret}" --header="Content-Type:application/json" -O - "$1"
|
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
|
||||||
fi
|
echo "$response"
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
return 1
|
||||||
|
elif [ -n "$(wget --help 2>&1 | grep '\-\-method')" ]; then
|
||||||
|
response=$(wget -q --header="Authorization: Bearer ${secret}" --header="Content-Type:application/json" -O - "$1" 2>&1)
|
||||||
|
exit_code=$?
|
||||||
|
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
|
||||||
|
echo "$response"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
web_save() { #最小化保存面板节点选择
|
web_save() { #最小化保存面板节点选择
|
||||||
#使用get_save获取面板节点设置
|
#使用get_save获取面板节点设置,失败自动退出
|
||||||
get_save "http://127.0.0.1:${db_port}/proxies" | sed 's/{}//g' | sed 's/:{/\
|
response=$(get_save "http://127.0.0.1:${db_port}/proxies") || return 1
|
||||||
|
|
||||||
|
echo "$response" | sed 's/{}//g' | sed 's/:{/\
|
||||||
/g' | grep -aE '"Selector"' >"$TMPDIR"/web_proxies
|
/g' | grep -aE '"Selector"' >"$TMPDIR"/web_proxies
|
||||||
|
|
||||||
|
>"$TMPDIR"/web_save
|
||||||
[ -s "$TMPDIR"/web_proxies ] && while read line; do
|
[ -s "$TMPDIR"/web_proxies ] && while read line; do
|
||||||
def=$(echo $line | grep -oE '"all".*",' | awk -F "[\"]" '{print $4}')
|
def=$(echo "$line" | grep -oE '"all".*",' | awk -F "[\"]" '{print $4}')
|
||||||
now=$(echo $line | grep -oE '"now".*",' | awk -F "[\"]" '{print $4}')
|
now=$(echo "$line" | grep -oE '"now".*",' | awk -F "[\"]" '{print $4}')
|
||||||
[ "$def" != "$now" ] && {
|
[ "$def" != "$now" ] && {
|
||||||
name=$(echo $line | grep -oE '"name".*",' | awk -F "[\"]" '{print $4}')
|
name=$(echo "$line" | grep -oE '"name".*",' | awk -F "[\"]" '{print $4}')
|
||||||
echo "${name},${now}" >>"$TMPDIR"/web_save
|
echo "${name},${now}" >>"$TMPDIR"/web_save
|
||||||
}
|
}
|
||||||
done <"$TMPDIR"/web_proxies
|
done <"$TMPDIR"/web_proxies
|
||||||
rm -rf "$TMPDIR"/web_proxies
|
rm -f "$TMPDIR"/web_proxies
|
||||||
#对比文件,如果有变动则写入磁盘,否则清除缓存
|
. "$CRASHDIR"/libs/compare.sh && compare "$TMPDIR"/web_save "$CRASHDIR"/configs/web_save
|
||||||
for file in web_save; do
|
[ "$?" = 0 ] && rm -f "$TMPDIR"/web_save || mv -f "$TMPDIR"/web_save "$CRASHDIR"/configs/web_save
|
||||||
if [ -s "$TMPDIR/$file" ]; then
|
|
||||||
. "$CRASHDIR"/libs/compare.sh && compare "$TMPDIR/$file" "$CRASHDIR/configs/$file"
|
|
||||||
[ "$?" = 0 ] && rm -f "$TMPDIR/$file" || mv -f "$TMPDIR/$file" "$CRASHDIR/configs/$file"
|
|
||||||
else
|
|
||||||
> "$CRASHDIR/configs/$file" #空文件时移除旧文件
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|||||||
259
scripts/menu.sh
259
scripts/menu.sh
@@ -32,13 +32,9 @@ load_lang common
|
|||||||
load_lang menu
|
load_lang menu
|
||||||
|
|
||||||
checkrestart() {
|
checkrestart() {
|
||||||
line_break
|
comp_box "\033[32m$MENU_RESTART_NOTICE\033[0m"
|
||||||
separator_line "="
|
btm_box "1) $MENU_RESTART_NOW" \
|
||||||
content_line "\033[32m$MENU_RESTART_NOTICE\033[0m"
|
"0) $MENU_RESTART_LATER"
|
||||||
separator_line "="
|
|
||||||
content_line "1) 立即重启"
|
|
||||||
content_line "0) 暂不重启"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
start_service
|
start_service
|
||||||
@@ -47,38 +43,47 @@ checkrestart() {
|
|||||||
|
|
||||||
# 检查端口冲突
|
# 检查端口冲突
|
||||||
checkport() {
|
checkport() {
|
||||||
|
. "$CRASHDIR"/menus/check_port.sh
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
# Before each round of checks begins, execute netstat only once and cache the results
|
local conflict_found=0
|
||||||
# Avoid calling the system command once for each port
|
local conflict_port=""
|
||||||
current_listening=$(netstat -ntul 2>&1)
|
local conflict_info=""
|
||||||
|
|
||||||
conflict_found=0
|
conflict_info=$(check_port_with_info "$mix_port")
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
conflict_found=1
|
||||||
|
conflict_port="$mix_port"
|
||||||
|
fi
|
||||||
|
|
||||||
for portx in $dns_port $mix_port $redir_port $((redir_port + 1)) $db_port; do
|
if [ "$conflict_found" -eq 0 ]; then
|
||||||
# Use `grep` to search within the cached variables instead of re-running `netstat`
|
conflict_info=$(check_port_with_info "$redir_port")
|
||||||
conflict_line=$(echo "$current_listening" | grep ":$portx ")
|
[ $? -ne 0 ] && conflict_found=1 && conflict_port="$redir_port"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$conflict_line" ]; then
|
if [ "$conflict_found" -eq 0 ]; then
|
||||||
line_break
|
conflict_info=$(check_port_with_info "$((redir_port + 1))")
|
||||||
separator_line "="
|
[ $? -ne 0 ] && conflict_found=1 && conflict_port="$((redir_port + 1))"
|
||||||
content_line "【$portx】:$MENU_PORT_CONFLICT_TITLE"
|
fi
|
||||||
content_line "\033[0m$(echo "$conflict_line" | head -n 1)\033[0m"
|
|
||||||
content_line "\033[36m$MENU_PORT_CONFLICT_HINT\033[0m"
|
if [ "$conflict_found" -eq 0 ]; then
|
||||||
separator_line "="
|
conflict_info=$(check_port_with_info "$dns_port")
|
||||||
|
[ $? -ne 0 ] && conflict_found=1 && conflict_port="$dns_port"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$conflict_found" -eq 0 ]; then
|
||||||
|
conflict_info=$(check_port_with_info "$db_port" tcp)
|
||||||
|
[ $? -ne 0 ] && conflict_found=1 && conflict_port="$db_port"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$conflict_found" -eq 1 ]; then
|
||||||
|
comp_box "【$conflict_port】:$MENU_PORT_CONFLICT_TITLE" \
|
||||||
|
"\033[0m$conflict_info\033[0m" \
|
||||||
|
"\033[36m$MENU_PORT_CONFLICT_HINT\033[0m"
|
||||||
|
|
||||||
. "$CRASHDIR"/menus/2_settings.sh && set_adv_config
|
. "$CRASHDIR"/menus/2_settings.sh && set_adv_config
|
||||||
. "$CRASHDIR"/libs/get_config.sh
|
. "$CRASHDIR"/libs/get_config.sh
|
||||||
|
else
|
||||||
# Mark conflict and exit the for loop, triggering the while loop to restart the check
|
|
||||||
# This replaces the original recursive call to `checkport`
|
|
||||||
conflict_found=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# If no conflicts are found after the entire for loop completes,
|
|
||||||
# the while loop exits and the function terminates.
|
|
||||||
if [ "$conflict_found" -eq 0 ]; then
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -86,7 +91,6 @@ checkport() {
|
|||||||
|
|
||||||
# 脚本启动前检查
|
# 脚本启动前检查
|
||||||
ckstatus() {
|
ckstatus() {
|
||||||
|
|
||||||
versionsh=$(cat "$CRASHDIR"/version)
|
versionsh=$(cat "$CRASHDIR"/version)
|
||||||
[ -n "$versionsh" ] && versionsh_l=$versionsh
|
[ -n "$versionsh" ] && versionsh_l=$versionsh
|
||||||
[ -z "$redir_mod" ] && redir_mod="$MENU_PURE_MOD"
|
[ -z "$redir_mod" ] && redir_mod="$MENU_PURE_MOD"
|
||||||
@@ -132,110 +136,88 @@ ckstatus() {
|
|||||||
userguide=1
|
userguide=1
|
||||||
. "$CRASHDIR"/menus/userguide.sh && userguide
|
. "$CRASHDIR"/menus/userguide.sh && userguide
|
||||||
setconfig userguide 1
|
setconfig userguide 1
|
||||||
|
. "$CRASHDIR"/configs/ShellCrash.cfg
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 检查执行权限
|
# 检查执行权限
|
||||||
[ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh
|
[ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh
|
||||||
|
|
||||||
line_break
|
# 检查/tmp内核文件
|
||||||
separator_line "="
|
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do
|
||||||
content_line "\033[30;43m$MENU_WELCOME\033[0m"
|
local tmp_file="/tmp/$file"
|
||||||
content_right "Ver: $versionsh_l"
|
comp_box "$MENU_TMP_CORE_FOUND \033[36m$tmp_file\033[0m" \
|
||||||
content_line "$MENU_TG_CHANNEL\033[36;4mhttps://t.me/ShellClash\033[0m"
|
"$MENU_TMP_CORE_ASK"
|
||||||
|
btm_box "1) $MENU_LOAD_NOW" \
|
||||||
|
"0) $MENU_LOAD_LATER"
|
||||||
|
read -r -p "$COMMON_INPUT> " res
|
||||||
|
[ "$res" = 1 ] && {
|
||||||
|
zip_type=$(echo "$tmp_file" | grep -oE 'tar.gz$|upx$|gz$')
|
||||||
|
. "$CRASHDIR"/menus/9_upgrade.sh && setcoretype
|
||||||
|
. "$CRASHDIR"/libs/core_tools.sh && core_check "$tmp_file"
|
||||||
|
if [ "$?" = 0 ] && [ -n "$crashcore" ]; then
|
||||||
|
msg_alert "\033[32m$MENU_CORE_LOADED_OK\033[0m"
|
||||||
|
switch_core
|
||||||
|
else
|
||||||
|
rm -rf "$tmp_file"
|
||||||
|
msg_alert "\033[33m$MENU_CORE_LOADED_BAD\033[0m" \
|
||||||
|
"\033[33m$MENU_CORE_REMOVED\033[0m"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
# 检查/tmp配置文件
|
||||||
|
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do
|
||||||
|
local tmp_file="/tmp/$file"
|
||||||
|
comp_box "$MENU_TMP_CFG_FOUND\033[36m$tmp_file\033[0m" \
|
||||||
|
"$MENU_TMP_CFG_ASK"
|
||||||
|
btm_box "1) $MENU_LOAD_NOW" \
|
||||||
|
"0) $MENU_LOAD_LATER"
|
||||||
|
read -p "$COMMON_INPUT> " res
|
||||||
|
[ "$res" = 1 ] && {
|
||||||
|
if [ -n "$(echo $tmp_file | grep -iE '.json$')" ]; then
|
||||||
|
mv -f "$tmp_file" "$CRASHDIR"/jsons/config.json
|
||||||
|
else
|
||||||
|
mv -f "$tmp_file" "$CRASHDIR"/yamls/config.yaml
|
||||||
|
fi
|
||||||
|
msg_alert "\033[32m$MENU_CFG_LOADED_OK\033[0m "
|
||||||
|
}
|
||||||
|
done
|
||||||
|
|
||||||
|
# 检查禁用配置覆写
|
||||||
|
[ "$disoverride" = "1" ] && {
|
||||||
|
comp_box "\033[33m$MENU_OVERRIDE_WARN\033[0m" \
|
||||||
|
"$MENU_OVERRIDE_ASK"
|
||||||
|
btm_box "1) $MENU_YES" \
|
||||||
|
"0) $MENU_NO"
|
||||||
|
read -p "$COMMON_INPUT> " res
|
||||||
|
[ "$res" = 1 ] && unset disoverride && setconfig disoverride
|
||||||
|
}
|
||||||
|
|
||||||
|
top_box "\033[30;43m$MENU_WELCOME\033[0m\t\t Ver: $versionsh_l" \
|
||||||
|
"$MENU_TG_CHANNEL\033[36;4mhttps://t.me/ShellClash\033[0m"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
content_line "$corename$run\t $auto"
|
content_line "$corename$run\t $auto"
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
content_line "$MENU_MEM_USED\033[44m$VmRSS\033[0m\t $MENU_RUNNING_TIME\033[46;30m$day\033[44;37m$time\033[0m"
|
content_line "$MENU_MEM_USED\033[44m$VmRSS\033[0m\t $MENU_RUNNING_TIME\033[46;30m$day\033[44;37m$time\033[0m"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
|
|
||||||
# 检查/tmp内核文件
|
|
||||||
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "$MENU_TMP_CORE_FOUND \033[36m/tmp/$file\033[0m"
|
|
||||||
content_line "$MENU_TMP_CORE_ASK"
|
|
||||||
separator_line "="
|
|
||||||
content_line "1) 立即加载"
|
|
||||||
content_line "0) 暂不加载"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " res
|
|
||||||
[ "$res" = 1 ] && {
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
zip_type=$(echo "$file" | grep -oE 'tar.gz$|upx$|gz$')
|
|
||||||
. "$CRASHDIR"/menus/9_upgrade.sh && setcoretype
|
|
||||||
. "$CRASHDIR"/libs/core_tools.sh && core_check "/tmp/$file"
|
|
||||||
if [ "$?" = 0 ]; then
|
|
||||||
content_line "\033[32m$MENU_CORE_LOADED_OK\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
switch_core
|
|
||||||
else
|
|
||||||
content_line "\033[33m$MENU_CORE_LOADED_BAD\033[0m"
|
|
||||||
rm -rf /tmp/"$file"
|
|
||||||
content_line "\033[33m$MENU_CORE_REMOVED\033[0m"
|
|
||||||
fi
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
}
|
|
||||||
done
|
|
||||||
|
|
||||||
# 检查/tmp配置文件
|
|
||||||
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do
|
|
||||||
tmp_file=/tmp/$file
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "$MENU_TMP_CFG_FOUND \033[36m/tmp/$file\033[0m"
|
|
||||||
content_line "$MENU_TMP_CFG_ASK"
|
|
||||||
separator_line "="
|
|
||||||
content_line "1) 立即加载"
|
|
||||||
content_line "0) 暂不加载"
|
|
||||||
separator_line "="
|
|
||||||
read -p "$COMMON_INPUT> " res
|
|
||||||
[ "$res" = 1 ] && {
|
|
||||||
if [ -n "$(echo /tmp/$file | grep -iE '.json$')" ]; then
|
|
||||||
mv -f /tmp/$file "$CRASHDIR"/jsons/config.json
|
|
||||||
else
|
|
||||||
mv -f /tmp/$file "$CRASHDIR"/yamls/config.yaml
|
|
||||||
fi
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m$MENU_CFG_LOADED_OK\033[0m "
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
}
|
|
||||||
done
|
|
||||||
|
|
||||||
# 检查禁用配置覆写
|
|
||||||
[ "$disoverride" = "1" ] && {
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m$MENU_OVERRIDE_WARN\033[0m"
|
|
||||||
content_line "$MENU_OVERRIDE_ASK"
|
|
||||||
separator_line "="
|
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否"
|
|
||||||
separator_line "="
|
|
||||||
read -p "$COMMON_INPUT> " res
|
|
||||||
[ "$res" = 1 ] && unset disoverride && setconfig disoverride
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main_menu() {
|
main_menu() {
|
||||||
while true; do
|
while true; do
|
||||||
ckstatus
|
ckstatus
|
||||||
|
|
||||||
content_line "1) \033[32m$MENU_MAIN_1\033[0m"
|
btm_box "1) \033[32m$MENU_MAIN_1\033[0m" \
|
||||||
content_line "2) \033[36m$MENU_MAIN_2\033[0m"
|
"2) \033[36m$MENU_MAIN_2\033[0m" \
|
||||||
content_line "3) \033[31m$MENU_MAIN_3\033[0m"
|
"3) \033[31m$MENU_MAIN_3\033[0m" \
|
||||||
content_line "4) \033[33m$MENU_MAIN_4\033[0m"
|
"4) \033[33m$MENU_MAIN_4\033[0m" \
|
||||||
content_line "5) \033[32m$MENU_MAIN_5\033[0m"
|
"5) \033[32m$MENU_MAIN_5\033[0m" \
|
||||||
content_line "6) \033[36m$MENU_MAIN_6\033[0m"
|
"6) \033[36m$MENU_MAIN_6\033[0m" \
|
||||||
content_line "7) \033[33m$MENU_MAIN_7\033[0m"
|
"7) \033[33m$MENU_MAIN_7\033[0m" \
|
||||||
content_line "8) $MENU_MAIN_8"
|
"8) $MENU_MAIN_8" \
|
||||||
content_line "9) \033[32m$MENU_MAIN_9\033[0m"
|
"9) \033[32m$MENU_MAIN_9\033[0m" \
|
||||||
content_line "0) $MENU_MAIN_0"
|
"" \
|
||||||
separator_line "="
|
"0) $MENU_MAIN_0"
|
||||||
read -r -p "$MENU_MAIN_PROMPT" num
|
read -r -p "$MENU_MAIN_PROMPT" num
|
||||||
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
@@ -245,8 +227,8 @@ main_menu() {
|
|||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
start_service
|
start_service
|
||||||
exit
|
|
||||||
line_break
|
line_break
|
||||||
|
exit
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
checkcfg=$(cat "$CFG_PATH")
|
checkcfg=$(cat "$CFG_PATH")
|
||||||
@@ -260,11 +242,7 @@ main_menu() {
|
|||||||
[ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
[ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
sleep 1
|
sleep 1
|
||||||
line_break
|
msg_alert "\033[31m$corename$MENU_SERVICE_STOPPED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m$corename$MENU_SERVICE_STOPPED\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
. "$CRASHDIR"/menus/4_setboot.sh && setboot
|
. "$CRASHDIR"/menus/4_setboot.sh && setboot
|
||||||
@@ -298,7 +276,6 @@ main_menu() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -333,33 +310,26 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
-d)
|
-d)
|
||||||
shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash
|
shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash
|
||||||
line_break
|
comp_box "$MENU_TEST_RUNNING_1" \
|
||||||
separator_line "="
|
"$MENU_TEST_RUNNING_2\033[36;4mhttps://t.me/ShellClash\033[0m"
|
||||||
content_line "$MENU_TEST_RUNNING_1"
|
|
||||||
content_line "$MENU_TEST_RUNNING_2\033[36;4mhttps://t.me/ShellClash\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
"$shtype" "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh_bug.log
|
"$shtype" "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh_bug.log
|
||||||
"$shtype" -x "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh.log
|
"$shtype" -x "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh.log
|
||||||
line_break
|
|
||||||
cat "$TMPDIR"/debug_sh_bug.log | grep 'start\.sh' >"$TMPDIR"/sh_bug
|
cat "$TMPDIR"/debug_sh_bug.log | grep 'start\.sh' >"$TMPDIR"/sh_bug
|
||||||
if [ -s "$TMPDIR"/sh_bug ]; then
|
if [ -s "$TMPDIR"/sh_bug ]; then
|
||||||
|
line_break
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
while read line; do
|
while read line; do
|
||||||
echo -e "$MENU_ERROR_FOUND\033[33;4m$line\033[0m"
|
echo -e "$MENU_ERROR_FOUND\033[33;4m$line\033[0m"
|
||||||
grep -A 1 -B 3 "$line" "$TMPDIR"/debug_sh.log
|
grep -A 1 -B 3 "$line" "$TMPDIR"/debug_sh.log
|
||||||
echo "==========================================================="
|
echo
|
||||||
done <"$TMPDIR"/sh_bug
|
done <"$TMPDIR"/sh_bug
|
||||||
|
echo "==========================================================="
|
||||||
rm -rf "$TMPDIR"/sh_bug
|
rm -rf "$TMPDIR"/sh_bug
|
||||||
line_break
|
comp_box "\033[32m$MENU_TEST_DONE_FAIL\033[0m" \
|
||||||
separator_line "="
|
"$MENU_TEST_LOG_HINT\033[36m$TMPDIR/debug_sh.log\033[0m"
|
||||||
content_line "\033[32m$MENU_TEST_DONE_FAIL\033[0m"
|
|
||||||
content_line "$MENU_TEST_LOG_HINT\033[36m$TMPDIR/debug_sh.log\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
rm -rf "$TMPDIR"/debug_sh.log
|
rm -rf "$TMPDIR"/debug_sh.log
|
||||||
separator_line "="
|
comp_box "\033[32m$MENU_TEST_DONE_OK\033[0m"
|
||||||
content_line "\033[32m$MENU_TEST_DONE_OK\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
line_break
|
line_break
|
||||||
fi
|
fi
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
@@ -368,10 +338,7 @@ case "$1" in
|
|||||||
. "$CRASHDIR"/menus/uninstall.sh && uninstall
|
. "$CRASHDIR"/menus/uninstall.sh && uninstall
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
line_break
|
comp_box "$MENU_WELCOME"
|
||||||
separator_line "="
|
|
||||||
content_line "$MENU_WELCOME"
|
|
||||||
separator_line "="
|
|
||||||
content_line "-t $MENU_CLI_TEST"
|
content_line "-t $MENU_CLI_TEST"
|
||||||
content_line "-h $MENU_CLI_HELP"
|
content_line "-h $MENU_CLI_HELP"
|
||||||
content_line "-u $MENU_CLI_UNINSTALL"
|
content_line "-u $MENU_CLI_UNINSTALL"
|
||||||
|
|||||||
@@ -7,11 +7,8 @@ load_lang 1_start
|
|||||||
|
|
||||||
# ===== 启动完成提示 =====
|
# ===== 启动完成提示 =====
|
||||||
startover() {
|
startover() {
|
||||||
line_break
|
top_box "\033[32m$START_SERVICE_OK\033[0m" \
|
||||||
separator_line "="
|
"$START_WEB_HINT \033[4;36mhttp://$host$hostdir\033[0m"
|
||||||
content_line "\033[32m$START_SERVICE_OK\033[0m"
|
|
||||||
content_line "$START_WEB_HINT \033[4;36mhttp://$host$hostdir\033[0m"
|
|
||||||
|
|
||||||
if [ "$firewall_area" = 4 ]; then
|
if [ "$firewall_area" = 4 ]; then
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "$START_PAC_HINT \033[4;32mhttp://$host:$db_port/ui/pac\033[0m"
|
content_line "$START_PAC_HINT \033[4;32mhttp://$host:$db_port/ui/pac\033[0m"
|
||||||
@@ -39,10 +36,7 @@ start_core() {
|
|||||||
fi
|
fi
|
||||||
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh" && gen_providers
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh" && gen_providers
|
||||||
|
|
||||||
line_break
|
comp_box "\033[33m$START_NO_CORE_CFG_TRY_GEN\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m$START_NO_CORE_CFG_TRY_GEN\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
elif [ -s "$core_config" ] || [ -n "$Url" ] || [ -n "$Https" ]; then
|
elif [ -s "$core_config" ] || [ -n "$Url" ] || [ -n "$Https" ]; then
|
||||||
"$CRASHDIR/start.sh" start
|
"$CRASHDIR/start.sh" start
|
||||||
|
|
||||||
@@ -57,10 +51,7 @@ start_core() {
|
|||||||
startover
|
startover
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
line_break
|
comp_box "\033[31m$START_NO_CORE_CFG_IMPORT_FIRST\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m$START_NO_CORE_CFG_IMPORT_FIRST\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
. "$CRASHDIR/menus/6_core_config.sh" && set_core_config
|
. "$CRASHDIR/menus/6_core_config.sh" && set_core_config
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -69,10 +60,7 @@ start_core() {
|
|||||||
start_service() {
|
start_service() {
|
||||||
if [ "$firewall_area" = 5 ]; then
|
if [ "$firewall_area" = 5 ]; then
|
||||||
"$CRASHDIR/start.sh" start
|
"$CRASHDIR/start.sh" start
|
||||||
line_break
|
comp_box "\033[32m$START_FIREWALL_DONE\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m$START_FIREWALL_DONE\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
line_break
|
line_break
|
||||||
else
|
else
|
||||||
start_core
|
start_core
|
||||||
|
|||||||
@@ -11,28 +11,28 @@ settings() {
|
|||||||
while true; do
|
while true; do
|
||||||
# 获取设置默认显示
|
# 获取设置默认显示
|
||||||
[ -z "$skip_cert" ] && skip_cert=ON
|
[ -z "$skip_cert" ] && skip_cert=ON
|
||||||
[ -z "$sniffer" ] && sniffer=OFF
|
[ -z "$sniffer" ] && {
|
||||||
|
sniffer=OFF
|
||||||
|
echo "$crashcore" | grep -q 'singbox' && sniffer=ON
|
||||||
|
}
|
||||||
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
||||||
|
|
||||||
line_break
|
comp_box "\033[30;47m$SET_MENU_TITLE\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[30;47m$SET_MENU_TITLE\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
content_line "1) $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m"
|
content_line "1) $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m"
|
||||||
content_line "2) $SET_MENU_DNS\t\033[36m$dns_mod\033[0m"
|
content_line "2) $SET_MENU_DNS\t\033[36m$dns_mod\033[0m"
|
||||||
content_line "3) $SET_MENU_FW_FILTER"
|
content_line "3) $SET_MENU_FW_FILTER\t$SET_MENU_FW_FILTER_DESC"
|
||||||
[ "$disoverride" != "1" ] && {
|
[ "$disoverride" != "1" ] && {
|
||||||
content_line "4) $SET_MENU_SKIP_CERT\t\033[36m$skip_cert\033[0m"
|
content_line "4) $SET_MENU_SKIP_CERT\t\033[36m$skip_cert\033[0m"
|
||||||
content_line "5) $SET_MENU_SNIFFER\t\033[36m$sniffer\033[0m"
|
content_line "5) $SET_MENU_SNIFFER\t\033[36m$sniffer\033[0m"
|
||||||
content_line "6) $SET_MENU_ADV_PORT"
|
content_line "6) $SET_MENU_ADV_PORT"
|
||||||
}
|
}
|
||||||
content_line "8) $SET_MENU_IPV6\t\033[36m$ipv6_redir\033[0m"
|
content_line "7) $SET_MENU_IPV6\t\033[36m$ipv6_redir\033[0m"
|
||||||
separator_line "-"
|
btm_box "" \
|
||||||
content_line "a) \033[31m$SET_MENU_RESET\033[0m"
|
"a) \033[31m$SET_MENU_RESET\033[0m" \
|
||||||
content_line "b) \033[36m$SET_MENU_LANG\033[0m"
|
"b) \033[36m$SET_MENU_LANG\033[0m" \
|
||||||
content_line "c) \033[33m$SET_MENU_UI\033[0m"
|
"c) \033[33m$SET_MENU_UI\033[0m" \
|
||||||
content_line "0) $COMMON_BACK"
|
"" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
@@ -40,13 +40,9 @@ settings() {
|
|||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
if [ "$USER" != root ] && [ "$USER" != admin ]; then
|
if [ "$USER" != root ] && [ "$USER" != admin ]; then
|
||||||
line_break
|
comp_box "$SET_WARN_NONROOT"
|
||||||
separator_line "="
|
btm_box "1) $SET_YES" \
|
||||||
content_line "$SET_WARN_NONROOT"
|
"0) $SET_NO_BACK"
|
||||||
separator_line "="
|
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
set_redir_mod
|
set_redir_mod
|
||||||
@@ -67,44 +63,33 @@ settings() {
|
|||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ "$skip_cert" = "OFF" ]; then
|
if [ "$skip_cert" = "OFF" ]; then
|
||||||
content_line "当前\033[33m已禁用\033[0m跳过本地证书验证,是否确认启用:"
|
content_line "$SET_SKIP_CERT_NOW\033[33m$SET_DISABLED\033[0m$SET_SKIP_CERT_ENABLE_Q"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已启用\033[0m跳过本地证书验证,是否确认禁用:"
|
content_line "$SET_SKIP_CERT_NOW\033[33m$SET_ENABLED\033[0m$SET_SKIP_CERT_DISABLE_Q"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
content_line "1) 是"
|
btm_box "1) $SET_YES" \
|
||||||
content_line "0) 否,返回上级菜单"
|
"0) $SET_NO_BACK"
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
if [ "$num" = 1 ]; then
|
if [ "$num" = 1 ]; then
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$skip_cert" = OFF ]; then
|
if [ "$skip_cert" = OFF ]; then
|
||||||
skip_cert=ON
|
skip_cert=ON
|
||||||
content_line "\033[33m$SET_SKIP_CERT_ON\033[0m"
|
msg_alert "\033[33m$SET_SKIP_CERT_ON\033[0m"
|
||||||
else
|
else
|
||||||
skip_cert=OFF
|
skip_cert=OFF
|
||||||
content_line "\033[33m$SET_SKIP_CERT_OFF\033[0m"
|
msg_alert "\033[33m$SET_SKIP_CERT_OFF\033[0m"
|
||||||
fi
|
fi
|
||||||
setconfig skip_cert $skip_cert
|
setconfig skip_cert $skip_cert
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$sniffer" = "OFF" ]; then
|
if [ "$sniffer" = "OFF" ]; then
|
||||||
content_line "当前\033[33m已禁用\033[0m域名嗅探,是否确认启用:"
|
comp_box "$SET_SNIFFER_NOW\033[33m$SET_DISABLED\033[0m$SET_SNIFFER_ENABLE_Q"
|
||||||
separator_line "="
|
btm_box "1) $SET_YES" \
|
||||||
content_line "1) 是"
|
"0) $SET_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
if [ "$num" = 1 ]; then
|
if [ "$num" = 1 ]; then
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
@@ -112,25 +97,20 @@ settings() {
|
|||||||
rm -rf "$TMPDIR/CrashCore" "$CRASHDIR/CrashCore" "$CRASHDIR/CrashCore.tar.gz"
|
rm -rf "$TMPDIR/CrashCore" "$CRASHDIR/CrashCore" "$CRASHDIR/CrashCore.tar.gz"
|
||||||
crashcore=meta
|
crashcore=meta
|
||||||
setconfig crashcore $crashcore
|
setconfig crashcore $crashcore
|
||||||
line_break
|
top_box "$SET_SNIFFER_CORE_SWITCH" \
|
||||||
content_line "$SET_SNIFFER_CORE_SWITCH"
|
""
|
||||||
content_line ""
|
|
||||||
fi
|
fi
|
||||||
sniffer=ON
|
sniffer=ON
|
||||||
else
|
else
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
elif [ "$crashcore" = clashpre ] && [ "$dns_mod" = redir_host ]; then
|
elif [ "$crashcore" = clashpre ] && [ "$dns_mod" = redir_host ]; then
|
||||||
content_line "\033[31m$SET_SNIFFER_LOCKED\033[0m"
|
msg_alert "\033[31m$SET_SNIFFER_LOCKED\033[0m"
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
continue
|
continue
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已启用\033[0m域名嗅探,是否确认禁用:"
|
comp_box "$SET_SNIFFER_NOW\033[33m$SET_ENABLED\033[0m$SET_SNIFFER_DISABLE_Q"
|
||||||
separator_line "="
|
btm_box "1) $SET_YES" \
|
||||||
content_line "1) 是"
|
"0) $SET_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ "$num" = 1 ]; then
|
if [ "$num" = 1 ]; then
|
||||||
sniffer=OFF
|
sniffer=OFF
|
||||||
@@ -141,20 +121,15 @@ settings() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
setconfig sniffer "$sniffer"
|
setconfig sniffer "$sniffer"
|
||||||
content_line "\033[32m操作成功\033[0m"
|
btm_box "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
if pidof CrashCore >/dev/null; then
|
if pidof CrashCore >/dev/null; then
|
||||||
line_break
|
comp_box "\033[33m$SET_CORE_RUNNING\033[0m" \
|
||||||
separator_line "="
|
"$SET_CORE_STOP_CONFIRM"
|
||||||
content_line "\033[33m$SET_CORE_RUNNING\033[0m"
|
btm_box "1) $SET_YES" \
|
||||||
content_line "$SET_CORE_STOP_CONFIRM"
|
"0) $SET_NO_BACK"
|
||||||
separator_line "="
|
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
"$CRASHDIR/start.sh" stop && set_adv_config
|
"$CRASHDIR/start.sh" stop && set_adv_config
|
||||||
@@ -165,18 +140,16 @@ settings() {
|
|||||||
set_adv_config
|
set_adv_config
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
8)
|
7)
|
||||||
set_ipv6
|
set_ipv6
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
BACK_TAR="$CRASHDIR/configs.tar.gz"
|
BACK_TAR="$CRASHDIR/configs.tar.gz"
|
||||||
line_break
|
comp_box "1) $SET_BACKUP" \
|
||||||
separator_line "="
|
"2) $SET_RESTORE" \
|
||||||
content_line "1) $SET_BACKUP"
|
"3) $SET_RESET" \
|
||||||
content_line "2) $SET_RESTORE"
|
"" \
|
||||||
content_line "3) $SET_RESET"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) $COMMON_BACK"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
@@ -190,6 +163,7 @@ settings() {
|
|||||||
else
|
else
|
||||||
content_line "\033[31m$SET_BACKUP_FAIL\033[0m"
|
content_line "\033[31m$SET_BACKUP_FAIL\033[0m"
|
||||||
fi
|
fi
|
||||||
|
separator_line "="
|
||||||
sleep 1
|
sleep 1
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
@@ -218,52 +192,43 @@ settings() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornub
|
errornum
|
||||||
sleep 1
|
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
content_line "\033[33m$SET_NEED_RESTART\033[0m"
|
content_line "\033[33m$SET_NEED_RESTART\033[0m"
|
||||||
|
separator_line "="
|
||||||
|
line_break
|
||||||
sleep 1
|
sleep 1
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
line_break
|
comp_box "1) $SET_LANG_ZH" \
|
||||||
separator_line "="
|
"2) $SET_LANG_EN" \
|
||||||
content_line "1) 简体中文"
|
"" \
|
||||||
content_line "2) English"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) $COMMON_BACK"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
echo chs >"$CRASHDIR"/configs/i18n.cfg
|
echo chs >"$CRASHDIR"/configs/i18n.cfg
|
||||||
content_line "\033[32m切换成功!请重新运行脚本!\033[0m"
|
msg_alert "\033[32m切换成功,请重新执行脚本!\033[0m"
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
echo en >"$CRASHDIR"/configs/i18n.cfg
|
echo en >"$CRASHDIR"/configs/i18n.cfg
|
||||||
content_line "\033[32mLanguage switched successfully! Please re-run the script!\033[0m"
|
msg_alert "\033[32mLanguage switched successfully! Please re-run the script!\033[0m"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
separator_line "="
|
|
||||||
line_break
|
line_break
|
||||||
sleep 1
|
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
line_break
|
comp_box "1) New Design by Sofia-Riese" \
|
||||||
separator_line "="
|
"2) TUI-lite" \
|
||||||
content_line "1) New Design by Sofia-Riese"
|
"" \
|
||||||
content_line "2) TUI-lite"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) $COMMON_BACK"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
@@ -278,15 +243,10 @@ settings() {
|
|||||||
. "$CRASHDIR"/menus/tui_lite.sh
|
. "$CRASHDIR"/menus/tui_lite.sh
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
line_break
|
msg_alert "\033[32m$SET_SWITCH_OK\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m切换成功!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -295,11 +255,7 @@ settings() {
|
|||||||
set_redir_config() {
|
set_redir_config() {
|
||||||
setconfig redir_mod "$redir_mod"
|
setconfig redir_mod "$redir_mod"
|
||||||
setconfig dns_mod "$dns_mod"
|
setconfig dns_mod "$dns_mod"
|
||||||
line_break
|
msg_alert "\033[36m$SET_REDIR_APPLIED $redir_mod $SET_MODE_SUFFIX\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[36m$SET_REDIR_APPLIED $redir_mod\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 路由模式设置
|
# 路由模式设置
|
||||||
@@ -309,32 +265,28 @@ set_redir_mod() {
|
|||||||
[ -z "$firewall_area" ] && firewall_area=1
|
[ -z "$firewall_area" ] && firewall_area=1
|
||||||
[ "$firewall_area" = 4 ] && redir_mod="$MENU_PURE_MOD"
|
[ "$firewall_area" = 4 ] && redir_mod="$MENU_PURE_MOD"
|
||||||
[ -z "$redir_mod" ] && redir_mod='Redir'
|
[ -z "$redir_mod" ] && redir_mod='Redir'
|
||||||
|
[ -z "$vm_redir" ] && vm_redir='OFF'
|
||||||
firewall_area_dsc=$(echo "$SET_FW_AREA_DESC($bypass_host)" | cut -d'|' -f$firewall_area)
|
firewall_area_dsc=$(echo "$SET_FW_AREA_DESC($bypass_host)" | cut -d'|' -f$firewall_area)
|
||||||
line_break
|
comp_box "\033[33m$SET_REDIR_RESTART_HINT\033[0m" \
|
||||||
separator_line "="
|
"$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m; $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m"
|
||||||
content_line "\033[33m$SET_REDIR_RESTART_HINT\033[0m"
|
|
||||||
content_line "$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m; $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
[ "$firewall_area" -le 3 ] && {
|
[ "$firewall_area" -le 3 ] && {
|
||||||
content_line "1) \033[32m$SET_REDIR_REDIR\033[0m:\t$SET_REDIR_REDIRDES"
|
content_line "1) $SET_SET_TO\033[32m$SET_REDIR_REDIR\033[0m:\t$SET_REDIR_REDIRDES"
|
||||||
content_line "2) \033[36m$SET_REDIR_MIX\033[0m:\t$SET_REDIR_MIXDES"
|
content_line "2) $SET_SET_TO\033[36m$SET_REDIR_MIX\033[0m:\t$SET_REDIR_MIXDES"
|
||||||
content_line "3) \033[32m$SET_REDIR_TPROXY\033[0m:$SET_REDIR_TPROXYDES"
|
content_line "3) $SET_SET_TO\033[32m$SET_REDIR_TPROXY\033[0m:\t$SET_REDIR_TPROXYDES"
|
||||||
content_line "4) \033[33m$SET_REDIR_TUN\033[0m:\t$SET_REDIR_TUNDES"
|
content_line "4) $SET_SET_TO\033[33m$SET_REDIR_TUN\033[0m:\t$SET_REDIR_TUNDES"
|
||||||
content_line ""
|
content_line ""
|
||||||
}
|
}
|
||||||
[ "$firewall_area" = 5 ] && {
|
[ "$firewall_area" = 5 ] && {
|
||||||
content_line "5) \033[32mTCP旁路转发\033[0m: 仅转发TCP流量至旁路由"
|
content_line "5) \033[32m$SET_BYPASS_TCP\033[0m: $SET_BYPASS_TCP_DESC"
|
||||||
content_line "6) \033[36mT&U旁路转发\033[0m: 转发TCP&UDP流量至旁路由"
|
content_line "6) \033[36m$SET_BYPASS_TU\033[0m: $SET_BYPASS_TU_DESC"
|
||||||
content_line ""
|
content_line ""
|
||||||
}
|
}
|
||||||
content_line "7) $SET_FW_AREA:\t\033[47;30m$firewall_area_dsc\033[0m"
|
btm_box "7) $SET_FW_AREA:\t\033[47;30m$firewall_area_dsc\033[0m" \
|
||||||
content_line "8) $SET_VM_REDIR:\t\033[47;30m$vm_redir\033[0m"
|
"8) $SET_VM_REDIR:\t\033[47;30m$vm_redir\033[0m" \
|
||||||
content_line "9) $SET_FW_SWITCH:\t\033[47;30m$firewall_mod\033[0m"
|
"9) $SET_FW_SWITCH:\t\033[47;30m$firewall_mod\033[0m" \
|
||||||
content_line ""
|
"" \
|
||||||
content_line "0 $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -348,12 +300,8 @@ set_redir_mod() {
|
|||||||
redir_mod=Mix
|
redir_mod=Mix
|
||||||
set_redir_config
|
set_redir_config
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m${SET_NO_MOD}TUN\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$SET_NO_MOD2\033[0m"
|
||||||
content_line "\033[31m${SET_NO_MOD}TUN\033[0m"
|
|
||||||
content_line "\033[31m$SET_NO_MOD2\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
@@ -369,24 +317,16 @@ set_redir_mod() {
|
|||||||
redir_mod=Tproxy
|
redir_mod=Tproxy
|
||||||
set_redir_config
|
set_redir_config
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m${SET_NO_MOD}iptables-mod-tproxy\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$SET_NO_MOD2\033[0m"
|
||||||
content_line "\033[31m${SET_NO_MOD}iptables-mod-tproxy\033[0m"
|
|
||||||
content_line "\033[31m$SET_NO_MOD2\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
elif [ "$firewall_mod" = "nftables" ]; then
|
elif [ "$firewall_mod" = "nftables" ]; then
|
||||||
if modprobe nft_tproxy >/dev/null 2>&1 || lsmod 2>/dev/null | grep -q nft_tproxy; then
|
if modprobe nft_tproxy >/dev/null 2>&1 || lsmod 2>/dev/null | grep -q nft_tproxy; then
|
||||||
redir_mod=Tproxy
|
redir_mod=Tproxy
|
||||||
set_redir_config
|
set_redir_config
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m${SET_NO_MOD}nft_tproxy\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$SET_NO_MOD2\033[0m"
|
||||||
content_line "\033[31m${SET_NO_MOD}nft_tproxy\033[0m"
|
|
||||||
content_line "\033[31m$SET_NO_MOD2\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@@ -395,19 +335,15 @@ set_redir_mod() {
|
|||||||
redir_mod=Tun
|
redir_mod=Tun
|
||||||
set_redir_config
|
set_redir_config
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$SET_NO_TUN\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m$SET_NO_TUN\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
redir_mod='TCP旁路转发'
|
redir_mod='$SET_BYPASS_TCP'
|
||||||
set_redir_config
|
set_redir_config
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
redir_mod='T&U旁路转发'
|
redir_mod='$SET_BYPASS_TU'
|
||||||
set_redir_config
|
set_redir_config
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
@@ -423,10 +359,7 @@ set_redir_mod() {
|
|||||||
redir_mod=Redir
|
redir_mod=Redir
|
||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$FW_NO_NFTABLES\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m$FW_NO_NFTABLES\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
elif [ "$firewall_mod" = 'nftables' ]; then
|
elif [ "$firewall_mod" = 'nftables' ]; then
|
||||||
if ckcmd iptables; then
|
if ckcmd iptables; then
|
||||||
@@ -434,10 +367,7 @@ set_redir_mod() {
|
|||||||
redir_mod=Redir
|
redir_mod=Redir
|
||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$FW_NO_IPTABLES\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m$FW_NO_IPTABLES\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
iptables -j REDIRECT -h >/dev/null 2>&1 && firewall_mod=iptables
|
iptables -j REDIRECT -h >/dev/null 2>&1 && firewall_mod=iptables
|
||||||
@@ -447,41 +377,43 @@ set_redir_mod() {
|
|||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
setconfig firewall_mod "$firewall_mod"
|
setconfig firewall_mod "$firewall_mod"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$FW_NO_FIREWALL_BACKEND\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m$FW_NO_FIREWALL_BACKEND\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
setconfig firewall_mod "$firewall_mod"
|
setconfig firewall_mod "$firewall_mod"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
inputport() {
|
inputport() {
|
||||||
|
local protocol="${1:-all}"
|
||||||
line_break
|
line_break
|
||||||
read -r -p "$INPUT_PORT(1~65535)> " portx
|
read -r -p "$INPUT_PORT(1~65535)> " portx
|
||||||
. "$CRASHDIR"/menus/check_port.sh # 加载测试函数
|
. "$CRASHDIR"/menus/check_port.sh
|
||||||
line_break
|
|
||||||
separator_line "="
|
if ! check_port "$portx" "$protocol"; then
|
||||||
if check_port "$portx"; then
|
msg_alert "\033[31m$COMMON_FAILED\033[0m"
|
||||||
setconfig "$xport" "$portx"
|
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
content_line "\033[31m$COMMON_FAILED\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local ports_to_check=""
|
||||||
|
[ "$xport" != "mix_port" ] && ports_to_check="$ports_to_check|$mix_port"
|
||||||
|
[ "$xport" != "redir_port" ] && ports_to_check="$ports_to_check|$redir_port"
|
||||||
|
[ "$xport" != "dns_port" ] && ports_to_check="$ports_to_check|$dns_port"
|
||||||
|
[ "$xport" != "db_port" ] && ports_to_check="$ports_to_check|$db_port"
|
||||||
|
|
||||||
|
if echo "$ports_to_check|" | grep -q "|$portx|"; then
|
||||||
|
msg_alert "\033[31m$CHECK_PORT_DUP_ERR\033[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
setconfig "$xport" "$portx"
|
||||||
|
msg_alert "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# 端口设置
|
# 端口设置
|
||||||
@@ -491,21 +423,17 @@ set_adv_config() {
|
|||||||
[ -z "$secret" ] && secret="$COMMON_UNSET"
|
[ -z "$secret" ] && secret="$COMMON_UNSET"
|
||||||
[ -z "$table" ] && table=100
|
[ -z "$table" ] && table=100
|
||||||
[ -z "$authentication" ] && auth="$COMMON_UNSET" || auth="******"
|
[ -z "$authentication" ] && auth="$COMMON_UNSET" || auth="******"
|
||||||
|
comp_box "1) $ADV_HTTP_PORT:\t\033[36m$mix_port\033[0m" \
|
||||||
line_break
|
"2) $ADV_HTTP_AUTH:\t\033[36m$auth\033[0m" \
|
||||||
separator_line "="
|
"3) $ADV_REDIR_PORT:\t\033[36m$redir_port,$((redir_port + 1))\033[0m" \
|
||||||
content_line "1) $ADV_HTTP_PORT:\t\033[36m$mix_port\033[0m"
|
"4) $ADV_DNS_PORT:\t\t\033[36m$dns_port\033[0m" \
|
||||||
content_line "2) $ADV_HTTP_AUTH:\t\033[36m$auth\033[0m"
|
"5) $ADV_PANEL_PORT:\t\t\033[36m$db_port\033[0m" \
|
||||||
content_line "3) $ADV_REDIR_PORT:\t\033[36m$redir_port,$((redir_port + 1))\033[0m"
|
"6) $ADV_PANEL_PASS:\t\t\033[36m$secret\033[0m" \
|
||||||
content_line "4) $ADV_DNS_PORT:\t\t\033[36m$dns_port\033[0m"
|
"8) $ADV_HOST:\t\033[36m$host\033[0m" \
|
||||||
content_line "5) $ADV_PANEL_PORT:\t\t\033[36m$db_port\033[0m"
|
"9) $ADV_TABLE:\t\t\033[36m$table,$((table + 1))\033[0m" \
|
||||||
content_line "6) $ADV_PANEL_PASS:\t\t\033[36m$secret\033[0m"
|
"" \
|
||||||
content_line "8) $ADV_HOST:\t\033[36m$host\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "9) $ADV_TABLE:\t\t\033[36m$table,$((table + 1))\033[0m"
|
|
||||||
content_line "0) $COMMON_BACK"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -520,35 +448,27 @@ set_adv_config() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
comp_box "$ADV_AUTH_FORMAT_DESC" \
|
||||||
separator_line "="
|
"$ADV_AUTH_WARN" \
|
||||||
content_line "$ADV_AUTH_FORMAT_DESC"
|
"$ADV_AUTH_REMOVE_HINT"
|
||||||
content_line "$ADV_AUTH_WARN"
|
|
||||||
content_line "$ADV_AUTH_REMOVE_HINT"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$ADV_AUTH_INPUT> " input
|
read -r -p "$ADV_AUTH_INPUT> " input
|
||||||
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$input" = "0" ]; then
|
if [ "$input" = "0" ]; then
|
||||||
authentication=""
|
authentication=""
|
||||||
setconfig authentication
|
setconfig authentication
|
||||||
content_line "\033[32m$ADV_AUTH_REMOVED\033[0m"
|
msg_alert "\033[32m$ADV_AUTH_REMOVED\033[0m"
|
||||||
else
|
else
|
||||||
if [ "$local_proxy" = "ON" ] && [ "$local_type" = "$LOCAL_TYPE_ENV" ]; then
|
if [ "$local_proxy" = "ON" ] && [ "$local_type" = "$LOCAL_TYPE_ENV" ]; then
|
||||||
content_line "\033[33m$ADV_AUTH_ENV_CONFLICT\033[0m"
|
msg_alert "\033[33m$ADV_AUTH_ENV_CONFLICT\033[0m"
|
||||||
else
|
else
|
||||||
authentication=$(echo "$input" | grep :)
|
authentication=$(echo "$input" | grep :)
|
||||||
if [ -n "$authentication" ]; then
|
if [ -n "$authentication" ]; then
|
||||||
setconfig authentication "'$authentication'"
|
setconfig authentication "'$authentication'"
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
msg_alert "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
else
|
else
|
||||||
content_line "\033[31m$ADV_AUTH_INVALID\033[0m"
|
msg_alert "\033[31m$ADV_AUTH_INVALID\033[0m"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
xport=redir_port
|
xport=redir_port
|
||||||
@@ -570,7 +490,7 @@ set_adv_config() {
|
|||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
xport=db_port
|
xport=db_port
|
||||||
inputport
|
inputport tcp
|
||||||
if [ $? -eq 1 ]; then
|
if [ $? -eq 1 ]; then
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
@@ -582,59 +502,48 @@ set_adv_config() {
|
|||||||
read -r -p "$ADV_PANEL_PASS_INPUT> " secret
|
read -r -p "$ADV_PANEL_PASS_INPUT> " secret
|
||||||
if [ -n "$secret" ]; then
|
if [ -n "$secret" ]; then
|
||||||
[ "$secret" = "0" ] && secret=""
|
[ "$secret" = "0" ] && secret=""
|
||||||
setconfig secret "$secret"
|
if setconfig secret "$secret"; then
|
||||||
line_break
|
common_success
|
||||||
separator_line "="
|
else
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
common_failed
|
||||||
separator_line "="
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
line_break
|
comp_box "\033[33m$ADV_HOST_WARN_LAN\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$ADV_HOST_WARN_CHANGE\033[0m"
|
||||||
content_line "\033[33m$ADV_HOST_WARN_LAN\033[0m"
|
|
||||||
content_line "\033[31m$ADV_HOST_WARN_CHANGE\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$ADV_HOST_INPUT> " host
|
read -r -p "$ADV_HOST_INPUT> " host
|
||||||
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$host" = "0" ]; then
|
if [ "$host" = "0" ]; then
|
||||||
host=""
|
host=""
|
||||||
setconfig host "$host"
|
setconfig host "$host"
|
||||||
content_line "\033[32m$ADV_HOST_REMOVED\033[0m"
|
msg_alert "\033[32m$ADV_HOST_REMOVED\033[0m"
|
||||||
separator_line "="
|
line_break
|
||||||
sleep 1
|
|
||||||
exit 0
|
exit 0
|
||||||
elif echo "$host" | grep -Eq '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'; then
|
elif echo "$host" | grep -Eq '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])\>(\.\<([0-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>){2}\.\<([1-9]|[0-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'; then
|
||||||
setconfig host "$host"
|
if setconfig host "$host"; then
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
common_success
|
||||||
|
else
|
||||||
|
common_failed
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
host=""
|
host=""
|
||||||
content_line "\033[31m$ADV_HOST_INVALID\033[0m"
|
msg_alert "\033[31m$ADV_HOST_INVALID\033[0m"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
9)
|
9)
|
||||||
line_break
|
comp_box "\033[33m$ADV_TABLE_WARN\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m$ADV_TABLE_WARN\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$ADV_TABLE_INPUT> " table
|
read -r -p "$ADV_TABLE_INPUT> " table
|
||||||
if [ -n "$table" ]; then
|
if [ -n "$table" ]; then
|
||||||
[ "$table" = "0" ] && table="100"
|
[ "$table" = "0" ] && table="100"
|
||||||
setconfig table "$table"
|
if setconfig table "$table"; then
|
||||||
|
common_success
|
||||||
line_break
|
else
|
||||||
separator_line "="
|
common_failed
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
fi
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -642,22 +551,17 @@ set_adv_config() {
|
|||||||
|
|
||||||
set_firewall_area() {
|
set_firewall_area() {
|
||||||
while true; do
|
while true; do
|
||||||
[ -z "$vm_redir" ] && vm_redir='OFF'
|
comp_box "\033[33m$FW_AREA_NOTE_1\033[0m" \
|
||||||
line_break
|
"\033[33m$FW_AREA_NOTE_2\033[0m" \
|
||||||
separator_line "="
|
"" \
|
||||||
content_line "\033[33m$FW_AREA_NOTE_1\033[0m"
|
"$SET_FW_AREA_CURRENT$firewall_area_dsc"
|
||||||
content_line "\033[33m$FW_AREA_NOTE_2\033[0m"
|
btm_box "1) \033[32m$FW_AREA_LAN\033[0m" \
|
||||||
content_line ""
|
"2) \033[36m$FW_AREA_LOCAL\033[0m" \
|
||||||
content_line "当前路由劫持范围:$firewall_area_dsc"
|
"3) \033[32m$FW_AREA_BOTH\033[0m" \
|
||||||
separator_line "="
|
"4) $FW_AREA_NONE" \
|
||||||
content_line "1) \033[32m$FW_AREA_LAN\033[0m"
|
"" \
|
||||||
content_line "2) \033[36m$FW_AREA_LOCAL\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "3) \033[32m$FW_AREA_BOTH\033[0m"
|
|
||||||
content_line "4) $FW_AREA_NONE"
|
|
||||||
content_line "0) $COMMON_BACK"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -679,35 +583,27 @@ set_firewall_area() {
|
|||||||
4) firewall_area_dsc="$FW_AREA_NONE" ;;
|
4) firewall_area_dsc="$FW_AREA_NONE" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
line_break
|
common_success
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m操作成功\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
line_break
|
comp_box "\033[31m$SET_WARN\033[0m" \
|
||||||
separator_line "="
|
"$SET_BYPASS_WARN_1" \
|
||||||
content_line "\033[31m注意:\033[0m"
|
"$SET_BYPASS_WARN_2" \
|
||||||
content_line "此功能存在多种风险如无网络基础请勿尝试!"
|
"$SET_BYPASS_WARN_3" \
|
||||||
content_line "如需代理UDP,请确保旁路由运行了支持UDP代理的模式!"
|
"\033[33m$SET_DESC\033[0m" \
|
||||||
content_line "如使用systemd方式启动,内核依然会空载运行,建议使用保守模式!"
|
"$SET_BYPASS_DESC_1" \
|
||||||
content_line "\033[33m说明:\033[0m"
|
"$SET_BYPASS_DESC_2"
|
||||||
content_line "此功能不启动内核仅配置防火墙转发,且子设备无需额外设置网关DNS"
|
read -r -p "$SET_INPUT_BYPASS_IPV4> " bypass_host
|
||||||
content_line "支持防火墙分流及设备过滤,支持部分定时任务,但不支持ipv6"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请直接输入旁路由IPV4地址> " bypass_host
|
|
||||||
[ -n "$bypass_host" ] && {
|
[ -n "$bypass_host" ] && {
|
||||||
firewall_area=$num
|
firewall_area=$num
|
||||||
setconfig firewall_area "$firewall_area"
|
setconfig firewall_area "$firewall_area"
|
||||||
setconfig bypass_host "$bypass_host"
|
setconfig bypass_host "$bypass_host"
|
||||||
redir_mod=TCP旁路转发
|
redir_mod=$SET_BYPASS_TCP
|
||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -715,50 +611,35 @@ set_firewall_area() {
|
|||||||
|
|
||||||
set_firewall_vm() {
|
set_firewall_vm() {
|
||||||
[ -z "$vm_ipv4" ] && vm_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'brd' | grep -E 'docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | sed 's/.*inet.//g' | sed 's/ br.*$//g' | sed 's/metric.*$//g' | tr '\n' ' ')
|
[ -z "$vm_ipv4" ] && vm_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'brd' | grep -E 'docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | sed 's/.*inet.//g' | sed 's/ br.*$//g' | sed 's/metric.*$//g' | tr '\n' ' ')
|
||||||
line_break
|
comp_box "$VM_DETECT_DESC\033[32m$vm_ipv4\033[0m"
|
||||||
separator_line "="
|
btm_box "1) \033[32m$VM_ENABLE_AUTO\033[0m" \
|
||||||
content_line "$VM_DETECT_DESC\033[32m$vm_ipv4\033[0m"
|
"2) \033[36m$VM_ENABLE_MANUAL\033[0m" \
|
||||||
separator_line "="
|
"3) \033[31m$VM_DISABLE\033[0m" \
|
||||||
content_line "1) \033[32m$VM_ENABLE_AUTO\033[0m"
|
"" \
|
||||||
content_line "2) \033[36m$VM_ENABLE_MANUAL\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "3) \033[31m$VM_DISABLE\033[0m"
|
|
||||||
content_line "0) $COMMON_BACK"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
1)
|
1)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$vm_ipv4" ]; then
|
if [ -n "$vm_ipv4" ]; then
|
||||||
vm_redir=ON
|
vm_redir=ON
|
||||||
content_line "\033[32m操作成功\033[0m"
|
common_success
|
||||||
else
|
else
|
||||||
content_line "\033[33m$VM_NO_NET_DETECTED\033[0m"
|
msg_alert "\033[33m$VM_NO_NET_DETECTED\033[0m"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
comp_box "$VM_INPUT_DESC_1" \
|
||||||
separator_line "="
|
"$VM_INPUT_DESC_2 \033[32m10.88.0.0/16 172.17.0.0/16\033[0m" \
|
||||||
content_line "$VM_INPUT_DESC_1"
|
"" \
|
||||||
content_line "$VM_INPUT_DESC_2 \033[32m10.88.0.0/16 172.17.0.0/16\033[0m"
|
"$SET_TIPS_ENTER_BACK"
|
||||||
content_line ""
|
|
||||||
content_line "Tips:直接回车确认可返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "$VM_INPUT_NET> " text
|
read -r -p "$VM_INPUT_NET> " text
|
||||||
[ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON
|
[ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
vm_redir=OFF
|
vm_redir=OFF
|
||||||
vm_ipv4=''
|
vm_ipv4=''
|
||||||
|
common_success
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m操作成功\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
@@ -776,14 +657,11 @@ set_ipv6() {
|
|||||||
[ -z "$ipv6_redir" ] && ipv6_redir=OFF
|
[ -z "$ipv6_redir" ] && ipv6_redir=OFF
|
||||||
[ -z "$ipv6_dns" ] && ipv6_dns=ON
|
[ -z "$ipv6_dns" ] && ipv6_dns=ON
|
||||||
|
|
||||||
line_break
|
top_box "1) $IPV6_REDIR:\t\033[36m$ipv6_redir\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "1) $IPV6_REDIR:\t\033[36m$ipv6_redir\033[0m"
|
|
||||||
[ "$disoverride" != "1" ] && content_line "2) $IPV6_DNS:\t\033[36m$ipv6_dns\033[0m"
|
[ "$disoverride" != "1" ] && content_line "2) $IPV6_DNS:\t\033[36m$ipv6_dns\033[0m"
|
||||||
content_line "0) $COMMON_BACK"
|
btm_box "" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -797,26 +675,18 @@ set_ipv6() {
|
|||||||
fi
|
fi
|
||||||
setconfig ipv6_redir $ipv6_redir
|
setconfig ipv6_redir $ipv6_redir
|
||||||
setconfig ipv6_support "$ipv6_support"
|
setconfig ipv6_support "$ipv6_support"
|
||||||
|
common_success
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m操作成功\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
[ "$ipv6_dns" = OFF ] && ipv6_dns=ON || ipv6_dns=OFF
|
[ "$ipv6_dns" = OFF ] && ipv6_dns=ON || ipv6_dns=OFF
|
||||||
setconfig ipv6_dns "$ipv6_dns"
|
if setconfig ipv6_dns "$ipv6_dns"; then
|
||||||
|
common_success
|
||||||
line_break
|
else
|
||||||
separator_line "="
|
common_failed
|
||||||
content_line "\033[32m操作成功\033[0m"
|
fi
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_MODULE_4_SETBOOT_LOADED" ] && return
|
[ -n "$__IS_MODULE_4_SETBOOT_LOADED" ] && return
|
||||||
__IS_MODULE_4_SETBOOT_LOADED=1
|
__IS_MODULE_4_SETBOOT_LOADED=1
|
||||||
|
|
||||||
|
load_lang setboot
|
||||||
|
|
||||||
allow_autostart() {
|
allow_autostart() {
|
||||||
if [ -f /etc/rc.common ] && [ "$(cat /proc/1/comm)" = "procd" ]; then
|
if [ -f /etc/rc.common ] && [ "$(cat /proc/1/comm)" = "procd" ]; then
|
||||||
/etc/init.d/shellcrash enable
|
/etc/init.d/shellcrash enable
|
||||||
@@ -29,147 +31,119 @@ setboot() {
|
|||||||
[ -z "$start_old" ] && start_old=OFF
|
[ -z "$start_old" ] && start_old=OFF
|
||||||
|
|
||||||
if [ -z "$start_delay" ] || [ "$start_delay" = 0 ]; then
|
if [ -z "$start_delay" ] || [ "$start_delay" = 0 ]; then
|
||||||
delay=未设置
|
delay="$SETBOOT_NOT_SET"
|
||||||
else
|
else
|
||||||
delay="${start_delay}秒"
|
delay="${start_delay}$SETBOOT_SECOND"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_autostart && auto_set="ON" || auto_set="OFF"
|
check_autostart && auto_set="ON" || auto_set="OFF"
|
||||||
[ "${BINDIR}" = "$CRASHDIR" ] && mini_clash=OFF || mini_clash=ON
|
[ "${BINDIR}" = "$CRASHDIR" ] && mini_clash=OFF || mini_clash=ON
|
||||||
[ -z "$network_check" ] && network_check=ON
|
[ -z "$network_check" ] && network_check=ON
|
||||||
line_break
|
comp_box "\033[30;47m$SETBOOT_TITLE\033[0m"
|
||||||
separator_line "="
|
content_line "1) $SETBOOT_ITEM_AUTO \033[36m$(printf '%-4s' "$auto_set")\033[0m"
|
||||||
content_line "\033[30;47m启动设置菜单\033[0m"
|
content_line "2) $SETBOOT_ITEM_OLD \033[36m$(printf '%-4s' "$start_old")\033[0m $SETBOOT_ITEM_OLD_DESC"
|
||||||
separator_line "="
|
content_line "3) $SETBOOT_ITEM_DELAY \033[36m$(printf '%-7s' "$delay")\033[0m $SETBOOT_ITEM_DELAY_DESC"
|
||||||
content_line "1) 开机自启动: \033[36m$(printf '%-4s' "$auto_set")\033[0m"
|
content_line "4) $SETBOOT_ITEM_MINI \033[36m$(printf '%-4s' "$mini_clash")\033[0m $SETBOOT_ITEM_MINI_DESC"
|
||||||
content_line "2) 使用保守模式: \033[36m$(printf '%-4s' "$start_old")\033[0m ———基于定时任务(每分钟检测)"
|
[ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) $SETBOOT_ITEM_MINI_DIR \033[36m${BINDIR}\033[0m"
|
||||||
content_line "3) 设置自启延时: \033[36m$(printf '%-7s' "$delay")\033[0m ———用于解决自启后服务受限"
|
btm_box "6) $SETBOOT_ITEM_NETCHK \033[36m$(printf '%-4s' "$network_check")\033[0m $SETBOOT_ITEM_NETCHK_DESC" \
|
||||||
content_line "4) 启用小闪存模式: \033[36m$(printf '%-4s' "$mini_clash")\033[0m ———用于闪存空间不足的设备"
|
"7) $SETBOOT_VIEW_LOG" \
|
||||||
[ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) 设置小闪存目录: \033[36m${BINDIR}\033[0m"
|
"" \
|
||||||
content_line "6) 自启网络检查: \033[36m$(printf '%-4s' "$network_check")\033[0m ———禁用则跳过自启时网络检查"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) 返回上级菜单"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if check_autostart; then
|
if check_autostart; then
|
||||||
# 禁止自启动:删除各系统的启动项
|
# 禁止自启动:删除各系统的启动项
|
||||||
disable_autostart
|
disable_autostart
|
||||||
content_line "\033[33m已禁止ShellCrash开机自启动!\033[0m"
|
msg_alert "\033[33m$SETBOOT_AUTO_OFF\033[0m"
|
||||||
else
|
else
|
||||||
# 允许自启动:配置各系统的启动项
|
# 允许自启动:配置各系统的启动项
|
||||||
allow_autostart
|
allow_autostart
|
||||||
content_line "\033[32m已设置ShellCrash开机自启动!\033[0m"
|
msg_alert "\033[32m$SETBOOT_AUTO_ON\033[0m"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$start_old" = "OFF" ] >/dev/null 2>&1; then
|
if [ "$start_old" = "OFF" ] >/dev/null 2>&1; then
|
||||||
disable_autostart
|
disable_autostart
|
||||||
start_old=ON
|
start_old=ON
|
||||||
setconfig start_old "$start_old"
|
setconfig start_old "$start_old"
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
content_line "\033[33m改为使用保守模式启动服务!\033[0m"
|
msg_alert "\033[33m$SETBOOT_OLDMODE_ON\033[0m"
|
||||||
else
|
else
|
||||||
if grep -qE 'procd|systemd|s6' /proc/1/comm || rc-status -r >/dev/null 2>&1; then
|
if grep -qE 'procd|systemd|s6' /proc/1/comm || rc-status -r >/dev/null 2>&1; then
|
||||||
"$CRASHDIR"/start.sh cronset "ShellCrash初始化"
|
"$CRASHDIR"/start.sh cronset "$SETBOOT_CRON_INIT"
|
||||||
start_old=OFF
|
start_old=OFF
|
||||||
setconfig start_old "$start_old"
|
setconfig start_old "$start_old"
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
content_line "\033[32m改为使用系统守护进程启动服务!\033[0m"
|
msg_alert "\033[32m$SETBOOT_OLDMODE_OFF\033[0m"
|
||||||
else
|
else
|
||||||
content_line "\033[31m当前设备不支持以其他模式启动!\033[0m"
|
msg_alert "\033[31m$SETBOOT_MODE_UNSUPPORTED\033[0m"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
comp_box "\033[33m$SETBOOT_DELAY_HINT1\033[0m" \
|
||||||
separator_line "="
|
"\033[36m$SETBOOT_DELAY_HINT2\033[0m"
|
||||||
content_line "\033[33m如果你的设备启动后可以正常使用,则无需设置!\033[0m"
|
read -r -p "$SETBOOT_DELAY_INPUT> " sec
|
||||||
content_line "\033[36m推荐设置为30~120秒之间,请根据设备问题自行试验\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入启动延迟时间(0~300秒)> " sec
|
|
||||||
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
case "$sec" in
|
case "$sec" in
|
||||||
[0-9] | [0-9][0-9] | [0-2][0-9][0-9] | 300)
|
[0-9] | [0-9][0-9] | [0-2][0-9][0-9] | 300)
|
||||||
start_delay=$sec
|
start_delay=$sec
|
||||||
setconfig start_delay "$sec"
|
setconfig start_delay "$sec"
|
||||||
content_line "\033[32m设置成功!\033[0m"
|
msg_alert "\033[32m$SETBOOT_SET_OK\033[0m"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
content_line "\033[31m输入有误,或超过300秒,请重新输入!\033[0m"
|
msg_alert "\033[31m$SETBOOT_DELAY_INVALID\033[0m"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
dir_size=$(df "$CRASHDIR" | awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' | grep Ava | awk '{print $2}')
|
dir_size=$(df "$CRASHDIR" | awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' | grep Ava | awk '{print $2}')
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$mini_clash" = "OFF" ]; then
|
if [ "$mini_clash" = "OFF" ]; then
|
||||||
if [ "$dir_size" -gt 20480 ]; then
|
if [ "$dir_size" -gt 20480 ]; then
|
||||||
content_line "\033[33m您的设备空间充足(>20M),无需开启!\033[0m"
|
msg_alert "\033[33m$SETBOOT_MINI_NEEDED_NO\033[0m"
|
||||||
elif [ "$start_old" != 'ON' ] && [ "$(cat /proc/1/comm)" = "systemd" ]; then
|
elif [ "$start_old" != 'ON' ] && [ "$(cat /proc/1/comm)" = "systemd" ]; then
|
||||||
content_line "\033[33m不支持systemd启动模式,请先启用保守模式!\033[0m"
|
msg_alert "\033[33m$SETBOOT_SYSTEMD_WARN\033[0m"
|
||||||
else
|
else
|
||||||
[ "$BINDIR" = "$CRASHDIR" ] && BINDIR="$TMPDIR"
|
[ "$BINDIR" = "$CRASHDIR" ] && BINDIR="$TMPDIR"
|
||||||
content_line "\033[32m已经启用小闪存功能!\033[0m"
|
msg_alert "\033[32m$SETBOOT_MINI_ENABLED\033[0m" \
|
||||||
content_line "如需更换目录,请使用【设置小闪存目录】功能\033[0m"
|
"$SETBOOT_MINI_DIR_HINT\033[0m"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
if [ "$dir_size" -lt 8192 ]; then
|
if [ "$dir_size" -lt 8192 ]; then
|
||||||
content_line "\033[31m您的设备剩余空间不足8M,停用后可能无法正常运行!\033[0m"
|
comp_box "\033[31m$SETBOOT_MINI_DISABLE_WARN\033[0m" \
|
||||||
content_line "是否确认停用此功能:"
|
"$SETBOOT_MINI_DISABLE_CONFIRM"
|
||||||
separator_line "="
|
btm_box "1) $SETBOOT_YES" \
|
||||||
content_line "1) 是"
|
"0) $SETBOOT_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$COMMON_INPUT> " res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
BINDIR="$CRASHDIR"
|
BINDIR="$CRASHDIR"
|
||||||
line_break
|
msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m已经停用小闪存功能!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
rm -rf /tmp/ShellCrash
|
rm -rf /tmp/ShellCrash
|
||||||
BINDIR="$CRASHDIR"
|
BINDIR="$CRASHDIR"
|
||||||
content_line "\033[33m已经停用小闪存功能!\033[0m"
|
msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m"
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
setconfig BINDIR "$BINDIR" "$CRASHDIR"/configs/command.env
|
sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env
|
||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[33m$SETBOOT_BINDIR_HINT1\033[0m" \
|
||||||
separator_line "="
|
"\033[33m$SETBOOT_BINDIR_HINT2\033[0m"
|
||||||
content_line "\033[33m如设置到内存,则每次开机后都自动重新下载相关文件\033[0m"
|
btm_box "1) $SETBOOT_BINDIR_TMP" \
|
||||||
content_line "\033[33m请确保安装源可用裸连,否则会导致启动失败\033[0m"
|
"2) $SETBOOT_BINDIR_USB" \
|
||||||
separator_line "="
|
"3) $SETBOOT_BINDIR_CUSTOM" \
|
||||||
content_line "1) 使用内存(/tmp)"
|
"" \
|
||||||
content_line "2) 选择U盘目录"
|
"0) $COMMON_BACK"
|
||||||
content_line "3) 自定义目录"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -180,27 +154,21 @@ setboot() {
|
|||||||
2)
|
2)
|
||||||
set_usb_dir() {
|
set_usb_dir() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "$SETBOOT_SELECT_INSTALL_DIR"
|
||||||
separator_line "="
|
|
||||||
content_line "请选择安装目录:"
|
|
||||||
separator_line "="
|
|
||||||
du -hL /mnt |
|
du -hL /mnt |
|
||||||
awk '{print NR") "$2" (已占用的储存空间:"$1")"}' |
|
awk '{print NR") "$2" ($SETBOOT_SPACE_USED$1")"}' |
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
|
content_line ""
|
||||||
content_line "0) 返回上级菜单"
|
content_line "0) $COMMON_BACK"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||||
if [ "$num" = 0 ]; then
|
if [ "$num" = 0 ]; then
|
||||||
return 1
|
return 1
|
||||||
elif [ -z "$BINDIR" ]; then
|
elif [ -z "$BINDIR" ]; then
|
||||||
line_break
|
msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误!请重新设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -214,20 +182,13 @@ setboot() {
|
|||||||
3)
|
3)
|
||||||
input_dir() {
|
input_dir() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[36m$SETBOOT_INPUT_CMD\033[0m" \
|
||||||
separator_line "="
|
"$SETBOOT_INPUT_OR_BACK"
|
||||||
content_line "请直接输入命令语句"
|
read -r -p "$SETBOOT_INPUT> " BINDIR
|
||||||
content_line "或输入 0 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " BINDIR
|
|
||||||
if [ "$BINDIR" = 0 ]; then
|
if [ "$BINDIR" = 0 ]; then
|
||||||
return 1
|
return 1
|
||||||
elif [ ! -d "$BINDIR" ]; then
|
elif [ ! -d "$BINDIR" ]; then
|
||||||
line_break
|
msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误!请重新设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
continue
|
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
done
|
done
|
||||||
@@ -239,51 +200,54 @@ setboot() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
setconfig BINDIR "$BINDIR" "$CRASHDIR"/configs/command.env
|
sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
line_break
|
comp_box "\033[33m$SETBOOT_NETCHK_HINT1\033[0m" \
|
||||||
separator_line "="
|
"\033[36m$SETBOOT_NETCHK_HINT2\033[0m" \
|
||||||
content_line "\033[33m如果你的设备启动后可以正常使用,则无需变更设置!\033[0m"
|
"\033[32m$SETBOOT_NETCHK_HINT3\033[0m"
|
||||||
content_line "\033[36m禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!\033[0m"
|
|
||||||
content_line "\033[32m启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
|
|
||||||
if [ "$network_check" = "OFF" ]; then
|
if [ "$network_check" = "OFF" ]; then
|
||||||
content_line "当前\033[33m已禁用\033[0m自启网络检查,是否确认启用:"
|
content_line "$SETBOOT_NETCHK_OFF_CONFIRM"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已启用\033[0m自启网络检查,是否确认禁用:"
|
content_line "$SETBOOT_NETCHK_ON_CONFIRM"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
content_line "1) 是"
|
btm_box "1) $SETBOOT_YES" \
|
||||||
content_line "0) 否,返回上级菜单"
|
"0) $SETBOOT_NO_BACK"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " res
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = '1' ]; then
|
if [ "$res" = '1' ]; then
|
||||||
if [ "$network_check" = "OFF" ]; then
|
if [ "$network_check" = "OFF" ]; then
|
||||||
network_check=ON
|
network_check=ON
|
||||||
else
|
else
|
||||||
network_check=OFF
|
network_check=OFF
|
||||||
fi
|
fi
|
||||||
setconfig network_check "$network_check"
|
if setconfig network_check "$network_check"; then
|
||||||
|
common_success
|
||||||
|
else
|
||||||
|
common_failed
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
7)
|
||||||
|
if [ -s "$TMPDIR"/ShellCrash.log ]; then
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
echo "==========================================================="
|
||||||
content_line "\033[32m操作成功\033[0m"
|
grep -v "$SETBOOT_TASK_WORD" "$TMPDIR"/ShellCrash.log
|
||||||
separator_line "="
|
echo "==========================================================="
|
||||||
sleep 1
|
line_break
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
msg_alert "\033[31m$SETBOOT_LOG_NOT_FOUND\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -8,29 +8,23 @@ __IS_MODULE_5_TASK_LOADED=1
|
|||||||
. "$CRASHDIR"/libs/set_config.sh
|
. "$CRASHDIR"/libs/set_config.sh
|
||||||
. "$CRASHDIR"/libs/set_cron.sh
|
. "$CRASHDIR"/libs/set_cron.sh
|
||||||
|
|
||||||
|
load_lang 5_task
|
||||||
|
|
||||||
# 任务工具
|
# 任务工具
|
||||||
set_cron() {
|
set_cron() {
|
||||||
[ -z "$week" ] && week=*
|
[ -z "$week" ] && week=*
|
||||||
[ -z "$hour" ] && hour=*
|
[ -z "$hour" ] && hour=*
|
||||||
[ -z "$min" ] && min=0
|
[ -z "$min" ] && min=0
|
||||||
line_break
|
comp_box "\033[33m$cron_time\033[0m$TASK5_RUN_TASK\033[36m$task_name\033[0m" \
|
||||||
separator_line "="
|
"" \
|
||||||
content_line "\033[33m$cron_time\033[0m执行任务:\033[36m$task_name\033[0m"
|
"$TASK5_CONFIRM_ADD_CRON"
|
||||||
content_line ""
|
btm_box "1) $TASK5_YES" \
|
||||||
content_line "是否确认添加定时任务:"
|
"0) $TASK5_NO"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " res
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = '1' ]; then
|
if [ "$res" = '1' ]; then
|
||||||
task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name"
|
task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name"
|
||||||
cronset "$cron_time$task_name" "$task_txt"
|
cronset "$cron_time$task_name" "$task_txt"
|
||||||
|
msg_alert -t 0 "$TASK5_TASK_PREFIX$cron_time$task_name$TASK5_TASK_ADDED"
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "任务【$cron_time$task_name】\033[32m已添加!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
unset week hour min
|
unset week hour min
|
||||||
sleep 1
|
sleep 1
|
||||||
@@ -48,7 +42,7 @@ set_service() {
|
|||||||
else
|
else
|
||||||
echo "$CRASHDIR/task/task.sh $2 $3" >>"$task_file"
|
echo "$CRASHDIR/task/task.sh $2 $3" >>"$task_file"
|
||||||
fi
|
fi
|
||||||
content_line "任务【$3】\033[32m添加成功!\033[0m"
|
content_line "【$3】\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
sleep 1
|
sleep 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,44 +51,28 @@ set_service() {
|
|||||||
# 自定义命令添加
|
# 自定义命令添加
|
||||||
task_user_add() {
|
task_user_add() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[33m$TASK5_USER_ADD_HINT1\033[0m" \
|
||||||
separator_line "="
|
"\033[36m$TASK5_USER_ADD_HINT2\033[0m" \
|
||||||
content_line "\033[33m命令可包含空格,请确保命令可执行!\033[0m"
|
"$TASK5_USER_ADD_HINT3\033[32m${CRASHDIR}/task/task.user\033[0m$TASK5_USER_ADD_HINT4"
|
||||||
content_line "\033[36m请勿附带执行条件,执行条件请在命令添加完成后再返回设置!\033[0m"
|
btm_box "\033[36m$TASK5_INPUT_CMD\033[0m" \
|
||||||
content_line "亦可手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m以添加命令"
|
"$TASK5_OR_BACK"
|
||||||
separator_line "-"
|
read -r -p "$TASK5_INPUT> " script
|
||||||
content_line "请直接输入命令语句"
|
|
||||||
content_line "或输入 0 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " script
|
|
||||||
if [ "$script" = 0 ]; then
|
if [ "$script" = 0 ]; then
|
||||||
break
|
break
|
||||||
elif [ -n "$script" ]; then
|
elif [ -n "$script" ]; then
|
||||||
task_command=$script
|
task_command=$script
|
||||||
line_break
|
comp_box "$TASK5_CHECK_INPUT\033[32m$task_command\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "请检查输入:\033[32m$task_command\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
# 获取本任务ID
|
# 获取本任务ID
|
||||||
task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1)
|
task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1)
|
||||||
[ -z "$task_max_id" ] && task_max_id=200
|
[ -z "$task_max_id" ] && task_max_id=200
|
||||||
task_id=$((task_max_id + 1))
|
task_id=$((task_max_id + 1))
|
||||||
read -r -p "请输入任务备注> " txt
|
read -r -p "$TASK5_INPUT_REMARK> " txt
|
||||||
[ -n "$txt" ] && task_name=$txt || task_name=自定义任务$task_id
|
[ -n "$txt" ] && task_name=$txt || task_name="$TASK5_CUSTOM_TASK$task_id"
|
||||||
echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user
|
echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user
|
||||||
|
msg_alert "\033[32m$TASK5_CUSTOM_ADDED\033[0m"
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m自定义任务已添加!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -102,44 +80,27 @@ task_user_add() {
|
|||||||
# 自定义命令删除
|
# 自定义命令删除
|
||||||
task_user_del() {
|
task_user_del() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then
|
if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then
|
||||||
content_line "请输入对应ID移除对应自定义任务(不会影响内置任务)"
|
comp_box "$TASK5_USER_DEL_HINT1" \
|
||||||
content_line "也可以手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m"
|
"$TASK5_USER_DEL_HINT2\033[32m${CRASHDIR}/task/task.user\033[0m"
|
||||||
separator_line "="
|
|
||||||
|
|
||||||
grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null |
|
grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null |
|
||||||
awk -F '#' '{print $1") "$3}' |
|
awk -F '#' '{print $1") "$3}' |
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
|
btm_box "" \
|
||||||
content_line ""
|
"0) $COMMON_BACK"
|
||||||
content_line "0) 返回上级菜单"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
if [ "$num" = 0 ]; then
|
if [ "$num" = 0 ]; then
|
||||||
break
|
break
|
||||||
elif [ -n "$num" ]; then
|
elif [ -n "$num" ]; then
|
||||||
sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null
|
sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null
|
||||||
|
common_success
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m操作成功\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
content_line "\033[33m你暂未添加任何自定义任务\033[0m"
|
msg_alert "\033[33m$TASK5_NO_CUSTOM_TASK\033[0m"
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -148,39 +109,29 @@ task_user_del() {
|
|||||||
# 任务添加
|
# 任务添加
|
||||||
task_add() {
|
task_add() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[36m$TASK5_SELECT_ADD\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[36m请选择需要添加的任务:\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
# 输出任务列表
|
# 输出任务列表
|
||||||
# cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print NR") "$3}'
|
list=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}')
|
||||||
grep -Ev '^(#|$)' "$CRASHDIR/task/task.list" "$CRASHDIR/task/task.user" 2>/dev/null |
|
list_box "$list"
|
||||||
awk -F '#' '{print NR") "$3}' |
|
btm_box "" \
|
||||||
while IFS= read -r line; do
|
"0) $COMMON_BACK"
|
||||||
content_line "$line"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
done
|
|
||||||
content_line ""
|
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
[1-9] | [1-9][0-9])
|
[1-9] | [1-9][0-9])
|
||||||
if [ "$num" -le "$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | wc -l)" ]; then
|
if [ "$num" -le "$(echo "$list" | wc -l)" ]; then
|
||||||
task_id=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}')
|
task_id=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}')
|
||||||
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}')
|
task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}')
|
||||||
task_type
|
task_type
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -189,9 +140,7 @@ task_add() {
|
|||||||
# 任务删除
|
# 任务删除
|
||||||
task_del() {
|
task_del() {
|
||||||
# 删除定时任务
|
# 删除定时任务
|
||||||
croncmd -l >"$TMPDIR"/cron
|
cronset "$1"
|
||||||
sed -i "/$1/d" "$TMPDIR"/cron && croncmd "$TMPDIR"/cron
|
|
||||||
rm -f "$TMPDIR"/cron
|
|
||||||
# 删除条件任务
|
# 删除条件任务
|
||||||
sed -i "/$1/d" "$CRASHDIR"/task/cron 2>/dev/null
|
sed -i "/$1/d" "$CRASHDIR"/task/cron 2>/dev/null
|
||||||
sed -i "/$1/d" "$CRASHDIR"/task/bfstart 2>/dev/null
|
sed -i "/$1/d" "$CRASHDIR"/task/bfstart 2>/dev/null
|
||||||
@@ -202,108 +151,90 @@ task_del() {
|
|||||||
|
|
||||||
# 任务条件选择菜单
|
# 任务条件选择菜单
|
||||||
task_type() {
|
task_type() {
|
||||||
line_break
|
comp_box "$TASK5_SELECT_COND\033[36m【$task_name】\033[0m$TASK5_SELECT_COND2"
|
||||||
separator_line "="
|
btm_box "1) $TASK5_COND_1" \
|
||||||
content_line "请选择任务\033[36m【$task_name】\033[0m执行条件:"
|
"2) $TASK5_COND_2" \
|
||||||
separator_line "="
|
"3) $TASK5_COND_3" \
|
||||||
content_line "1) 定时任务\033[32m每周执行\033[0m"
|
"4) $TASK5_COND_4" \
|
||||||
content_line "2) 定时任务\033[32m每日执行\033[0m"
|
"$TASK5_WARN_LINE1" \
|
||||||
content_line "3) 定时任务\033[32m每小时执行\033[0m"
|
"$TASK5_WARN_LINE2" \
|
||||||
content_line "4) 定时任务\033[32m每分钟执行\033[0m"
|
"$TASK5_WARN_LINE3" \
|
||||||
content_line " - - - - - - - - -\033[31m注意\033[0m- - - - - - - - -"
|
"5) $TASK5_COND_5" \
|
||||||
content_line " 逻辑水平不及格的请勿使用下方触发条件!"
|
"6) $TASK5_COND_6" \
|
||||||
content_line " - - - - - - - - - - - - - - - - - - - -"
|
"7) $TASK5_COND_7" \
|
||||||
content_line "5) 服务\033[33m启动前执行\033[0m"
|
"8) $TASK5_COND_8" \
|
||||||
content_line "6) 服务\033[33m启动后执行\033[0m"
|
"" \
|
||||||
content_line "7) 服务\033[33m运行时每分钟执行\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "8) 防火墙服务\033[33m重启后执行\033[0m"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line ""
|
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
line_break
|
|
||||||
separator_line "="
|
comp_box "$TASK5_WEEK_HINT1" \
|
||||||
content_line "输入 1~7 对应\033[33m每周的指定某天\033[0m运行(7=周日)"
|
"$TASK5_WEEK_HINT2" \
|
||||||
content_line "输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行"
|
"$TASK5_WEEK_HINT3"
|
||||||
content_line "输入 1~5 代表\033[36m周一至周五\033[0m运行"
|
read -r -p "$TASK5_WEEK_INPUT> " week
|
||||||
separator_line "="
|
|
||||||
read -r -p "在每周哪天执行?> " week
|
|
||||||
# week=`echo ${week/7/0}` # 把7换成0
|
# week=`echo ${week/7/0}` # 把7换成0
|
||||||
read -r -p "想在该日的具体哪个小时执行?(0~23)> " hour
|
read -r -p "$TASK5_HOUR_INPUT1> " hour
|
||||||
cron_time="在每周$week的$hour点整"
|
cron_time="$TASK5_CRON_WEEK$week$TASK5_CRON_WEEK2$hour$TASK5_OCLOCK"
|
||||||
# cron_time=`echo ${cron_time/周0/周日}` # 把0换成日
|
# cron_time=`echo ${cron_time/周0/周日}` # 把0换成日
|
||||||
[ -n "$week" ] && [ -n "$hour" ] && set_cron
|
[ -n "$week" ] && [ -n "$hour" ] && set_cron
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
comp_box "$TASK5_DAY_HINT1" \
|
||||||
separator_line "="
|
"$TASK5_DAY_HINT2"
|
||||||
content_line "输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行"
|
read -r -p "$TASK5_HOUR_INPUT2> " hour
|
||||||
content_line "输入 6~18 代表\033[36m早6点至晚18点间每小时\033[0m运行"
|
read -r -p "$TASK5_MIN_INPUT> " min
|
||||||
separator_line "="
|
cron_time="$TASK5_CRON_DAY$hour$TASK5_POINT$min$TASK5_MINUTE"
|
||||||
read -r -p "想在每日的具体哪个小时执行?(0~23)> " hour
|
|
||||||
|
|
||||||
read -r -p "想在具体哪分钟执行?(0~59的整数)> " min
|
|
||||||
cron_time="在每日的$hour点$min分"
|
|
||||||
[ -n "$min" ] && [ -n "$hour" ] && set_cron
|
[ -n "$min" ] && [ -n "$hour" ] && set_cron
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "想每隔多少小时执行一次?(1~23的整数)> " num
|
read -r -p "$TASK5_EVERY_HOUR_INPUT> " num
|
||||||
hour="*/$num"
|
hour="*/$num"
|
||||||
cron_time="每隔$num小时"
|
cron_time="$TASK5_EVERY$num$TASK5_HOUR"
|
||||||
[ -n "$hour" ] && set_cron
|
[ -n "$hour" ] && set_cron
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "想每隔多少分钟执行一次?(1~59的整数)> " num
|
read -r -p "$TASK5_EVERY_MIN_INPUT> " num
|
||||||
min="*/$num"
|
min="*/$num"
|
||||||
cron_time="每隔$num分钟"
|
cron_time="$TASK5_EVERY$num$TASK5_MIN"
|
||||||
[ -n "$min" ] && set_cron
|
[ -n "$min" ] && set_cron
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
set_service bfstart "$task_id" "服务启动前$task_name"
|
set_service bfstart "$task_id" "$TASK5_BFSTART$task_name"
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
set_service afstart "$task_id" "服务启动后$task_name"
|
set_service afstart "$task_id" "$TASK5_AFSTART$task_name"
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
line_break
|
comp_box "$TASK5_RUNNING_HINT1" \
|
||||||
separator_line "="
|
"$TASK5_RUNNING_HINT2"
|
||||||
content_line "输入10即每隔10分钟运行一次,1440即每隔24小时运行一次"
|
read -r -p "$TASK5_RUNNING_INPUT> " num
|
||||||
content_line "大于60分钟的数值将按小时取整,且按当前时区记时"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "想每隔多少分钟执行一次?(1~1440的整数)> " num
|
|
||||||
if [ "$num" -lt 60 ]; then
|
if [ "$num" -lt 60 ]; then
|
||||||
min="$num"
|
min="$num"
|
||||||
cron_time="*/$min * * * *"
|
cron_time="*/$min * * * *"
|
||||||
time_des="$min分钟"
|
time_des="$min$TASK5_MIN"
|
||||||
else
|
else
|
||||||
hour="$((num / 60))"
|
hour="$((num / 60))"
|
||||||
cron_time="0 */$hour * * *"
|
cron_time="0 */$hour * * *"
|
||||||
time_des="$hour小时"
|
time_des="$hour$TASK5_HOUR"
|
||||||
fi
|
fi
|
||||||
[ -n "$cron_time" ] && set_service running "$task_id" "运行时每$time_des$task_name" "$cron_time"
|
[ -n "$cron_time" ] && set_service running "$task_id" "$TASK5_RUNNING_PREFIX$time_des$task_name" "$cron_time"
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
line_break
|
comp_box "$TASK5_AFFW_HINT"
|
||||||
separator_line "="
|
"$TASK5_CONFIRM_CONTINUE"
|
||||||
content_line "该功能会将相关启动代码注入到/etc/init.d/firewall中"
|
btm_box "1) $TASK5_YES" \
|
||||||
content_line "是否确认继续:"
|
"0) $TASK5_NO"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " res
|
||||||
content_line "1) 是"
|
[ "$res" = 1 ] && set_service affirewall "$task_id" "$TASK5_AFFW_PREFIX$task_name"
|
||||||
content_line "0) 否"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
[ "$res" = 1 ] && set_service affirewall "$task_id" "防火墙重启后$task_name"
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
return 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -311,89 +242,65 @@ task_type() {
|
|||||||
# 任务管理列表
|
# 任务管理列表
|
||||||
task_manager() {
|
task_manager() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
# 抽取并生成临时列表
|
# 抽取并生成临时列表
|
||||||
croncmd -l >"$TMPDIR"/task_cronlist
|
cronload >"$TMPDIR"/task_cronlist
|
||||||
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | awk -F ' ' '{print $2" "$3}' >"$TMPDIR"/task_list
|
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list
|
||||||
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >>"$TMPDIR"/task_list
|
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list
|
||||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >>"$TMPDIR"/task_list
|
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "$TASK5_GUARD_WORD" | awk -F '#' '{print "0 '$TASK5_OLD_PREFIX'"$2}' >>"$TMPDIR"/task_list
|
||||||
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
||||||
rm -rf "$TMPDIR"/task_cronlist
|
rm -rf "$TMPDIR"/task_cronlist
|
||||||
# 判断为空则返回
|
# 判断为空则返回
|
||||||
if [ ! -s "$TMPDIR"/task_list ]; then
|
if [ ! -s "$TMPDIR"/task_list ]; then
|
||||||
content_line "\033[31m当前没有可供管理的任务!\033[36m"
|
msg_alert "\033[31m$TASK5_NONE_TO_MANAGE\033[36m"
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
content_line "\033[33m已添加的任务:\033[0m"
|
comp_box "\033[33m$TASK5_ADDED_TASKS\033[0m"
|
||||||
separator_line "="
|
list_box "$(cat "$TMPDIR"/task_list)"
|
||||||
# cat "$TMPDIR"/task_list | awk '{print NR ") " $2}'
|
|
||||||
awk '{print NR ") " $2}' "$TMPDIR/task_list" |
|
|
||||||
while IFS= read -r line; do
|
|
||||||
content_line "$line"
|
|
||||||
done
|
|
||||||
|
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
content_line "a) 清空旧版任务"
|
btm_box "a) $TASK5_CLEAR_OLD" \
|
||||||
content_line "d) 清空任务列表"
|
"d) $TASK5_CLEAR_ALL" \
|
||||||
content_line "0) 返回上级菜单"
|
"" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
task_del "#"
|
task_del "#"
|
||||||
line_break
|
msg_alert "\033[31m$TASK5_OLD_CLEARED\033[36m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m旧版任务已清空!\033[36m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
task_del "task.sh"
|
task_del "task.sh"
|
||||||
line_break
|
msg_alert "\033[31m$TASK5_ALL_CLEARED\033[36m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m全部任务已清空!\033[36m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
[1-9] | [1-9][0-9])
|
[1-9] | [1-9][0-9])
|
||||||
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
||||||
task_id=$(echo "$task_txt" | awk '{print $1}')
|
task_id=$(echo "$task_txt" | awk '{print $1}')
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ "$task_id" = 0 ]; then
|
if [ "$task_id" = 0 ]; then
|
||||||
content_line "旧版任务不支持管理,是否移除:"
|
comp_box "$TASK5_OLD_NOT_SUPPORT"
|
||||||
separator_line "="
|
btm_box "1) $TASK5_YES" \
|
||||||
content_line "1) 是"
|
"0) $TASK5_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$COMMON_INPUT> " res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
cronname=$(echo "$task_txt" | awk -F '-' '{print $2}')
|
cronname=$(echo "$task_txt" | awk -F '-' '{print $2}')
|
||||||
croncmd -l >"$TMPDIR"/conf && sed -i "/$cronname/d" "$TMPDIR"/conf && croncmd "$TMPDIR"/conf
|
cronset "$cronname"
|
||||||
sed -i "/$cronname/d" $clashdir/tools/cron 2>/dev/null
|
sed -i "/$cronname/d" "$CRASHDIR"/task/cron 2>/dev/null
|
||||||
rm -f "$TMPDIR"/conf
|
|
||||||
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
task_des=$(echo "$task_txt" | awk '{print $2}')
|
task_des=$(echo "$task_txt" | awk '{print $2}')
|
||||||
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
|
task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
|
||||||
|
comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m"
|
||||||
content_line "当前任务为:\033[36m$task_des\033[0m"
|
btm_box "1) $TASK5_EDIT_TASK" \
|
||||||
separator_line "="
|
"2) $TASK5_DEL_TASK" \
|
||||||
content_line "1) \033[33m修改\033[0m当前任务"
|
"3) $TASK5_RUN_ONCE" \
|
||||||
content_line "2) \033[31m删除\033[0m当前任务"
|
"4) $TASK5_VIEW_RECORD" \
|
||||||
content_line "3) \033[32m立即执行\033[0m一次"
|
"" \
|
||||||
content_line "4) 查看\033[33m执行记录\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) 返回上级菜单"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
continue
|
continue
|
||||||
@@ -403,41 +310,31 @@ task_manager() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
task_del "$task_des"
|
task_del "$task_des"
|
||||||
line_break
|
common_success
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m操作成功\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
||||||
eval "$task_command" && task_res='执行成功!' || task_res='执行失败!'
|
eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL"
|
||||||
line_break
|
msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des】$task_res\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m任务【$task_des】$task_res\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
|
||||||
if cat "$TMPDIR"/ShellCrash.log | grep -q "$task_name"; then
|
if cat "$TMPDIR"/ShellCrash.log | grep -q "$task_name"; then
|
||||||
|
line_break
|
||||||
|
echo "==========================================================="
|
||||||
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
||||||
|
echo "==========================================================="
|
||||||
else
|
else
|
||||||
separator_line "="
|
msg_alert "\033[31m$TASK5_RECORD_NOT_FOUND\033[0m"
|
||||||
content_line "\033[31m未找到相关执行记录!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
@@ -446,24 +343,22 @@ task_manager() {
|
|||||||
|
|
||||||
# 任务推荐
|
# 任务推荐
|
||||||
task_recom() {
|
task_recom() {
|
||||||
line_break
|
comp_box "\033[36m$TASK_RECOM_TITLE\033[0m" \
|
||||||
separator_line "="
|
"" \
|
||||||
content_line "\033[36m是否启用以下推荐的自动任务配置:\033[0m"
|
"$TASK_RECOM_ITEM_1" \
|
||||||
content_line "每隔10分钟自动保存面板配置"
|
"$TASK_RECOM_ITEM_2" \
|
||||||
content_line "服务启动后自动同步ntp时间"
|
"$TASK_RECOM_ITEM_3"
|
||||||
content_line "在每日的3点0分重启服务"
|
btm_box "1) $TASK5_YES" \
|
||||||
separator_line "="
|
"0) $TASK5_NO"
|
||||||
content_line "1) 是"
|
read -r -p "$COMMON_INPUT>" res
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
set_service running "106" "运行时每10分钟自动保存面板配置" "*/10 * * * *"
|
set_service running "106" "$TASK_RECOM_ITEM_1" "*/10 * * * *"
|
||||||
set_service afstart "107" "服务启动后自动同步ntp时间"
|
set_service afstart "107" "$TASK_RECOM_ITEM_2"
|
||||||
cronset "在每日的3点0分重启服务" "0 3 * * * ${CRASHDIR}/task/task.sh 103 在每日的3点0分重启服务" &&
|
cronset "$TASK_RECOM_ITEM_3" "0 3 * * * ${CRASHDIR}/task/task.sh 103 $TASK_RECOM_ITEM_3" &&
|
||||||
content_line "任务【在每日的3点0分重启服务】\033[32m添加成功!\033[0m"
|
content_line "【$TASK_RECOM_ITEM_3】\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -472,21 +367,18 @@ task_recom() {
|
|||||||
task_menu() {
|
task_menu() {
|
||||||
while true; do
|
while true; do
|
||||||
# 检测并创建自定义任务文件
|
# 检测并创建自定义任务文件
|
||||||
[ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' >"$CRASHDIR"/task/task.user
|
[ -f "$CRASHDIR"/task/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$CRASHDIR"/task/task.user
|
||||||
line_break
|
comp_box "\033[30;47m$TASK5_MENU_TITLE\033[0m"
|
||||||
separator_line "="
|
btm_box "1) $TASK5_MENU_1" \
|
||||||
content_line "\033[30;47m自动任务菜单\033[0m"
|
"2) $TASK5_MENU_2" \
|
||||||
separator_line "="
|
"3) $TASK5_MENU_3" \
|
||||||
content_line "1) 添加\033[32m自动任务\033[0m"
|
"4) $TASK5_MENU_4" \
|
||||||
content_line "2) 管理\033[33m任务列表\033[0m"
|
"5) $TASK5_MENU_5" \
|
||||||
content_line "3) 查看\033[36m任务日志\033[0m"
|
"6) $TASK5_MENU_6" \
|
||||||
content_line "4) 配置\033[36m日志推送\033[0m"
|
"7) $TASK5_MENU_7" \
|
||||||
content_line "5) 添加\033[33m自定义任务\033[0m"
|
"" \
|
||||||
content_line "6) 删除\033[33m自定义任务\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "7) 使用\033[32m推荐设置\033[0m"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -499,21 +391,17 @@ task_menu() {
|
|||||||
rm -rf "$TMPDIR"/task_list
|
rm -rf "$TMPDIR"/task_list
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
|
if cat "$TMPDIR"/ShellCrash.log | grep -q "$TASK5_TASK_GREP"; then
|
||||||
line_break
|
line_break
|
||||||
if cat "$TMPDIR"/ShellCrash.log | grep -q '任务【'; then
|
echo "==========================================================="
|
||||||
cat "$TMPDIR"/ShellCrash.log | grep '任务【'
|
cat "$TMPDIR"/ShellCrash.log | grep "$TASK5_TASK_GREP"
|
||||||
|
echo "==========================================================="
|
||||||
else
|
else
|
||||||
separator_line "="
|
msg_alert "\033[31m$TASK5_LOG_NOT_FOUND\033[0m"
|
||||||
content_line "\033[31m未找到任务相关执行日志!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
msg_alert "\033[36m$TASK5_PUSH_HINT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
@@ -527,7 +415,6 @@ task_menu() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_MODULE_6_CORECONFIG_LOADED" ] && return
|
[ -n "$__IS_MODULE_6_CORECONFIG_LOADED" ] && return
|
||||||
__IS_MODULE_6_CORECONFIG_LOADED=1
|
__IS_MODULE_6_CORECONFIG_LOADED=1
|
||||||
|
|
||||||
|
load_lang 6_core_config
|
||||||
|
|
||||||
if echo "$crashcore" | grep -q 'singbox'; then
|
if echo "$crashcore" | grep -q 'singbox'; then
|
||||||
CONFIG_PATH="$CRASHDIR"/jsons/config.json
|
CONFIG_PATH="$CRASHDIR"/jsons/config.json
|
||||||
CORE_TYPE=singbox
|
CORE_TYPE=singbox
|
||||||
@@ -27,19 +29,20 @@ set_core_config() {
|
|||||||
f2 = substr(f2, 1, 30) "..."
|
f2 = substr(f2, 1, 30) "..."
|
||||||
printf "%-7s \t%-28s\n", f1, f2
|
printf "%-7s \t%-28s\n", f1, f2
|
||||||
}')
|
}')
|
||||||
comp_box "\033[30;47m配置文件管理\033[0m"
|
comp_box "\033[30;47m$CORECFG_TITLE\033[0m"
|
||||||
[ -n "$list" ] && {
|
[ -n "$list" ] && {
|
||||||
content_line "\033[36m输入数字可管理对应提供者\033[0m"
|
content_line "\033[36m$CORECFG_HINT_SELECT_PROVIDER\033[0m"
|
||||||
|
content_line ""
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
}
|
}
|
||||||
content_line "a) \033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)"
|
btm_box "a) $CORECFG_MENU_A" \
|
||||||
content_line "b) \033[36m本地生成配置文件\033[0m(By Providers,推荐!)"
|
"b) $CORECFG_MENU_B" \
|
||||||
content_line "c) \033[33m在线生成配置文件\033[0m(By Subconverter)"
|
"c) $CORECFG_MENU_C" \
|
||||||
content_line "d) \033[31m清空提供者列表\033[0m"
|
"d) $CORECFG_MENU_D" \
|
||||||
content_line "e) \033[36m自定义配置文件\033[0m"
|
"e) $CORECFG_MENU_E" \
|
||||||
|
"" \
|
||||||
common_back
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT_L> " num
|
read -r -p "$COMMON_INPUT_L> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
@@ -58,10 +61,10 @@ set_core_config() {
|
|||||||
. "$CRASHDIR"/menus/providers.sh
|
. "$CRASHDIR"/menus/providers.sh
|
||||||
providers
|
providers
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m仅限Mihomo/singboxr内核使用,请更换内核!\033[0m"
|
msg_alert "\033[33m$CORECFG_CORE_ONLY\033[0m"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_alert "请先添加提供者!"
|
msg_alert "$CORECFG_ADD_PROVIDER_FIRST"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
@@ -69,14 +72,16 @@ set_core_config() {
|
|||||||
. "$CRASHDIR"/menus/subconverter.sh
|
. "$CRASHDIR"/menus/subconverter.sh
|
||||||
subconverter
|
subconverter
|
||||||
else
|
else
|
||||||
msg_alert "请先添加提供者!"
|
msg_alert "$CORECFG_ADD_PROVIDER_FIRST"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
separator_line "="
|
comp_box "\033[33m$CORECFG_CLEAR_WARN\033[0m" \
|
||||||
content_line "\033[33m警告:这将删除所有提供者且无法还原!\033[0m"
|
"" \
|
||||||
separator_line "-"
|
"$CORECFG_CLEAR_CONFIRM"
|
||||||
read -r -p "确认清空提供者列表?(1/0) > " res
|
btm_box "1) $CORECFG_YES" \
|
||||||
|
"0) $CORECFG_NO_BACK"
|
||||||
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
rm -f "$CRASHDIR"/configs/providers.cfg
|
rm -f "$CRASHDIR"/configs/providers.cfg
|
||||||
rm -f "$CRASHDIR"/configs/providers_uri.cfg
|
rm -f "$CRASHDIR"/configs/providers_uri.cfg
|
||||||
@@ -84,21 +89,20 @@ set_core_config() {
|
|||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
e)
|
e)
|
||||||
checkcfg=$(cat $CFG_PATH)
|
checkcfg=$(cat "$CFG_PATH")
|
||||||
. "$CRASHDIR"/menus/override.sh && override
|
. "$CRASHDIR"/menus/override.sh && override
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
checkcfg_new=$(cat $CFG_PATH)
|
checkcfg_new=$(cat "$CFG_PATH")
|
||||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
error_letter
|
error_letter
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# 添加/管理提供者
|
# 添加/管理提供者
|
||||||
setproviders() {
|
setproviders() {
|
||||||
case "$(echo "$@" | cut -d ' ' -f 2)" in
|
case "$(echo "$@" | cut -d ' ' -f 2)" in
|
||||||
@@ -113,7 +117,7 @@ setproviders() {
|
|||||||
include_w=${7#\#}
|
include_w=${7#\#}
|
||||||
;;
|
;;
|
||||||
*://*)
|
*://*)
|
||||||
set -- $line
|
set -- $@
|
||||||
name=$1
|
name=$1
|
||||||
link_uri=$2
|
link_uri=$2
|
||||||
;;
|
;;
|
||||||
@@ -125,49 +129,62 @@ setproviders() {
|
|||||||
[ -z "$interval" ] && interval=3
|
[ -z "$interval" ] && interval=3
|
||||||
[ -z "$interval2" ] && interval2=12
|
[ -z "$interval2" ] && interval2=12
|
||||||
[ -z "$ua" ] && ua='clash.meta'
|
[ -z "$ua" ] && ua='clash.meta'
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
link_info=$(echo "$link$link_uri" | cut -c 1-30)
|
link_info=$(echo "$link$link_uri" | cut -c 1-30)
|
||||||
comp_box "\033[36m支持添加订阅链接/分享链接/本地文件作为提供者\033[0m"
|
comp_box "\033[36m$CORECFG_PROVIDER_SUPPORT\033[0m"
|
||||||
content_line "1) 设置\033[36m名称或代号\033[0m \033[32m$name\033[0m"
|
|
||||||
content_line "2) 设置\033[32m链接或路径\033[0m: \033[36m$link_info...\033[0m"
|
content_line "1) $CORECFG_SET_NAME \033[32m$name\033[0m"
|
||||||
|
content_line "2) $CORECFG_SET_LINK \033[36m$link_info\033[0m"
|
||||||
[ -n "$link" ] &&
|
[ -n "$link" ] &&
|
||||||
content_line "3) 设置\033[33m本地生成覆写\033[0m"
|
content_line "3) $CORECFG_SET_OVERRIDE"
|
||||||
separator_line "-"
|
content_line ""
|
||||||
content_line "a) \033[36m保存此提供者\033[0m"
|
content_line "a) $CORECFG_SAVE_PROVIDER"
|
||||||
[ -n "$link" ] &&
|
content_line "d) $CORECFG_DEL_PROVIDER"
|
||||||
content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件"
|
content_line ""
|
||||||
echo "$link$link_uri" | grep -q '://' &&
|
content_line "\033[36m$CORECFG_MORE_CONFIG_HINT\033[0m"
|
||||||
content_line "c) \033[33m在线生成\033[0m仅包含此提供者的配置文件"
|
[ -n "$2" ] &&
|
||||||
|
content_line "b) $CORECFG_GEN_LOCAL_ONE"
|
||||||
|
echo "$2" | grep -q '://' &&
|
||||||
|
content_line "c) $CORECFG_GEN_ONLINE_ONE"
|
||||||
echo "$link" | grep -q '^http' &&
|
echo "$link" | grep -q '^http' &&
|
||||||
content_line "e) 从此订阅链接直接拉取配置文件(不经过订阅转换)"
|
content_line "e) $CORECFG_GET_ONLINE_DIRECT"
|
||||||
echo "$link" | grep -q '^./providers' &&
|
echo "$link" | grep -q '^./providers' &&
|
||||||
content_line "e) 直接使用此文件作为配置文件(不经过本地生成)"
|
content_line "e) $CORECFG_USE_DIRECT"
|
||||||
content_line "d) \033[31m删除此提供者\033[0m"
|
btm_box "" \
|
||||||
common_back
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应字母或数字> " input
|
read -r -p "$CORECFG_INPUT_ALNUM> " input
|
||||||
case "$input" in
|
case "$input" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
separator_line "="
|
while true; do
|
||||||
content_line "注意:不可重复,不支持纯数字,且不要超过4个汉字!"
|
comp_box "\033[33m$CORECFG_NAME_HINT\033[0m"
|
||||||
separator_line "-"
|
btm_box "\033[36m$CORECFG_INPUT_NAME\033[0m" \
|
||||||
read -r -p "请输入具体名称或代号 > " text
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
text=$(printf "%.12s" "$text" | sed 's/ //g') # 截断12字符+去空格
|
text=$(printf "%.12s" "$text" | sed 's/ //g') # 截断12字符+去空格
|
||||||
if [ -n "$text" ] && [ -z "$(echo "$text" | grep -E '^[0-9]+$')" ] && ! grep -q "^$text " "$CRASHDIR"/configs/providers.cfg; then
|
if [ "$text" = 0 ]; then
|
||||||
|
break
|
||||||
|
elif [ -n "$text" ] && [ -z "$(echo "$text" | grep -E '^[0-9]+$')" ] && ! grep -q "^$text " "$CRASHDIR"/configs/providers.cfg 2>/dev/null; then
|
||||||
name="$text"
|
name="$text"
|
||||||
|
common_success
|
||||||
|
break
|
||||||
else
|
else
|
||||||
error_input
|
error_input
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
separator_line "="
|
while true; do
|
||||||
content_line "\033[33m订阅链接\033[0m: https/http开头的clash配置文件订阅链接"
|
comp_box "$CORECFG_LINK_HINT1" \
|
||||||
content_line "\033[36m分享链接\033[0m: $URI_EXP"
|
"" \
|
||||||
content_line "\033[33m本地文件\033[0m: 必须放在此目录下:\033[32m$CRASHDIR/providers\033[0m"
|
"$CORECFG_LINK_HINT2\n$URI_EXP" \
|
||||||
content_line "\033[36m Base64 \033[0m: 请直接写入本地文件"
|
"" \
|
||||||
separator_line "-"
|
"$CORECFG_LINK_HINT3\033[32m$CRASHDIR/providers\033[0m$CORECFG_LINK_HINT4" \
|
||||||
|
"" \
|
||||||
|
"$CORECFG_LINK_HINT5"
|
||||||
list=$(
|
list=$(
|
||||||
for f in "$CRASHDIR"/providers/*; do
|
for f in "$CRASHDIR"/providers/*; do
|
||||||
[ "$f" = "$CRASHDIR"/providers/uri_group ] && continue
|
[ "$f" = "$CRASHDIR"/providers/uri_group ] && continue
|
||||||
@@ -177,19 +194,26 @@ setproviders() {
|
|||||||
)
|
)
|
||||||
if [ -n "$list" ]; then
|
if [ -n "$list" ]; then
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
separator_line "-"
|
btm_box "" \
|
||||||
read -r -p "请选择对应文件或输入具体链接 > " text
|
"$CORECFG_INPUT0_BACK"
|
||||||
|
read -r -p "$CORECFG_SELECT_FILE_OR_LINK> " text
|
||||||
else
|
else
|
||||||
read -r -p "请输入具体链接 > " text
|
btm_box "\033[36m$CORECFG_INPUT_LINK\033[0m" \
|
||||||
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
fi
|
fi
|
||||||
text=$(echo "$text" | sed 's/ //g') # 去空格
|
text=$(echo "$text" | sed 's/ //g') # 去空格
|
||||||
case "$text" in
|
case "$text" in
|
||||||
|
0)
|
||||||
|
break
|
||||||
|
;;
|
||||||
http*)
|
http*)
|
||||||
# 处理订阅链接
|
# 处理订阅链接
|
||||||
text=$(echo "$text" | sed 's/ *(.*)//g; s/#.*//g') # 处理注释及超链接
|
text=$(echo "$text" | sed 's/ *(.*)//g; s/#.*//g') # 处理注释及超链接
|
||||||
link="$text"
|
link="$text"
|
||||||
link_uri=''
|
link_uri=''
|
||||||
common_success
|
common_success
|
||||||
|
break
|
||||||
;;
|
;;
|
||||||
[1-9] | [1-9][0-9])
|
[1-9] | [1-9][0-9])
|
||||||
# 处理本地文件
|
# 处理本地文件
|
||||||
@@ -199,22 +223,25 @@ setproviders() {
|
|||||||
[ -z "$name" ] && name="_$(printf "%.12s" "$file" | sed 's/ //g')"
|
[ -z "$name" ] && name="_$(printf "%.12s" "$file" | sed 's/ //g')"
|
||||||
link_uri=''
|
link_uri=''
|
||||||
common_success
|
common_success
|
||||||
|
break
|
||||||
else
|
else
|
||||||
errornum
|
errornum
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# 处理分享链接
|
# 处理分享链接
|
||||||
if [ -n "$(echo $text | grep -E "^$URI_EXP")" ]; then
|
if [ -n "$(echo "$text" | grep -E "^$URI_EXP")" ]; then
|
||||||
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
|
link_uri=$(echo "$text" | sed 's/#.*//g') # 删除注释
|
||||||
link=''
|
link=''
|
||||||
[ -z "$name" ] && name=$(printf '%b' "$(printf '%s' "$text" | sed 's/+/ /g; s/%/\\x/g')" | sed 's/.*#//')
|
[ -z "$name" ] && name=$(printf '%b' "$(printf '%s' "$text" | sed 's/+/ /g; s/%/\\x/g')" | sed 's/.*#//')
|
||||||
common_success
|
common_success
|
||||||
|
break
|
||||||
else
|
else
|
||||||
error_input
|
error_input
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
done
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
custproviders
|
custproviders
|
||||||
@@ -229,7 +256,7 @@ setproviders() {
|
|||||||
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
||||||
gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w"
|
gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w"
|
||||||
else
|
else
|
||||||
content_line "\033[31m$请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
@@ -243,24 +270,26 @@ setproviders() {
|
|||||||
# 获取在线文件
|
# 获取在线文件
|
||||||
jump_core_config
|
jump_core_config
|
||||||
else
|
else
|
||||||
content_line "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
if [ -n "$name" ] && [ -n "$link" ]; then
|
if [ -n "$name" ] && [ -n "$link" ]; then
|
||||||
sed -i "/^$name /d" "$CRASHDIR"/configs/providers.cfg
|
sed -i "/^$name /d" "$CRASHDIR"/configs/providers.cfg 2>/dev/null
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
msg_alert "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
|
elif [ -n "$name" ] && [ -n "$link_uri" ]; then
|
||||||
sed -i "/^$name /d" "$CRASHDIR"/configs/providers_uri.cfg
|
sed -i "/^$name /d" "$CRASHDIR"/configs/providers_uri.cfg 2>/dev/null
|
||||||
content_line "\033[32m$COMMON_SUCCESS\033[0m"
|
msg_alert "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
e)
|
e)
|
||||||
if [ -n "$link" ]; then
|
if [ -n "$link" ]; then
|
||||||
content_line "注意:\033[31m此功能不兼容“跳过证书验证”功能\033[0m"
|
comp_box "\033[31m$CORECFG_DANGER1\033[0m" \
|
||||||
content_line "\033[31m请确认你完全理解自己在做什么\033[0m"
|
"\033[31m$CORECFG_DANGER2\033[0m"
|
||||||
read -p "我确认遇到问题可以自行解决(1/0) > " res
|
btm_box "1) $CORECFG_DANGER_CONFIRM" \
|
||||||
|
"0) $COMMON_BACK"
|
||||||
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = "1" ] && {
|
[ "$res" = "1" ] && {
|
||||||
file=$(echo "$CRASHDIR/$link" | sed 's|\./||')
|
file=$(echo "$CRASHDIR/$link" | sed 's|\./||')
|
||||||
if [ -f "$file" ]; then
|
if [ -f "$file" ]; then
|
||||||
@@ -278,21 +307,20 @@ setproviders() {
|
|||||||
jump_core_config
|
jump_core_config
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
content_line "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
content_line "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
error_letter
|
error_letter
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# 保存
|
# 保存
|
||||||
saveproviders() {
|
saveproviders() {
|
||||||
[ -n "$name" ] && {
|
[ -n "$name" ] && {
|
||||||
@@ -306,91 +334,158 @@ saveproviders() {
|
|||||||
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
|
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 本地生成覆写
|
# 本地生成覆写
|
||||||
custproviders() {
|
custproviders() {
|
||||||
while true; do
|
while true; do
|
||||||
separator_line '-'
|
top_box "1) $CORECFG_INTERVAL1\033[47;30m$interval\033[0m $CORECFG_MIN" \
|
||||||
content_line "1) 设置\033[33m健康检查间隔\033[0m:\t\033[47;30m$interval\033[0m"
|
"2) $CORECFG_INTERVAL2\033[47;30m$interval2\033[0m $CORECFG_HOUR"
|
||||||
content_line "2) 设置\033[36m自动更新间隔\033[0m:\t\033[47;30m$interval2\033[0m"
|
|
||||||
echo "$link" | grep -q '^http' &&
|
echo "$link" | grep -q '^http' &&
|
||||||
content_line "3) 设置\033[33m虚拟浏览器UA\033[0m:\t\033[47;30m$ua\033[0m"
|
content_line "3) $CORECFG_SET_UA\033[47;30m$ua\033[0m"
|
||||||
content_line "4) 设置\033[31m排除节点正则\033[0m:\t\033[47;30m$exclude_w\033[0m"
|
btm_box "4) $CORECFG_SET_EXCLUDE\033[47;30m$exclude_w\033[0m" \
|
||||||
content_line "5) 设置\033[32m包含节点正则\033[0m:\t\033[47;30m$include_w\033[0m"
|
"5) $CORECFG_SET_INCLUDE\033[47;30m$include_w\033[0m" \
|
||||||
common_back
|
"" \
|
||||||
read -r -p "请输入对应数字> " num
|
"0) $COMMON_BACK"
|
||||||
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
read -p "请输入健康检查间隔(单位:分钟) > " num
|
while true; do
|
||||||
if [ -n "$num" ]; then
|
comp_box "$CORECFG_CUR_INTERVAL$interval $CORECFG_MIN"
|
||||||
|
btm_box "\033[36m$CORECFG_INPUT_INTERVAL1\033[0m" \
|
||||||
|
"$CORECFG_RESET_INTERVAL1" \
|
||||||
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " num
|
||||||
|
if [ "$num" = "r" ]; then
|
||||||
|
interval=3
|
||||||
|
elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then
|
||||||
interval="$num"
|
interval="$num"
|
||||||
else
|
else
|
||||||
errornum
|
errornum
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
|
common_success
|
||||||
|
break
|
||||||
|
done
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
read -p "请输入自动更新间隔(单位:小时) > " num
|
while true; do
|
||||||
if [ -n "$num" ]; then
|
comp_box "$CORECFG_CUR_INTERVAL$interval $CORECFG_MIN"
|
||||||
|
btm_box "\033[36m$CORECFG_INPUT_INTERVAL2\033[0m" \
|
||||||
|
"$CORECFG_RESET_INTERVAL2" \
|
||||||
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " num
|
||||||
|
if [ "$num" = "r" ]; then
|
||||||
|
interval2=12
|
||||||
|
elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then
|
||||||
interval2="$num"
|
interval2="$num"
|
||||||
else
|
else
|
||||||
errornum
|
errornum
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
|
common_success
|
||||||
|
break
|
||||||
|
done
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
read -p "请输入浏览器UA(输入0重置) > " text
|
if [ -z "$ua" ]; then
|
||||||
|
comp_box "$CORECFG_CUR_UA_NONE"
|
||||||
|
else
|
||||||
|
comp_box "$CORECFG_CUR_UA$ua"
|
||||||
|
fi
|
||||||
|
btm_box "\033[36m$CORECFG_INPUT_UA\033[0m" \
|
||||||
|
"$CORECFG_RESET_UA" \
|
||||||
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
case "$text" in
|
case "$text" in
|
||||||
0)
|
0)
|
||||||
include_w='clash.meta'
|
continue
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
ua='clash.meta'
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
include_w="$text"
|
ua="$text"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
common_success
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
read -p "请输入需要排除的节点关键字(支持正则,不支持空格,输入0删除) > " text
|
if [ -z "$exclude_w" ]; then
|
||||||
|
comp_box "$CORECFG_CUR_EXCLUDE_NONE"
|
||||||
|
else
|
||||||
|
comp_box "$CORECFG_CUR_EXCLUDE$exclude_w"
|
||||||
|
fi
|
||||||
|
|
||||||
|
btm_box "\033[36m$CORECFG_INPUT_EXCLUDE\033[0m" \
|
||||||
|
"$CORECFG_CLEAR_EXCLUDE" \
|
||||||
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
text=$(echo "$text" | sed 's/ //g') # 去空格
|
text=$(echo "$text" | sed 's/ //g') # 去空格
|
||||||
case "$text" in
|
case "$text" in
|
||||||
0)
|
0)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
c)
|
||||||
exclude_w=''
|
exclude_w=''
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
exclude_w="$text"
|
exclude_w="$text"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
common_success
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
read -p "请输入需要筛选使用的节点关键字(支持正则,不支持空格,输入0删除) > " text
|
if [ -z "$include_w" ]; then
|
||||||
|
comp_box "$CORECFG_CUR_INCLUDE_NONE"
|
||||||
|
else
|
||||||
|
comp_box "$CORECFG_CUR_INCLUDE$include_w"
|
||||||
|
fi
|
||||||
|
btm_box "\033[36m$CORECFG_INPUT_INCLUDE\033[0m" \
|
||||||
|
"$CORECFG_CLEAR_INCLUDE" \
|
||||||
|
"$CORECFG_OR_BACK"
|
||||||
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
text=$(echo "$text" | sed 's/ //g') # 去空格
|
text=$(echo "$text" | sed 's/ //g') # 去空格
|
||||||
case "$text" in
|
case "$text" in
|
||||||
0)
|
0)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
c)
|
||||||
include_w=''
|
include_w=''
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
include_w="$text"
|
include_w="$text"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
common_success
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
error_letter
|
error_letter
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# 调用工具在线获取配置文件
|
# 调用工具在线获取配置文件
|
||||||
jump_core_config() {
|
jump_core_config() {
|
||||||
. "$CRASHDIR"/starts/core_config.sh && get_core_config
|
. "$CRASHDIR"/starts/core_config.sh && get_core_config
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
if [ "$inuserguide" != 1 ]; then
|
if [ "$inuserguide" != 1 ]; then
|
||||||
read -p "是否启动服务以使配置文件生效?(1/0) > " res
|
comp_box "$CORECFG_START_APPLY"
|
||||||
[ "$res" = 1 ] && start_core || main_menu
|
btm_box "1) $CORECFG_YES" \
|
||||||
|
"0) $CORECFG_NO"
|
||||||
|
read -r -p "$COMMON_INPUT> " res
|
||||||
|
if [ "$res" = 1 ]; then
|
||||||
|
start_core
|
||||||
|
else
|
||||||
|
main_menu
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -7,41 +7,35 @@ __IS_MODULE_7_GATEWAY_LOADED=1
|
|||||||
. "$GT_CFG_PATH"
|
. "$GT_CFG_PATH"
|
||||||
. "$CRASHDIR"/menus/check_port.sh
|
. "$CRASHDIR"/menus/check_port.sh
|
||||||
. "$CRASHDIR"/libs/gen_base64.sh
|
. "$CRASHDIR"/libs/gen_base64.sh
|
||||||
|
load_lang 7_gateway
|
||||||
|
|
||||||
# 访问与控制主菜单
|
# 访问与控制主菜单
|
||||||
gateway() {
|
gateway() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[30;47m$GW_TITLE\033[0m"
|
||||||
separator_line "="
|
content_line "1) $GW_MENU_FW_WAN \033[32m$fw_wan\033[0m"
|
||||||
content_line "\033[30;47m访问与控制\033[0m"
|
content_line "2) $GW_MENU_TG_BOT \033[32m$bot_tg_service\033[0m"
|
||||||
separator_line "="
|
content_line "3) $GW_MENU_DDNS"
|
||||||
content_line "1) 配置\033[33m公网访问防火墙 \033[32m$fw_wan\033[0m"
|
|
||||||
content_line "2) 配置\033[36mTelegram专属控制机器人 \033[32m$bot_tg_service\033[0m"
|
|
||||||
content_line "3) 配置\033[36mDDNS自动域名\033[0m"
|
|
||||||
[ "$disoverride" != "1" ] && {
|
[ "$disoverride" != "1" ] && {
|
||||||
content_line "4) 自定义\033[33m公网Vmess入站\033[0m节点 \033[32m$vms_service\033[0m"
|
content_line "4) $GW_MENU_VMESS \033[32m$vms_service\033[0m"
|
||||||
content_line "5) 自定义\033[33m公网ShadowSocks入站\033[0m节点 \033[32m$sss_service\033[0m"
|
content_line "5) $GW_MENU_SHADOWSOCKS \033[32m$sss_service\033[0m"
|
||||||
content_line "6) 配置\033[36mTailscale内网穿透\033[0m(限Singbox) \033[32m$ts_service\033[0m"
|
content_line "6) $GW_MENU_TS \033[32m$ts_service\033[0m"
|
||||||
content_line "7) 配置\033[36mWireguard客户端\033[0m(限Singbox) \033[32m$wg_service\033[0m"
|
content_line "7) $GW_MENU_WG \033[32m$wg_service\033[0m"
|
||||||
}
|
}
|
||||||
content_line "0) 返回上级菜单"
|
btm_box "" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then
|
if [ -n "$(pidof CrashCore)" ] && [ "$firewall_mod" = 'iptables' ]; then
|
||||||
content_line "\033[33m公网访问防火墙需要先停止服务\033[0m"
|
comp_box "\033[33m$GW_FW_STOP_WARN\033[0m" \
|
||||||
content_line "是否确认继续:"
|
"$GW_CONFIRM_CONTINUE"
|
||||||
separator_line "="
|
btm_box "1) $GW_YES" \
|
||||||
content_line "1) 是"
|
"0) $GW_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$COMMON_INPUT> " res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
"$CRASHDIR"/start.sh stop && set_fw_wan
|
"$CRASHDIR"/start.sh stop && set_fw_wan
|
||||||
else
|
else
|
||||||
@@ -67,27 +61,18 @@ gateway() {
|
|||||||
if echo "$crashcore" | grep -q 'sing'; then
|
if echo "$crashcore" | grep -q 'sing'; then
|
||||||
set_tailscale
|
set_tailscale
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[33m$crashcore$GW_CORE_UNSUPPORTED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m$crashcore内核暂不支持此功能,请先更换内核!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
if echo "$crashcore" | grep -q 'sing'; then
|
if echo "$crashcore" | grep -q 'sing'; then
|
||||||
set_wireguard
|
set_wireguard
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[33m$crashcore$GW_CORE_UNSUPPORTED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m$crashcore内核暂不支持此功能,请先更换内核!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -99,35 +84,31 @@ set_fw_wan() {
|
|||||||
[ -z "$fw_wan" ] && fw_wan=ON
|
[ -z "$fw_wan" ] && fw_wan=ON
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
content_line "\033[31m注意:\033[0m如在vps运行,还需在vps安全策略对相关端口同时放行"
|
content_line "\033[31m$GW_WARN\033[0m$GW_FW_VPS_HINT"
|
||||||
[ -n "$fw_wan_ports" ] &&
|
[ -n "$fw_wan_ports" ] &&
|
||||||
content_line "当前手动放行端口:\033[36m$fw_wan_ports\033[0m"
|
content_line "$GW_FW_MANUAL_PORTS\033[36m$fw_wan_ports\033[0m"
|
||||||
[ -n "$vms_port$sss_port" ] &&
|
[ -n "$vms_port$sss_port" ] &&
|
||||||
content_line "当前自动放行端口:\033[36m$vms_port $sss_port\033[0m"
|
content_line "$GW_FW_AUTO_PORTS\033[36m$vms_port $sss_port\033[0m"
|
||||||
content_line "默认拦截端口:\033[33m$mix_port,$db_port\033[0m"
|
content_line "$GW_FW_DEFAULT_BLOCK\033[33m$mix_port,$db_port\033[0m"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
content_line "1) 启用/关闭公网防火墙:\033[36m$fw_wan\033[0m"
|
btm_box "1) $GW_FW_TOGGLE\033[36m$fw_wan\033[0m" \
|
||||||
content_line "2) 添加放行端口(可包含默认拦截端口)"
|
"2) $GW_FW_ADD_PORT" \
|
||||||
content_line "3) 移除指定手动放行端口"
|
"3) $GW_FW_REMOVE_PORT" \
|
||||||
content_line "4) 清空全部手动放行端口"
|
"4) $GW_FW_CLEAR_PORTS" \
|
||||||
content_line "0) 返回上级菜单"
|
"" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case $num in
|
case $num in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
if [ "$fw_wan" = ON ]; then
|
if [ "$fw_wan" = ON ]; then
|
||||||
line_break
|
comp_box "$GW_FW_DISABLE_CONFIRM" \
|
||||||
separator_line "="
|
"$GW_FW_DISABLE_RISK"
|
||||||
content_line "是否确认关闭防火墙?"
|
btm_box "1) $GW_YES" \
|
||||||
content_line "这会带来极大的安全隐患!"
|
"0) $GW_NO_BACK"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " res
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
fw_wan=OFF
|
fw_wan=OFF
|
||||||
else
|
else
|
||||||
@@ -139,77 +120,55 @@ set_fw_wan() {
|
|||||||
setconfig fw_wan "$fw_wan"
|
setconfig fw_wan "$fw_wan"
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
|
||||||
port_count=$(echo "$fw_wan_ports" | awk -F',' '{print NF}')
|
port_count=$(echo "$fw_wan_ports" | awk -F',' '{print NF}')
|
||||||
if [ "$port_count" -ge 10 ]; then
|
if [ "$port_count" -ge 10 ]; then
|
||||||
separator_line "="
|
msg_alert "\033[31m$GW_FW_PORT_LIMIT\033[0m"
|
||||||
content_line "\033[31m最多支持设置放行10个端口,请先减少一些!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
read -r -p "请输入要放行的端口号> " port
|
line_break
|
||||||
|
read -r -p "$GW_INPUT_ALLOW_PORT> " port
|
||||||
if echo ",$fw_wan_ports," | grep -q ",$port,"; then
|
if echo ",$fw_wan_ports," | grep -q ",$port,"; then
|
||||||
line_break
|
msg_alert "\033[31m$GW_ERR_DUP_PORT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误!请勿重复添加!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
||||||
line_break
|
msg_alert "\033[31m$GW_ERR_PORT_RANGE\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
fw_wan_ports=$(echo "$fw_wan_ports,$port" | sed "s/^,//")
|
fw_wan_ports=$(echo "$fw_wan_ports,$port" | sed "s/^,//")
|
||||||
setconfig fw_wan_ports "$fw_wan_ports"
|
if setconfig fw_wan_ports "$fw_wan_ports"; then
|
||||||
|
common_success
|
||||||
|
else
|
||||||
|
common_faileds
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[36m$GW_INPUT_REMOVE_PORT\033[0m" \
|
||||||
separator_line "="
|
"$GW_INPUT_0_BACK"
|
||||||
content_line "请直接输入要移除的端口号"
|
read -r -p "$GW_INPUT_PLAIN> " port
|
||||||
content_line "或输入 0 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " port
|
|
||||||
if [ "$port" = 0 ]; then
|
if [ "$port" = 0 ]; then
|
||||||
break
|
break
|
||||||
elif echo ",$fw_wan_ports," | grep -q ",$port,"; then
|
elif echo ",$fw_wan_ports," | grep -q ",$port,"; then
|
||||||
if [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
if [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
||||||
line_break
|
msg_alert "\033[31m$GW_ERR_INPUT\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$GW_ERR_PORT_RANGE\033[0m"
|
||||||
content_line "\033[31m输入错误!\033[0m"
|
|
||||||
content_line "\033[31m请输入正确的数值(1-65535)!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
else
|
else
|
||||||
fw_wan_ports=$(echo ",$fw_wan_ports," | sed "s/,$port//; s/^,//; s/,$//")
|
fw_wan_ports=$(echo ",$fw_wan_ports," | sed "s/,$port//; s/^,//; s/,$//")
|
||||||
setconfig fw_wan_ports "$fw_wan_ports"
|
setconfig fw_wan_ports "$fw_wan_ports"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_ERR_INPUT\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$GW_ERR_PORT_NOT_FOUND\033[0m"
|
||||||
content_line "\033[31m输入错误!\033[0m"
|
|
||||||
content_line "\033[31m请输入已添加过的端口!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
fw_wan_ports=''
|
fw_wan_ports=''
|
||||||
setconfig fw_wan_ports
|
setconfig fw_wan_ports
|
||||||
|
msg_alert "\033[32m$GW_OK\033[0m"
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m操作成功\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -224,22 +183,19 @@ set_bot_tg_config() {
|
|||||||
cat <<EOF
|
cat <<EOF
|
||||||
{
|
{
|
||||||
"commands": [
|
"commands": [
|
||||||
{"command": "$my_alias", "description": "呼出ShellCrash菜单"},
|
{"command": "$my_alias", "description": "$GW_TG_CMD_MENU"},
|
||||||
{"command": "help", "description": "查看帮助"}
|
{"command": "help", "description": "$GW_TG_CMD_HELP"}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
TEXT="已完成Telegram机器人设置!请使用 /$my_alias 呼出功能菜单!"
|
TEXT="$GW_TG_DONE_PREFIX /$my_alias $GW_TG_DONE_SUFFIX"
|
||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
bot_api="https://api.telegram.org/bot$TOKEN"
|
bot_api="https://api.telegram.org/bot$TOKEN"
|
||||||
web_json_post "$bot_api/setMyCommands" "$JSON"
|
web_json_post "$bot_api/setMyCommands" "$JSON"
|
||||||
web_json_post "$bot_api/sendMessage" '{"chat_id":"'"$chat_ID"'","text":"'"$TEXT"'","parse_mode":"Markdown"}'
|
web_json_post "$bot_api/sendMessage" '{"chat_id":"'"$chat_ID"'","text":"'"$TEXT"'","parse_mode":"Markdown"}'
|
||||||
|
|
||||||
line_break
|
comp_box "\033[32m$TEXT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m$TEXT\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set_bot_tg_init() {
|
set_bot_tg_init() {
|
||||||
@@ -258,24 +214,23 @@ set_bot_tg_service() {
|
|||||||
. "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
. "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
||||||
else
|
else
|
||||||
bot_tg_service=ON
|
bot_tg_service=ON
|
||||||
[ -n "$(pidof CrashCore)" ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_start
|
[ -n "$(pidof CrashCore)" ] && . "$CRASHDIR"/menus/bot_tg_service.sh &&
|
||||||
|
bot_tg_start && bot_tg_cron
|
||||||
fi
|
fi
|
||||||
setconfig bot_tg_service "$bot_tg_service"
|
setconfig bot_tg_service "$bot_tg_service"
|
||||||
}
|
}
|
||||||
|
|
||||||
set_bot_tg() {
|
set_bot_tg() {
|
||||||
while true; do
|
while true; do
|
||||||
[ -n "$ts_auth_key" ] && ts_auth_key_info='已设置'
|
[ -n "$ts_auth_key" ] && ts_auth_key_info="$GW_SET"
|
||||||
[ -n "$TG_CHATID" ] && TG_CHATID_info='已绑定'
|
[ -n "$TG_CHATID" ] && TG_CHATID_info="$GW_BOUND"
|
||||||
line_break
|
comp_box "\033[31m$GW_WARN\033[0m$GW_TG_WARN"
|
||||||
separator_line "="
|
btm_box "1) $GW_TG_TOGGLE \033[32m$bot_tg_service\033[0m" \
|
||||||
content_line "\033[31m注意:\033[0m由于网络环境原因,此机器人仅限服务启动时运行!"
|
"2) $GW_TG_BIND \033[32m$TG_CHATID_info\033[0m" \
|
||||||
separator_line "="
|
"3) $GW_TG_MENUPUSH \033[32m$TG_menupush\033[0m" \
|
||||||
content_line "1) 启用/关闭TG-BOT服务 \033[32m$bot_tg_service\033[0m"
|
"" \
|
||||||
content_line "2) TG-BOT绑定设置 \033[32m$TG_CHATID_info\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) 返回上级菜单"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -285,24 +240,16 @@ set_bot_tg() {
|
|||||||
if [ -n "$TG_CHATID" ]; then
|
if [ -n "$TG_CHATID" ]; then
|
||||||
set_bot_tg_service
|
set_bot_tg_service
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_TG_BIND_FIRST\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先绑定TG-BOT!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
if [ -n "$chat_ID" ] && [ -n "$push_TG" ] && [ "$push_TG" != 'publictoken' ]; then
|
if [ -n "$chat_ID" ] && [ -n "$push_TG" ] && [ "$push_TG" != 'publictoken' ]; then
|
||||||
line_break
|
comp_box "$GW_TG_BOUND_DETECTED" \
|
||||||
separator_line "="
|
"$GW_TG_USE_DIRECT"
|
||||||
content_line "检测到已经绑定了TG推送BOT"
|
btm_box "1) $GW_YES" \
|
||||||
content_line "是否直接使用:"
|
"0) $GW_NO"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " res
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
TOKEN="$push_TG"
|
TOKEN="$push_TG"
|
||||||
set_bot_tg_config
|
set_bot_tg_config
|
||||||
@@ -311,9 +258,17 @@ set_bot_tg() {
|
|||||||
fi
|
fi
|
||||||
set_bot_tg_init
|
set_bot_tg_init
|
||||||
;;
|
;;
|
||||||
|
3)
|
||||||
|
if [ "$TG_menupush" = ON ]; then
|
||||||
|
TG_menupush=OFF
|
||||||
|
else
|
||||||
|
TG_menupush=ON
|
||||||
|
fi
|
||||||
|
setconfig TG_menupush "$TG_menupush" "$GT_CFG_PATH"
|
||||||
|
set_bot_tg
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -322,24 +277,21 @@ set_bot_tg() {
|
|||||||
# 自定义入站
|
# 自定义入站
|
||||||
set_vmess() {
|
set_vmess() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[31m$GW_WARN\033[0m" \
|
||||||
separator_line "="
|
"$GW_INBOUND_WARN_PORT" \
|
||||||
content_line "\033[31m注意:\033[0m"
|
"$GW_INBOUND_WARN_BASIC" \
|
||||||
content_line "设置的端口会添加到公网访问防火墙并自动放行!"
|
"\033[31m$GW_INBOUND_WARN_ILLEGAL\033[0m"
|
||||||
content_line "脚本只提供基础功能,更多需求请用自定义配置文件功能!"
|
content_line "1) \033[32m$GW_VMS_TOGGLE\033[0m \033[32m$vms_service\033[0m"
|
||||||
content_line "\033[31m切勿用于搭建违法翻墙节点,违者后果自负!\033[0m"
|
content_line "2) $GW_SET_LISTEN_PORT \033[36m$vms_port\033[0m"
|
||||||
separator_line "="
|
content_line "3) $GW_SET_WSPATH \033[33m$vms_ws_path\033[0m"
|
||||||
content_line "1) \033[32m启用/关闭\033[0mVmess入站 \033[32m$vms_service\033[0m"
|
content_line "4) $GW_SET_UUID \033[36m$vms_uuid\033[0m"
|
||||||
content_line "2) 设置\033[36m监听端口\033[0m: \033[36m$vms_port\033[0m"
|
content_line "5) $GW_GEN_RANDOM_KEY"
|
||||||
content_line "3) 设置\033[33mWS-path(可选)\033[0m: \033[33m$vms_ws_path\033[0m"
|
|
||||||
content_line "4) 设置\033[36m秘钥-uuid\033[0m: \033[36m$vms_uuid\033[0m"
|
|
||||||
content_line "5) 一键生成\033[32m随机秘钥\033[0m"
|
|
||||||
gen_base64 1 >/dev/null 2>&1 &&
|
gen_base64 1 >/dev/null 2>&1 &&
|
||||||
content_line "6) 设置\033[36m混淆host(可选)\033[0m: \033[33m$vms_host\033[0m"
|
content_line "6) $GW_SET_OBFS_HOST \033[33m$vms_host\033[0m"
|
||||||
content_line "7) 一键生成\033[32m分享链接\033[0m"
|
btm_box "7) $GW_GEN_SHARE_LINK" \
|
||||||
content_line "0) 返回上级菜单"
|
"" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -353,30 +305,31 @@ set_vmess() {
|
|||||||
vms_service=ON
|
vms_service=ON
|
||||||
setconfig vms_service "$vms_service"
|
setconfig vms_service "$vms_service"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_FILL_REQUIRED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先完成必选设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入端口号(输入0删除)> " text
|
read -r -p "$GW_INPUT_PORT_DEL0> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_port=''
|
vms_port=''
|
||||||
setconfig vms_port "" "$GT_CFG_PATH"
|
setconfig vms_port "" "$GT_CFG_PATH"
|
||||||
elif check_port "$text"; then
|
elif check_port "$text"; then
|
||||||
|
if echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$text|"; then
|
||||||
|
msg_alert "\033[31m$CHECK_PORT_DUP_ERR\033[0m"
|
||||||
|
sleep 1
|
||||||
|
else
|
||||||
vms_port="$text"
|
vms_port="$text"
|
||||||
setconfig vms_port "$text" "$GT_CFG_PATH"
|
setconfig vms_port "$text" "$GT_CFG_PATH"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入ws-path路径(输入0删除)> " text
|
read -r -p "$GW_INPUT_WSPATH> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_ws_path=''
|
vms_ws_path=''
|
||||||
setconfig vms_ws_path "" "$GT_CFG_PATH"
|
setconfig vms_ws_path "" "$GT_CFG_PATH"
|
||||||
@@ -384,16 +337,12 @@ set_vmess() {
|
|||||||
vms_ws_path="$text"
|
vms_ws_path="$text"
|
||||||
setconfig vms_ws_path "$text" "$GT_CFG_PATH"
|
setconfig vms_ws_path "$text" "$GT_CFG_PATH"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_ERR_WSPATH\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m不是合法的path路径,必须以【/】开头!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入UUID(输入0删除)> " text
|
read -r -p "$GW_INPUT_UUID> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_uuid=''
|
vms_uuid=''
|
||||||
setconfig vms_uuid "" "$GT_CFG_PATH"
|
setconfig vms_uuid "" "$GT_CFG_PATH"
|
||||||
@@ -401,11 +350,7 @@ set_vmess() {
|
|||||||
vms_uuid="$text"
|
vms_uuid="$text"
|
||||||
setconfig vms_uuid "$text" "$GT_CFG_PATH"
|
setconfig vms_uuid "$text" "$GT_CFG_PATH"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_ERR_UUID\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m不是合法的UUID格式,请重新输入或使用随机生成功能!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
@@ -415,7 +360,7 @@ set_vmess() {
|
|||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入免流混淆host(输入0删除)> " text
|
read -r -p "$GW_INPUT_OBFS_HOST> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_host=''
|
vms_host=''
|
||||||
setconfig vms_host "" "$GT_CFG_PATH"
|
setconfig vms_host "" "$GT_CFG_PATH"
|
||||||
@@ -426,7 +371,7 @@ set_vmess() {
|
|||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入本机公网IP(4/6)或域名> " host_wan
|
read -r -p "$GW_INPUT_HOST> " host_wan
|
||||||
if [ -n "$host_wan" ] && [ -n "$vms_port" ] && [ -n "$vms_uuid" ]; then
|
if [ -n "$host_wan" ] && [ -n "$vms_port" ] && [ -n "$vms_uuid" ]; then
|
||||||
[ -n "$vms_ws_path" ] && vms_net=ws
|
[ -n "$vms_ws_path" ] && vms_net=ws
|
||||||
vms_json=$(
|
vms_json=$(
|
||||||
@@ -447,18 +392,14 @@ EOF
|
|||||||
)
|
)
|
||||||
vms_link="vmess://$(gen_base64 "$vms_json")"
|
vms_link="vmess://$(gen_base64 "$vms_json")"
|
||||||
line_break
|
line_break
|
||||||
echo -e "你的分享链接是(请勿随意分享给他人):\n\033[32m$vms_link\033[0m"
|
echo -e "$GW_SHARE_LINK_HINT\n\033[32m$vms_link\033[0m"
|
||||||
else
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先完成必选设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
|
||||||
sleep 1
|
sleep 1
|
||||||
|
else
|
||||||
|
msg_alert "\033[31m$GW_FILL_REQUIRED\033[0m"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -466,22 +407,19 @@ EOF
|
|||||||
|
|
||||||
set_shadowsocks() {
|
set_shadowsocks() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[31m$GW_WARN\033[0m" \
|
||||||
separator_line "="
|
"$GW_INBOUND_WARN_PORT" \
|
||||||
content_line "\033[31m注意:\033[0m"
|
"$GW_INBOUND_WARN_BASIC" \
|
||||||
content_line "设置的端口会添加到公网访问防火墙并自动放行!"
|
"\033[31m$GW_INBOUND_WARN_ILLEGAL\033[0m"
|
||||||
content_line "脚本只提供基础功能,更多需求请用自定义配置文件功能!"
|
content_line "1) \033[32m$GW_SS_TOGGLE\033[0m \033[32m$sss_service\033[0m"
|
||||||
content_line "\033[31m切勿用于搭建违法翻墙节点,违者后果自负!\033[0m"
|
content_line "2) $GW_SET_LISTEN_PORT \033[36m$sss_port\033[0m"
|
||||||
separator_line "="
|
content_line "3) $GW_SS_SELECT_CIPHER \033[33m$sss_cipher\033[0m"
|
||||||
content_line "1) \033[32m启用/关闭\033[0mShadowSocks入站 \033[32m$sss_service\033[0m"
|
content_line "4) $GW_SS_SET_PWD \033[36m$sss_pwd\033[0m"
|
||||||
content_line "2) 设置\033[36m监听端口\033[0m: \033[36m$sss_port\033[0m"
|
|
||||||
content_line "3) 选择\033[33m加密协议\033[0m: \033[33m$sss_cipher\033[0m"
|
|
||||||
content_line "4) 设置\033[36mpassword\033[0m: \033[36m$sss_pwd\033[0m"
|
|
||||||
gen_base64 1 >/dev/null 2>&1 &&
|
gen_base64 1 >/dev/null 2>&1 &&
|
||||||
content_line "5) 一键生成分享链接"
|
content_line "5) $GW_GEN_SHARE_LINK"
|
||||||
content_line "0) 返回上级菜单"
|
btm_box "" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -495,48 +433,45 @@ set_shadowsocks() {
|
|||||||
sss_service=ON
|
sss_service=ON
|
||||||
setconfig sss_service "$sss_service"
|
setconfig sss_service "$sss_service"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_FILL_REQUIRED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先完成必选设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入端口号(输入0删除)> " text
|
read -r -p "$GW_INPUT_PORT_DEL0> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
sss_port=''
|
sss_port=''
|
||||||
setconfig sss_port "" "$GT_CFG_PATH"
|
setconfig sss_port "" "$GT_CFG_PATH"
|
||||||
elif check_port "$text"; then
|
elif check_port "$text"; then
|
||||||
|
if echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$text|"; then
|
||||||
|
msg_alert "\033[31m$CHECK_PORT_DUP_ERR\033[0m"
|
||||||
|
sleep 1
|
||||||
|
else
|
||||||
sss_port="$text"
|
sss_port="$text"
|
||||||
setconfig sss_port "$text" "$GT_CFG_PATH"
|
setconfig sss_port "$text" "$GT_CFG_PATH"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
comp_box "$GW_SS_SELECT_CIPHER"
|
||||||
separator_line "="
|
|
||||||
content_line "请选择要使用的加密协议:"
|
|
||||||
separator_line "="
|
|
||||||
content_line "1) \033[32mxchacha20-ietf-poly1305\033[0m"
|
content_line "1) \033[32mxchacha20-ietf-poly1305\033[0m"
|
||||||
content_line "2) \033[32mchacha20-ietf-poly1305\033[0m"
|
content_line "2) \033[32mchacha20-ietf-poly1305\033[0m"
|
||||||
content_line "3) \033[32maes-128-gcm\033[0m"
|
content_line "3) \033[32maes-128-gcm\033[0m"
|
||||||
content_line "4) \033[32maes-256-gcm\033[0m"
|
content_line "4) \033[32maes-256-gcm\033[0m"
|
||||||
gen_random 1 >/dev/null && {
|
gen_random 1 >/dev/null && {
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line " - - - - - - -\033[31m注意\033[0m- - - - - - -"
|
content_line "$GW_SS_2022_NOTE_HEADER"
|
||||||
content_line " 2022系列加密必须使用随机生成的password!"
|
content_line "$GW_SS_2022_REQUIRE"
|
||||||
content_line "5) \033[32m2022-blake3-chacha20-poly1305\033[0m"
|
content_line "5) \033[32m2022-blake3-chacha20-poly1305\033[0m"
|
||||||
content_line "6) \033[32m2022-blake3-aes-128-gcm\033[0m"
|
content_line "6) \033[32m2022-blake3-aes-128-gcm\033[0m"
|
||||||
content_line "7) \033[32m2022-blake3-aes-256-gcm\033[0m"
|
content_line "7) \033[32m2022-blake3-aes-256-gcm\033[0m"
|
||||||
}
|
}
|
||||||
content_line ""
|
btm_box "" \
|
||||||
content_line "0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " num
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0) ;;
|
0) ;;
|
||||||
1)
|
1)
|
||||||
@@ -569,43 +504,35 @@ set_shadowsocks() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
setconfig sss_cipher "$sss_cipher" "$GT_CFG_PATH"
|
setconfig sss_cipher "$sss_cipher" "$GT_CFG_PATH"
|
||||||
setconfig sss_pwd "$sss_pwd" "$GT_CFG_PATH"
|
setconfig sss_pwd "$sss_pwd" "$GT_CFG_PATH"
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
|
||||||
if echo "$sss_cipher" | grep -q '2022-blake3'; then
|
if echo "$sss_cipher" | grep -q '2022-blake3'; then
|
||||||
separator_line "="
|
msg_alert "\033[31m$GW_WARN\033[0m$GW_SS_2022_PASSWORD_ONLY"
|
||||||
content_line "\033[31m注意:\033[0m2022系列加密必须使用脚本随机生成的password!"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
else
|
else
|
||||||
read -r -p "请输入秘钥(输入0删除)> " text
|
line_break
|
||||||
|
read -r -p "$GW_INPUT_PWD_DEL0> " text
|
||||||
[ "$text" = 0 ] && sss_pwd='' || sss_pwd="$text"
|
[ "$text" = 0 ] && sss_pwd='' || sss_pwd="$text"
|
||||||
setconfig sss_pwd "$text" "$GT_CFG_PATH"
|
setconfig sss_pwd "$text" "$GT_CFG_PATH"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入本机公网IP(4/6)或域名> " text
|
read -r -p "$GW_INPUT_HOST> " text
|
||||||
if [ -n "$text" ] && [ -n "$sss_port" ] && [ -n "$sss_cipher" ] && [ -n "$sss_pwd" ]; then
|
if [ -n "$text" ] && [ -n "$sss_port" ] && [ -n "$sss_cipher" ] && [ -n "$sss_pwd" ]; then
|
||||||
ss_link="ss://$(gen_base64 "$sss_cipher":"$sss_pwd")@${text}:${sss_port}#ShellCrash_ss_in"
|
ss_link="ss://$(gen_base64 "$sss_cipher":"$sss_pwd")@${text}:${sss_port}#ShellCrash_ss_in"
|
||||||
line_break
|
line_break
|
||||||
echo -e "你的分享链接是(请勿随意分享给他人):\n\033[32m$ss_link\033[0m"
|
echo -e "$GW_SHARE_LINK_HINT\n\033[32m$ss_link\033[0m"
|
||||||
else
|
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先完成必选设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
|
||||||
sleep 1
|
sleep 1
|
||||||
|
else
|
||||||
|
msg_alert "\033[31m$GW_FILL_REQUIRED\033[0m"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -615,21 +542,18 @@ set_shadowsocks() {
|
|||||||
set_tailscale() {
|
set_tailscale() {
|
||||||
while true; do
|
while true; do
|
||||||
[ -n "$ts_auth_key" ] && ts_auth_key_info='*********'
|
[ -n "$ts_auth_key" ] && ts_auth_key_info='*********'
|
||||||
line_break
|
comp_box "\033[31m$GW_WARN\033[0m$GW_TS_WARN" \
|
||||||
separator_line "="
|
"$GW_TS_KEY_URL" \
|
||||||
content_line "\033[31m注意:\033[0m脚本默认内核为了节约内存没有编译Tailscale模块\n如需使用请先前往自定义内核更新完整版内核文件!"
|
"$GW_TS_ALLOW_URL" \
|
||||||
content_line "创建秘钥:\033[32;4mhttps://login.tailscale.com/admin/settings/keys\033[0m"
|
"$GW_TS_SUBNET_EXIT_HINT"
|
||||||
content_line "访问非本机目标需允许通告:\033[32;4mhttps://login.tailscale.com\033[0m"
|
btm_box "1) \033[32m$GW_TS_TOGGLE\033[0m \033[32m$ts_service\033[0m" \
|
||||||
content_line "访问非本机目标需在终端设置使用Subnet或EXIT-NODE模式"
|
"2) $GW_TS_SET_AUTHKEY $ts_auth_key_info" \
|
||||||
separator_line "="
|
"3) $GW_TS_SUBNET \033[36m$ts_subnet\033[0m" \
|
||||||
content_line "1) \033[32m启用/关闭\033[0mTailscale服务 \033[32m$ts_service\033[0m"
|
"4) $GW_TS_EXIT_NODE \033[36m$ts_exit_node\033[0m" \
|
||||||
content_line "2) 设置\033[36m秘钥\033[0m(Auth Key) $ts_auth_key_info"
|
"5) $GW_TS_HOSTNAME $ts_hostname" \
|
||||||
content_line "3) 通告路由\033[33m内网地址\033[0m(Subnet) \033[36m$ts_subnet\033[0m"
|
"" \
|
||||||
content_line "4) 通告路由\033[31m全部流量\033[0m(EXIT-NODE) \033[36m$ts_exit_node\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "5) 设置\033[36m设备名称\033[0m(可选) $ts_hostname"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -639,16 +563,12 @@ set_tailscale() {
|
|||||||
[ "$ts_service" = ON ] && ts_service=OFF || ts_service=ON
|
[ "$ts_service" = ON ] && ts_service=OFF || ts_service=ON
|
||||||
setconfig ts_service "$ts_service"
|
setconfig ts_service "$ts_service"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_TS_SET_KEY_FIRST\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先设置秘钥!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入秘钥(输入0删除)> " text
|
read -r -p "$GW_TS_INPUT_KEY> " text
|
||||||
[ "$text" = 0 ] && unset ts_auth_key ts_auth_key_info || ts_auth_key="$text"
|
[ "$text" = 0 ] && unset ts_auth_key ts_auth_key_info || ts_auth_key="$text"
|
||||||
setconfig ts_auth_key "$ts_auth_key" "$GT_CFG_PATH"
|
setconfig ts_auth_key "$ts_auth_key" "$GT_CFG_PATH"
|
||||||
;;
|
;;
|
||||||
@@ -661,28 +581,20 @@ set_tailscale() {
|
|||||||
ts_exit_node=false
|
ts_exit_node=false
|
||||||
else
|
else
|
||||||
ts_exit_node=true
|
ts_exit_node=true
|
||||||
line_break
|
msg_alert -t 3 "\033[31m$GW_WARN\033[0m$GW_TS_EXITNODE_WARN"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m注意:\033[0m目前exitnode的官方DNS有bug,要么启用域名嗅探并禁用TailscaleDNS,\n要么必须在网页设置Globalname servers为分配的本设备子网IP且启用override"
|
|
||||||
separator_line "="
|
|
||||||
sleep 3
|
|
||||||
fi
|
fi
|
||||||
setconfig ts_exit_node "$ts_exit_node" "$GT_CFG_PATH"
|
setconfig ts_exit_node "$ts_exit_node" "$GT_CFG_PATH"
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
line_break
|
comp_box "\033[36m$GW_TS_INPUT_NAME\033[0m" \
|
||||||
separator_line "="
|
"$GW_INPUT_0_BACK"
|
||||||
content_line "请直接输入希望在Tailscale显示的设备名称"
|
read -r -p "$GW_INPUT_PLAIN> " ts_hostname
|
||||||
content_line "或输入 0 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " ts_hostname
|
|
||||||
if [ "$ts_hostname" != 0 ]; then
|
if [ "$ts_hostname" != 0 ]; then
|
||||||
setconfig ts_hostname "$ts_hostname" "$GT_CFG_PATH"
|
setconfig ts_hostname "$ts_hostname" "$GT_CFG_PATH"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -708,25 +620,20 @@ set_wireguard() {
|
|||||||
else
|
else
|
||||||
unset wgpsk_key_info
|
unset wgpsk_key_info
|
||||||
fi
|
fi
|
||||||
|
comp_box "\033[31m$GW_WARN\033[0m$GW_WG_WARN"
|
||||||
line_break
|
btm_box "1) \033[32m$GW_WG_TOGGLE\033[0m \033[32m$wg_service\033[0m" \
|
||||||
separator_line "="
|
"" \
|
||||||
content_line "\033[31m注意:\033[0m脚本默认内核为了节约内存没有编译WireGuard模块\n如需使用请先前往自定义内核更新完整版内核文件!"
|
"2) $GW_WG_SET_ENDPOINT \033[36m$wg_server\033[0m" \
|
||||||
separator_line "="
|
"3) $GW_WG_SET_ENDPOINT_PORT \033[36m$wg_port\033[0m" \
|
||||||
content_line "1) \033[32m启用/关闭\033[0mWireguard服务 \033[32m$wg_service\033[0m"
|
"4) $GW_WG_SET_PUBLIC \033[36m$wgp_key_info\033[0m" \
|
||||||
content_line ""
|
"5) $GW_WG_SET_PRESHARED \033[36m$wgpsk_key_info\033[0m" \
|
||||||
content_line "2) 设置\033[36mEndpoint地址\033[0m: \033[36m$wg_server\033[0m"
|
"" \
|
||||||
content_line "3) 设置\033[36mEndpoint端口\033[0m: \033[36m$wg_port\033[0m"
|
"6) $GW_WG_SET_PRIVATE \033[33m$wgv_key_info\033[0m" \
|
||||||
content_line "4) 设置\033[36m公钥-PublicKey\033[0m: \033[36m$wgp_key_info\033[0m"
|
"7) $GW_WG_SET_IPV4 \033[33m$wg_ipv4\033[0m" \
|
||||||
content_line "5) 设置\033[36m密钥-PresharedKey\033[0m: \033[36m$wgpsk_key_info\033[0m"
|
"8) $GW_WG_SET_IPV6 \033[33m$wg_ipv6\033[0m" \
|
||||||
content_line ""
|
"" \
|
||||||
content_line "6) 设置\033[33m私钥-PrivateKey\033[0m: \033[33m$wgv_key_info\033[0m"
|
"0) $COMMON_BACK"
|
||||||
content_line "7) 设置\033[33m组网IPV4地址\033[0m: \033[33m$wg_ipv4\033[0m"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line "8) 可选\033[33m组网IPV6地址\033[0m: \033[33m$wg_ipv6\033[0m"
|
|
||||||
content_line ""
|
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -736,16 +643,12 @@ set_wireguard() {
|
|||||||
[ "$wg_service" = ON ] && wg_service=OFF || wg_service=ON
|
[ "$wg_service" = ON ] && wg_service=OFF || wg_service=ON
|
||||||
setconfig wg_service "$wg_service"
|
setconfig wg_service "$wg_service"
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$GW_FILL_REQUIRED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m请先完成必选设置!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
[1-8])
|
[1-8])
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入相应内容(回车或0删除)> " text
|
read -r -p "$GW_INPUT_TEXT_DEL0> " text
|
||||||
[ "$text" = 0 ] && text=''
|
[ "$text" = 0 ] && text=''
|
||||||
case "$num" in
|
case "$num" in
|
||||||
2)
|
2)
|
||||||
@@ -780,7 +683,6 @@ set_wireguard() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ __IS_MODULE_8_TOOLS_LOADED=1
|
|||||||
|
|
||||||
. "$CRASHDIR"/libs/logger.sh
|
. "$CRASHDIR"/libs/logger.sh
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
load_lang 8_tools
|
||||||
|
|
||||||
stop_iptables() {
|
stop_iptables() {
|
||||||
iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22 >/dev/null 2>&1
|
iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22 >/dev/null 2>&1
|
||||||
@@ -14,80 +15,58 @@ stop_iptables() {
|
|||||||
|
|
||||||
ssh_tools() {
|
ssh_tools() {
|
||||||
while true; do
|
while true; do
|
||||||
[ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=禁止 || ssh_ol=开启
|
[ -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
|
[ -z "$ssh_port" ] && ssh_port=10022
|
||||||
line_break
|
comp_box "\033[33m$TOOLS_SSH_ONLY_OPENWRT\033[0m" \
|
||||||
separator_line "="
|
"\033[31m$TOOLS_SSH_UNSUPPORTED_SYSTEM\033[0m"
|
||||||
content_line "\033[33m此功能仅针对使用Openwrt系统的设备生效,且不依赖服务\033[0m"
|
btm_box "${TOOLS_SSH_PORT_ITEM_PREFIX}\033[36m$ssh_port\033[0m${TOOLS_SSH_PORT_ITEM_SUFFIX}" \
|
||||||
content_line "\033[31m本功能不支持红米AX6S等镜像化系统设备,请勿尝试!\033[0m"
|
"$TOOLS_SSH_PASS_ITEM" \
|
||||||
separator_line "="
|
"${TOOLS_SSH_TOGGLE_ITEM_PREFIX}\033[33m$ssh_ol\033[0m${TOOLS_SSH_TOGGLE_ITEM_SUFFIX}" \
|
||||||
content_line "1) \033[32m修改\033[0m外网访问端口:\033[36m$ssh_port\033[0m"
|
"" \
|
||||||
content_line "2) \033[32m修改\033[0mSSH访问密码(请连续输入2次后回车)"
|
"0) $COMMON_BACK \033[0m"
|
||||||
content_line "3) \033[33m$ssh_ol\033[0m外网访问SSH"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line ""
|
|
||||||
content_line "0) 返回上级菜单 \033[0m"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入端口号(1000-65535)> " num
|
read -r -p "$TOOLS_PROMPT_PORT" num
|
||||||
if [ -z "$num" ]; then
|
if [ -z "$num" ]; then
|
||||||
errornum
|
errornum
|
||||||
elif [ "$num" -gt 65535 ] || [ "$num" -le 999 ]; then
|
elif [ "$num" -gt 65535 ] || [ "$num" -le 999 ]; then
|
||||||
line_break
|
msg_alert "\033[31m$TOOLS_ERR_PORT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误!请输入正确的数值(1000-65535)!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
elif [ -n "$(netstat -ntul | grep :$num)" ]; then
|
elif [ -n "$(netstat -ntul | grep :$num)" ]; then
|
||||||
line_break
|
msg_alert "\033[31m$TOOLS_ERR_PORT_OCCUPIED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
ssh_port=$num
|
ssh_port=$num
|
||||||
setconfig ssh_port "$ssh_port"
|
setconfig ssh_port "$ssh_port"
|
||||||
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
||||||
stop_iptables
|
stop_iptables
|
||||||
|
|
||||||
line_break
|
msg_alert "\033[32m$TOOLS_SSH_SET_OK"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m设置成功,请重新开启外网访问SSH功能!"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
passwd
|
passwd
|
||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
if [ "$ssh_ol" = "$TOOLS_SSH_ENABLE" ]; then
|
||||||
if [ "$ssh_ol" = "开启" ]; then
|
|
||||||
iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22
|
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
|
[ -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
|
echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
||||||
[ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
[ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
||||||
separator_line "="
|
comp_box "$TOOLS_SSH_ENABLED"
|
||||||
content_line "已开启外网访问SSH功能!"
|
|
||||||
separator_line "="
|
|
||||||
else
|
else
|
||||||
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
||||||
stop_iptables
|
stop_iptables
|
||||||
|
comp_box "$TOOLS_SSH_DISABLED"
|
||||||
separator_line "="
|
|
||||||
content_line "已禁止外网访问SSH!"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -97,29 +76,24 @@ ssh_tools() {
|
|||||||
tools() {
|
tools() {
|
||||||
while true; do
|
while true; do
|
||||||
# 获取设置默认显示
|
# 获取设置默认显示
|
||||||
grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=禁用 || mi_update=启用
|
grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=$TOOLS_DISABLE || mi_update=$TOOLS_ENABLE
|
||||||
[ "$mi_mi_autoSSH" = "已配置" ] && mi_mi_autoSSH_type=32m已配置 || mi_mi_autoSSH_type=31m未配置
|
[ "$mi_mi_autoSSH" = "$TOOLS_CONFIGURED" ] && mi_mi_autoSSH_type=32m$TOOLS_CONFIGURED || mi_mi_autoSSH_type=31m$COMMON_UNSET
|
||||||
[ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32mON || mi_tunfix=31mOFF
|
[ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32mON || mi_tunfix=31mOFF
|
||||||
|
comp_box "\033[30;47m$TOOLS_TITLE\033[0m" \
|
||||||
line_break
|
"" \
|
||||||
separator_line "="
|
"\033[33m$TOOLS_WARN_COMPAT\033[0m" \
|
||||||
content_line "\033[30;47m工具与优化\033[0m"
|
"$TOOLS_DISK_USAGE" \
|
||||||
separator_line "="
|
"$(du -sh "$CRASHDIR")"
|
||||||
content_line "\033[33m本页工具可能无法兼容全部Linux设备,请酌情使用!\033[0m"
|
content_line "$TOOLS_MENU_TEST_ITEM"
|
||||||
content_line "磁盘占用/所在目录:"
|
content_line "$TOOLS_MENU_GUIDE_ITEM"
|
||||||
content_line "$(du -sh "$CRASHDIR")"
|
content_line "$TOOLS_MENU_LOG_ITEM"
|
||||||
separator_line "="
|
[ -f /etc/firewall.user ] && content_line "$TOOLS_MENU_SSH_ITEM"
|
||||||
content_line "1) ShellCrash\033[33m测试菜单\033[0m"
|
[ -x /usr/sbin/otapredownload ] && content_line "${TOOLS_MENU_MI_UPDATE_ITEM_PREFIX}\033[33m$mi_update\033[0m${TOOLS_MENU_MI_UPDATE_ITEM_SUFFIX}"
|
||||||
content_line "2) ShellCrash\033[32m新手引导\033[0m"
|
[ "$systype" = "mi_snapshot" ] && content_line "${TOOLS_MENU_MI_AUTO_SSH_ITEM_PREFIX}\033[$mi_mi_autoSSH_type \033[0m${TOOLS_MENU_MI_AUTO_SSH_ITEM_SUFFIX}"
|
||||||
content_line "3) \033[36m日志及推送工具\033[0m"
|
[ "$systype" = "mi_snapshot" ] && content_line "${TOOLS_MENU_MI_TUN_FIX_ITEM_PREFIX}\033[$mi_tunfix \033[0m${TOOLS_MENU_MI_TUN_FIX_ITEM_SUFFIX}"
|
||||||
[ -f /etc/firewall.user ] && content_line "4) \033[32m配置\033[0m外网访问SSH"
|
btm_box "" \
|
||||||
[ -x /usr/sbin/otapredownload ] && content_line "5) \033[33m$mi_update\033[0m小米系统自动更新"
|
"0) $COMMON_BACK"
|
||||||
[ "$systype" = "mi_snapshot" ] && content_line "6) 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
[ "$systype" = "mi_snapshot" ] && content_line "8) 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m"
|
|
||||||
content_line ""
|
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -140,7 +114,7 @@ tools() {
|
|||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
if [ -x /usr/sbin/otapredownload ]; then
|
if [ -x /usr/sbin/otapredownload ]; then
|
||||||
if [ "$mi_update" = "禁用" ]; then
|
if [ "$mi_update" = "$TOOLS_DISABLE" ]; then
|
||||||
grep -q "otapredownload" /etc/crontabs/root &&
|
grep -q "otapredownload" /etc/crontabs/root &&
|
||||||
sed -i "/^[^\#]*otapredownload/ s/^/#/" /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
|
echo "#15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
|
||||||
@@ -149,34 +123,28 @@ tools() {
|
|||||||
sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root ||
|
sed -i "/^\s*#.*otapredownload/ s/^\s*#//" /etc/crontabs/root ||
|
||||||
echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
|
echo "15 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1" >>/etc/crontabs/root
|
||||||
fi
|
fi
|
||||||
line_break
|
[ "$mi_update" = "$TOOLS_DISABLE" ] && mi_update=$TOOLS_ENABLE || mi_update=$TOOLS_DISABLE
|
||||||
separator_line "="
|
msg_alert "\033[32m${TOOLS_MI_UPDATE_MSG_PREFIX}\033[33m$mi_update\033[0m${TOOLS_MI_UPDATE_MSG_SUFFIX}\033[0m"
|
||||||
content_line "已\033[33m$mi_update\033[0m小米路由器的自动更新,如未生效,请在官方APP中同步设置!"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
if [ "$systype" = "mi_snapshot" ]; then
|
if [ "$systype" = "mi_snapshot" ]; then
|
||||||
mi_autoSSH
|
mi_autoSSH
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$TOOLS_UNSUPPORTED_DEVICE"
|
||||||
separator_line "="
|
|
||||||
content_line "不支持的设备!"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ ! -f "$CRASHDIR"/tools/ShellDDNS.sh ]; then
|
if [ ! -f "$CRASHDIR"/tools/ShellDDNS.sh ]; then
|
||||||
content_line "正在获取在线脚本......"
|
content_line "$TOOLS_FETCHING_SCRIPT"
|
||||||
get_bin "$TMPDIR"/ShellDDNS.sh tools/ShellDDNS.sh
|
get_bin "$TMPDIR"/ShellDDNS.sh tools/ShellDDNS.sh
|
||||||
if [ "$?" = "0" ]; then
|
if [ "$?" = "0" ]; then
|
||||||
mv -f "$TMPDIR"/ShellDDNS.sh "$CRASHDIR"/tools/ShellDDNS.sh
|
mv -f "$TMPDIR"/ShellDDNS.sh "$CRASHDIR"/tools/ShellDDNS.sh
|
||||||
. "$CRASHDIR"/tools/ShellDDNS.sh
|
. "$CRASHDIR"/tools/ShellDDNS.sh
|
||||||
else
|
else
|
||||||
content_line "\033[31m文件下载失败!\033[0m"
|
content_line "\033[31m$TOOLS_DOWNLOAD_FAIL\033[0m"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -185,71 +153,55 @@ tools() {
|
|||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -f "$CRASHDIR"/tools/tun.ko ]; then
|
if [ -f "$CRASHDIR"/tools/tun.ko ]; then
|
||||||
content_line "是否禁用此功能并移除相关补丁:"
|
comp_box "$TOOLS_DISABLE_FIX_CONFIRM"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
rm -rf "$CRASHDIR"/tools/tun.ko
|
rm -rf "$CRASHDIR"/tools/tun.ko
|
||||||
line_break
|
msg_alert "\033[33m$TOOLS_PATCH_REMOVED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m补丁文件已移除,请立即重启设备以防止出错!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
}
|
}
|
||||||
elif ckcmd modinfo && [ -z "$(modinfo tun)" ]; then
|
elif ckcmd modinfo && [ -z "$(modinfo tun)" ]; then
|
||||||
content_line "\033[33m本功能需要修改系统文件,不保证没有任何风险!\033[0m"
|
comp_box "\033[33m$TOOLS_TUN_WARN1\033[0m" \
|
||||||
content_line "\033[33m本功能采集的Tun模块并不一定适用于你的设备!\033[0m"
|
"\033[33m$TOOLS_TUN_WARN2\033[0m"
|
||||||
separator_line "="
|
btm_box "$TOOLS_ACCEPT_RISK" \
|
||||||
content_line "1) 我已知晓,出现问题会自行承担!"
|
"0) $COMMON_BACK"
|
||||||
content_line "0) 返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
eparator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
line_break
|
line_break
|
||||||
eparator_line "="
|
separator_line "="
|
||||||
content_line "正在连接服务器获取Tun模块补丁文件......"
|
content_line "$TOOLS_TUN_CONNECTING"
|
||||||
get_bin "$TMPDIR"/tun.ko bin/fix/tun.ko
|
get_bin "$TMPDIR"/tun.ko bin/fix/tun.ko
|
||||||
if [ "$?" = "0" ]; then
|
if [ "$?" = "0" ]; then
|
||||||
mv -f "$TMPDIR"/tun.ko "$CRASHDIR"/tools/tun.ko &&
|
mv -f "$TMPDIR"/tun.ko "$CRASHDIR"/tools/tun.ko &&
|
||||||
/data/shellcrash_init.sh tunfix &&
|
/data/shellcrash_init.sh tunfix &&
|
||||||
content_line "\033[32m设置成功!请重启服务!\033[0m"
|
content_line "\033[32m$TOOLS_TUN_OK\033[0m"
|
||||||
else
|
else
|
||||||
content_line "\033[31m文件下载失败,请重试!\033[0m"
|
content_line "\033[31m$TOOLS_TUN_FAIL\033[0m"
|
||||||
fi
|
fi
|
||||||
eparator_line "="
|
separator_line "="
|
||||||
else
|
else
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
content_line "\033[31m当前设备无需设置,请勿尝试!\033[0m"
|
msg_alert "\033[31m$TOOLS_DEVICE_NOT_NEED\033[0m"
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
mi_autoSSH() {
|
mi_autoSSH() {
|
||||||
line_break
|
comp_box "\033[33m$TOOLS_AUTO_SSH_WARN1\033[0m" \
|
||||||
separator_line "="
|
"\033[33m$TOOLS_AUTO_SSH_WARN2\033[36;4mhttps://t.me/ShellClash\033[0m"
|
||||||
content_line "\033[33m本功能使用软件命令进行固化不保证100%成功!\033[0m"
|
btm_box "$TOOLS_AUTO_SSH_PWD_HINT1" \
|
||||||
content_line "\033[33m如有问题请加群反馈:\033[36;4mhttps://t.me/ShellClash\033[0m"
|
"$TOOLS_AUTO_SSH_PWD_HINT2"
|
||||||
content_line ""
|
read -r -p "$TOOLS_AUTO_SSH_INPUT" mi_mi_autoSSH_pwd
|
||||||
content_line "请输入需要还原的SSH密码(不影响当前密码)"
|
mi_mi_autoSSH=$TOOLS_CONFIGURED
|
||||||
content_line "(回车可跳过)"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " mi_mi_autoSSH_pwd
|
|
||||||
mi_mi_autoSSH=已配置
|
|
||||||
cp -f /etc/dropbear/dropbear_rsa_host_key "$CRASHDIR"/configs/dropbear_rsa_host_key 2>/dev/null
|
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
|
cp -f /etc/dropbear/authorized_keys "$CRASHDIR"/configs/authorized_keys 2>/dev/null
|
||||||
ckcmd nvram && {
|
ckcmd nvram && {
|
||||||
@@ -259,13 +211,9 @@ mi_autoSSH() {
|
|||||||
nvram set boot_wait=on
|
nvram set boot_wait=on
|
||||||
nvram commit
|
nvram commit
|
||||||
}
|
}
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
content_line "\033[32m设置成功!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
setconfig mi_mi_autoSSH $mi_mi_autoSSH
|
setconfig mi_mi_autoSSH $mi_mi_autoSSH
|
||||||
setconfig mi_mi_autoSSH_pwd "$mi_mi_autoSSH_pwd"
|
setconfig mi_mi_autoSSH_pwd "$mi_mi_autoSSH_pwd"
|
||||||
sleep 1
|
msg_alert "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 日志菜单
|
# 日志菜单
|
||||||
@@ -279,39 +227,32 @@ log_pusher() {
|
|||||||
[ -n "$push_SynoChat" ] && stat_SynoChat=32mON || stat_SynoChat=33mOFF
|
[ -n "$push_SynoChat" ] && stat_SynoChat=32mON || stat_SynoChat=33mOFF
|
||||||
[ -n "$push_Gotify" ] && stat_Gotify=32mON || stat_Gotify=33mOFF
|
[ -n "$push_Gotify" ] && stat_Gotify=32mON || stat_Gotify=33mOFF
|
||||||
[ "$task_push" = 1 ] && stat_task=32mON || stat_task=33mOFF
|
[ "$task_push" = 1 ] && stat_task=32mON || stat_task=33mOFF
|
||||||
[ -n "$device_name" ] && device_s=32m$device_name || device_s=33m未设置
|
[ -n "$device_name" ] && device_s=32m$device_name || device_s=33m$COMMON_UNSET
|
||||||
line_break
|
comp_box "${TOOLS_LOG_TG_PREFIX}\033[$stat_TG\033[0m${TOOLS_LOG_TG_SUFFIX}" \
|
||||||
separator_line "="
|
"${TOOLS_LOG_DEER_PREFIX}\033[$stat_Deer\033[0m${TOOLS_LOG_DEER_SUFFIX}" \
|
||||||
content_line "1) Telegram推送 ——\033[$stat_TG\033[0m"
|
"${TOOLS_LOG_BARK_PREFIX}\033[$stat_bark\033[0m${TOOLS_LOG_BARK_SUFFIX}" \
|
||||||
content_line "2) PushDeer推送 ——\033[$stat_Deer\033[0m"
|
"${TOOLS_LOG_PO_PREFIX}\033[$stat_Po\033[0m${TOOLS_LOG_PO_SUFFIX}" \
|
||||||
content_line "3) Bark推送-IOS ——\033[$stat_bark\033[0m"
|
"${TOOLS_LOG_PP_PREFIX}\033[$stat_PP\033[0m${TOOLS_LOG_PP_SUFFIX}" \
|
||||||
content_line "4) Passover推送 ——\033[$stat_Po\033[0m"
|
"${TOOLS_LOG_SYNO_PREFIX}\033[$stat_SynoChat\033[0m${TOOLS_LOG_SYNO_SUFFIX}" \
|
||||||
content_line "5) PushPlus推送 ——\033[$stat_PP\033[0m"
|
"${TOOLS_LOG_GOTIFY_PREFIX}\033[$stat_Gotify\033[0m${TOOLS_LOG_GOTIFY_SUFFIX}" \
|
||||||
content_line "6) SynoChat推送 ——\033[$stat_SynoChat\033[0m"
|
"" \
|
||||||
content_line "7) Gotify推送 ——\033[$stat_Gotify\033[0m"
|
"$TOOLS_LOG_VIEW" \
|
||||||
content_line ""
|
"${TOOLS_LOG_TASK_PREFIX}\033[$stat_task\033[0m${TOOLS_LOG_TASK_SUFFIX}" \
|
||||||
content_line "a) 查看\033[36m运行日志\033[0m"
|
"${TOOLS_LOG_DEVICE_PREFIX}\033[$device_s\033[0m${TOOLS_LOG_DEVICE_SUFFIX}" \
|
||||||
content_line "b) 推送任务日志 ——\033[$stat_task\033[0m"
|
"$TOOLS_LOG_CLEAR" \
|
||||||
content_line "c) 设置设备名称 ——\033[$device_s\033[0m"
|
"" \
|
||||||
content_line "d) 清空日志文件"
|
"0) $COMMON_BACK"
|
||||||
content_line ""
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line "0) 返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$push_TG" ]; then
|
if [ -n "$push_TG" ]; then
|
||||||
content_line "是否确认关闭TG日志推送:"
|
comp_box "$TOOLS_CONFIRM_CLOSE_TG"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_TG=
|
push_TG=
|
||||||
chat_ID=
|
chat_ID=
|
||||||
@@ -324,11 +265,11 @@ log_pusher() {
|
|||||||
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
||||||
. "$CRASHDIR"/menus/bot_tg_bind.sh
|
. "$CRASHDIR"/menus/bot_tg_bind.sh
|
||||||
chose_bot() {
|
chose_bot() {
|
||||||
content_line "1) 使用公共机器人 ——不依赖内核服务"
|
comp_box "$TOOLS_BOT_PUBLIC" \
|
||||||
content_line "2) 使用私人机器人 ——需要额外申请"
|
"$TOOLS_BOT_PRIVATE" \
|
||||||
content_line "0) 返回上级菜单"
|
"" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
return 0
|
return 0
|
||||||
@@ -350,58 +291,79 @@ log_pusher() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$push_Deer" ]; then
|
if [ -n "$push_Deer" ]; then
|
||||||
content_line "是否确认关闭PushDeer日志推送:"
|
comp_box "$TOOLS_CONFIRM_CLOSE_DEER"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_Deer=
|
push_Deer=
|
||||||
|
push_Deer_url=
|
||||||
setconfig push_Deer
|
setconfig push_Deer
|
||||||
|
setconfig push_Deer_url
|
||||||
else
|
else
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
||||||
content_line "1. 请先前往 \033[32;4mhttp://www.pushdeer.com/official.html\033[0m 扫码安装快应用或下载APP"
|
comp_box "$TOOLS_PUSHDEER_SELECT_SERVER" \
|
||||||
content_line "2. 打开快应用/APP,并完成登陆"
|
"$TOOLS_PUSHDEER_OFFICIAL" \
|
||||||
content_line "3. \033[33m切换到「设备」标签页,点击右上角的加号,注册当前设备\033[0m"
|
"$TOOLS_PUSHDEER_CUSTOM" \
|
||||||
content_line "4. \033[36m切换到「秘钥」标签页,点击右上角的加号,创建一个秘钥,并复制\033[0m"
|
"" \
|
||||||
separator_line "="
|
"0) $COMMON_BACK"
|
||||||
content_line "请直接输入你复制的秘钥"
|
read -r -p "$TOOLS_SELECT_PROMPT" num
|
||||||
content_line "或输入 0 返回上级菜单"
|
case "$num" in
|
||||||
separator_line "="
|
0)
|
||||||
read -r -p "请输入> " url
|
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
|
if [ "$url" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ -n "$url" ]; then
|
elif [ -n "$url" ]; then
|
||||||
push_Deer=$url
|
push_Deer=$url
|
||||||
setconfig push_Deer "$url"
|
setconfig push_Deer "$url"
|
||||||
logger "已完成PushDeer日志推送设置!" 32
|
logger "$TOOLS_PUSHDEER_OK" 32
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$push_bark" ]; then
|
if [ -n "$push_bark" ]; then
|
||||||
content_line "是否确认关闭Bark日志推送:"
|
comp_box "$TOOLS_CONFIRM_CLOSE_BARK"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_bark=
|
push_bark=
|
||||||
bark_param=
|
bark_param=
|
||||||
@@ -412,39 +374,28 @@ log_pusher() {
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
||||||
content_line "\033[33mBark推送仅支持IOS系统,其他平台请使用其他推送方式!\033[0m"
|
comp_box "\033[33m$TOOLS_BARK_WARN\033[0m" \
|
||||||
content_line "\033[32m请安装Bark-IOS客户端,并在客户端中找到专属推送链接\033[0m"
|
"\033[32m$TOOLS_BARK_INSTALL\033[0m"
|
||||||
separator_line "="
|
btm_box "\033[36m$TOOLS_BARK_URL_HINT\033[0m" \
|
||||||
content_line "请直接输入你的Bark推送链接"
|
"$TOOLS_OR_BACK"
|
||||||
content_line "或输入 0 返回上级菜单"
|
read -r -p "$TOOLS_AUTO_SSH_INPUT" url
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " url
|
|
||||||
if [ "$url" = 0 ]; then
|
if [ "$url" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ -n "$url" ]; then
|
elif [ -n "$url" ]; then
|
||||||
push_bark=$url
|
push_bark=$url
|
||||||
setconfig push_bark "$url"
|
setconfig push_bark "$url"
|
||||||
logger "已完成Bark日志推送设置!" 32
|
logger "$TOOLS_BARK_OK" 32
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$push_Po" ]; then
|
if [ -n "$push_Po" ]; then
|
||||||
content_line "是否确认关闭Pushover日志推送:"
|
comp_box "$TOOLS_CONFIRM_CLOSE_PO"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_Po=
|
push_Po=
|
||||||
push_Po_key=
|
push_Po_key=
|
||||||
@@ -455,57 +406,44 @@ log_pusher() {
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
||||||
content_line "请先通过 \033[32;4mhttps://pushover.net/\033[0m 注册账号并获取\033[36mUser Key\033[0m"
|
comp_box "$TOOLS_PUSHOVER_REG" \
|
||||||
content_line ""
|
"" \
|
||||||
content_line "请直接请输入你的User Key"
|
"\033[36m$TOOLS_PUSHOVER_USERKEY_HINT\033[0m" \
|
||||||
content_line "或输入 0 返回上级菜单"
|
"$TOOLS_OR_BACK"
|
||||||
separator_line "="
|
read -r -p "$TOOLS_AUTO_SSH_INPUT" key
|
||||||
read -r -p "请输入> " key
|
|
||||||
if [ "$key" = 0 ]; then
|
if [ "$key" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ -n "$key" ]; then
|
elif [ -n "$key" ]; then
|
||||||
line_break
|
comp_box "\033[33m$TOOLS_PUSHOVER_VERIFY\033[0m"
|
||||||
separator_line "="
|
btm_box "$TOOLS_PUSHOVER_VERIFIED" \
|
||||||
content_line "\033[33m请检查注册邮箱,完成账户验证\033[0m"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "我已经验证完成(1/0)> "
|
read -r -p "$TOOLS_PUSHOVER_VERIFY_PROMPT" res
|
||||||
separator_line "="
|
if [ "$res" = 1 ]; then
|
||||||
|
comp_box "$TOOLS_PUSHOVER_TOKEN_BUILD"
|
||||||
line_break
|
read -r -p "$TOOLS_PUSHOVER_TOKEN_HINT> " Token
|
||||||
separator_line "="
|
|
||||||
content_line "请通过 \033[32;4mhttps://pushover.net/apps/build\033[0m 生成\033[36mAPI Token\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入你的API Token> " Token
|
|
||||||
if [ -n "$Token" ]; then
|
if [ -n "$Token" ]; then
|
||||||
push_Po=$Token
|
push_Po=$Token
|
||||||
push_Po_key=$key
|
push_Po_key=$key
|
||||||
setconfig push_Po "$Token"
|
setconfig push_Po "$Token"
|
||||||
setconfig push_Po_key "$key"
|
setconfig push_Po_key "$key"
|
||||||
logger "已完成Passover日志推送设置!" 32
|
logger "$TOOLS_PUSHOVER_OK" 32
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
line_break
|
continue
|
||||||
separator_line "="
|
fi
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
else
|
||||||
separator_line "="
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$push_PP" ]; then
|
if [ -n "$push_PP" ]; then
|
||||||
content_line "是否确认关闭PushPlus日志推送:"
|
comp_box "$TOOLS_CONFIRM_CLOSE_PP"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_PP=
|
push_PP=
|
||||||
setconfig push_PP
|
setconfig push_PP
|
||||||
@@ -514,37 +452,27 @@ log_pusher() {
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
# echo -e "\033[33m详细设置指南请参考 https://juewuy.github.io/ \033[0m"
|
||||||
content_line "请先通过 \033[32;4mhttps://www.pushplus.plus/push1.html\033[0m 注册账号并获取\033[36mtoken\033[0m"
|
comp_box "$TOOLS_PUSHPLUS_REG"
|
||||||
separator_line "="
|
btm_box "\033[36m$TOOLS_PUSHPLUS_TOKEN_HINT\033[0m" \
|
||||||
content_line "请直接输入你的token"
|
"$TOOLS_OR_BACK"
|
||||||
content_line "或输入 0 返回上级菜单"
|
read -r -p "$TOOLS_AUTO_SSH_INPUT" Token
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " Token
|
|
||||||
if [ "$Token" = 0 ]; then
|
if [ "$Token" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ -n "$Token" ]; then
|
elif [ -n "$Token" ]; then
|
||||||
push_PP=$Token
|
push_PP=$Token
|
||||||
setconfig push_PP "$Token"
|
setconfig push_PP "$Token"
|
||||||
logger "已完成PushPlus日志推送设置!" 32
|
logger "$TOOLS_PUSHPLUS_OK" 32
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
line_break
|
|
||||||
if [ -n "$push_SynoChat" ]; then
|
if [ -n "$push_SynoChat" ]; then
|
||||||
separator_line "="
|
comp_box "$TOOLS_CONFIRM_CLOSE_SYNO"
|
||||||
content_line "是否确认关闭SynoChat日志推送:"
|
btm_box "$TOOLS_YES" \
|
||||||
separator_line "="
|
"$TOOLS_NO_BACK"
|
||||||
content_line "1) 是"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
content_line "0) 否,返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_SynoChat=
|
push_SynoChat=
|
||||||
setconfig push_SynoChat
|
setconfig push_SynoChat
|
||||||
@@ -552,23 +480,18 @@ log_pusher() {
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
read -r -p "请输入你的Synology DSM主页地址> " URL
|
|
||||||
line_break
|
line_break
|
||||||
|
read -r -p "$TOOLS_SYNOCHAT_URL_HINT> " URL
|
||||||
read -r -p "请输入你的Synology Chat Token> " TOKEN
|
read -r -p "$TOOLS_SYNOCHAT_TOKEN_HINT> " TOKEN
|
||||||
|
comp_box "$TOOLS_SYNOCHAT_USERID_HINT"
|
||||||
line_break
|
read -r -p "$TOOLS_SYNOCHAT_USERID_INPUT" USERID
|
||||||
separator_line "="
|
|
||||||
content_line '请通过"你的群晖地址/webapi/entry.cgi?api=SYNO.Chat.External&method=user_list&version=2&token=你的TOKEN"获取user_id'
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入你的user_id> " USERID
|
|
||||||
if [ -n "$URL" ]; then
|
if [ -n "$URL" ]; then
|
||||||
push_SynoChat=$USERID
|
push_SynoChat=$USERID
|
||||||
setconfig push_SynoChat "$USERID"
|
setconfig push_SynoChat "$USERID"
|
||||||
setconfig push_ChatURL "$URL"
|
setconfig push_ChatURL "$URL"
|
||||||
setconfig push_ChatTOKEN "$TOKEN"
|
setconfig push_ChatTOKEN "$TOKEN"
|
||||||
setconfig push_ChatUSERID "$USERID"
|
setconfig push_ChatUSERID "$USERID"
|
||||||
logger "已完成SynoChat日志推送设置!" 32
|
logger "$TOOLS_SYNOCHAT_OK" 32
|
||||||
else
|
else
|
||||||
setconfig push_ChatURL
|
setconfig push_ChatURL
|
||||||
setconfig push_ChatTOKEN
|
setconfig push_ChatTOKEN
|
||||||
@@ -576,25 +499,17 @@ log_pusher() {
|
|||||||
push_SynoChat=
|
push_SynoChat=
|
||||||
setconfig push_SynoChat
|
setconfig push_SynoChat
|
||||||
|
|
||||||
line_break
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
# 在menu.sh的case $num in代码块中添加
|
# 在menu.sh的case $num in代码块中添加
|
||||||
7)
|
7)
|
||||||
line_break
|
|
||||||
separator_line "="
|
|
||||||
if [ -n "$push_Gotify" ]; then
|
if [ -n "$push_Gotify" ]; then
|
||||||
content_line "是否确认关闭Gotify日志推送:"
|
comp_box "$TOOLS_CONFIRM_CLOSE_GOTIFY"
|
||||||
separator_line "="
|
btm_box "$TOOLS_YES" \
|
||||||
content_line "1) 是"
|
"$TOOLS_NO_BACK"
|
||||||
content_line "0) 否,返回上级菜单"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
push_Gotify=
|
push_Gotify=
|
||||||
setconfig push_Gotify
|
setconfig push_Gotify
|
||||||
@@ -602,38 +517,32 @@ log_pusher() {
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
content_line "请先通过Gotify服务器获取推送URL"
|
comp_box "$TOOLS_GOTIFY_REG" \
|
||||||
content_line "格式示例: https://gotify.example.com/message?token=你的应用令牌"
|
"$TOOLS_GOTIFY_FORMAT"
|
||||||
content_line ""
|
btm_box "\033[36m$TOOLS_GOTIFY_URL_HINT\033[0m" \
|
||||||
content_line "请直接你的Gotify推送URL"
|
"$TOOLS_OR_BACK"
|
||||||
content_line "或输入 0 返回上级菜单"
|
read -r -p "$TOOLS_AUTO_SSH_INPUT" url
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " url
|
|
||||||
if [ "$url" = 0 ]; then
|
if [ "$url" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ -n "$url" ]; then
|
elif [ -n "$url" ]; then
|
||||||
push_Gotify=$url
|
push_Gotify=$url
|
||||||
setconfig push_Gotify "$url"
|
setconfig push_Gotify "$url"
|
||||||
logger "已完成Gotify日志推送设置!" 32
|
logger "$TOOLS_GOTIFY_OK" 32
|
||||||
else
|
else
|
||||||
line_break
|
msg_alert "\033[31m$COMMON_ERR_INPUT\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[31m输入错误,请重新输入!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
line_break
|
|
||||||
if [ -s "$TMPDIR"/ShellCrash.log ]; then
|
if [ -s "$TMPDIR"/ShellCrash.log ]; then
|
||||||
|
line_break
|
||||||
|
echo "==========================================================="
|
||||||
cat "$TMPDIR"/ShellCrash.log
|
cat "$TMPDIR"/ShellCrash.log
|
||||||
|
echo "==========================================================="
|
||||||
|
exit
|
||||||
else
|
else
|
||||||
separator_line "="
|
msg_alert "\033[31m$TOOLS_LOG_NOT_FOUND\033[0m"
|
||||||
content_line "\033[31m未找到相关日志!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
fi
|
fi
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
[ "$task_push" = 1 ] && task_push='' || task_push=1
|
[ "$task_push" = 1 ] && task_push='' || task_push=1
|
||||||
@@ -641,27 +550,19 @@ log_pusher() {
|
|||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
line_break
|
comp_box "$TOOLS_DEVICE_NAME_HINT" \
|
||||||
separator_line "="
|
"$TOOLS_DEVICE_NAME_BACK"
|
||||||
content_line "请直接输入本设备自定义推送名称"
|
read -r -p "$TOOLS_AUTO_SSH_INPUT" device_name
|
||||||
content_line "或直接回车确认返回上级菜单"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入> " device_name
|
|
||||||
if [ -n "$device_name" ]; then
|
if [ -n "$device_name" ]; then
|
||||||
setconfig device_name "$device_name"
|
setconfig device_name "$device_name"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
rm -rf "$TMPDIR"/ShellCrash.log
|
rm -rf "$TMPDIR"/ShellCrash.log
|
||||||
line_break
|
msg_alert "\033[33m$TOOLS_LOG_CLEARED\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m运行日志及任务日志均已清空!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
sleep 1
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -670,41 +571,35 @@ log_pusher() {
|
|||||||
# 测试菜单
|
# 测试菜单
|
||||||
testcommand() {
|
testcommand() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
comp_box "\033[30;47m$TOOLS_TEST_MENU_TITLE\033[0m" \
|
||||||
separator_line "="
|
"\033[33m$TOOLS_TEST_MENU_HINT\033[0m"
|
||||||
content_line "\033[30;47m这里是测试命令菜单\033[0m"
|
btm_box "$TOOLS_TEST_ITEM_1" \
|
||||||
content_line "\033[33m如遇问题尽量运行相应命令后截图提交issue或TG讨论组\033[0m"
|
"$TOOLS_TEST_ITEM_2" \
|
||||||
separator_line "="
|
"$TOOLS_TEST_ITEM_3" \
|
||||||
content_line "1) Debug模式运行内核"
|
"$TOOLS_TEST_ITEM_4" \
|
||||||
content_line "2) 查看系统DNS端口(:53)占用 "
|
"$TOOLS_TEST_ITEM_5" \
|
||||||
content_line "3) 测试ssl加密(aes-128-gcm)跑分"
|
"$TOOLS_TEST_ITEM_6" \
|
||||||
content_line "4) 查看ShellCrash相关路由规则"
|
"" \
|
||||||
content_line "5) 查看内核配置文件前40行"
|
"0) $COMMON_BACK"
|
||||||
content_line "6) 测试代理服务器连通性(google.tw)"
|
read -r -p "$COMMON_INPUT> " num
|
||||||
content_line ""
|
|
||||||
content_line "0) 返回上级目录"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应数字> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
debug
|
debug
|
||||||
testcommand
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
line_break
|
||||||
|
echo "==========================================================="
|
||||||
netstat -ntulp | grep 53
|
netstat -ntulp | grep 53
|
||||||
separator_line "="
|
echo
|
||||||
content_line "可以使用\033[44m netstat -ntulp |grep xxx \033[0m来查询任意(xxx)端口"
|
echo -e "$TOOLS_NETSTAT_HINT"
|
||||||
separator_line "="
|
echo "==========================================================="
|
||||||
line_break
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
line_break
|
||||||
openssl speed -multi 4 -evp aes-128-gcm
|
openssl speed -multi 4 -evp aes-128-gcm
|
||||||
line_break
|
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
line_break
|
||||||
@@ -753,22 +648,17 @@ testcommand() {
|
|||||||
iptables -t nat -L shellcrash_vm --line-numbers
|
iptables -t nat -L shellcrash_vm --line-numbers
|
||||||
iptables -t nat -L shellcrash_vm_dns --line-numbers
|
iptables -t nat -L shellcrash_vm_dns --line-numbers
|
||||||
}
|
}
|
||||||
echo "----------------本机防火墙---------------------"
|
echo "$TOOLS_FW_TITLE"
|
||||||
iptables -L INPUT --line-numbers
|
iptables -L INPUT --line-numbers
|
||||||
fi
|
fi
|
||||||
line_break
|
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
echo "$crashcore" | grep -q 'singbox' && config_path="$CRASHDIR"/jsons/config.json || config_path="$CRASHDIR"/yamls/config.yaml
|
echo "$crashcore" | grep -q 'singbox' && config_path="$CRASHDIR"/jsons/config.json || config_path="$CRASHDIR"/yamls/config.yaml
|
||||||
line_break
|
line_break
|
||||||
sed -n '1,40p' "$config_path"
|
sed -n '1,40p' "$config_path"
|
||||||
line_break
|
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
line_break
|
comp_box "\033[33m$TOOLS_PROXY_NOTE\033[0m"
|
||||||
separator_line "="
|
|
||||||
content_line "\033[33m注意:依赖curl(不支持wget),且测试结果不保证一定准确!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
delay=$(
|
delay=$(
|
||||||
curl -kx ${authentication}@127.0.0.1:$mix_port -o /dev/null -s -w '%{time_starttransfer}' 'https://google.tw' &
|
curl -kx ${authentication}@127.0.0.1:$mix_port -o /dev/null -s -w '%{time_starttransfer}' 'https://google.tw' &
|
||||||
{
|
{
|
||||||
@@ -780,9 +670,9 @@ testcommand() {
|
|||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ $(echo ${#delay}) -gt 1 ]; then
|
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
|
else
|
||||||
content_line "\033[31m连接超时!请重试或检查节点配置!\033[0m"
|
content_line "\033[31m$TOOLS_PROXY_TIMEOUT\033[0m"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
;;
|
;;
|
||||||
@@ -795,26 +685,22 @@ testcommand() {
|
|||||||
|
|
||||||
debug() {
|
debug() {
|
||||||
echo "$crashcore" | grep -q 'singbox' && config_tmp="$TMPDIR"/jsons || config_tmp="$TMPDIR"/config.yaml
|
echo "$crashcore" | grep -q 'singbox' && config_tmp="$TMPDIR"/jsons || config_tmp="$TMPDIR"/config.yaml
|
||||||
line_break
|
comp_box "\033[36m$TOOLS_DEBUG_WARN1\033[0m" \
|
||||||
separator_line "="
|
"${TOOLS_DEBUG_WARN2_PREFIX}\033[32m$TMPDIR/debug.log\033[0m${TOOLS_DEBUG_WARN2_SUFFIX}" \
|
||||||
content_line "\033[36m注意:Debug运行均会停止原本的内核服务\033[0m"
|
"$TOOLS_DEBUG_WARN3" \
|
||||||
content_line "后台运行日志地址:\033[32m$TMPDIR/debug.log\033[0m"
|
"$TOOLS_DEBUG_WARN4"
|
||||||
content_line "如长时间运行后台监测,日志等级推荐error!防止文件过大!"
|
content_line "${TOOLS_DEBUG_ITEM_1_PREFIX}\033[32m$config_tmp\033[0m${TOOLS_DEBUG_ITEM_1_SUFFIX}"
|
||||||
content_line "你亦可通过:\033[33mcrash -s debug 'warning'\033[0m命令使用其他日志等级"
|
content_line "${TOOLS_DEBUG_ITEM_2_PREFIX}\033[32m$config_tmp\033[0m${TOOLS_DEBUG_ITEM_2_SUFFIX}"
|
||||||
separator_line "="
|
content_line "$TOOLS_DEBUG_ITEM_3"
|
||||||
content_line "1) 仅测试\033[32m$config_tmp\033[0m配置文件可用性"
|
content_line "$TOOLS_DEBUG_ITEM_4"
|
||||||
content_line "2) 前台运行\033[32m$config_tmp\033[0m配置文件,不配置防火墙劫持(\033[33m使用Ctrl+C手动停止\033[0m)"
|
content_line "$TOOLS_DEBUG_ITEM_5"
|
||||||
content_line "3) 后台运行完整启动流程,并配置防火墙劫持,日志等级:\033[31merror\033[0m"
|
content_line "${TOOLS_DEBUG_ITEM_6_PREFIX}\033[32m$CRASHDIR/debug.log\033[0m${TOOLS_DEBUG_ITEM_6_SUFFIX}"
|
||||||
content_line "4) 后台运行完整启动流程,并配置防火墙劫持,日志等级:\033[32minfo\033[0m"
|
|
||||||
content_line "5) 后台运行完整启动流程,并配置防火墙劫持,日志等级:\033[33mdebug\033[0m"
|
|
||||||
content_line "6) 后台运行完整启动流程,并配置防火墙劫持,且将错误日志打印到闪存:\033[32m$CRASHDIR/debug.log\033[0m"
|
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
|
content_line "$TOOLS_DEBUG_ITEM_8"
|
||||||
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line " 9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json"
|
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "${TOOLS_DEBUG_ITEM_9_PREFIX}\033[32m$config_tmp\033[0m${TOOLS_DEBUG_ITEM_9_SUFFIX}\033[32m$TMPDIR/debug.json\033[0m"
|
||||||
content_line ""
|
btm_box "" \
|
||||||
content_line "0) 返回上级目录"
|
"0) $COMMON_BACK"
|
||||||
separator_line "="
|
read -r -p "$COMMON_INPUT> " num
|
||||||
read -r -p "请输入对应标号> " num
|
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0) ;;
|
0) ;;
|
||||||
1)
|
1)
|
||||||
@@ -855,16 +741,11 @@ debug() {
|
|||||||
main_menu
|
main_menu
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
line_break
|
comp_box "\033[33m$TOOLS_FLASH_WARN\033[0m" \
|
||||||
separator_line "="
|
"$TOOLS_FLASH_CONFIRM"
|
||||||
content_line "频繁写入闪存会导致闪存寿命降低,如非遇到会导致设备死机或重启的bug,请勿使用此功能!"
|
btm_box "$TOOLS_YES" \
|
||||||
separator_line "="
|
"$TOOLS_NO"
|
||||||
content_line "是否继续:"
|
read -r -p "$TOOLS_SELECT_PROMPT" res
|
||||||
separator_line "-"
|
|
||||||
content_line "1) 是"
|
|
||||||
content_line "0) 否"
|
|
||||||
separator_line "="
|
|
||||||
read -r -p "请输入对应标号> " res
|
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
"$CRASHDIR"/start.sh debug debug flash
|
"$CRASHDIR"/start.sh debug debug flash
|
||||||
fi
|
fi
|
||||||
@@ -875,12 +756,10 @@ debug() {
|
|||||||
main_menu
|
main_menu
|
||||||
;;
|
;;
|
||||||
9)
|
9)
|
||||||
. "$CRASHDIR"/libs/core_webget.sh && core_find && "$TMPDIR"/CrashCore merge "$TMPDIR"/debug.json -C "$TMPDIR"/jsons && line_break
|
. "$CRASHDIR"/libs/core_tools.sh && core_find && "$TMPDIR"/CrashCore merge "$TMPDIR"/debug.json -C "$TMPDIR"/jsons && line_break
|
||||||
separator_line "="
|
comp_box "\033[32m$TOOLS_MERGE_OK\033[0m"
|
||||||
content_line"\033[32m合并成功!\033[0m"
|
|
||||||
separator_line "="
|
|
||||||
[ "$TMPDIR" = "$BINDIR" ] && rm -rf "$TMPDIR"/CrashCore
|
[ "$TMPDIR" = "$BINDIR" ] && rm -rf "$TMPDIR"/CrashCore
|
||||||
main_menu
|
debug
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,11 +2,15 @@
|
|||||||
|
|
||||||
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
|
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
|
||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
|
. "$CRASHDIR"/libs/set_config.sh
|
||||||
. "$CRASHDIR"/libs/web_get_lite.sh
|
. "$CRASHDIR"/libs/web_get_lite.sh
|
||||||
|
. "$CRASHDIR"/libs/i18n.sh
|
||||||
. "$CRASHDIR"/menus/running_status.sh
|
. "$CRASHDIR"/menus/running_status.sh
|
||||||
. "$CRASHDIR"/configs/gateway.cfg
|
. "$CRASHDIR"/configs/gateway.cfg
|
||||||
. "$CRASHDIR"/configs/ShellCrash.cfg
|
. "$CRASHDIR"/configs/ShellCrash.cfg
|
||||||
|
|
||||||
|
load_lang bot_tg
|
||||||
|
|
||||||
TMPDIR='/tmp/ShellCrash'
|
TMPDIR='/tmp/ShellCrash'
|
||||||
API="https://api.telegram.org/bot$TG_TOKEN"
|
API="https://api.telegram.org/bot$TG_TOKEN"
|
||||||
STATE_FILE="$TMPDIR/tgbot_state"
|
STATE_FILE="$TMPDIR/tgbot_state"
|
||||||
@@ -31,15 +35,15 @@ send_msg(){
|
|||||||
}
|
}
|
||||||
send_help(){
|
send_help(){
|
||||||
TEXT=$(cat <<EOF
|
TEXT=$(cat <<EOF
|
||||||
进群讨论:
|
$BOT_TG_HELP_GROUP
|
||||||
https://t.me/+6AElkMDzwPxmMmM1
|
https://t.me/+6AElkMDzwPxmMmM1
|
||||||
项目地址:
|
$BOT_TG_HELP_PROJECT
|
||||||
https://github.com/juewuy/ShellClash
|
https://github.com/juewuy/ShellClash
|
||||||
相关教程:
|
$BOT_TG_HELP_GUIDE
|
||||||
https://juewuy.github.io
|
https://juewuy.github.io
|
||||||
请喝咖啡:
|
$BOT_TG_HELP_COFFEE
|
||||||
https://juewuy.github.io/yOF4Yf06Q/
|
https://juewuy.github.io/yOF4Yf06Q/
|
||||||
友情机场:
|
$BOT_TG_HELP_AIRPORT
|
||||||
https://dler.pro/auth/register?affid=89698
|
https://dler.pro/auth/register?affid=89698
|
||||||
https://pub.bigmeok.me?code=2PuWY9I7
|
https://pub.bigmeok.me?code=2PuWY9I7
|
||||||
EOF
|
EOF
|
||||||
@@ -50,31 +54,31 @@ send_menu(){
|
|||||||
#获取运行状态
|
#获取运行状态
|
||||||
PID=$(pidof CrashCore | awk '{print $NF}')
|
PID=$(pidof CrashCore | awk '{print $NF}')
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
run='🟢正在运行'
|
run="$BOT_TG_RUN_ON"
|
||||||
running_status
|
running_status
|
||||||
else
|
else
|
||||||
run='🟡未运行'
|
run="$BOT_TG_RUN_OFF"
|
||||||
fi
|
fi
|
||||||
corename=$(echo $crashcore | sed 's/singboxr/SingBoxR/' | sed 's/singbox/SingBox/' | sed 's/clash/Clash/' | sed 's/meta/Mihomo/')
|
corename=$(echo $crashcore | sed 's/singboxr/SingBoxR/' | sed 's/singbox/SingBox/' | sed 's/clash/Clash/' | sed 's/meta/Mihomo/')
|
||||||
TEXT=$(cat <<EOF
|
TEXT=$(cat <<EOF
|
||||||
*欢迎使用ShellCrash!*_${versionsh_l}_
|
*$BOT_TG_WELCOME*_${versionsh_l}_
|
||||||
$corename服务$run
|
$corename$BOT_TG_SERVICE$run
|
||||||
【*$redir_mod*】内存占用:$VmRSS
|
【*$redir_mod*】$BOT_TG_MEM_USED$VmRSS
|
||||||
已运行:$day$time
|
$BOT_TG_RUNNING_TIME$day$time
|
||||||
请选择操作:
|
$BOT_TG_SELECT_ACTION
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
MENU=$(cat <<EOF
|
MENU=$(cat <<EOF
|
||||||
{
|
{
|
||||||
"inline_keyboard":[
|
"inline_keyboard":[
|
||||||
[
|
[
|
||||||
{"text":"✈️ 启用劫持","callback_data":"start_redir"},
|
{"text":"$BOT_TG_BTN_START","callback_data":"start_redir"},
|
||||||
{"text":"💧 纯净模式","callback_data":"stop_redir"},
|
{"text":"$BOT_TG_BTN_PURE","callback_data":"stop_redir"},
|
||||||
{"text":"🕹 重启服务","callback_data":"restart"}
|
{"text":"$BOT_TG_BTN_RESTART","callback_data":"restart"}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{"text":"📄 查看日志","callback_data":"readlog"},
|
{"text":"$BOT_TG_BTN_LOG","callback_data":"readlog"},
|
||||||
{"text":"🔃 文件传输","callback_data":"transport"}
|
{"text":"$BOT_TG_BTN_TRANSFER","callback_data":"transport"}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -84,7 +88,7 @@ web_json_post "$API/sendMessage" "{\"chat_id\":\"$TG_CHATID\",\"text\":\"$TEXT\"
|
|||||||
}
|
}
|
||||||
### --- 文件传输 --- ###
|
### --- 文件传输 --- ###
|
||||||
send_transport_menu(){
|
send_transport_menu(){
|
||||||
TEXT='请选择需要上传或下载的具体文件:'
|
TEXT="$BOT_TG_SELECT_FILE"
|
||||||
if echo "$crashcore" | grep -q 'singbox';then
|
if echo "$crashcore" | grep -q 'singbox';then
|
||||||
config_type=json
|
config_type=json
|
||||||
else
|
else
|
||||||
@@ -94,23 +98,23 @@ send_transport_menu(){
|
|||||||
if curl -h >/dev/null 2>&1;then
|
if curl -h >/dev/null 2>&1;then
|
||||||
CURL_KB=$(cat <<EOF
|
CURL_KB=$(cat <<EOF
|
||||||
[
|
[
|
||||||
{"text":"📥 下载日志","callback_data":"ts_get_log"},
|
{"text":"$BOT_TG_BTN_GET_LOG","callback_data":"ts_get_log"},
|
||||||
{"text":"💾 备份设置","callback_data":"ts_get_bak"},
|
{"text":"$BOT_TG_BTN_GET_BAK","callback_data":"ts_get_bak"},
|
||||||
{"text":"⬇️ 下载配置","callback_data":"ts_get_ccf"}
|
{"text":"$BOT_TG_BTN_GET_CFG","callback_data":"ts_get_ccf"}
|
||||||
],
|
],
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
CURL_KB='[{"text":"⚠️ 因当前设备缺少curl应用,仅支持上传功能!","callback_data":"noop"}],'
|
CURL_KB='[{"text":"$BOT_TG_NO_CURL","callback_data":"noop"}],'
|
||||||
fi
|
fi
|
||||||
MENU=$(cat <<EOF
|
MENU=$(cat <<EOF
|
||||||
{
|
{
|
||||||
"inline_keyboard":[
|
"inline_keyboard":[
|
||||||
$CURL_KB
|
$CURL_KB
|
||||||
[
|
[
|
||||||
{"text":"🪐 上传内核","callback_data":"ts_up_core"},
|
{"text":"$BOT_TG_BTN_UP_CORE","callback_data":"ts_up_core"},
|
||||||
{"text":"🔄 还原设置","callback_data":"ts_up_bak"},
|
{"text":"$BOT_TG_BTN_UP_BAK","callback_data":"ts_up_bak"},
|
||||||
{"text":"⬆️ 上传配置","callback_data":"ts_up_ccf"}
|
{"text":"$BOT_TG_BTN_UP_CFG","callback_data":"ts_up_ccf"}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -124,17 +128,17 @@ process_file(){
|
|||||||
case "$FILE_TYPE" in
|
case "$FILE_TYPE" in
|
||||||
1)
|
1)
|
||||||
. "$CRASHDIR"/libs/core_tools.sh
|
. "$CRASHDIR"/libs/core_tools.sh
|
||||||
core_check "$TMPDIR/$FILE_NAME" && res='成功!即将重启服务!' || res='失败,请仔细检查文件或重试!'
|
core_check "$TMPDIR/$FILE_NAME" && res="$BOT_TG_UPLOAD_OK" || res="$BOT_TG_UPLOAD_FAIL"
|
||||||
send_msg "内核更新$res"
|
send_msg "$BOT_TG_CORE_UPDATE$res"
|
||||||
sleep 2
|
sleep 2
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
tar -zxf "$TMPDIR/$FILE_NAME" -C "$CRASHDIR"/configs && res='配置文件已还原,请手动重启服务!' || res='解压还原失败,请仔细检查文件或重试!'
|
tar -zxf "$TMPDIR/$FILE_NAME" -C "$CRASHDIR"/configs && res="$BOT_TG_CFG_RESTORED" || res="$BOT_TG_RESTORE_FAIL"
|
||||||
send_msg "$res"
|
send_msg "$res"
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
mv -f "$TMPDIR/$FILE_NAME" "$CRASHDIR/${config_type}s/" && res='配置文件已上传,请手动重启服务!' || res='上传失败,请仔细检查文件或重试!'
|
mv -f "$TMPDIR/$FILE_NAME" "$CRASHDIR/${config_type}s/" && res="$BOT_TG_CFG_UPLOADED" || res="$BOT_TG_UPLOAD_FAIL2"
|
||||||
send_msg "$res"
|
send_msg "$res"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -150,10 +154,10 @@ download_file(){
|
|||||||
if [ "$?" = 0 ];then
|
if [ "$?" = 0 ];then
|
||||||
process_file
|
process_file
|
||||||
else
|
else
|
||||||
send_msg "网络错误,上传失败!请重试!"
|
send_msg "$BOT_TG_NET_UPLOAD_FAIL"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
send_msg "文件格式不匹配,上传失败!"
|
send_msg "$BOT_TG_FILE_FORMAT_FAIL"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
### --- 具体操作函数 --- ###
|
### --- 具体操作函数 --- ###
|
||||||
@@ -162,22 +166,22 @@ do_start_fw(){
|
|||||||
redir_mod=$redir_mod_bf
|
redir_mod=$redir_mod_bf
|
||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
"$CRASHDIR"/start.sh start_firewall
|
"$CRASHDIR"/start.sh start_firewall
|
||||||
echo "ShellCrash 透明路由*$redir_mod_bf*已启用!" > "$LOGFILE"
|
echo "$BOT_TG_FW_ENABLED*$redir_mod_bf*$BOT_TG_FW_ENABLED_SUFFIX" > "$LOGFILE"
|
||||||
}
|
}
|
||||||
do_stop_fw(){
|
do_stop_fw(){
|
||||||
redir_mod_bf=$redir_mod
|
redir_mod_bf=$redir_mod
|
||||||
firewall_area=4
|
firewall_area=4
|
||||||
setconfig firewall_area 4
|
setconfig firewall_area 4
|
||||||
"$CRASHDIR"/start.sh stop_firewall
|
"$CRASHDIR"/start.sh stop_firewall
|
||||||
echo "ShellCrash 已切换到纯净模式!" > "$LOGFILE"
|
echo "$BOT_TG_SWITCH_PURE" > "$LOGFILE"
|
||||||
}
|
}
|
||||||
do_restart(){
|
do_restart(){
|
||||||
"$CRASHDIR"/start.sh restart
|
"$CRASHDIR"/start.sh restart
|
||||||
echo "ShellCrash 服务已重启!" > "$LOGFILE"
|
echo "$BOT_TG_SERVICE_RESTARTED" > "$LOGFILE"
|
||||||
}
|
}
|
||||||
do_set_sub(){
|
do_set_sub(){
|
||||||
#echo "$1" "$2" >> "$CRASHDIR"/configs/providers.cfg
|
#echo "$1" "$2" >> "$CRASHDIR"/configs/providers.cfg
|
||||||
echo "错误,还未完成的功能!" > "$LOGFILE"
|
echo "$BOT_TG_UNFINISHED" > "$LOGFILE"
|
||||||
|
|
||||||
}
|
}
|
||||||
transport(){ #文件传输
|
transport(){ #文件传输
|
||||||
@@ -203,15 +207,15 @@ transport(){ #文件传输
|
|||||||
;;
|
;;
|
||||||
"ts_up_core")
|
"ts_up_core")
|
||||||
FILE_TYPE=1
|
FILE_TYPE=1
|
||||||
send_msg "请发送需要上传的内核,必须是以tar.gz,.gz或.upx结尾的【${corename}】内核!"
|
send_msg "$BOT_TG_SEND_CORE ${corename} $BOT_TG_SEND_CORE_SUFFIX"
|
||||||
;;
|
;;
|
||||||
"ts_up_bak")
|
"ts_up_bak")
|
||||||
FILE_TYPE=2
|
FILE_TYPE=2
|
||||||
send_msg "请发送需要还原的备份文件,必须是【.tar.gz】格式!"
|
send_msg "$BOT_TG_SEND_BAK"
|
||||||
;;
|
;;
|
||||||
"ts_up_ccf")
|
"ts_up_ccf")
|
||||||
FILE_TYPE=3
|
FILE_TYPE=3
|
||||||
send_msg "请发送需要上传的配置文件,必须是【.${config_type}】格式,支持自定义配置文件"
|
send_msg "$BOT_TG_SEND_CFG .${config_type} $BOT_TG_SEND_CFG_SUFFIX"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -245,9 +249,9 @@ polling(){
|
|||||||
"start_redir")
|
"start_redir")
|
||||||
if [ "$firewall_area" = 4 ];then
|
if [ "$firewall_area" = 4 ];then
|
||||||
do_start_fw
|
do_start_fw
|
||||||
send_msg "已切换到$redir_mod_bf!"
|
send_msg "$BOT_TG_SWITCH_TO$redir_mod_bf!"
|
||||||
else
|
else
|
||||||
send_msg "当前已经是$redir_mod!"
|
send_msg "$BOT_TG_ALREADY$redir_mod!"
|
||||||
fi
|
fi
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
@@ -255,22 +259,22 @@ polling(){
|
|||||||
"stop_redir")
|
"stop_redir")
|
||||||
if [ "$firewall_area" != 4 ];then
|
if [ "$firewall_area" != 4 ];then
|
||||||
do_stop_fw
|
do_stop_fw
|
||||||
send_msg "已切换到纯净模式"
|
send_msg "$BOT_TG_SWITCH_PURE"
|
||||||
else
|
else
|
||||||
send_msg "当前已经是纯净模式!"
|
send_msg "$BOT_TG_ALREADY_PURE"
|
||||||
fi
|
fi
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
"restart")
|
"restart")
|
||||||
do_restart
|
do_restart
|
||||||
send_msg "🔄 服务已重启"
|
send_msg "$BOT_TG_SERVICE_RESTARTED_SHORT"
|
||||||
sleep 10
|
sleep 10
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
"readlog")
|
"readlog")
|
||||||
send_msg "📄 日志内容如下(已过滤任务日志):\n\`\`\`$(grep -v '任务' $TMPDIR/ShellCrash.log |tail -n 20)\`\`\`"
|
send_msg "$BOT_TG_LOG_CONTENT\n\`\`\`$(grep -v "$BOT_TG_TASK_WORD" $TMPDIR/ShellCrash.log |tail -n 20)\`\`\`"
|
||||||
sleep 3
|
sleep 3
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
@@ -281,7 +285,7 @@ polling(){
|
|||||||
;;
|
;;
|
||||||
"set_sub")
|
"set_sub")
|
||||||
echo "await_sub" > "$STATE_FILE"
|
echo "await_sub" > "$STATE_FILE"
|
||||||
send_msg "✏ 请输入新的订阅链接:"
|
send_msg "$BOT_TG_INPUT_SUB"
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
ts_*)
|
ts_*)
|
||||||
@@ -297,7 +301,7 @@ polling(){
|
|||||||
if [ "$(cat "$STATE_FILE" 2>/dev/null)" = "await_sub" ]; then
|
if [ "$(cat "$STATE_FILE" 2>/dev/null)" = "await_sub" ]; then
|
||||||
echo "" > "$STATE_FILE"
|
echo "" > "$STATE_FILE"
|
||||||
do_set_sub "$TEXT"
|
do_set_sub "$TEXT"
|
||||||
send_msg "订阅更新完成:\n$(cat "$LOGFILE")"
|
send_msg "$BOT_TG_SUB_UPDATED\n$(cat "$LOGFILE")"
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
@@ -308,6 +312,9 @@ polling(){
|
|||||||
/crash)
|
/crash)
|
||||||
send_menu
|
send_menu
|
||||||
;;
|
;;
|
||||||
|
/"$my_alias")
|
||||||
|
send_menu
|
||||||
|
;;
|
||||||
/help)
|
/help)
|
||||||
send_help
|
send_help
|
||||||
;;
|
;;
|
||||||
@@ -316,7 +323,7 @@ polling(){
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
#send_menu
|
[ "$TG_menupush" = ON ] && send_menu
|
||||||
|
|
||||||
polling
|
polling
|
||||||
|
|
||||||
|
|||||||
@@ -2,16 +2,18 @@
|
|||||||
|
|
||||||
. "$CRASHDIR"/libs/web_get_lite.sh
|
. "$CRASHDIR"/libs/web_get_lite.sh
|
||||||
|
|
||||||
|
load_lang bot_tg
|
||||||
|
|
||||||
private_bot() {
|
private_bot() {
|
||||||
comp_box "请先通过 \033[32;4mhttps://t.me/BotFather\033[0m 申请TG机器人并获取其\033[36mAPI TOKEN\033[0m"
|
comp_box "$BOT_TG_PRIVATE_HINT"
|
||||||
read -r -p "请输入你获取到的API TOKEN> " TOKEN
|
read -r -p "$BOT_TG_INPUT_TOKEN> " TOKEN
|
||||||
url_tg=https://api.telegram.org/bot${TOKEN}/getUpdates
|
url_tg=https://api.telegram.org/bot${TOKEN}/getUpdates
|
||||||
|
|
||||||
top_box "请向\033[32m你申请的机器人\033[33m而不是BotFather!\033[0m"
|
top_box "$BOT_TG_PRIVATE_TOP"
|
||||||
}
|
}
|
||||||
|
|
||||||
public_bot() {
|
public_bot() {
|
||||||
comp_box "请向机器人:\033[32;4mhttps://t.me/ShellCrashtg_bot\033[0m"
|
comp_box "$BOT_TG_PUBLIC_HINT"
|
||||||
TOKEN=publictoken
|
TOKEN=publictoken
|
||||||
url_tg=https://tgbot.jwsc.eu.org/publictoken/getUpdates
|
url_tg=https://tgbot.jwsc.eu.org/publictoken/getUpdates
|
||||||
}
|
}
|
||||||
@@ -20,7 +22,7 @@ tg_push_token() {
|
|||||||
push_TG="$TOKEN"
|
push_TG="$TOKEN"
|
||||||
setconfig push_TG "$TOKEN"
|
setconfig push_TG "$TOKEN"
|
||||||
setconfig chat_ID "$chat_ID"
|
setconfig chat_ID "$chat_ID"
|
||||||
. "$CRASHDIR"/libs/logger.sh && logger "已完成Telegram日志推送设置!" 32
|
. "$CRASHDIR"/libs/logger.sh && logger "$BOT_TG_SET_DONE" 32
|
||||||
}
|
}
|
||||||
|
|
||||||
get_chatid() {
|
get_chatid() {
|
||||||
@@ -28,7 +30,7 @@ get_chatid() {
|
|||||||
chat_ID=''
|
chat_ID=''
|
||||||
while [ $i -le 3 ] && [ -z "$chat_ID" ]; do
|
while [ $i -le 3 ] && [ -z "$chat_ID" ]; do
|
||||||
sleep 1
|
sleep 1
|
||||||
comp_box "\033[33m第 $i 次尝试获取对话ID失败,正在重试...\033[0m"
|
comp_box "\033[33m$BOT_TG_CHATID_RETRY_PREFIX $i $BOT_TG_CHATID_RETRY_SUFFIX\033[0m"
|
||||||
chat=$(web_get_lite "$url_tg" 2>/dev/null)
|
chat=$(web_get_lite "$url_tg" 2>/dev/null)
|
||||||
if [ -n "$chat" ]; then
|
if [ -n "$chat" ]; then
|
||||||
chat_ID=$(echo "$chat" | sed 's/"update_id":/{\n"update_id":/g' | grep "$public_key" | head -n1 | grep -oE '"id":.*,"is_bot' | sed s'/"id"://' | sed s'/,"is_bot//')
|
chat_ID=$(echo "$chat" | sed 's/"update_id":/{\n"update_id":/g' | grep "$public_key" | head -n1 | grep -oE '"id":.*,"is_bot' | sed s'/"id"://' | sed s'/,"is_bot//')
|
||||||
@@ -39,19 +41,19 @@ get_chatid() {
|
|||||||
|
|
||||||
set_bot() {
|
set_bot() {
|
||||||
public_key=$(cat /proc/sys/kernel/random/boot_id | sed 's/.*-//')
|
public_key=$(cat /proc/sys/kernel/random/boot_id | sed 's/.*-//')
|
||||||
btm_box "发送此秘钥: \033[30;46m$public_key\033[0m"
|
btm_box "$BOT_TG_SEND_KEY \033[30;46m$public_key\033[0m"
|
||||||
read -r -p "我已经发送完成(1/0)> " res
|
read -r -p "$BOT_TG_SENT_CONFIRM(1/0)> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
get_chatid
|
get_chatid
|
||||||
[ -z "$chat_ID" ] && [ "$TOKEN" != 'publictoken' ] && {
|
[ -z "$chat_ID" ] && [ "$TOKEN" != 'publictoken' ] && {
|
||||||
comp_box "\033[31m无法获取对话ID,请返回重新设置或手动输入ChatID!\033[0m" \
|
comp_box "\033[31m$BOT_TG_CHATID_FAIL\033[0m" \
|
||||||
"通常访问 \033[32;4m$url_tg\033[0m \n\033[36m即可看到ChatID\033[0m"
|
"$BOT_TG_CHATID_MANUAL_HINT \033[32;4m$url_tg\033[0m \n\033[36m$BOT_TG_CHATID_MANUAL_HINT2\033[0m"
|
||||||
read -r -p "请手动输入ChatID> " chat_ID
|
read -r -p "$BOT_TG_INPUT_CHATID> " chat_ID
|
||||||
}
|
}
|
||||||
if echo "$chat_ID" | grep -qE '^[0-9]{8,}$'; then
|
if echo "$chat_ID" | grep -qE '^[0-9]{8,}$'; then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m无法获取对话ID,请重新配置!\033[0m"
|
msg_alert "\033[31m$BOT_TG_CHATID_RECONFIG\033[0m"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -2,17 +2,15 @@
|
|||||||
. "$CRASHDIR"/libs/set_cron.sh
|
. "$CRASHDIR"/libs/set_cron.sh
|
||||||
|
|
||||||
bot_tg_start(){
|
bot_tg_start(){
|
||||||
bot_tg_stop
|
|
||||||
. "$CRASHDIR"/starts/start_legacy.sh
|
. "$CRASHDIR"/starts/start_legacy.sh
|
||||||
start_legacy "$CRASHDIR/menus/bot_tg.sh" 'bot_tg'
|
start_legacy "$CRASHDIR/menus/bot_tg.sh" 'bot_tg'
|
||||||
bot_tg_cron
|
|
||||||
}
|
}
|
||||||
bot_tg_stop(){
|
bot_tg_stop(){
|
||||||
cronset 'TG_BOT守护进程'
|
cronload | grep -q 'TG_BOT' && cronset 'TG_BOT'
|
||||||
[ -f "$TMPDIR/bot_tg.pid" ] && kill -TERM "$(cat "$TMPDIR/bot_tg.pid")" 2>/dev/null
|
[ -f "$TMPDIR/bot_tg.pid" ] && kill -TERM "$(cat "$TMPDIR/bot_tg.pid")" 2>/dev/null
|
||||||
killall bot_tg.sh 2>/dev/null
|
killall bot_tg.sh 2>/dev/null
|
||||||
rm -f "$TMPDIR/bot_tg.pid"
|
rm -f "$TMPDIR/bot_tg.pid"
|
||||||
}
|
}
|
||||||
bot_tg_cron(){
|
bot_tg_cron(){
|
||||||
cronset 'TG_BOT守护进程' "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程"
|
cronset 'ShellCrash-TG_BOT' "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,49 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) Juewuy
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
check_port() {
|
load_lang check_port
|
||||||
if [ "$1" -gt 65535 ] || [ "$1" -le 1 ]; then
|
|
||||||
msg_alert "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m"
|
_get_netstat_cmd() {
|
||||||
return 1
|
case "$1" in
|
||||||
elif echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$1|"; then
|
tcp) echo "netstat -ntl" ;;
|
||||||
msg_alert "\033[31m输入错误!请不要输入重复的端口!\033[0m"
|
udp) echo "netstat -nul" ;;
|
||||||
return 1
|
*) echo "netstat -ntul" ;;
|
||||||
elif netstat -ntul | grep -q ":$1[[:space:]]"; then
|
esac
|
||||||
msg_alert "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m"
|
}
|
||||||
return 1
|
|
||||||
else
|
check_port() {
|
||||||
return 0
|
local port="$1"
|
||||||
fi
|
local protocol="${2:-all}"
|
||||||
|
|
||||||
|
if [ "$port" -gt 65535 ] || [ "$port" -le 1 ]; then
|
||||||
|
msg_alert "\033[31m$CHECK_PORT_RANGE_ERR\033[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local check_cmd
|
||||||
|
check_cmd=$(_get_netstat_cmd "$protocol")
|
||||||
|
|
||||||
|
if $check_cmd 2>/dev/null | grep -q ":${port}[[:space:]]"; then
|
||||||
|
msg_alert "\033[31m$CHECK_PORT_OCCUPIED_ERR\033[0m"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
check_port_with_info() {
|
||||||
|
local port="$1"
|
||||||
|
local protocol="${2:-all}"
|
||||||
|
local check_cmd
|
||||||
|
check_cmd=$(_get_netstat_cmd "$protocol")
|
||||||
|
|
||||||
|
local conflict_line
|
||||||
|
conflict_line=$($check_cmd 2>/dev/null | grep ":${port}[[:space:]]" | head -n 1)
|
||||||
|
|
||||||
|
if [ -n "$conflict_line" ]; then
|
||||||
|
echo "$conflict_line"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user