Compare commits
478 Commits
1.9.4rc4.1
...
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 | ||
|
|
643cd7ccae | ||
|
|
65996d6a54 | ||
|
|
111b151cba | ||
|
|
b1366df6b1 | ||
|
|
de154158fa | ||
|
|
eac695a0f5 | ||
|
|
b65cd1f54c | ||
|
|
ce1295610d | ||
|
|
1f6535c532 | ||
|
|
84008a81bd | ||
|
|
5ea24d1ca4 | ||
|
|
a38c50fa1c | ||
|
|
be60423f08 | ||
|
|
fe27f4c3e4 | ||
|
|
8cab9b5419 | ||
|
|
41bd93766b | ||
|
|
7f52ee60d9 | ||
|
|
d7f93d1e62 | ||
|
|
346d480a13 | ||
|
|
89cf950490 | ||
|
|
ced3c3ac59 | ||
|
|
70b2816c04 | ||
|
|
b348535414 | ||
|
|
8fc3f34ca8 | ||
|
|
4e96a8c9b1 | ||
|
|
b493fba176 | ||
|
|
6fd9f9df03 | ||
|
|
2536cae8fe | ||
|
|
07920b35ce | ||
|
|
01174fa6d4 | ||
|
|
7aa4a49ec9 | ||
|
|
83bed2f3f3 | ||
|
|
2625d7f4e4 | ||
|
|
6fdc38b4b0 | ||
|
|
44907fb3a2 | ||
|
|
a5c2dcd482 | ||
|
|
7c7ce098cb | ||
|
|
1dadeb8d7a | ||
|
|
f128560d97 | ||
|
|
4f119380a4 | ||
|
|
17f30cba33 | ||
|
|
38d081f40a | ||
|
|
bae05042db | ||
|
|
aae0bd1880 | ||
|
|
95909e84c2 | ||
|
|
517675ff53 | ||
|
|
178228d8ec | ||
|
|
f99d5f974b | ||
|
|
692f2590d5 | ||
|
|
243e51dd5c | ||
|
|
0261e5ecd4 | ||
|
|
215fc29c35 | ||
|
|
21366a0667 | ||
|
|
6077061ba4 | ||
|
|
62a54a458a | ||
|
|
e468129572 | ||
|
|
60bee9039d | ||
|
|
a71ca7c362 | ||
|
|
27d7b0cdf1 | ||
|
|
1211c48dbd | ||
|
|
219279c165 | ||
|
|
89e6fe7faa | ||
|
|
64566495ff | ||
|
|
4a1e49e1f0 | ||
|
|
08afce3500 | ||
|
|
ccbe2468b8 | ||
|
|
7c91ab5c02 | ||
|
|
0ecfad2d2c | ||
|
|
71e4816020 | ||
|
|
f0eb2fc672 | ||
|
|
323b8cf61c | ||
|
|
241d3f2335 | ||
|
|
ca236f2651 | ||
|
|
7f403992b6 | ||
|
|
dc694f30c0 | ||
|
|
5a5b688ad5 | ||
|
|
b3fdf16591 | ||
|
|
4e0417c951 | ||
|
|
3759951575 | ||
|
|
e03be1f184 | ||
|
|
26fca6b359 | ||
|
|
aec40082b1 | ||
|
|
b93a63d94a | ||
|
|
3dcdd8a676 | ||
|
|
58508966de | ||
|
|
3188d08b34 | ||
|
|
022b78a4e3 | ||
|
|
a8f9aa4385 | ||
|
|
52070fbba3 | ||
|
|
ca72c5e1fc | ||
|
|
48ad7723ad | ||
|
|
60d945c3a2 | ||
|
|
a082c68a7b | ||
|
|
601c419154 | ||
|
|
3fe8f93500 | ||
|
|
ef07b31fd9 | ||
|
|
5647f60373 | ||
|
|
fed0bfeb90 | ||
|
|
358fd945f2 | ||
|
|
236fb8cd9a | ||
|
|
a91cfc44ca | ||
|
|
9ca503ec82 | ||
|
|
beab3386d2 | ||
|
|
8f60cc41e7 | ||
|
|
89975bdfff | ||
|
|
a45bd9c0d1 | ||
|
|
f4048b4b9c | ||
|
|
8fd77bb666 | ||
|
|
e8651591ff | ||
|
|
9b7c5e658c | ||
|
|
a80c5b5c42 | ||
|
|
382a9b7be3 | ||
|
|
fc247210cb | ||
|
|
df6ea47e2e | ||
|
|
41595bb643 | ||
|
|
25c0680e3a | ||
|
|
90682a06f4 | ||
|
|
a73efc839e | ||
|
|
8d82fcb88f | ||
|
|
148251bb7f | ||
|
|
8902a742a2 | ||
|
|
496467332a | ||
|
|
7fc043ec49 | ||
|
|
3d01ec827d | ||
|
|
7336e73354 | ||
|
|
ce4953ba75 | ||
|
|
cb0142785a | ||
|
|
4f5a037cc4 | ||
|
|
b39311d0a7 | ||
|
|
0d002eb957 | ||
|
|
83139a4936 | ||
|
|
dfaf2da168 | ||
|
|
4f9d543e46 | ||
|
|
1b3e4892a1 | ||
|
|
f18d0e4f6f | ||
|
|
7bf661ee3d | ||
|
|
c98180fc4e | ||
|
|
950afe955d | ||
|
|
48ee1ba07b | ||
|
|
a4d2a3d7d6 | ||
|
|
d33fef974a | ||
|
|
77687d4581 | ||
|
|
e25be4fafc | ||
|
|
6b9f416315 | ||
|
|
4dc170bf4a | ||
|
|
966b59692e | ||
|
|
8fe56b622e | ||
|
|
01848bdeea | ||
|
|
1dd48baca2 | ||
|
|
3f6b38b5fb | ||
|
|
09d794083c | ||
|
|
8b2bff3b03 | ||
|
|
bd5b9b315e | ||
|
|
b5a314ce67 | ||
|
|
8a9a294604 | ||
|
|
de9c890559 | ||
|
|
d0aca38039 | ||
|
|
7e3ec496be | ||
|
|
d023479daf | ||
|
|
599dcdb15b | ||
|
|
48fd622ba2 | ||
|
|
6aa56b0c29 | ||
|
|
bdc2505570 | ||
|
|
c72840d813 | ||
|
|
e028260a65 | ||
|
|
11498c1517 | ||
|
|
d26f724621 | ||
|
|
de3f4b4254 | ||
|
|
477eb3d2aa | ||
|
|
c52327a30c | ||
|
|
5d0a61f496 | ||
|
|
9ba5a687af | ||
|
|
3232c73233 | ||
|
|
1d76570c2c | ||
|
|
6dca739c3e | ||
|
|
0fb8c21c14 | ||
|
|
180629c8dd | ||
|
|
b4bbaba73d | ||
|
|
588afd7381 | ||
|
|
a6e26c0bd6 | ||
|
|
5ee05aafb3 | ||
|
|
056e50dea2 | ||
|
|
6a0a31d76e | ||
|
|
25e998c34a | ||
|
|
013305e455 | ||
|
|
c4a7d7a005 | ||
|
|
fa81312609 | ||
|
|
9360363478 | ||
|
|
db71fcd04a | ||
|
|
7422a3f3c8 | ||
|
|
77f30626b3 | ||
|
|
e20b33046b | ||
|
|
e99695a2f1 | ||
|
|
42d9f6c0b7 | ||
|
|
040accdef0 | ||
|
|
f7b50209f0 | ||
|
|
23040b3570 | ||
|
|
14b6118ee4 | ||
|
|
66d848581a | ||
|
|
b98a996cb4 | ||
|
|
1cef94d23c | ||
|
|
18e3046aa4 | ||
|
|
0b8733f00e | ||
|
|
04c5f088ba | ||
|
|
28de722560 | ||
|
|
5223400684 | ||
|
|
24bff21259 | ||
|
|
a3a8e9aa86 | ||
|
|
0317d12e1d | ||
|
|
27aefb7699 | ||
|
|
bacdf4675f | ||
|
|
58dd51b483 | ||
|
|
ff4f8673fc | ||
|
|
0c9d110437 | ||
|
|
b3b72b4b85 | ||
|
|
9c7bf11cfa | ||
|
|
c84a92b2e5 | ||
|
|
0cb57d1d7b | ||
|
|
329db0d9f2 | ||
|
|
496e353a11 | ||
|
|
2ca471a361 | ||
|
|
ebf0186266 | ||
|
|
7d8279c9df | ||
|
|
0c7cf39e29 | ||
|
|
ed6b4432e7 | ||
|
|
4e971176d2 | ||
|
|
63e6daca22 | ||
|
|
d01b96bdb3 | ||
|
|
2461c93b9f | ||
|
|
70b5c22fc2 | ||
|
|
ff278298c9 | ||
|
|
8cf3ab2228 | ||
|
|
3907be4c3f | ||
|
|
b5cfedf3dc | ||
|
|
5ccf102791 | ||
|
|
0fad4c0d3e | ||
|
|
bdd13aa91b | ||
|
|
b6d19a7ac4 | ||
|
|
e460df9ca6 | ||
|
|
b3d2c8af69 | ||
|
|
635dcd7ee3 | ||
|
|
cb38a98332 | ||
|
|
8ea6a38213 | ||
|
|
5154339546 | ||
|
|
2cad4ec818 | ||
|
|
4c16236823 | ||
|
|
422db97e87 | ||
|
|
174cbabb93 | ||
|
|
a5668dd94b | ||
|
|
16e3e7a489 | ||
|
|
31ea92516f | ||
|
|
e66bd832e1 | ||
|
|
7422f5dcc3 | ||
|
|
82f5fce989 | ||
|
|
3977565ad1 | ||
|
|
281595f79f | ||
|
|
602f3e2890 | ||
|
|
e048264d9e | ||
|
|
7c3039ea68 | ||
|
|
690db2fe73 | ||
|
|
26831994b1 | ||
|
|
f9af59a7a9 | ||
|
|
617b8cf4b8 | ||
|
|
f833bb9ce7 | ||
|
|
22b8e04717 | ||
|
|
48fee3d36d | ||
|
|
27906ee244 | ||
|
|
b2be8ab3fd | ||
|
|
08f346a6f4 | ||
|
|
739ee5d22c | ||
|
|
2d7fbdb443 | ||
|
|
3797d95174 | ||
|
|
7c33c24f80 | ||
|
|
0860d177a1 | ||
|
|
0cf5e798b3 | ||
|
|
0e6471c155 | ||
|
|
cf3b94424c | ||
|
|
e4efd439bf | ||
|
|
545ce0da20 | ||
|
|
d630f7534e | ||
|
|
ffce704f5e | ||
|
|
a1a9b10a85 | ||
|
|
98adc4dad5 | ||
|
|
56d8bbadc2 | ||
|
|
7676a3f607 | ||
|
|
55b8266dfd | ||
|
|
a544637651 | ||
|
|
51ff53f1d7 | ||
|
|
97de3c8fe8 | ||
|
|
da11c319b8 | ||
|
|
d797838378 | ||
|
|
093fffee05 | ||
|
|
ac60ba8001 | ||
|
|
2e150ca9d9 | ||
|
|
0712905fbe | ||
|
|
10e50dc244 | ||
|
|
d708f0e113 | ||
|
|
ff0fa89717 | ||
|
|
24ed96a618 | ||
|
|
3e331d786f | ||
|
|
cfa9c58451 | ||
|
|
26ae84afd5 | ||
|
|
85396a6b5d | ||
|
|
3147bb650d | ||
|
|
b065a7d4c8 | ||
|
|
903d0592ce | ||
|
|
d4646030a5 | ||
|
|
263792d0cf | ||
|
|
ad969c9f27 | ||
|
|
ea0bec152e | ||
|
|
167ab30b29 | ||
|
|
4760708248 | ||
|
|
64de8c8146 | ||
|
|
4003a80c56 | ||
|
|
2f796af178 | ||
|
|
1c4b936722 | ||
|
|
75302adb1c | ||
|
|
912f281730 | ||
|
|
270a5d68ab | ||
|
|
1e76dc11e8 | ||
|
|
cd7de527fa | ||
|
|
b428d4c786 | ||
|
|
f150d14f80 | ||
|
|
492a2fe898 | ||
|
|
a0df852611 | ||
|
|
a8f42ba443 | ||
|
|
b93ac17f2e | ||
|
|
da30e623ce | ||
|
|
75b69e91b6 | ||
|
|
2e1744a993 | ||
|
|
233b75b6e2 |
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
|
||||
|
||||
5
.github/workflows/core_auto_update.yml
vendored
5
.github/workflows/core_auto_update.yml
vendored
@@ -2,7 +2,7 @@ name: core_auto_update
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: 0 18 * * *
|
||||
- cron: 0 18 */3 * *
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_singbox_core.yaml@dev
|
||||
with:
|
||||
tag1: reF1nd/sing-box
|
||||
tag2: reF1nd-dev
|
||||
tag2: reF1nd-testing
|
||||
tag4: singboxr
|
||||
tag5: with_gvisor,with_quic,with_dhcp,with_wireguard,with_utls,with_shadowsocksr,with_acme,with_clash_api,with_tailscale
|
||||
tag6: gz
|
||||
@@ -20,6 +20,7 @@ jobs:
|
||||
|
||||
auto_update_meta_alpha:
|
||||
permissions: write-all
|
||||
needs: auto_update_singboxr_dev
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_meta_core.yaml@dev
|
||||
with:
|
||||
tag1: MetaCubeX/mihomo
|
||||
|
||||
90
.github/workflows/core_easy_update.yaml
vendored
Normal file
90
.github/workflows/core_easy_update.yaml
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
name: core_easy_update
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag1:
|
||||
description: 'meta or singbox or singboxr'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
get_version:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version: ${{ steps.get_version.outputs.version }}
|
||||
steps:
|
||||
- id: get_version
|
||||
run: |
|
||||
[ "${{ inputs.tag1 }}" = meta ] && repo="MetaCubeX/mihomo"
|
||||
[ "${{ inputs.tag1 }}" = singbox ] && 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)
|
||||
[ "${{ inputs.tag1 }}" = singboxr ] && latest_tag="${latest_tag}-reF1nd"
|
||||
echo "version=$latest_tag" >> $GITHUB_OUTPUT
|
||||
|
||||
update_meta_upx:
|
||||
if: github.event.inputs.tag1 == 'meta'
|
||||
needs: get_version
|
||||
permissions: write-all
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_meta_core.yaml@dev
|
||||
with:
|
||||
tag1: MetaCubeX/mihomo
|
||||
tag2: ${{ needs.get_version.outputs.version }}
|
||||
tag4: meta
|
||||
tag5: ""
|
||||
tag6: upx
|
||||
secrets: inherit
|
||||
|
||||
update_meta_tar:
|
||||
if: github.event.inputs.tag1 == 'meta'
|
||||
needs: [get_version, update_meta_upx]
|
||||
permissions: write-all
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_meta_core.yaml@dev
|
||||
with:
|
||||
tag1: MetaCubeX/mihomo
|
||||
tag2: ${{ needs.get_version.outputs.version }}
|
||||
tag4: meta
|
||||
tag5: ""
|
||||
tag6: tar.gz
|
||||
secrets: inherit
|
||||
|
||||
update_singboxr_upx:
|
||||
if: github.event.inputs.tag1 == 'singboxr'
|
||||
needs: get_version
|
||||
permissions: write-all
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_singbox_core.yaml@dev
|
||||
with:
|
||||
tag1: reF1nd/sing-box
|
||||
tag2: ${{ needs.get_version.outputs.version }}
|
||||
tag4: singboxr
|
||||
tag5: with_quic,with_utls,with_clash_api
|
||||
tag6: upx
|
||||
secrets: inherit
|
||||
|
||||
update_singboxr_tar:
|
||||
if: github.event.inputs.tag1 == 'singboxr'
|
||||
needs: [get_version, update_singboxr_upx]
|
||||
permissions: write-all
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_singbox_core.yaml@dev
|
||||
with:
|
||||
tag1: reF1nd/sing-box
|
||||
tag2: ${{ needs.get_version.outputs.version }}
|
||||
tag4: singboxr
|
||||
tag5: with_gvisor,with_quic,with_wireguard,with_utls,with_clash_api,with_tailscale
|
||||
tag6: tar.gz
|
||||
secrets: inherit
|
||||
|
||||
update_singbox_upx:
|
||||
if: github.event.inputs.tag1 == 'singbox'
|
||||
needs: get_version
|
||||
permissions: write-all
|
||||
uses: juewuy/ShellCrash/.github/workflows/update_singbox_core.yaml@dev
|
||||
with:
|
||||
tag1: SagerNet/sing-box
|
||||
tag2: ${{ needs.get_version.outputs.version }}
|
||||
tag4: singbox
|
||||
tag5: with_quic,with_utls,with_clash_api
|
||||
tag6: upx
|
||||
secrets: inherit
|
||||
|
||||
31
.github/workflows/update_meta_core.yaml
vendored
31
.github/workflows/update_meta_core.yaml
vendored
@@ -64,8 +64,8 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: go
|
||||
env:
|
||||
REPO: ${{ github.event.inputs.tag1 }}
|
||||
TAGS: ${{ github.event.inputs.tag5 }}
|
||||
REPO: ${{ inputs.tag1 }}
|
||||
TAGS: ${{ inputs.tag5 }}
|
||||
outputs:
|
||||
version: ${{steps.meta.outputs.version}}
|
||||
tags: ${{steps.meta.outputs.tags}}
|
||||
@@ -74,7 +74,7 @@ jobs:
|
||||
- name: get meta version
|
||||
id: meta
|
||||
run: |
|
||||
version=${{ github.event.inputs.tag2 }}
|
||||
version=${{ inputs.tag2 }}
|
||||
[ "$version" = Alpha ] && version="Alpha-$(date +"%Y%m%d")"
|
||||
echo version=$version >> $GITHUB_OUTPUT
|
||||
if [ -z "$TAGS" ];then
|
||||
@@ -137,8 +137,8 @@ jobs:
|
||||
- name: Checkout meta
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: ${{ github.event.inputs.tag1 }}
|
||||
ref: ${{ github.event.inputs.tag2 }}
|
||||
repository: ${{ inputs.tag1 }}
|
||||
ref: ${{ inputs.tag2 }}
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Setup Go
|
||||
@@ -189,10 +189,10 @@ jobs:
|
||||
- name: Zip core by upx
|
||||
if: env.ZIPTYPE == 'upx'
|
||||
run: |
|
||||
wget https://github.com/upx/upx/releases/download/v3.96/upx-3.96-amd64_linux.tar.xz
|
||||
wget https://github.com/upx/upx/releases/download/v3.94/upx-3.94-amd64_linux.tar.xz
|
||||
tar xf upx-3.96-amd64_linux.tar.xz
|
||||
tar xf upx-3.94-amd64_linux.tar.xz
|
||||
for upxv in 3.94 3.96 5.1.0;do
|
||||
wget https://github.com/upx/upx/releases/download/v$upxv/upx-$upxv-amd64_linux.tar.xz
|
||||
tar xf upx-$upxv-amd64_linux.tar.xz
|
||||
done
|
||||
for arch in amd64 armv5 armv7 arm64 386 mips-softfloat mipsle-hardfloat mipsle-softfloat;do
|
||||
[ ! -f ./tmp/linux-${arch}/meta ] && continue
|
||||
mv -f ./tmp/linux-${arch}/meta ./tmp/clash-linux-${arch}.upx
|
||||
@@ -201,12 +201,15 @@ jobs:
|
||||
armv5|mips* )
|
||||
./upx-3.94-amd64_linux/upx --no-lzma ./tmp/clash-linux-${arch}.upx
|
||||
;;
|
||||
*)
|
||||
armv7|386)
|
||||
./upx-3.96-amd64_linux/upx --no-lzma ./tmp/clash-linux-${arch}.upx
|
||||
;;
|
||||
*)
|
||||
./upx-5.1.0-amd64_linux/upx ./tmp/clash-linux-${arch}.upx
|
||||
;;
|
||||
esac
|
||||
done
|
||||
rm -rf upx-3.9*
|
||||
rm -rf upx-*
|
||||
|
||||
- name: Zip core by tar
|
||||
if: env.ZIPTYPE == 'tar.gz'
|
||||
@@ -250,9 +253,9 @@ jobs:
|
||||
if: ${{ env.RELEASE != '' && env.PUSHDIR == '' }}
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ github.event.inputs.tag3 }}
|
||||
name: ${{ github.event.inputs.tag3 }}
|
||||
body: "The ${{env.VERSION}} version of ${{ github.event.inputs.tag1 }} \n这是${{ github.event.inputs.tag1 }}的${{env.VERSION}}版本内核文件\nhttps://github.com/${{ github.event.inputs.tag1 }}/releases \nOnly support for ShellCrash\n仅适配ShellCrash项目"
|
||||
tag_name: ${{ inputs.tag3 }}
|
||||
name: ${{ inputs.tag3 }}
|
||||
body: "The ${{env.VERSION}} version of ${{ inputs.tag1 }} \n这是${{ inputs.tag1 }}的${{env.VERSION}}版本内核文件\nhttps://github.com/${{ inputs.tag1 }}/releases \nOnly support for ShellCrash\n仅适配ShellCrash项目"
|
||||
draft: false
|
||||
prerelease: true
|
||||
files: |
|
||||
|
||||
17
.github/workflows/update_singbox_core.yaml
vendored
17
.github/workflows/update_singbox_core.yaml
vendored
@@ -88,7 +88,7 @@ jobs:
|
||||
git fetch --tags sekai
|
||||
version=$(CGO_ENABLED=0 go run ./cmd/internal/read_tag)
|
||||
[ -z "$version" ] && version=${{ inputs.tag2 }}
|
||||
version=$(echo $version | sed 's/-reF1nd//')
|
||||
version=$(echo ${version%-*})
|
||||
echo version=$version >> $GITHUB_OUTPUT
|
||||
if [ -z "$TAGS" ];then
|
||||
if [ "$REPO" = 'SagerNet/sing-box' ];then
|
||||
@@ -208,10 +208,10 @@ jobs:
|
||||
- name: Zip core by upx
|
||||
if: env.ZIPTYPE == 'upx'
|
||||
run: |
|
||||
wget https://github.com/upx/upx/releases/download/v3.96/upx-3.96-amd64_linux.tar.xz
|
||||
wget https://github.com/upx/upx/releases/download/v3.94/upx-3.94-amd64_linux.tar.xz
|
||||
tar xf upx-3.96-amd64_linux.tar.xz
|
||||
tar xf upx-3.94-amd64_linux.tar.xz
|
||||
for upxv in 3.94 3.96 5.1.0;do
|
||||
wget https://github.com/upx/upx/releases/download/v$upxv/upx-$upxv-amd64_linux.tar.xz
|
||||
tar xf upx-$upxv-amd64_linux.tar.xz
|
||||
done
|
||||
for arch in amd64 armv5 armv7 arm64 386 mips-softfloat mipsle-hardfloat mipsle-softfloat;do
|
||||
[ ! -f ./tmp/linux-${arch}/sing-box ] && continue
|
||||
mv -f ./tmp/linux-${arch}/sing-box ./tmp/singbox-linux-${arch}.upx
|
||||
@@ -220,12 +220,15 @@ jobs:
|
||||
armv5|mips* )
|
||||
./upx-3.94-amd64_linux/upx --no-lzma ./tmp/singbox-linux-${arch}.upx
|
||||
;;
|
||||
*)
|
||||
armv7|386)
|
||||
./upx-3.96-amd64_linux/upx --no-lzma ./tmp/singbox-linux-${arch}.upx
|
||||
;;
|
||||
*)
|
||||
./upx-5.1.0-amd64_linux/upx ./tmp/singbox-linux-${arch}.upx
|
||||
;;
|
||||
esac
|
||||
done
|
||||
rm -rf upx-3.9*
|
||||
rm -rf upx-*
|
||||
|
||||
- name: Zip core by tar
|
||||
if: env.ZIPTYPE == 'tar.gz'
|
||||
|
||||
@@ -57,8 +57,7 @@ RUN apk add --no-cache \
|
||||
ca-certificates \
|
||||
tzdata \
|
||||
nftables \
|
||||
iproute2 \
|
||||
dcron
|
||||
iproute2
|
||||
|
||||
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
|
||||
echo "${TZ}" > /etc/timezone
|
||||
|
||||
176
README.md
176
README.md
@@ -1,24 +1,178 @@
|
||||
<h1 align="center">
|
||||
<br>ShellCrash<br>
|
||||
</h1>
|
||||
|
||||
|
||||
<p align="center">
|
||||
<h1 align="center">ShellCrash</h1>
|
||||
|
||||
<p align="center">
|
||||
<a target="_blank" href="https://github.com/MetaCubeX/mihomo/releases">
|
||||
<img src="https://img.shields.io/github/release/MetaCubeX/mihomo.svg?style=flat-square&label=Core">
|
||||
</a>
|
||||
<a target="_blank" href="https://github.com/juewuy/ShellCrash/releases">
|
||||
<img src="https://img.shields.io/github/release/juewuy/ShellCrash.svg?style=flat-square&label=ShellCrash&colorB=green">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
[中文](README_CN.md) | English
|
||||
<p align="center">
|
||||
<strong>A powerful script tool for the convenient deployment and management of mihomo/sing-box kernels in Shell environments.</strong>
|
||||
</p>
|
||||
|
||||
## Function introduction:
|
||||
<p align="center">
|
||||
<a href="README_CN.md">简体中文</a> | English
|
||||
</p>
|
||||
|
||||
~Convenient use in Shell environment through management script [Crash](https://github.com/Dreamacro/Crash)<br>~Support management of [Crash functions](https://lancellc.gitbook.io/Crash)<br>~Support online import [Crash](https://github.com/Dreamacro/Crash) supports sharing, subscription and configuration links<br>~Support configuration timing tasks, support configuration file timing updates<br>~Support online installation and Use local web panel to manage built-in rules<br>~Support routing mode, native mode and other mode switching<br>~Support online update<br>
|
||||
---
|
||||
|
||||
## Equipment support:
|
||||
## :rocket: Core Features
|
||||
|
||||
~Support various router devices based on OpenWrt or secondary custom development using OpenWrt<br>~Support various devices running standard Linux systems (such as Debian/CenOS/Armbian, etc.)<br>~Compatible with Padavan firmware (conservative mode), Pandora firmware<br>~Compatible with various types of devices customized and developed using the Linux kernel<br>——————————<br>~For more device support, please submit an issue or go to the TG group for feedback (the device name and the device core information returned by running uname -a must be provided)<br>
|
||||
- **Multi-Kernel Support**: Easily manage and switch between **mihomo** and **sing-box** kernels directly within the Shell environment.
|
||||
- **Flexible Configuration Management**: Supports online import of subscription links and configuration files to simplify the setup process.
|
||||
- **Automated Tasks**: Configure scheduled tasks for automatic updates of configuration files and rules.
|
||||
- **Graphical Dashboard**: Support for online installation and use of local Web Dashboards to intuitively manage built-in rules and traffic.
|
||||
- **Multiple Operation Modes**: Supports switching between various traffic forwarding modes, including Router mode and Local mode.
|
||||
- **One-Click Maintenance**: Built-in online update functionality to keep the script and features up to date.
|
||||
|
||||
## :computer: Device Support
|
||||
|
||||
ShellCrash is designed to be compatible with the vast majority of network devices based on the Linux kernel:
|
||||
|
||||
* **Router Devices**: Supports various firmwares based on OpenWrt or its derivatives (e.g., Xiaomi, Netgear etc.).
|
||||
* **Linux Servers**: Supports devices running standard Linux/GNU distributions (e.g., Debian, CentOS, Armbian, Ubuntu, etc.).
|
||||
* **Third-Party Firmware**: Compatible with Padavan (Conservative Mode), Pandora, and ASUS/Merlin firmware.
|
||||
* **Other Devices**: Compatible with other devices based on Linux/GNU or Linux/busybox.
|
||||
* **Docker**:Compatible with Docker environments (e.g., Synology, PVE, etc.).
|
||||
|
||||
> For additional device support, please submit an [Issue](https://github.com/juewuy/ShellCrash/issues) or provide feedback in the [Telegram Group](https://t.me/ShellClash) (please include the device model and the output of the `uname -a` command).
|
||||
|
||||
---
|
||||
|
||||
## :hammer_and_wrench: Installation Guide
|
||||
|
||||
> [!TIP]
|
||||
> If you encounter connection failures or SSL-related issues, please try switching to an alternative installation mirror.
|
||||
|
||||
### Prerequisites
|
||||
1. Ensure the device has **SSH** enabled and **Root privileges** obtained (Linux systems with a GUI can use the terminal directly).
|
||||
2. Connect to the device using an SSH tool (such as PuTTY, JuiceSSH, or the system's built-in terminal).
|
||||
|
||||
### :penguin: Standard Linux Device Installation
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Please perform the installation as the root user.
|
||||
|
||||
> Install via wget (jsDelivr CDN source)
|
||||
```sh
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@dev' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install_en.sh \
|
||||
&& bash /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
> Or install via curl (Author's private source)
|
||||
|
||||
```sh
|
||||
export url='https://gh.jwsc.eu.org/dev' && bash -c "$(curl -kfsSl $url/install_en.sh)" && . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
### :satellite: Router Device Installation
|
||||
|
||||
**Installation via `curl`:**
|
||||
> GitHub Source (Recommended for overseas environments or environments with proxy access)
|
||||
```sh
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/dev' \
|
||||
&& sh -c "$(curl -kfsSl $url/install_en.sh)" \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
> Or jsDelivr CDN source
|
||||
|
||||
```sh
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@dev' \
|
||||
&& sh -c "$(curl -kfsSl $url/install_en.sh)" \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
> Or Author's private source
|
||||
```sh
|
||||
export url='https://gh.jwsc.eu.org/dev' && sh -c "$(curl -kfsSl $url/install_en.sh)" && . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
**Installation via `wget`:**
|
||||
> GitHub Source (Recommended for overseas environments or environments with proxy access)
|
||||
```sh
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/dev' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install_en.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
> Or jsDelivr CDN source
|
||||
```sh
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@dev' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install_en.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
### :pager: Installation for Legacy Devices with Older `wget` Versions
|
||||
|
||||
> Author's private HTTP beta source
|
||||
```sh
|
||||
export url='http://t.jwsc.eu.org' \
|
||||
&& wget -q -O /tmp/install.sh $url/install_en.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
|
||||
### :cloud: Virtual Machines
|
||||
- **Alpine Linux VM**: It is highly recommended to use an Alpine image for optimal compatibility.
|
||||
```sh
|
||||
# Install necessary dependencies
|
||||
apk add --no-cache wget openrc ca-certificates tzdata nftables iproute2 dcron
|
||||
# Execute installation command
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@dev' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install_en.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
### :whale: Docker
|
||||
|
||||
Please visit the official Docker image:
|
||||
|
||||
- [ShellCrash on Docker Hub](https://hub.docker.com/r/juewuy/shellcrash)
|
||||
|
||||
|
||||
### :package: Local Installation
|
||||
|
||||
If online installation is not possible, please follow the guide for local installation:
|
||||
|
||||
- [Local ShellCrash Installation Tutorial | Juewuy's Blog](https://juewuy.github.io/bdaz)
|
||||
|
||||
---
|
||||
|
||||
## :book: Usage Instructions
|
||||
|
||||
After installation, enter the following commands in the terminal to launch the management interface:
|
||||
|
||||
```shell
|
||||
crash # Launch the interactive script menu
|
||||
crash -h # View the list of command help
|
||||
```
|
||||
|
||||
### Running Dependencies
|
||||
| Component | Necessity | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| curl / wget | Mandatory | Required for node saving, online installation, and update operations. |
|
||||
| iptables / nftables | Critical | Without these, the script can only run in Pure Mode. |
|
||||
| crontab | Low | Required for scheduled tasks; otherwise, they will not function. |
|
||||
| net-tools | Very Low | Used for automatic port occupancy detection. |
|
||||
| ubus / iproute-doc | Very Low | Used for automatically obtaining the local Host address. |
|
||||
|
||||
---
|
||||
|
||||
## :link: Related Links
|
||||
- FAQ: [Juewuy's Blog](https://juewuy.github.io/chang-jian-wen-ti/)
|
||||
- Changelog: [Release History](https://github.com/juewuy/ShellCrash/releases)
|
||||
- Discussion: [Telegram Group](https://t.me/ShellClash)
|
||||
|
||||
## :scroll: License
|
||||
|
||||
This project is licensed under the [GNU General Public License v3.0](LICENSE.txt).
|
||||
|
||||
233
README_CN.md
233
README_CN.md
@@ -1,9 +1,6 @@
|
||||
<h1 align="center">
|
||||
<br>ShellCrash<br>
|
||||
</h1>
|
||||
<h1 align="center">ShellCrash</h1>
|
||||
|
||||
|
||||
<p align="center">
|
||||
<p align="center">
|
||||
<a target="_blank" href="https://github.com/MetaCubeX/mihomo/releases">
|
||||
<img src="https://img.shields.io/github/release/MetaCubeX/mihomo.svg?style=flat-square&label=Core">
|
||||
</a>
|
||||
@@ -12,147 +9,183 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
中文 | [English](README.md)
|
||||
<p align="center">
|
||||
<strong>一款在 Shell 环境下便捷部署与管理 mihomo/sing-box 内核的脚本工具</strong>
|
||||
</p>
|
||||
|
||||
功能简介:
|
||||
--
|
||||
<p align="center">
|
||||
简体中文 | <a href="README.md">English</a>
|
||||
</p>
|
||||
|
||||
~通过管理脚本在Shell环境下便捷使用Mihomo/Singbox内核<br>
|
||||
~支持在Shell环境下管理<br>
|
||||
~支持在线导入订阅及配置链接<br>
|
||||
~支持配置定时任务,支持配置文件定时更新<br>
|
||||
~支持在线安装及使用本地网页面板管理内置规则<br>
|
||||
~支持路由模式、本机模式等多种模式切换<br>
|
||||
~支持在线更新<br>
|
||||
---
|
||||
|
||||
设备支持:
|
||||
--
|
||||
## :rocket: 核心特性
|
||||
|
||||
~支持各种基于OpenWrt或使用OpenWrt二次定制开发的路由器设备<br>
|
||||
~支持各种运行标准Linux系统(如Debian/CenOS/Armbian等)的设备<br>
|
||||
~兼容Padavan固件(保守模式)、潘多拉固件以及华硕/梅林固件<br>
|
||||
~兼容各类使用Linux内核定制开发的各类型设备<br>
|
||||
- **多内核支持**:在 Shell 环境下便捷管理及切换 **mihomo** 与 **sing-box** 内核。
|
||||
- **灵活配置管理**:支持在线导入订阅连结及配置文件,简化配置流程。
|
||||
- **自动化任务**:支持配置定时任务,实现配置文件与规则的自动定时更新。
|
||||
- **图形化面板**:支持在线安装并使用本地 Web 面板(Dashboard),直观管理内置规则与流量。
|
||||
- **多模式运行**:支持路由模式、本机模式等多种流量转发模式切换。
|
||||
- **一键维护**:内置脚本在线更新功能,保持版本与功能的及时更迭。
|
||||
|
||||
——————————<br>
|
||||
~更多设备支持,请提issue或前往TG群反馈(需提供设备名称及运行uname -a返回的设备核心信息)<br>
|
||||
## :computer: 设备支持
|
||||
|
||||
## 常见问题:
|
||||
ShellCrash 旨在兼容绝大多数基于 Linux 内核的网络设备:
|
||||
|
||||
[ShellCrash常见问题 | Juewuy's Blog](https://juewuy.github.io/chang-jian-wen-ti/)
|
||||
* **路由器设备**:支持各种基于 OpenWrt 或其二次开发固件(如 小米路由、网件路由等设备)。
|
||||
* **Linux 服务器**:支持运行标准 Linux/GNU发行版(如 Debian、CentOS、Armbian、Ubuntu 等)的设备。
|
||||
* **第三方固件**:兼容 Padavan(保守模式)、潘多拉固件以及华硕/梅林固件。
|
||||
* **其他设备**:兼容各种基于Linux/GNU或者Linux/busybox开发的设备。
|
||||
* **Docker**:部分可能不兼容的设备(如群辉、PVE),支持docker环境运行。
|
||||
|
||||
## 使用方式:
|
||||
> 更多设备支持,请提交 [Issue](https://github.com/juewuy/ShellCrash/issues) 或前往 [Telegram 群组](https://t.me/ShellClash) 反馈(请附上设备型号及 `uname -a` 命令的输出信息)。
|
||||
|
||||
~确认设备已经开启SSH并获取root权限(带GUI桌面的Linux设备可使用自带终端安装)<br>
|
||||
~使用SSH连接工具(如putty,JuiceSSH,系统自带终端等)路由器或Linux设备的SSH管理界面或终端界面
|
||||
---
|
||||
|
||||
~之后在SSH界面执行目标设备对应的安装命令,并按照后续提示完成安装<br>
|
||||
## :hammer_and_wrench: 安装指南
|
||||
|
||||
### 在线安装:<br>
|
||||
> [!TIP]
|
||||
> 若遇到连接失败或SSL相关问题,请尝试切换至其他安装镜像站。
|
||||
|
||||
(**如无法连接或出现SSL连接错误,请尝试更换各种不同的安装源!**)<br>
|
||||
### 前置条件
|
||||
1. 确保设备已开启 **SSH** 并获得 **Root 权限**(带图形介面的 Linux 系统可直接使用终端)。
|
||||
2. 使用 SSH 工具(如 Putty、JuiceSSH、或系统自带终端)连接至设备。
|
||||
|
||||
~**标准Linux设备安装:**<br>
|
||||
### :penguin: 标准 Linux 设备安装
|
||||
|
||||
```shell
|
||||
sudo -i #切换到root用户,如果需要密码,请输入密码
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && bash /tmp/install.sh && . /etc/profile &> /dev/null
|
||||
```
|
||||
或者
|
||||
```shell
|
||||
sudo -i #切换到root用户,如果需要密码,请输入密码
|
||||
export url='https://gh.jwsc.eu.org/master' && bash -c "$(curl -kfsSl $url/install.sh)" && . /etc/profile &> /dev/null
|
||||
> [!IMPORTANT]
|
||||
> 请以 root 用户进行安装。
|
||||
|
||||
> 使用 wget 安装(jsDelivr CDN 源)
|
||||
```sh
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh \
|
||||
&& bash /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**路由设备使用curl安装**:<br>
|
||||
> 或使用 curl 安装(作者私人源)
|
||||
|
||||
```shell
|
||||
#GitHub源(可能需要代理)
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/master' && sh -c "$(curl -kfsSl $url/install.sh)" && . /etc/profile &> /dev/null
|
||||
```
|
||||
或者
|
||||
```shell
|
||||
#jsDelivrCDN源
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' && sh -c "$(curl -kfsSl $url/install.sh)" && . /etc/profile &> /dev/null
|
||||
```
|
||||
或者
|
||||
```shell
|
||||
#作者私人源
|
||||
export url='https://gh.jwsc.eu.org/master' && sh -c "$(curl -kfsSl $url/install.sh)" && . /etc/profile &> /dev/null
|
||||
```sh
|
||||
export url='https://gh.jwsc.eu.org/master' \
|
||||
&& bash -c "$(curl -kfsSl $url/install.sh)" \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**路由设备使用wget安装**:<br>
|
||||
### :satellite: 路由器设备安装
|
||||
|
||||
```Shell
|
||||
#GitHub源(可能需要代理)
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && . /etc/profile &> /dev/null
|
||||
```
|
||||
或者
|
||||
```shell
|
||||
#jsDelivrCDN源
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && . /etc/profile &> /dev/null
|
||||
**使用 `curl` 安装:**
|
||||
> GitHub 源(推荐海外环境或具备代理环境使用)
|
||||
```sh
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/master' \
|
||||
&& sh -c "$(curl -kfsSl $url/install.sh)" \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
~**老旧设备使用低版本wge安装**:<br>
|
||||
> 或 jsDelivr CDN 源
|
||||
|
||||
```Shell
|
||||
#作者私人http内测源
|
||||
export url='http://t.jwsc.eu.org' && wget -q -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && . /etc/profile &> /dev/null
|
||||
```sh
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' \
|
||||
&& sh -c "$(curl -kfsSl $url/install.sh)" \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
##### ~**虚拟机安装:**<br>
|
||||
> 或作者私人源
|
||||
```sh
|
||||
export url='https://gh.jwsc.eu.org/master' \
|
||||
&& sh -c "$(curl -kfsSl $url/install.sh)" \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
虚拟机环境强烈建议使用Alpine镜像安装<br>
|
||||
**使用 `wget` 安装:**
|
||||
> GitHub 源(推荐海外环境或具备代理环境使用)
|
||||
```sh
|
||||
export url='https://raw.githubusercontent.com/juewuy/ShellCrash/master' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
```shell
|
||||
#安装必要依赖
|
||||
> 或 jsDelivr CDN 源
|
||||
```sh
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
### :pager: 老旧设备使用低版本 `wget` 安装
|
||||
|
||||
> 作者私人 http 内测源
|
||||
```sh
|
||||
export url='http://t.jwsc.eu.org' \
|
||||
&& wget -q -O /tmp/install.sh $url/install.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
|
||||
### :cloud: 虚拟机
|
||||
- **Alpine Linux 虚拟机**:强烈建议使用 Alpine 镜像以获得最佳兼容性
|
||||
```sh
|
||||
# 安装必要依赖
|
||||
apk add --no-cache wget openrc ca-certificates tzdata nftables iproute2 dcron
|
||||
#执行安装命令
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && sh /tmp/install.sh && . /etc/profile &> /dev/null
|
||||
|
||||
# 执行安装命令
|
||||
export url='https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master' \
|
||||
&& wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh \
|
||||
&& sh /tmp/install.sh \
|
||||
&& . /etc/profile &> /dev/null
|
||||
```
|
||||
|
||||
##### ~Docker安装:<br>
|
||||
### :whale: Docker
|
||||
|
||||
请前往[ShellCrash官方Docker镜像](https://hub.docker.com/r/juewuy/shellcrash)
|
||||
请访问官方 Docker 镜像:
|
||||
|
||||
### **本地安装:**<br>
|
||||
- [ShellCrash on Docker Hub](https://hub.docker.com/r/juewuy/shellcrash)
|
||||
|
||||
如使用在线安装出现问题,请参考:[本地安装ShellCrash的教程 | Juewuy's Blog](https://juewuy.github.io/bdaz) 使用本地安装!<br>
|
||||
|
||||
### 使用脚本:<br>
|
||||
### :package: 本地安装
|
||||
|
||||
安装完成管理脚本后,执行如下命令使用~
|
||||
若无法进行在线安装,请参照以下指南执行本地安装:
|
||||
|
||||
```Shell
|
||||
crash #进入对话
|
||||
crash -h #帮助列表
|
||||
```
|
||||
- [本地安装ShellCrash教程 | Juewuy's Blog](https://juewuy.github.io/bdaz)
|
||||
|
||||
#### **运行时的额外依赖**:<br>
|
||||
---
|
||||
|
||||
> 大部分的设备/系统都已经预装了以下的大部分依赖,使用时如无影响可以无视之
|
||||
## :book: 使用说明
|
||||
|
||||
安装完成后,在终端输入以下指令即可启动管理界面:
|
||||
|
||||
```shell
|
||||
curl/wget 必须 全部缺少时无法在线安装及更新,无法使用节点保存功能
|
||||
iptables/nftables 重要 缺少时只能使用纯净模式
|
||||
crontab 较低 缺少时无法启用定时任务功能
|
||||
net-tools 极低 缺少时无法正常检测端口占用
|
||||
ubus/iproute-doc 极低 缺少时无法正常获取本机host地址
|
||||
crash # 启动脚本交互选单
|
||||
crash -h # 查看命令帮助列表
|
||||
```
|
||||
|
||||
### 运行依赖说明
|
||||
| 依赖组件 | 必要性 | 说明 |
|
||||
| :--- | :--- | :--- |
|
||||
| curl / wget | 必须 | 缺少时将无法进行节点保存、在线安装及更新操作 |
|
||||
| iptables / nftables | 重要 | 缺少时仅能运行于纯淨模式 |
|
||||
| crontab | 较低 | 缺少时定时任务功能将失效 |
|
||||
| net-tools | 极低 | 缺少时无法自动检测端口占用 |
|
||||
| ubus / iproute-doc | 极低 | 缺少时无法自动获取本机 Host 地址 |
|
||||
|
||||
---
|
||||
|
||||
更新日志:
|
||||
--
|
||||
## :link: 相关链接
|
||||
- 常见问题:[Juewuy's Blog](https://juewuy.github.io/chang-jian-wen-ti/)
|
||||
- 更新日志:[Release History](https://github.com/juewuy/ShellCrash/releases)
|
||||
- 交流反馈:[Telegram 讨论组](https://t.me/ShellClash)
|
||||
|
||||
### [点击查看](https://github.com/juewuy/ShellCrash/releases)
|
||||
---
|
||||
|
||||
交流反馈:
|
||||
--
|
||||
### [TG讨论组](https://t.me/ShellClash)
|
||||
## :scroll: 许可协议
|
||||
|
||||
机场推荐:
|
||||
--
|
||||
本项目采用[GNU通用公共许可证第3.0版](LICENSE.txt)授权。
|
||||
|
||||
#### [Dler-墙洞,多年稳定运行,功能齐全](https://dler.pro/auth/register?affid=89698)<br>
|
||||
---
|
||||
|
||||
#### [大米-群友力荐,流媒体解锁,月付推荐](https://1s.bigmeok.me/user#/register?code=2PuWY9I7)<br>
|
||||
## :airplane: 机场推荐
|
||||
|
||||
- [**大米**](https://1s.bigmeok.me/user#/register?code=2PuWY9I7),群友力荐,流媒体解锁,月付推荐。
|
||||
|
||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
meta_v=v1.19.17
|
||||
singboxr_v=1.13.0-alpha.27
|
||||
versionsh=1.9.4rc4
|
||||
versionsh=1.9.5alpha13
|
||||
GeoIP_v=20251205
|
||||
|
||||
@@ -57,6 +57,7 @@ docker run -d \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add NET_RAW \
|
||||
--cap-add SYS_ADMIN \
|
||||
--sysctl net.ipv4.ip_forward=1 \
|
||||
--device /dev/net/tun:/dev/net/tun \
|
||||
--restart unless-stopped \
|
||||
juewuy/shellcrash:latest
|
||||
@@ -87,14 +88,10 @@ mkdir -p /root/ShellCrash
|
||||
```shell
|
||||
docker run -d \
|
||||
………………
|
||||
-v /root/ShellCrash:/etc/ShellCrash \
|
||||
-v shellcrash_configs:/etc/ShellCrash/configs \
|
||||
………………
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
|
||||
|
||||
------
|
||||
|
||||
## Compose Deployment(Compose部署)
|
||||
@@ -102,8 +99,8 @@ docker run -d \
|
||||
### 1. 创建宿主机目录并进入目录
|
||||
|
||||
```shell
|
||||
mkdir -p /root/ShellCrash
|
||||
cd /root/ShellCrash
|
||||
mkdir -p /tmp/ShellCrash
|
||||
cd /tmp/ShellCrash
|
||||
```
|
||||
|
||||
### 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`
|
||||
- macvlan 网络下宿主机默认无法直接访问容器 IP
|
||||
- 透明代理场景可能需要额外的网络规划
|
||||
|
||||
@@ -14,11 +14,15 @@ services:
|
||||
devices:
|
||||
- "/dev/net/tun:/dev/net/tun"
|
||||
sysctls:
|
||||
net.ipv4.ip_forward: 1
|
||||
- net.ipv4.ip_forward: 1
|
||||
# - net.ipv6.conf.all.forwarding=1
|
||||
volumes:
|
||||
- /etc/ShellCrash:/root/ShellCrash
|
||||
- shellcrash_configs:/etc/ShellCrash/configs:rw
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
shellcrash_configs:
|
||||
|
||||
networks:
|
||||
macvlan_lan:
|
||||
name: macvlan_lan
|
||||
|
||||
359
install.sh
359
install.sh
@@ -1,23 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
[ -z "$url" ] && url="https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@dev"
|
||||
type bash &>/dev/null && shtype=bash || shtype=sh
|
||||
[ -n "$(echo -e | grep e)" ] && echo=echo || echo='echo -e'
|
||||
echo "***********************************************"
|
||||
echo "** 欢迎使用 **"
|
||||
echo "** ShellCrash **"
|
||||
echo "** by Juewuy **"
|
||||
echo "***********************************************"
|
||||
|
||||
# Check available capacity
|
||||
language=chs
|
||||
[ -z "$url" ] && url="https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master"
|
||||
|
||||
# 内置工具
|
||||
cecho() {
|
||||
printf '%b\n' "$*"
|
||||
}
|
||||
dir_avail() {
|
||||
df -h >/dev/null 2>&1 && h="$2"
|
||||
df -P $h "${1:-.}" 2>/dev/null | awk 'NR==2 {print $4}'
|
||||
}
|
||||
|
||||
ckcmd() { #检查命令
|
||||
if command -v sh >/dev/null 2>&1;then
|
||||
ckcmd() {
|
||||
if command -v sh >/dev/null 2>&1; then
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
else
|
||||
type "$1" >/dev/null 2>&1
|
||||
@@ -29,7 +31,7 @@ webget() {
|
||||
if curl --version >/dev/null 2>&1; then
|
||||
[ "$3" = "echooff" ] && progress='-s' || progress='-#'
|
||||
[ -z "$4" ] && redirect='-L' || redirect=''
|
||||
result=$(curl -w %{http_code} --connect-timeout 5 $progress $redirect -ko $1 $2)
|
||||
result=$(curl -w %{http_code} --connect-timeout 5 "$progress" "$redirect" -ko "$1" "$2")
|
||||
[ -n "$(echo $result | grep -e ^2)" ] && result="200"
|
||||
else
|
||||
if wget --version >/dev/null 2>&1; then
|
||||
@@ -40,109 +42,99 @@ webget() {
|
||||
fi
|
||||
[ "$3" = "echoon" ] && progress=''
|
||||
[ "$3" = "echooff" ] && progress='-q'
|
||||
wget $progress $redirect $certificate $timeout -O $1 $2
|
||||
wget "$progress" "$redirect" "$certificate" "$timeout" -O "$1" "$2"
|
||||
[ $? -eq 0 ] && result="200"
|
||||
fi
|
||||
}
|
||||
error_down() {
|
||||
$echo "请参考 \033[32mhttps://github.com/juewuy/ShellCrash/blob/master/README_CN.md"
|
||||
$echo "\033[33m使用其他安装源重新安装!\033[0m"
|
||||
cecho "请参考 \033[32mhttps://github.com/juewuy/ShellCrash/blob/master/README_CN.md"
|
||||
cecho "\033[33m使用其他安装源重新安装!\033[0m"
|
||||
}
|
||||
|
||||
#安装及初始化
|
||||
# 安装及初始化
|
||||
set_alias() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
$echo "\033[36m请选择一个别名,或使用自定义别名:\033[0m"
|
||||
cecho "\033[36m请选择一个别名,或使用自定义别名:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
$echo " 1 【\033[32mcrash\033[0m】"
|
||||
$echo " 2 【\033[32m sc \033[0m】"
|
||||
$echo " 3 【\033[32m mm \033[0m】"
|
||||
$echo " 0 退出安装"
|
||||
cecho " 1 【\033[32mcrash\033[0m】"
|
||||
cecho " 2 【\033[32m sc \033[0m】"
|
||||
cecho " 3 【\033[32m mm \033[0m】"
|
||||
cecho " 0 退出安装"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字或自定义别名 > " res
|
||||
case "$res" in
|
||||
1) my_alias=crash ;;
|
||||
2) my_alias=sc ;;
|
||||
3) my_alias=mm ;;
|
||||
0) echo "安装已取消"; exit 1 ;;
|
||||
*) my_alias=$res ;;
|
||||
0)
|
||||
echo "安装已取消"
|
||||
exit 1
|
||||
;;
|
||||
1)
|
||||
my_alias=crash
|
||||
;;
|
||||
2)
|
||||
my_alias=sc
|
||||
;;
|
||||
3)
|
||||
my_alias=mm
|
||||
;;
|
||||
*)
|
||||
my_alias=$res
|
||||
;;
|
||||
esac
|
||||
cmd=$(ckcmd "$my_alias" | grep 'menu.sh')
|
||||
ckcmd "$my_alias" && [ -z "$cmd" ] && {
|
||||
$echo "\033[33m此别名和当前系统内置命令/别名冲突,请换一个!\033[0m"
|
||||
cecho "\033[33m此别名和当前系统内置命令/别名冲突,请换一个!\033[0m"
|
||||
sleep 1
|
||||
set_alias
|
||||
continue
|
||||
}
|
||||
break
|
||||
done
|
||||
}
|
||||
|
||||
gettar() {
|
||||
webget /tmp/ShellCrash.tar.gz "$url/ShellCrash.tar.gz"
|
||||
webget /tmp/ShellCrash.tar.gz "$url/ShellCrash.tar.gz" >/dev/null 2>&1
|
||||
if [ "$result" != "200" ]; then
|
||||
$echo "\033[33m文件下载失败!\033[0m"
|
||||
cecho "\033[33m文件下载失败!\033[0m"
|
||||
error_down
|
||||
exit 1
|
||||
else
|
||||
$CRASHDIR/start.sh stop 2>/dev/null
|
||||
#解压
|
||||
"$CRASHDIR"/start.sh stop 2>/dev/null
|
||||
# 解压
|
||||
echo "-----------------------------------------------"
|
||||
echo 开始解压文件!
|
||||
mkdir -p $CRASHDIR >/dev/null
|
||||
tar -zxf '/tmp/ShellCrash.tar.gz' -C $CRASHDIR/ || tar -zxf '/tmp/ShellCrash.tar.gz' --no-same-owner -C $CRASHDIR/
|
||||
if [ -s $CRASHDIR/init.sh ]; then
|
||||
echo "开始解压文件!"
|
||||
mkdir -p "$CRASHDIR" >/dev/null
|
||||
tar -zxf '/tmp/ShellCrash.tar.gz' -C "$CRASHDIR"/ || tar -zxf '/tmp/ShellCrash.tar.gz' --no-same-owner -C "$CRASHDIR"/
|
||||
if [ -s "$CRASHDIR"/init.sh ]; then
|
||||
set_alias
|
||||
. $CRASHDIR/init.sh >/dev/null
|
||||
[ "$?" != 0 ] && $echo "\033[33m初始化失败,请尝试本地安装!\033[0m" && exit 1
|
||||
. "$CRASHDIR"/init.sh >/dev/null
|
||||
[ "$?" != 0 ] && cecho "\033[33m初始化失败,请尝试本地安装!\033[0m" && exit 1
|
||||
else
|
||||
rm -rf /tmp/ShellCrash.tar.gz
|
||||
$echo "\033[33m文件解压失败!\033[0m"
|
||||
cecho "\033[33m文件解压失败!\033[0m"
|
||||
error_down
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
setdir() {
|
||||
set_usb_dir() {
|
||||
$echo "请选择安装目录"
|
||||
set_usb_dir() {
|
||||
while true; do
|
||||
cecho "请选择安装目录"
|
||||
du -hL /mnt | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$dir" ]; then
|
||||
$echo "\033[31m输入错误!请重新设置!\033[0m"
|
||||
set_usb_dir
|
||||
cecho "\033[31m输入错误!请重新设置!\033[0m"
|
||||
continue
|
||||
fi
|
||||
}
|
||||
set_asus_dir() {
|
||||
echo -e "请选择U盘目录"
|
||||
du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ ! -f "$dir/asusware.arm/etc/init.d/S50downloadmaster" ]; then
|
||||
echo -e "\033[31m未找到下载大师自启文件:$dir/asusware.arm/etc/init.d/S50downloadmaster,请检查设置!\033[0m"
|
||||
set_asus_dir
|
||||
fi
|
||||
}
|
||||
set_cust_dir() {
|
||||
echo "-----------------------------------------------"
|
||||
echo '可用路径 剩余空间:'
|
||||
df -h | awk '{print $6,$4}' | sed 1d
|
||||
echo '路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!!!'
|
||||
read -p "请输入自定义路径 > " dir
|
||||
if [ "$(dir_avail $dir)" = 0 ] || [ -n "$(echo $dir | grep -E 'tmp|opt|sys')" ]; then
|
||||
$echo "\033[31m路径错误!请重新设置!\033[0m"
|
||||
set_cust_dir
|
||||
fi
|
||||
}
|
||||
echo "-----------------------------------------------"
|
||||
$echo "\033[33m注意:安装ShellCrash至少需要预留约1MB的磁盘空间\033[0m"
|
||||
if [ -n "$systype" ]; then
|
||||
[ "$systype" = "Padavan" ] && dir=/etc/storage
|
||||
[ "$systype" = "mi_snapshot" ] && {
|
||||
$echo "\033[33m检测到当前设备为小米官方系统,请选择安装位置\033[0m"
|
||||
[ -d /data ] && $echo " 1 安装到 /data 目录,剩余空间:$(dir_avail /data -h)(支持软固化功能)"
|
||||
[ -d /userdisk ] && $echo " 2 安装到 /userdisk 目录,剩余空间:$(dir_avail /userdisk -h)(支持软固化功能)"
|
||||
[ -d /data/other_vol ] && $echo " 3 安装到 /data/other_vol 目录,剩余空间:$(dir_avail /data/other_vol -h)(支持软固化功能)"
|
||||
$echo " 4 安装到自定义目录(不推荐,不明勿用!)"
|
||||
$echo " 0 退出安装"
|
||||
break 1
|
||||
done
|
||||
}
|
||||
set_xiaomi_dir() {
|
||||
cecho "\033[33m检测到当前设备为小米官方系统,请选择安装位置\033[0m"
|
||||
[ -d /data ] && cecho " 1 安装到 /data 目录,剩余空间:$(dir_avail /data -h)(支持软固化功能)"
|
||||
[ -d /userdisk ] && cecho " 2 安装到 /userdisk 目录,剩余空间:$(dir_avail /userdisk -h)(支持软固化功能)"
|
||||
[ -d /data/other_vol ] && cecho " 3 安装到 /data/other_vol 目录,剩余空间:$(dir_avail /data/other_vol -h)(支持软固化功能)"
|
||||
cecho " 4 安装到自定义目录(不推荐,不明勿用!)"
|
||||
cecho " 0 退出安装"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
@@ -162,47 +154,78 @@ setdir() {
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
[ "$systype" = "asusrouter" ] && {
|
||||
$echo "\033[33m检测到当前设备为华硕固件,请选择安装方式\033[0m"
|
||||
$echo " 1 基于USB设备安装(限23年9月之前固件,须插入\033[31m任意\033[0mUSB设备)"
|
||||
$echo " 2 基于自启脚本安装(仅支持梅林及部分非koolshare官改固件)"
|
||||
$echo " 3 基于U盘+下载大师安装(支持所有固件,限ARM设备,须插入U盘或移动硬盘)"
|
||||
$echo " 0 退出安装"
|
||||
}
|
||||
set_asus_usb() {
|
||||
while true; do
|
||||
echo -e "请选择U盘目录"
|
||||
du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
dir=$(du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ ! -f "$dir/asusware.arm/etc/init.d/S50downloadmaster" ]; then
|
||||
echo -e "\033[31m未找到下载大师自启文件:$dir/asusware.arm/etc/init.d/S50downloadmaster,请检查设置!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
set_asus_dir() {
|
||||
cecho "\033[33m检测到当前设备为华硕固件,请选择安装方式\033[0m"
|
||||
cecho " 1 基于U盘+下载大师安装(支持所有固件,限ARM设备,须插入U盘或移动硬盘)"
|
||||
cecho " 2 基于自启脚本安装(仅支持部分梅林固件)"
|
||||
cecho " 0 退出安装"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
read -p "将脚本安装到USB存储/系统闪存?(1/0) > " res
|
||||
[ "$res" = "1" ] && set_usb_dir || dir=/jffs
|
||||
usb_status=1
|
||||
;;
|
||||
2)
|
||||
$echo "如无法正常开机启动,请重新使用USB方式安装!"
|
||||
sleep 2
|
||||
dir=/jffs
|
||||
;;
|
||||
3)
|
||||
echo -e "请先在路由器网页后台安装下载大师并启用,之后选择外置存储所在目录!"
|
||||
sleep 2
|
||||
set_asus_dir
|
||||
set_asus_usb
|
||||
;;
|
||||
2)
|
||||
cecho "如开机无法正常自启,请重新使用U盘+下载大师安装!"
|
||||
sleep 2
|
||||
dir=/jffs
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
[ "$systype" = "ng_snapshot" ] && dir=/tmp/mnt
|
||||
else
|
||||
$echo " 1 在\033[32m/etc目录\033[0m下安装(适合root用户)"
|
||||
$echo " 2 在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)"
|
||||
$echo " 3 在\033[32m当前用户目录\033[0m下安装(适合非root用户)"
|
||||
$echo " 4 在\033[32m外置存储\033[0m中安装"
|
||||
$echo " 5 手动设置安装目录"
|
||||
$echo " 0 退出安装"
|
||||
}
|
||||
set_cust_dir() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
echo '可用路径 剩余空间:'
|
||||
df -h | awk '{print $6,$4}' | sed 1d
|
||||
echo '路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!!!'
|
||||
read -p "请输入自定义路径 > " dir
|
||||
if [ "$(dir_avail "$dir")" = 0 ] || [ -n "$(echo "$dir" | grep -Eq '^/(tmp|opt|sys)(/|$)')" ]; then
|
||||
cecho "\033[31m路径错误!请重新设置!\033[0m"
|
||||
continue
|
||||
fi
|
||||
break 1
|
||||
done
|
||||
}
|
||||
|
||||
setdir() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[33m注意:安装ShellCrash至少需要预留约1MB的磁盘空间\033[0m"
|
||||
case "$systype" in
|
||||
Padavan) dir=/etc/storage ;;
|
||||
mi_snapshot) set_xiaomi_dir ;;
|
||||
asusrouter) set_asus_dir ;;
|
||||
ng_snapshot) dir=/tmp/mnt ;;
|
||||
*)
|
||||
cecho " 1 在\033[32m/etc目录\033[0m下安装(适合root用户)"
|
||||
cecho " 2 在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)"
|
||||
cecho " 3 在\033[32m当前用户目录\033[0m下安装(适合非root用户)"
|
||||
cecho " 4 在\033[32m外置存储\033[0m中安装"
|
||||
cecho " 5 手动设置安装目录"
|
||||
cecho " 0 退出安装"
|
||||
echo "----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
#设置目录
|
||||
# 设置目录
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/etc
|
||||
@@ -225,111 +248,125 @@ setdir() {
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ! -w $dir ]; then
|
||||
$echo "\033[31m没有$dir目录写入权限!请重新设置!\033[0m" && sleep 1 && setdir
|
||||
if [ ! -w "$dir" ]; then
|
||||
cecho "\033[31m没有$dir目录写入权限!请重新设置!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
$echo "目标目录\033[32m$dir\033[0m空间剩余:$(dir_avail $dir -h)"
|
||||
cecho "目标目录\033[32m$dir\033[0m空间剩余:$(dir_avail "$dir" -h)"
|
||||
read -p "确认安装?(1/0) > " res
|
||||
[ "$res" = "1" ] && CRASHDIR=$dir/ShellCrash || setdir
|
||||
if [ "$res" = "1" ]; then
|
||||
CRASHDIR="$dir"/ShellCrash
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
install() {
|
||||
echo "-----------------------------------------------"
|
||||
echo 开始从服务器获取安装文件!
|
||||
echo "开始从服务器获取安装文件!"
|
||||
echo "-----------------------------------------------"
|
||||
gettar
|
||||
echo "-----------------------------------------------"
|
||||
echo "ShellCrash 已经安装成功!"
|
||||
[ "$profile" = "~/.bashrc" ] && echo "请执行【. ~/.bashrc > /dev/null】命令以加载环境变量!"
|
||||
[ -n "$(ls -l /bin/sh | grep -oE 'zsh')" ] && echo "请执行【. ~/.zshrc > /dev/null】命令以加载环境变量!"
|
||||
[ "$profile" = "~/.bashrc" ] && echo "请执行【. ~/.bashrc > /dev/null】命令以更新环境变量!"
|
||||
[ -n "$(ls -l /bin/sh | grep -oE 'zsh')" ] && echo "请执行【. ~/.zshrc > /dev/null】命令以更新环境变量!"
|
||||
echo "-----------------------------------------------"
|
||||
$echo "\033[33m输入\033[30;47m $my_alias \033[0;33m命令即可管理!!!\033[0m"
|
||||
cecho "\033[33m输入\033[30;47m $my_alias \033[0;33m命令即可管理!!!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
}
|
||||
setversion() {
|
||||
echo "-----------------------------------------------"
|
||||
$echo "\033[33m请选择想要安装的版本:\033[0m"
|
||||
$echo " 1 \033[32m公测版(推荐)\033[0m"
|
||||
$echo " 2 \033[36m稳定版\033[0m"
|
||||
$echo " 3 \033[31m开发版\033[0m"
|
||||
cecho "\033[33m请选择想要安装的版本:\033[0m"
|
||||
cecho " 1 \033[32m公测版(推荐)\033[0m"
|
||||
cecho " 2 \033[36m稳定版\033[0m"
|
||||
cecho " 3 \033[31m开发版\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
2)
|
||||
url=$(echo $url | sed 's/master/stable/')
|
||||
;;
|
||||
3)
|
||||
url=$(echo $url | sed 's/master/dev/')
|
||||
;;
|
||||
1) release_type=master ;;
|
||||
2) release_type=stable ;;
|
||||
3) release_type=dev ;;
|
||||
*) ;;
|
||||
esac
|
||||
url=$(echo "$url" | sed "s/master/$release_type/")
|
||||
}
|
||||
#特殊固件识别及标记
|
||||
[ -f "/etc/storage/started_script.sh" ] && {
|
||||
|
||||
# 安装检查
|
||||
check_systype() {
|
||||
[ -f "/etc/storage/started_script.sh" ] && {
|
||||
systype=Padavan #老毛子固件
|
||||
initdir='/etc/storage/started_script.sh'
|
||||
}
|
||||
[ -d "/jffs" ] && {
|
||||
}
|
||||
[ -d "/jffs" ] && {
|
||||
systype=asusrouter #华硕固件
|
||||
[ -f "/jffs/.asusrouter" ] && initdir='/jffs/.asusrouter'
|
||||
[ -d "/jffs/scripts" ] && initdir='/jffs/scripts/nat-start'
|
||||
}
|
||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
||||
[ -w "/var/mnt/cfg/firewall" ] && systype=ng_snapshot #NETGEAR设备
|
||||
}
|
||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
||||
[ -w "/var/mnt/cfg/firewall" ] && systype=ng_snapshot #NETGEAR设备
|
||||
|
||||
#检查root权限
|
||||
if [ "$USER" != "root" -a -z "$systype" ]; then
|
||||
echo 当前用户:$USER
|
||||
$echo "\033[31m请尽量使用root用户(不要直接使用sudo命令!)执行安装!\033[0m"
|
||||
check_user() {
|
||||
if [ "$USER" != "root" ] && [ -z "$systype" ]; then
|
||||
echo "当前用户:$USER"
|
||||
cecho "\033[31m请尽量使用root用户(不要直接使用sudo命令!)执行安装!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "仍要安装?可能会产生未知错误!(1/0) > " res
|
||||
[ "$res" != "1" ] && exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
check_version() {
|
||||
echo "$url" | grep -q 'master' && setversion
|
||||
webget /tmp/version "$url/version" echooff
|
||||
[ "$result" = "200" ] && versionsh=$(cat /tmp/version)
|
||||
rm -rf /tmp/version
|
||||
|
||||
if [ -n "$(echo $url | grep master)" ]; then
|
||||
setversion
|
||||
fi
|
||||
#获取版本信息
|
||||
webget /tmp/version "$url/version" echooff
|
||||
[ "$result" = "200" ] && versionsh=$(cat /tmp/version)
|
||||
rm -rf /tmp/version
|
||||
|
||||
#输出
|
||||
$echo "最新版本:\033[32m$versionsh\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
$echo "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/ShellClash \033[0m"
|
||||
$echo "\033[37m支持各种基于openwrt的路由器设备"
|
||||
$echo "\033[33m支持Debian、Centos等标准Linux系统\033[0m"
|
||||
|
||||
if [ -n "$CRASHDIR" ]; then
|
||||
# 输出
|
||||
cecho "最新版本:\033[32m$versionsh\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
$echo "检测到旧的安装目录\033[36m$CRASHDIR\033[0m,是否覆盖安装?"
|
||||
$echo "\033[32m覆盖安装时不会移除配置文件!\033[0m"
|
||||
read -p "覆盖安装/卸载旧版本?(1/0) > " res
|
||||
case "$res" in
|
||||
cecho "\033[44m如遇问题请加TG群反馈:\033[42;30m t.me/ShellClash \033[0m"
|
||||
cecho "\033[37m支持各种基于openwrt的路由器设备"
|
||||
cecho "\033[33m支持Debian、Centos等标准Linux系统\033[0m"
|
||||
}
|
||||
check_dir() {
|
||||
if [ -n "$CRASHDIR" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
cecho "检测到旧的安装目录\033[36m$CRASHDIR\033[0m,是否覆盖安装?"
|
||||
cecho "\033[32m覆盖安装时不会移除配置文件!\033[0m"
|
||||
echo " 1 覆盖安装"
|
||||
echo " 2 卸载旧版本并安装"
|
||||
echo " 0 取消安装"
|
||||
read -p "请输入相应数字 > " num
|
||||
case "$num" in
|
||||
1)
|
||||
install
|
||||
;;
|
||||
0)
|
||||
rm -rf $CRASHDIR
|
||||
2)
|
||||
[ "$CRASHDIR" != "/" ] && rm -rf "$CRASHDIR"
|
||||
echo "-----------------------------------------------"
|
||||
$echo "\033[31m 旧版本文件已卸载!\033[0m"
|
||||
cecho "\033[31m 旧版本文件已卸载!\033[0m"
|
||||
setdir
|
||||
install
|
||||
;;
|
||||
9)
|
||||
echo "测试模式,变更安装位置"
|
||||
echo "测试模式,变更安装位置 $CRASHDIR"
|
||||
setdir
|
||||
install
|
||||
;;
|
||||
*)
|
||||
$echo "\033[31m输入错误!已取消安装!\033[0m"
|
||||
cecho "\033[31m已取消安装!\033[0m"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
else
|
||||
setdir
|
||||
install
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_systype
|
||||
check_user
|
||||
check_version
|
||||
check_dir
|
||||
|
||||
372
install_en.sh
Normal file
372
install_en.sh
Normal file
@@ -0,0 +1,372 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
echo "***********************************************"
|
||||
echo "** Welcome to **"
|
||||
echo "** ShellCrash **"
|
||||
echo "** by Juewuy **"
|
||||
echo "***********************************************"
|
||||
|
||||
language=en
|
||||
[ -z "$url" ] && url="https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master"
|
||||
|
||||
# Internal Tools
|
||||
cecho() {
|
||||
printf '%b\n' "$*"
|
||||
}
|
||||
dir_avail() {
|
||||
df -h >/dev/null 2>&1 && h="$2"
|
||||
df -P $h "${1:-.}" 2>/dev/null | awk 'NR==2 {print $4}'
|
||||
}
|
||||
ckcmd() {
|
||||
if command -v sh >/dev/null 2>&1; then
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
else
|
||||
type "$1" >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
webget() {
|
||||
# Parameter [$1] Download Path, [$2] Online URL
|
||||
# Parameter [$3] Display Output, [$4] Disable Redirects
|
||||
if curl --version >/dev/null 2>&1; then
|
||||
[ "$3" = "echooff" ] && progress='-s' || progress='-#'
|
||||
[ -z "$4" ] && redirect='-L' || redirect=''
|
||||
result=$(curl -w %{http_code} --connect-timeout 5 "$progress" "$redirect" -ko "$1" "$2")
|
||||
[ -n "$(echo $result | grep -e ^2)" ] && result="200"
|
||||
else
|
||||
if wget --version >/dev/null 2>&1; then
|
||||
[ "$3" = "echooff" ] && progress='-q' || progress='-q --show-progress'
|
||||
[ "$4" = "rediroff" ] && redirect='--max-redirect=0' || redirect=''
|
||||
certificate='--no-check-certificate'
|
||||
timeout='--timeout=3'
|
||||
fi
|
||||
[ "$3" = "echoon" ] && progress=''
|
||||
[ "$3" = "echooff" ] && progress='-q'
|
||||
wget "$progress" "$redirect" "$certificate" "$timeout" -O "$1" "$2"
|
||||
[ $? -eq 0 ] && result="200"
|
||||
fi
|
||||
}
|
||||
error_down() {
|
||||
cecho "Please refer to \033[32mhttps://github.com/juewuy/ShellCrash/blob/master/README.md"
|
||||
cecho "\033[33mUse an alternative source to reinstall!\033[0m"
|
||||
}
|
||||
|
||||
# Installation and Initialization
|
||||
set_alias() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[36mPlease select an alias or enter a custom one:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cecho " 1 【\033[32mcrash\033[0m】"
|
||||
cecho " 2 【\033[32m sc \033[0m】"
|
||||
cecho " 3 【\033[32m mm \033[0m】"
|
||||
cecho " 0 Exit Installation"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "Enter number or custom alias > " res
|
||||
case "$res" in
|
||||
0)
|
||||
echo "Installation cancelled"
|
||||
exit 1
|
||||
;;
|
||||
1)
|
||||
my_alias=crash
|
||||
;;
|
||||
2)
|
||||
my_alias=sc
|
||||
;;
|
||||
3)
|
||||
my_alias=mm
|
||||
;;
|
||||
*)
|
||||
my_alias=$res
|
||||
;;
|
||||
esac
|
||||
cmd=$(ckcmd "$my_alias" | grep 'menu.sh')
|
||||
ckcmd "$my_alias" && [ -z "$cmd" ] && {
|
||||
cecho "\033[33mThis alias conflicts with a system command; please choose another!\033[0m"
|
||||
sleep 1
|
||||
continue
|
||||
}
|
||||
break
|
||||
done
|
||||
}
|
||||
gettar() {
|
||||
webget /tmp/ShellCrash.tar.gz "$url/ShellCrash.tar.gz" >/dev/null 2>&1
|
||||
if [ "$result" != "200" ]; then
|
||||
cecho "\033[33mFile download failed!\033[0m"
|
||||
error_down
|
||||
exit 1
|
||||
else
|
||||
"$CRASHDIR"/start.sh stop 2>/dev/null
|
||||
# Extract
|
||||
echo "-----------------------------------------------"
|
||||
echo "Starting file extraction!"
|
||||
mkdir -p "$CRASHDIR" >/dev/null
|
||||
tar -zxf '/tmp/ShellCrash.tar.gz' -C "$CRASHDIR"/ || tar -zxf '/tmp/ShellCrash.tar.gz' --no-same-owner -C "$CRASHDIR"/
|
||||
if [ -s "$CRASHDIR"/init.sh ]; then
|
||||
set_alias
|
||||
. "$CRASHDIR"/init.sh >/dev/null
|
||||
[ "$?" != 0 ] && cecho "\033[33mInitialization failed, try local installation!\033[0m" && exit 1
|
||||
else
|
||||
rm -rf /tmp/ShellCrash.tar.gz
|
||||
cecho "\033[33mFile extraction failed!\033[0m"
|
||||
error_down
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
set_usb_dir() {
|
||||
while true; do
|
||||
cecho "Please select installation directory"
|
||||
du -hL /mnt | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "Enter number > " num
|
||||
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$dir" ]; then
|
||||
cecho "\033[31mInvalid input! Please try again!\033[0m"
|
||||
continue
|
||||
fi
|
||||
break 1
|
||||
done
|
||||
}
|
||||
set_xiaomi_dir() {
|
||||
cecho "\033[33mXiaomi device detected, please select installation location\033[0m"
|
||||
[ -d /data ] && cecho " 1 Install to /data, Free space: $(dir_avail /data -h) (Supports soft-hardening)"
|
||||
[ -d /userdisk ] && cecho " 2 Install to /userdisk, Free space: $(dir_avail /userdisk -h) (Supports soft-hardening)"
|
||||
[ -d /data/other_vol ] && cecho " 3 Install to /data/other_vol, Free space: $(dir_avail /data/other_vol -h) (Supports soft-hardening)"
|
||||
cecho " 4 Custom directory (Not recommended for beginners!)"
|
||||
cecho " 0 Exit"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "Enter number > " num
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/data
|
||||
;;
|
||||
2)
|
||||
dir=/userdisk
|
||||
;;
|
||||
3)
|
||||
dir=/data/other_vol
|
||||
;;
|
||||
4)
|
||||
set_cust_dir
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
set_asus_usb() {
|
||||
while true; do
|
||||
echo -e "Please select USB directory"
|
||||
du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "Enter number > " num
|
||||
dir=$(du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ ! -f "$dir/asusware.arm/etc/init.d/S50downloadmaster" ]; then
|
||||
echo -e "\033[31mDownload Master startup file not found: $dir/asusware.arm/etc/init.d/S50downloadmaster. Check settings!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
set_asus_dir() {
|
||||
cecho "\033[33mAsus firmware detected, please select installation method\033[0m"
|
||||
cecho " 1 Via USB + Download Master (Supports all firmware, ARM only, USB required)"
|
||||
cecho " 2 Via startup script (Merlin firmware only)"
|
||||
cecho " 0 Exit"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "Enter number > " num
|
||||
case "$num" in
|
||||
1)
|
||||
echo -e "Please install and enable Download Master in the router web UI first, then select the storage directory!"
|
||||
sleep 2
|
||||
set_asus_usb
|
||||
;;
|
||||
2)
|
||||
cecho "If auto-start fails after reboot, please use USB + Download Master method instead!"
|
||||
sleep 2
|
||||
dir=/jffs
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
set_cust_dir() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
echo 'Path | Free Space:'
|
||||
df -h | awk '{print $6,$4}' | sed 1d
|
||||
echo 'Path must start with "/". Files in virtual memory (/tmp, /opt, /sys...) will be lost on reboot!!!'
|
||||
read -p "Enter custom path > " dir
|
||||
if [ "$(dir_avail "$dir")" = 0 ] || [ -n "$(echo "$dir" | grep -Eq '^/(tmp|opt|sys)(/|$)')" ]; then
|
||||
cecho "\033[31mInvalid path! Please try again!\033[0m"
|
||||
continue
|
||||
fi
|
||||
break 1
|
||||
done
|
||||
}
|
||||
|
||||
setdir() {
|
||||
while true; do
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[33mNote: ShellCrash requires at least 1MB of disk space\033[0m"
|
||||
case "$systype" in
|
||||
Padavan) dir=/etc/storage ;;
|
||||
mi_snapshot) set_xiaomi_dir ;;
|
||||
asusrouter) set_asus_dir ;;
|
||||
ng_snapshot) dir=/tmp/mnt ;;
|
||||
*)
|
||||
cecho " 1 Install in \033[32m/etc\033[0m (Best for root users)"
|
||||
cecho " 2 Install in \033[32m/usr/share\033[0m (Standard Linux systems)"
|
||||
cecho " 3 Install in \033[32mUser Directory\033[0m (Best for non-root users)"
|
||||
cecho " 4 Install on \033[32mExternal Storage\033[0m"
|
||||
cecho " 5 Manual path entry"
|
||||
cecho " 0 Exit"
|
||||
echo "----------------------------------------------"
|
||||
read -p "Enter number > " num
|
||||
# Set Dir
|
||||
case "$num" in
|
||||
1)
|
||||
dir=/etc
|
||||
;;
|
||||
2)
|
||||
dir=/usr/share
|
||||
;;
|
||||
3)
|
||||
dir=~/.local/share
|
||||
mkdir -p ~/.config/systemd/user
|
||||
;;
|
||||
4)
|
||||
set_usb_dir
|
||||
;;
|
||||
5)
|
||||
set_cust_dir
|
||||
;;
|
||||
*)
|
||||
echo "Installation cancelled"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ! -w "$dir" ]; then
|
||||
cecho "\033[31mNo write permission for $dir! Please reset!\033[0m"
|
||||
sleep 1
|
||||
else
|
||||
cecho "Target directory: \033[32m$dir\033[0m | Free space: $(dir_avail "$dir" -h)"
|
||||
read -p "Confirm installation? (1/0) > " res
|
||||
if [ "$res" = "1" ]; then
|
||||
CRASHDIR="$dir"/ShellCrash
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
install() {
|
||||
echo "-----------------------------------------------"
|
||||
echo "Retrieving installation files from server..."
|
||||
echo "-----------------------------------------------"
|
||||
gettar
|
||||
echo "-----------------------------------------------"
|
||||
echo "ShellCrash installed successfully!"
|
||||
[ "$profile" = "~/.bashrc" ] && echo "Please run [. ~/.bashrc > /dev/null] to update environment variables!"
|
||||
[ -n "$(ls -l /bin/sh | grep -oE 'zsh')" ] && echo "Please run [. ~/.zshrc > /dev/null] to update environment variables!"
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[33mType \033[30;47m $my_alias \033[0;33m to start management dashboard!!!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
}
|
||||
setversion() {
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[33mSelect version to install:\033[0m"
|
||||
cecho " 1 \033[32mBeta (Recommended)\033[0m"
|
||||
cecho " 2 \033[36mStable\033[0m"
|
||||
cecho " 3 \033[31mDev (Unstable)\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "Enter number > " num
|
||||
case "$num" in
|
||||
1) release_type=master ;;
|
||||
2) release_type=stable ;;
|
||||
3) release_type=dev ;;
|
||||
*) ;;
|
||||
esac
|
||||
url=$(echo "$url" | sed "s/master/$release_type/")
|
||||
}
|
||||
|
||||
# Pre-Install Checks
|
||||
check_systype() {
|
||||
[ -f "/etc/storage/started_script.sh" ] && {
|
||||
systype=Padavan # Padavan Firmware
|
||||
initdir='/etc/storage/started_script.sh'
|
||||
}
|
||||
[ -d "/jffs" ] && {
|
||||
systype=asusrouter # Asus Firmware
|
||||
[ -f "/jffs/.asusrouter" ] && initdir='/jffs/.asusrouter'
|
||||
[ -d "/jffs/scripts" ] && initdir='/jffs/scripts/nat-start'
|
||||
}
|
||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot # Xiaomi device
|
||||
[ -w "/var/mnt/cfg/firewall" ] && systype=ng_snapshot # NETGEAR device
|
||||
}
|
||||
check_user() {
|
||||
if [ "$USER" != "root" ] && [ -z "$systype" ]; then
|
||||
echo "Current User: $USER"
|
||||
cecho "\033[31mPlease use the root user (do not use sudo directly!) to install!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "Install anyway? Unknown errors may occur! (1/0) > " res
|
||||
[ "$res" != "1" ] && exit 1
|
||||
fi
|
||||
}
|
||||
check_version() {
|
||||
echo "$url" | grep -q 'master' && setversion
|
||||
webget /tmp/version "$url/version" echooff
|
||||
[ "$result" = "200" ] && versionsh=$(cat /tmp/version)
|
||||
rm -rf /tmp/version
|
||||
|
||||
# Output
|
||||
cecho "Latest Version: \033[32m$versionsh\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[44mFor issues, please join the TG group: \033[42;30m t.me/ShellClash \033[0m"
|
||||
cecho "\033[37mSupports various OpenWrt-based router devices"
|
||||
cecho "\033[33mSupports Debian, Centos and standard Linux systems\033[0m"
|
||||
}
|
||||
check_dir() {
|
||||
if [ -n "$CRASHDIR" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
cecho "Old installation detected at \033[36m$CRASHDIR\033[0m. Overwrite?"
|
||||
cecho "\033[32mConfiguration files will NOT be removed during overwrite!\033[0m"
|
||||
echo " 1 Overwrite Installation"
|
||||
echo " 2 Uninstall old version and reinstall"
|
||||
echo " 0 Cancel"
|
||||
read -p "Enter number > " num
|
||||
case "$num" in
|
||||
1)
|
||||
install
|
||||
;;
|
||||
2)
|
||||
[ "$CRASHDIR" != "/" ] && rm -rf "$CRASHDIR"
|
||||
echo "-----------------------------------------------"
|
||||
cecho "\033[31mOld version uninstalled!\033[0m"
|
||||
setdir
|
||||
install
|
||||
;;
|
||||
9)
|
||||
echo "Test Mode: Changing installation path $CRASHDIR"
|
||||
setdir
|
||||
install
|
||||
;;
|
||||
*)
|
||||
cecho "\033[31mInstallation cancelled!\033[0m"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
setdir
|
||||
install
|
||||
fi
|
||||
}
|
||||
|
||||
check_systype
|
||||
check_user
|
||||
check_version
|
||||
check_dir
|
||||
@@ -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全分组规则+去广告
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🛡️ 直连域名, 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: 🤖 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: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||
- {name: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], 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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -34,20 +33,18 @@ proxy-groups:
|
||||
rules:
|
||||
- GEOSITE,private,🔒 私有网络
|
||||
- GEOSITE,ads,🛑 广告域名
|
||||
- GEOSITE,trackerslist,📋 Trackerslist
|
||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||
- GEOSITE,apple-cn,🍎 苹果服务
|
||||
- GEOSITE,google-cn,🇬 谷歌服务
|
||||
- GEOSITE,games-cn,🎮 游戏服务
|
||||
- GEOSITE,games,🕹️ 游戏平台
|
||||
- GEOSITE,media,🌍 国外媒体
|
||||
- GEOSITE,games,🎮 游戏平台
|
||||
- GEOSITE,ai,🤖 AI 平台
|
||||
- GEOSITE,networktest,📈 网络测试
|
||||
- GEOSITE,proxy,🧱 代理域名
|
||||
- GEOSITE,cn,🛡️ 直连域名
|
||||
- GEOSITE,proxy,🌎 国外域名
|
||||
- GEOSITE,cn,🇨🇳 国内域名
|
||||
- GEOIP,private,🔒 私有网络,no-resolve
|
||||
- GEOIP,cn,🀄️ 直连 IP
|
||||
- GEOIP,media,🌍 国外媒体
|
||||
- GEOIP,games,🎮 游戏平台
|
||||
- GEOIP,cn,🀄️ 国内 IP
|
||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||
- GEOIP,media,🌍 国外媒体
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,22 +1,21 @@
|
||||
#DustinWin-geosite全分组规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🛡️ 直连域名, 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: 🤖 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: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||
- {name: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -30,20 +29,18 @@ proxy-groups:
|
||||
|
||||
rules:
|
||||
- GEOSITE,private,🔒 私有网络
|
||||
- GEOSITE,trackerslist,📋 Trackerslist
|
||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||
- GEOSITE,apple-cn,🍎 苹果服务
|
||||
- GEOSITE,google-cn,🇬 谷歌服务
|
||||
- GEOSITE,games-cn,🎮 游戏服务
|
||||
- GEOSITE,games,🕹️ 游戏平台
|
||||
- GEOSITE,media,🌍 国外媒体
|
||||
- GEOSITE,games,🎮 游戏平台
|
||||
- GEOSITE,ai,🤖 AI 平台
|
||||
- GEOSITE,networktest,📈 网络测试
|
||||
- GEOSITE,proxy,🧱 代理域名
|
||||
- GEOSITE,cn,🛡️ 直连域名
|
||||
- GEOSITE,proxy,🌎 国外域名
|
||||
- GEOSITE,cn,🇨🇳 国内域名
|
||||
- GEOIP,private,🔒 私有网络,no-resolve
|
||||
- GEOIP,cn,🀄️ 直连 IP
|
||||
- GEOIP,media,🌍 国外媒体
|
||||
- GEOIP,games,🎮 游戏平台
|
||||
- GEOIP,cn,🀄️ 国内 IP
|
||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||
- GEOIP,media,🌍 国外媒体
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,12 +1,12 @@
|
||||
#DustinWin-gesite轻量规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
||||
- {name: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
||||
- {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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -20,9 +20,9 @@ proxy-groups:
|
||||
|
||||
rules:
|
||||
- GEOSITE,private,🔒 私有网络
|
||||
- GEOSITE,tld-proxy,🧱 代理域名
|
||||
- GEOSITE,proxy,🧱 代理域名
|
||||
- GEOSITE,tld-proxy,🌎 国外域名
|
||||
- GEOSITE,proxy,🌎 国外域名
|
||||
- GEOIP,private,🔒 私有网络,no-resolve
|
||||
- GEOIP,cn,🀄️ 直连 IP
|
||||
- GEOIP,cn,🀄️ 国内 IP
|
||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,23 +1,22 @@
|
||||
#DustinWin-geosite标准规则+去广告
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {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: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], 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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -32,16 +31,15 @@ proxy-groups:
|
||||
rules:
|
||||
- GEOSITE,private,🔒 私有网络
|
||||
- GEOSITE,ads,🛑 广告域名
|
||||
- GEOSITE,trackerslist,📋 Trackerslist
|
||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||
- GEOSITE,apple-cn,🍎 苹果服务
|
||||
- GEOSITE,google-cn,🇬 谷歌服务
|
||||
- GEOSITE,games-cn,🎮 游戏服务
|
||||
- GEOSITE,ai,🤖 AI 平台
|
||||
- GEOSITE,networktest,📈 网络测试
|
||||
- GEOSITE,proxy,🧱 代理域名
|
||||
- GEOSITE,cn,🛡️ 直连域名
|
||||
- GEOSITE,proxy,🌎 国外域名
|
||||
- GEOSITE,cn,🇨🇳 国内域名
|
||||
- GEOIP,private,🔒 私有网络,no-resolve
|
||||
- GEOIP,cn,🀄️ 直连 IP
|
||||
- GEOIP,cn,🀄️ 国内 IP
|
||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,20 +1,19 @@
|
||||
#DustinWin-geosite标准规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {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: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -28,16 +27,15 @@ proxy-groups:
|
||||
|
||||
rules:
|
||||
- GEOSITE,private,🔒 私有网络
|
||||
- GEOSITE,trackerslist,📋 Trackerslist
|
||||
- GEOSITE,microsoft-cn,🪟 微软服务
|
||||
- GEOSITE,apple-cn,🍎 苹果服务
|
||||
- GEOSITE,google-cn,🇬 谷歌服务
|
||||
- GEOSITE,games-cn,🎮 游戏服务
|
||||
- GEOSITE,ai,🤖 AI 平台
|
||||
- GEOSITE,networktest,📈 网络测试
|
||||
- GEOSITE,proxy,🧱 代理域名
|
||||
- GEOSITE,cn,🛡️ 直连域名
|
||||
- GEOSITE,proxy,🌎 国外域名
|
||||
- GEOSITE,cn,🇨🇳 国内域名
|
||||
- GEOIP,private,🔒 私有网络,no-resolve
|
||||
- GEOIP,cn,🀄️ 直连 IP
|
||||
- GEOIP,cn,🀄️ 国内 IP
|
||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,25 +1,26 @@
|
||||
#DustinWin-ruleset全分组规则+去广告
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🎮 游戏平台, type: select, proxies: [🚀 节点选择, 🎯 全球直连, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🛡️ 直连域名, 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: 🤖 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: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||
- {name: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], 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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -32,28 +33,20 @@ proxy-groups:
|
||||
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 100, include-all: true, filter: "(?i)(🇺🇸|美|us|unitedstates|united states)"}
|
||||
|
||||
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:
|
||||
type: http
|
||||
behavior: domain
|
||||
format: 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:
|
||||
private:
|
||||
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"
|
||||
path: ./ruleset/private.mrs
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||
interval: 86400
|
||||
|
||||
microsoft-cn:
|
||||
@@ -61,7 +54,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
apple-cn:
|
||||
@@ -69,7 +62,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
google-cn:
|
||||
@@ -77,7 +70,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
games-cn:
|
||||
@@ -85,15 +78,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: mrs
|
||||
path: ./ruleset/games-cn.mrs
|
||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games-cn.mrs"
|
||||
interval: 86400
|
||||
|
||||
games:
|
||||
@@ -101,7 +86,31 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
ai:
|
||||
@@ -109,7 +118,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
networktest:
|
||||
@@ -117,7 +126,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
proxy:
|
||||
@@ -125,7 +134,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
cn:
|
||||
@@ -133,7 +142,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
privateip:
|
||||
@@ -141,7 +150,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
cnip:
|
||||
@@ -149,23 +158,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: mrs
|
||||
path: ./ruleset/cnip.mrs
|
||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||
interval: 86400
|
||||
|
||||
telegramip:
|
||||
@@ -173,26 +166,43 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
rules:
|
||||
- RULE-SET,private,🔒 私有网络
|
||||
- RULE-SET,ads,🛑 广告域名
|
||||
- RULE-SET,trackerslist,📋 Trackerslist
|
||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||
- RULE-SET,apple-cn,🍎 苹果服务
|
||||
- RULE-SET,google-cn,🇬 谷歌服务
|
||||
- RULE-SET,games-cn,🎮 游戏服务
|
||||
- RULE-SET,games,🕹️ 游戏平台
|
||||
- RULE-SET,netflix,🎥 奈飞视频
|
||||
- RULE-SET,youtube,📹 油管视频
|
||||
- RULE-SET,media,🌍 国外媒体
|
||||
- RULE-SET,games,🎮 游戏平台
|
||||
- RULE-SET,ai,🤖 AI 平台
|
||||
- RULE-SET,networktest,📈 网络测试
|
||||
- RULE-SET,proxy,🧱 代理域名
|
||||
- RULE-SET,cn,🛡️ 直连域名
|
||||
- RULE-SET,proxy,🌎 国外域名
|
||||
- RULE-SET,cn,🇨🇳 国内域名
|
||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||
- RULE-SET,cnip,🀄️ 直连 IP
|
||||
- RULE-SET,mediaip,🌍 国外媒体
|
||||
- RULE-SET,gamesip,🎮 游戏平台
|
||||
- RULE-SET,cnip,🀄️ 国内 IP
|
||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||
- RULE-SET,netflixip,🎥 奈飞视频
|
||||
- RULE-SET,mediaip,🌍 国外媒体
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,22 +1,23 @@
|
||||
#DustinWin-ruleset全分组规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {name: 📋 Trackerslist, 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: [🎯 全球直连, 🚀 节点选择]}
|
||||
- {name: 🛡️ 直连域名, 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: 🤖 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: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||
- {name: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -34,15 +35,7 @@ rule-providers:
|
||||
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
|
||||
|
||||
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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||
interval: 86400
|
||||
|
||||
microsoft-cn:
|
||||
@@ -50,7 +43,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
apple-cn:
|
||||
@@ -58,7 +51,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
google-cn:
|
||||
@@ -66,7 +59,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
games-cn:
|
||||
@@ -74,15 +67,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: mrs
|
||||
path: ./ruleset/games-cn.mrs
|
||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/games-cn.mrs"
|
||||
interval: 86400
|
||||
|
||||
games:
|
||||
@@ -90,7 +75,31 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
ai:
|
||||
@@ -98,7 +107,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
networktest:
|
||||
@@ -106,7 +115,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
proxy:
|
||||
@@ -114,7 +123,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
cn:
|
||||
@@ -122,7 +131,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
privateip:
|
||||
@@ -130,7 +139,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
cnip:
|
||||
@@ -138,23 +147,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: mrs
|
||||
path: ./ruleset/cnip.mrs
|
||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cnip.mrs"
|
||||
interval: 86400
|
||||
|
||||
telegramip:
|
||||
@@ -162,25 +155,42 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
rules:
|
||||
- RULE-SET,private,🔒 私有网络
|
||||
- RULE-SET,trackerslist,📋 Trackerslist
|
||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||
- RULE-SET,apple-cn,🍎 苹果服务
|
||||
- RULE-SET,google-cn,🇬 谷歌服务
|
||||
- RULE-SET,games-cn,🎮 游戏服务
|
||||
- RULE-SET,games,🕹️ 游戏平台
|
||||
- RULE-SET,netflix,🎥 奈飞视频
|
||||
- RULE-SET,youtube,📹 油管视频
|
||||
- RULE-SET,media,🌍 国外媒体
|
||||
- RULE-SET,games,🎮 游戏平台
|
||||
- RULE-SET,ai,🤖 AI 平台
|
||||
- RULE-SET,networktest,📈 网络测试
|
||||
- RULE-SET,proxy,🧱 代理域名
|
||||
- RULE-SET,cn,🛡️ 直连域名
|
||||
- RULE-SET,proxy,🌎 国外域名
|
||||
- RULE-SET,cn,🇨🇳 国内域名
|
||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||
- RULE-SET,cnip,🀄️ 直连 IP
|
||||
- RULE-SET,mediaip,🌍 国外媒体
|
||||
- RULE-SET,gamesip,🎮 游戏平台
|
||||
- RULE-SET,cnip,🀄️ 国内 IP
|
||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||
- RULE-SET,netflixip,🎥 奈飞视频
|
||||
- RULE-SET,mediaip,🌍 国外媒体
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,10 +1,11 @@
|
||||
#DustinWin-ruleset轻量规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, DIRECT]}
|
||||
- {name: 🀄️ 国内 IP, 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: [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: 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)"}
|
||||
|
||||
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:
|
||||
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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||
interval: 86400
|
||||
|
||||
tld-proxy:
|
||||
@@ -38,7 +31,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
proxy:
|
||||
@@ -46,7 +39,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
privateip:
|
||||
@@ -54,7 +47,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
cnip:
|
||||
@@ -62,7 +55,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
telegramip:
|
||||
@@ -70,15 +63,14 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
rules:
|
||||
- RULE-SET,private,DIRECT
|
||||
- RULE-SET,tld-proxy,🧱 代理域名
|
||||
- RULE-SET,proxy,🧱 代理域名
|
||||
- RULE-SET,cn,🎯 全球直连
|
||||
- RULE-SET,tld-proxy,🌎 国外域名
|
||||
- RULE-SET,proxy,🌎 国外域名
|
||||
- RULE-SET,privateip,DIRECT,no-resolve
|
||||
- RULE-SET,cnip,🎯 全球直连
|
||||
- RULE-SET,cnip,🀄️ 国内 IP
|
||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,23 +1,22 @@
|
||||
#DustinWin-ruleset标准规则+去广告
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {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: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||
- {name: 🛑 广告域名, type: select, proxies: [🔴 全球拦截, 🟢 全球绕过]}
|
||||
- {name: 🔴 全球拦截, type: select, proxies: [REJECT], 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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -35,7 +34,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
ads:
|
||||
@@ -43,15 +42,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: mrs
|
||||
path: ./ruleset/ads.mrs
|
||||
url: "https://testingcf.jsdelivr.net/gh//DustinWin/ruleset_geodata@refs/heads/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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/ads.mrs"
|
||||
interval: 86400
|
||||
|
||||
microsoft-cn:
|
||||
@@ -59,7 +50,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
apple-cn:
|
||||
@@ -67,7 +58,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
google-cn:
|
||||
@@ -75,7 +66,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
games-cn:
|
||||
@@ -83,7 +74,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
ai:
|
||||
@@ -91,7 +82,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
networktest:
|
||||
@@ -99,7 +90,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
proxy:
|
||||
@@ -107,7 +98,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
cn:
|
||||
@@ -115,7 +106,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
privateip:
|
||||
@@ -123,7 +114,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
cnip:
|
||||
@@ -131,7 +122,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
telegramip:
|
||||
@@ -139,22 +130,21 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
rules:
|
||||
- RULE-SET,private,🔒 私有网络
|
||||
- RULE-SET,ads,🛑 广告域名
|
||||
- RULE-SET,trackerslist,📋 Trackerslist
|
||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||
- RULE-SET,apple-cn,🍎 苹果服务
|
||||
- RULE-SET,google-cn,🇬 谷歌服务
|
||||
- RULE-SET,games-cn,🎮 游戏服务
|
||||
- RULE-SET,ai,🤖 AI 平台
|
||||
- RULE-SET,networktest,📈 网络测试
|
||||
- RULE-SET,proxy,🧱 代理域名
|
||||
- RULE-SET,cn,🛡️ 直连域名
|
||||
- RULE-SET,proxy,🌎 国外域名
|
||||
- RULE-SET,cn,🇨🇳 国内域名
|
||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||
- RULE-SET,cnip,🀄️ 直连 IP
|
||||
- RULE-SET,cnip,🀄️ 国内 IP
|
||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,20 +1,19 @@
|
||||
#DustinWin-ruleset标准规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 全球直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点]}
|
||||
- {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: 🀄️ 直连 IP, type: select, proxies: [🎯 全球直连, 🚀 节点选择]}
|
||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 全球直连]}
|
||||
- {name: 📈 网络测试, type: select, proxies: [🎯 本地直连, 🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {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: 🀄️ 国内 IP, 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: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 全球直连]}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT], hidden: true}
|
||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||
- {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: 100, include-all: true, filter: "(0\\.[1-5]|低倍率|省流|大流量)"}
|
||||
@@ -32,15 +31,7 @@ rule-providers:
|
||||
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
|
||||
|
||||
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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/private.mrs"
|
||||
interval: 86400
|
||||
|
||||
microsoft-cn:
|
||||
@@ -48,7 +39,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
apple-cn:
|
||||
@@ -56,7 +47,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
google-cn:
|
||||
@@ -64,7 +55,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
games-cn:
|
||||
@@ -72,7 +63,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
ai:
|
||||
@@ -80,7 +71,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
networktest:
|
||||
@@ -88,7 +79,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
proxy:
|
||||
@@ -96,7 +87,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
cn:
|
||||
@@ -104,7 +95,7 @@ rule-providers:
|
||||
behavior: domain
|
||||
format: 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
|
||||
|
||||
privateip:
|
||||
@@ -112,7 +103,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
cnip:
|
||||
@@ -120,7 +111,7 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
telegramip:
|
||||
@@ -128,21 +119,20 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
|
||||
rules:
|
||||
- RULE-SET,private,🔒 私有网络
|
||||
- RULE-SET,trackerslist,📋 Trackerslist
|
||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||
- RULE-SET,apple-cn,🍎 苹果服务
|
||||
- RULE-SET,google-cn,🇬 谷歌服务
|
||||
- RULE-SET,games-cn,🎮 游戏服务
|
||||
- RULE-SET,ai,🤖 AI 平台
|
||||
- RULE-SET,networktest,📈 网络测试
|
||||
- RULE-SET,proxy,🧱 代理域名
|
||||
- RULE-SET,cn,🛡️ 直连域名
|
||||
- RULE-SET,proxy,🌎 国外域名
|
||||
- RULE-SET,cn,🇨🇳 国内域名
|
||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||
- RULE-SET,cnip,🀄️ 直连 IP
|
||||
- RULE-SET,cnip,🀄️ 国内 IP
|
||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
@@ -1,7 +1,7 @@
|
||||
#ShellCrash-geosite极简规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [{providers_tags}], include-all: true}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||
- {name: 🎯 本地直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||
rules:
|
||||
- GEOIP,cn,🎯 全球直连
|
||||
- GEOIP,cn,🎯 本地直连
|
||||
- MATCH,🚀 节点选择
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#ShellCrash-ruleset 全分组规则+去广告 For mihomo By Maozai 260107
|
||||
#ShellCrash-ruleset 全分组规则+去广告 For mihomo By Maozai 260111
|
||||
|
||||
#此版本为Maozai根据ACL4SSR规则修改优化而来,尽量在保持原有的基础上进行优化。
|
||||
#数据源采用了DustinWin/ruleset_geodata和MetaCubeX/meta-rules-dat两个开源项目的规则,感谢原作者的辛勤付出。
|
||||
@@ -11,12 +11,12 @@ proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, ✨ 自动选择(去高倍率), 🛠️ 手动切换, ⚖️ 负载均衡, 🚑 故障转移, 🎯 本地直连, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🛠️ 手动切换, type: select, include-all: true, proxies: [🎯 本地直连, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: ♻️ 自动选择, type: url-test, interval: 1800, tolerance: 50, include-all: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www)"}
|
||||
- {name: ✨ 自动选择(去高倍率), type: url-test, interval: 1800, tolerance: 50, include-all: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www|专线|专用|高级|直连|急速|高速|高倍率|游戏|铂金|钻石|企业|VIP|Ultra|Game|IEPL|IPLC|AIA|BGP|GIA|CN2|CMI|HGC|HKT|CTM|CC|AC|x([2-9]|\\d{2,}))"}
|
||||
- {name: ⚖️ 负载均衡, type: load-balance, interval: 1800, include-all: true, hidden: true}
|
||||
- {name: 🚑 故障转移, type: fallback, interval: 1800, include-all: true, hidden: true}
|
||||
|
||||
- {name: ✨ 自动选择(去高倍率), type: url-test, interval: 1800, tolerance: 50, include-all: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www)`(?i)(专线|专用|高级|直连|急速|高速|高倍率|游戏|铂金|钻石|企业|VIP|Ultra|Game|IEPL|IPLC|AIA|BGP|GIA|CN2|CMI|HGC|HKT|CTM|CC|AC|x([2-9]|\\d{2,}))"}
|
||||
- {name: ⚖️ 负载均衡, type: load-balance, interval: 1800, include-all: true, hidden: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www)"}
|
||||
- {name: 🚑 故障转移, type: fallback, interval: 1800, include-all: true, hidden: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www)"}
|
||||
#
|
||||
- {name: 🤖 AI 平台, type: select, proxies: [🚀 节点选择, 🤖 AI节点(过滤港澳), 🎯 本地直连, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🤖 AI节点(过滤港澳), type: url-test, interval: 3600, tolerance: 50, include-all: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www|🇭🇰|港|🇲🇴|澳门|hk|hongkong|hong kong)", hidden: true}
|
||||
- {name: 🤖 AI节点(过滤港澳), type: url-test, interval: 3600, tolerance: 50, include-all: true, exclude-filter: "(?i)(剩余|重置|到期|防失联|官网|导航|客服|http|www)`(?i)(🇭🇰|港|🇲🇴|澳门|hk|hongkong|hong kong)", hidden: true}
|
||||
- {name: 🎬 奈飞视频, type: select, proxies: [🚀 节点选择, 🎬 奈飞节点, 🎯 本地直连, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 🎬 奈飞节点, type: url-test, interval: 1800, tolerance: 50, include-all: true, filter: "(?i)(NF|奈飞|解锁|Netflix|NETFLIX|Media)", hidden: true}
|
||||
- {name: ▶️ 油管视频, type: select, proxies: [🚀 节点选择, 🎯 本地直连, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
@@ -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: 🧲 BT下载, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: 📈 网络测速, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇺🇸 美国节点, 🇯🇵 日本节点, 🇪🇺 欧洲节点, 🇰🇷 韩国节点, 🇸🇬 狮城节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||
- {name: ↔️ 直连软件, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, {providers_tags}]}
|
||||
- {name: 🀄️ 国内流量, type: select, proxies: [🎯 本地直连, 🚀 节点选择, ♻️ 自动选择, 🛠️ 手动切换, {providers_tags}]}
|
||||
@@ -45,10 +44,10 @@ proxy-groups:
|
||||
- {name: 🎯 本地直连, type: select, proxies: [DIRECT], hidden: true}
|
||||
|
||||
- {name: 🇭🇰 香港节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇭🇰|港|hk|hongkong|hong kong)"}
|
||||
- {name: 🇹🇼 台湾节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇹🇼|台|tw|taiwan|tai wan)"}
|
||||
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇺🇸|美|洛杉矶|圣何塞|西雅图|纽约|波特兰|旧金山|us|unitedstates|united states)"}
|
||||
- {name: 🇯🇵 日本节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇯🇵|日|东京|大阪|埼玉|九州|jp|japan)"}
|
||||
- {name: 🇪🇺 欧洲节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇪🇺|欧|德|英|法|荷|俄罗斯|西班牙|意大利|瑞士|瑞典|土耳其|挪威|芬兰|丹麦|比利时|爱尔兰|奥地利|波兰|葡萄牙|乌克兰|希腊|捷克|匈牙利|罗马尼亚|保加利亚|冰岛|克罗地亚)"}
|
||||
- {name: 🇹🇼 台湾节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇹🇼|台|tw|taiwan|tai wan)", exclude-filter: "(?i)(仙台)"}
|
||||
- {name: 🇺🇸 美国节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇺🇸|美|洛杉矶|圣何塞|西雅图|纽约|波特兰|旧金山|休斯|达拉斯|硅谷|堪萨斯|迈阿密|凤凰城|芝加哥|奥勒姆|us|unitedstates|united states)", exclude-filter: "(?i)(南美|中美|拉美|亚美尼亚|美属)"}
|
||||
- {name: 🇯🇵 日本节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇯🇵|日|东京|大阪|埼玉|九州|仙台|jp|japan)", exclude-filter: "(?i)(尼日利亚|尼日尔|日内瓦)"}
|
||||
- {name: 🇪🇺 欧洲节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇪🇺|欧|德|英|法|荷|俄罗斯|西班牙|意大利|瑞士|瑞典|土耳其|挪威|芬兰|丹麦|比利时|爱尔兰|奥地利|波兰|葡萄牙|乌克兰|希腊|捷克|匈牙利|罗马尼亚|保加利亚|冰岛|克罗地亚|阿姆斯特丹)"}
|
||||
- {name: 🇰🇷 韩国节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇰🇷|韩|韓|首尔|kr|kor)"}
|
||||
- {name: 🇸🇬 狮城节点, type: url-test, tolerance: 50, include-all: true, filter: "(?i)(🇸🇬|新加坡|狮城|sg|singapore)"}
|
||||
|
||||
@@ -85,13 +84,6 @@ rule-providers:
|
||||
behavior: ipcidr
|
||||
proxy: DIRECT
|
||||
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:
|
||||
type: http
|
||||
format: text
|
||||
@@ -169,13 +161,6 @@ rule-providers:
|
||||
behavior: domain
|
||||
proxy: DIRECT
|
||||
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:
|
||||
type: http
|
||||
format: mrs
|
||||
@@ -221,8 +206,8 @@ rule-providers:
|
||||
|
||||
#规则顺序
|
||||
rules:
|
||||
- DOMAIN-SUFFIX,captive.apple.com,DIRECT
|
||||
- DOMAIN-SUFFIX,kamo.teracloud.jp,DIRECT
|
||||
- DOMAIN-SUFFIX,captive.apple.com,🍎 苹果服务
|
||||
- DOMAIN-SUFFIX,kamo.teracloud.jp,🀄️ 国内流量
|
||||
|
||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||
- RULE-SET,private,🔒 私有网络
|
||||
@@ -231,7 +216,6 @@ rules:
|
||||
|
||||
- RULE-SET,networktest,📈 网络测速
|
||||
- RULE-SET,applications,↔️ 直连软件
|
||||
- RULE-SET,trackerslist,🧲 BT下载
|
||||
- RULE-SET,apple-cn,🍎 苹果服务
|
||||
- RULE-SET,microsoft-cn,🪟 微软服务
|
||||
- RULE-SET,google-cn,🇬 谷歌服务
|
||||
@@ -247,7 +231,6 @@ rules:
|
||||
|
||||
- RULE-SET,proxy,🌐 国际流量
|
||||
- RULE-SET,cn,🀄️ 国内流量
|
||||
- RULE-SET,gamesip,🎮 外服游戏
|
||||
- RULE-SET,mediaip,🌍 国际媒体
|
||||
- RULE-SET,cnip,🀄️ 国内流量
|
||||
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
#ShellCrash-ruleset极简规则
|
||||
proxy-groups:
|
||||
- {name: 🚀 节点选择, type: select, proxies: [{providers_tags}], include-all: true}
|
||||
- {name: 🎯 全球直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||
- {name: 🎯 本地直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||
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"
|
||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/cn.mrs"
|
||||
interval: 86400
|
||||
privateip:
|
||||
type: http
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
cnip:
|
||||
type: http
|
||||
behavior: ipcidr
|
||||
format: 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
|
||||
rules:
|
||||
- RULE-SET,privateip,🎯 全球直连,no-resolve
|
||||
- RULE-SET,cn,🎯 全球直连
|
||||
- RULE-SET,cnip,🎯 全球直连
|
||||
- RULE-SET,privateip,🎯 本地直连,no-resolve
|
||||
- RULE-SET,cn,🎯 本地直连
|
||||
- RULE-SET,cnip,🎯 本地直连
|
||||
- MATCH,🚀 节点选择
|
||||
|
||||
@@ -3,17 +3,18 @@
|
||||
"outbounds": [
|
||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🕹️ 游戏平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "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": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {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": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🀄️ 国内 IP", "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": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
||||
@@ -34,34 +35,27 @@
|
||||
"rules": [
|
||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "ads" ], "outbound": "🛑 广告域名" },
|
||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||
{ "rule_set": [ "games" ], "outbound": "🕹️ 游戏平台" },
|
||||
{ "rule_set": [ "netflix" ], "outbound": "🎥 奈飞视频" },
|
||||
{ "rule_set": [ "youtube" ], "outbound": "📹 油管视频" },
|
||||
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
||||
{ "rule_set": [ "games" ], "outbound": "🎮 游戏平台" },
|
||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||
|
||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" },
|
||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" },
|
||||
{ "rule_set": [ "gamesip" ], "outbound": "🎮 游戏平台" }
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
|
||||
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
||||
],
|
||||
"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",
|
||||
"type": "remote",
|
||||
@@ -71,11 +65,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "trackerslist",
|
||||
"tag": "private",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/trackerslist.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/trackerslist.srs",
|
||||
"path": "./ruleset/private.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -110,14 +104,6 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "media",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/media.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "games",
|
||||
"type": "remote",
|
||||
@@ -126,6 +112,30 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "netflix",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/netflix.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/netflix.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "youtube",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/youtube.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/youtube.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "media",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/media.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "ai",
|
||||
"type": "remote",
|
||||
@@ -159,11 +169,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "privateip",
|
||||
"tag": "telegramip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/privateip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
||||
"path": "./ruleset/telegramip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -174,6 +184,14 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "netflixip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/netflixip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/netflixip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "mediaip",
|
||||
"type": "remote",
|
||||
@@ -181,22 +199,6 @@
|
||||
"path": "./ruleset/mediaip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/mediaip.srs",
|
||||
"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": "🐟 漏网之鱼"
|
||||
|
||||
@@ -3,17 +3,18 @@
|
||||
"outbounds": [
|
||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🕹️ 游戏平台", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "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": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {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": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||
@@ -31,24 +32,25 @@
|
||||
"route": {
|
||||
"rules": [
|
||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||
{ "rule_set": [ "games" ], "outbound": "🕹️ 游戏平台" },
|
||||
{ "rule_set": [ "netflix" ], "outbound": "🎥 奈飞视频" },
|
||||
{ "rule_set": [ "youtube" ], "outbound": "📹 油管视频" },
|
||||
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
||||
{ "rule_set": [ "games" ], "outbound": "🎮 游戏平台" },
|
||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||
|
||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" },
|
||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" },
|
||||
{ "rule_set": [ "gamesip" ], "outbound": "🎮 游戏平台" }
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
|
||||
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
||||
],
|
||||
"rule_set": [
|
||||
{
|
||||
@@ -59,14 +61,6 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||
"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",
|
||||
"type": "remote",
|
||||
@@ -99,14 +93,6 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games-cn.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "media",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/media.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "games",
|
||||
"type": "remote",
|
||||
@@ -115,6 +101,30 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/games.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "netflix",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/netflix.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/netflix.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "youtube",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/youtube.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/youtube.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "media",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/media.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/media.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "ai",
|
||||
"type": "remote",
|
||||
@@ -148,11 +158,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "privateip",
|
||||
"tag": "telegramip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/privateip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
||||
"path": "./ruleset/telegramip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -163,6 +173,14 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "netflixip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/netflixip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/netflixip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "mediaip",
|
||||
"type": "remote",
|
||||
@@ -170,22 +188,6 @@
|
||||
"path": "./ruleset/mediaip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/mediaip.srs",
|
||||
"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": "🐟 漏网之鱼"
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
{
|
||||
"outbounds": [
|
||||
{ "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": "direct" },
|
||||
@@ -20,24 +21,15 @@
|
||||
"route": {
|
||||
"rules": [
|
||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "tld-proxy" ], "outbound": "🧱 代理域名" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "tld-proxy" ], "outbound": "🌎 国外域名" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||
|
||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🎯 本地直连" }
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||
],
|
||||
"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",
|
||||
"type": "remote",
|
||||
@@ -63,11 +55,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "privateip",
|
||||
"tag": "telegramip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/privateip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
||||
"path": "./ruleset/telegramip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -77,14 +69,6 @@
|
||||
"path": "./ruleset/cnip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.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": "🐟 漏网之鱼"
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
"outbounds": [
|
||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
||||
{ "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": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🀄️ 国内 IP", "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": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
||||
@@ -32,30 +31,21 @@
|
||||
"rules": [
|
||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "ads" ], "outbound": "🛑 广告域名" },
|
||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||
|
||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" }
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||
],
|
||||
"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",
|
||||
"type": "remote",
|
||||
@@ -65,11 +55,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "trackerslist",
|
||||
"tag": "private",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/trackerslist.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/trackerslist.srs",
|
||||
"path": "./ruleset/private.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -137,11 +127,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "privateip",
|
||||
"tag": "telegramip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/privateip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
||||
"path": "./ruleset/telegramip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -151,14 +141,6 @@
|
||||
"path": "./ruleset/cnip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.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": "🐟 漏网之鱼"
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
"outbounds": [
|
||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||
{ "tag": "📈 网络测试", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "🤖 AI 平台", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点" ] },
|
||||
{ "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": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||
@@ -29,20 +28,19 @@
|
||||
"route": {
|
||||
"rules": [
|
||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "trackerslist" ], "outbound": "📋 Trackerslist" },
|
||||
{ "rule_set": [ "microsoft-cn" ], "outbound": "🪟 微软服务" },
|
||||
{ "rule_set": [ "apple-cn" ], "outbound": "🍎 苹果服务" },
|
||||
{ "rule_set": [ "google-cn" ], "outbound": "🇬 谷歌服务" },
|
||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||
|
||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" }
|
||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||
|
||||
],
|
||||
"rule_set": [
|
||||
@@ -54,14 +52,6 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/private.srs",
|
||||
"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",
|
||||
"type": "remote",
|
||||
@@ -127,11 +117,11 @@
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
"tag": "privateip",
|
||||
"tag": "telegramip",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"path": "./ruleset/privateip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/privateip.srs",
|
||||
"path": "./ruleset/telegramip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/telegramip.srs",
|
||||
"download_detour": "DIRECT"
|
||||
},
|
||||
{
|
||||
@@ -141,14 +131,6 @@
|
||||
"path": "./ruleset/cnip.srs",
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.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": "🐟 漏网之鱼"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//ShellCrash-ruleset 全分组规则+去广告 For Sing-box By Maozai 260107
|
||||
//ShellCrash-ruleset 全分组规则+去广告 For Sing-box By Maozai 260111
|
||||
{
|
||||
"outbounds": [
|
||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": ["♻️ 自动选择", "✨ 自动选择(去高倍率)", "🛠️ 手动切换", "🎯 本地直连", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇺🇸 美国节点", "🇯🇵 日本节点", "🇪🇺 欧洲节点", "🇰🇷 韩国节点", "🇸🇬 狮城节点", "👑 高级节点", "📉 省流节点", {providers_tags}] },
|
||||
@@ -22,25 +22,23 @@
|
||||
{ "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": ["⛔ 禁止连接","🔀 规则放行", "🎯 本地直连"] },
|
||||
{ "tag": "🛑 广告拦截", "type": "selector", "outbounds": ["⛔ 禁止连接", "🔀 规则放行", "🎯 本地直连"] },
|
||||
{ "tag": "⛔ 禁止连接", "type": "block" },
|
||||
{ "tag": "🔀 规则放行", "type": "pass" },
|
||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||
{ "tag": "GLOBAL", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||
{ "tag": "GLOBAL", "type": "selector", "outbounds": ["🚀 节点选择", "🎯 本地直连"] },
|
||||
|
||||
{ "tag": "🇭🇰 香港节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇭🇰|港|hk|hongkong|hong kong)" },
|
||||
{ "tag": "🇹🇼 台湾节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇹🇼|台|tw|taiwan|tai wan)" },
|
||||
{ "tag": "🇺🇸 美国节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇺🇸|美|洛杉矶|圣何塞|西雅图|纽约|波特兰|旧金山|us|unitedstates|united states)" },
|
||||
{ "tag": "🇯🇵 日本节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇯🇵|日|东京|大阪|埼玉|九州|jp|japan)" },
|
||||
{ "tag": "🇪🇺 欧洲节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇪🇺|欧|德|英|法|荷|俄罗斯|西班牙|意大利|瑞士|瑞典|土耳其|挪威|芬兰|丹麦|比利时|爱尔兰|奥地利|波兰|葡萄牙|乌克兰|希腊|捷克|匈牙利|罗马尼亚|保加利亚|冰岛|克罗地亚)" },
|
||||
{ "tag": "🇹🇼 台湾节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇹🇼|台|tw|taiwan|tai wan)", "exclude": "(?i)(仙台)" },
|
||||
{ "tag": "🇺🇸 美国节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇺🇸|美|洛杉矶|圣何塞|西雅图|纽约|波特兰|旧金山|休斯|达拉斯|硅谷|堪萨斯|迈阿密|凤凰城|芝加哥|奥勒姆|us|unitedstates|united states)", "exclude": "(?i)(南美|中美|拉美|亚美尼亚|美属)" },
|
||||
{ "tag": "🇯🇵 日本节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇯🇵|日|东京|大阪|埼玉|九州|jp|japan)", "exclude": "(?i)(尼日利亚|尼日尔|日内瓦)" },
|
||||
{ "tag": "🇪🇺 欧洲节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇪🇺|欧|德|英|法|荷|俄罗斯|西班牙|意大利|瑞士|瑞典|土耳其|挪威|芬兰|丹麦|比利时|爱尔兰|奥地利|波兰|葡萄牙|乌克兰|希腊|捷克|匈牙利|罗马尼亚|保加利亚|冰岛|克罗地亚|阿姆斯特丹)" },
|
||||
{ "tag": "🇰🇷 韩国节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇰🇷|韩|韓|首尔|kr|kor)" },
|
||||
{ "tag": "🇸🇬 狮城节点", "type": "urltest", "use_all_providers": true, "include": "(?i)(🇸🇬|新加坡|狮城|sg|singapore)" },
|
||||
|
||||
@@ -49,15 +47,14 @@
|
||||
],
|
||||
"route": {
|
||||
"rules": [
|
||||
{ "domain_suffix": ["captive.apple.com"], "outbound": "DIRECT" },
|
||||
{ "domain_suffix": ["kamo.teracloud.jp"], "outbound": "DIRECT" },
|
||||
{ "domain_suffix": ["captive.apple.com"], "outbound": "🍎 苹果服务" },
|
||||
{ "domain_suffix": ["kamo.teracloud.jp"], "outbound": "🀄️ 国内流量" },
|
||||
|
||||
{ "rule_set": ["private"], "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": ["ads"], "outbound": "🛑 广告拦截" },
|
||||
|
||||
{ "rule_set": ["networktest"], "outbound": "📈 网络测速" },
|
||||
{ "rule_set": ["applications"], "outbound": "↔️ 直连软件" },
|
||||
{ "rule_set": ["trackerslist"], "outbound": "🧲 BT下载" },
|
||||
{ "rule_set": ["apple-cn"], "outbound": "🍎 苹果服务" },
|
||||
{ "rule_set": ["microsoft-cn"], "outbound": "🪟 微软服务" },
|
||||
{ "rule_set": ["google-cn"], "outbound": "🇬 谷歌服务" },
|
||||
@@ -78,7 +75,6 @@
|
||||
{ "rule_set": ["telegramip"], "outbound": "📲 电报消息" },
|
||||
|
||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" },
|
||||
{ "rule_set": ["gamesip"], "outbound": "🎮 外服游戏" },
|
||||
{ "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" },
|
||||
{ "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" }
|
||||
],
|
||||
@@ -115,14 +111,6 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/applications.srs",
|
||||
"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",
|
||||
"type": "remote",
|
||||
@@ -243,14 +231,6 @@
|
||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs",
|
||||
"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",
|
||||
"type": "remote",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
],
|
||||
"route": {
|
||||
"rules": [
|
||||
{ "rule_set": [ "privateip" ], "outbound": "🎯 本地直连" },
|
||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
||||
|
||||
{ "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",
|
||||
"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",
|
||||
"type": "remote",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
[ -f "/data/etc/crontabs/root" ] && systype=mi_snapshot #小米设备
|
||||
[ -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'
|
||||
[ -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 /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方式启动
|
||||
cp -f "$CRASHDIR"/starts/shellcrash.procd /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用户
|
||||
userdel shellcrash 2>/dev/null
|
||||
sed -i '/0:7890/d' /etc/passwd
|
||||
@@ -81,11 +81,8 @@ done
|
||||
setconfig versionsh_l $version
|
||||
#生成用于执行启动服务的变量文件
|
||||
[ ! -f "$CRASHDIR"/configs/command.env ] && {
|
||||
TMPDIR='/tmp/ShellCrash'
|
||||
BINDIR="$CRASHDIR"
|
||||
touch "$CRASHDIR"/configs/command.env
|
||||
setconfig TMPDIR "$TMPDIR" "$CRASHDIR"/configs/command.env
|
||||
setconfig BINDIR "$BINDIR" "$CRASHDIR"/configs/command.env
|
||||
echo 'TMPDIR=/tmp/ShellCrash' > "$CRASHDIR"/configs/command.env
|
||||
echo "BINDIR=$CRASHDIR" >> "$CRASHDIR"/configs/command.env
|
||||
}
|
||||
if [ -n "$(grep 'crashcore=singbox' "$CFG_PATH")" ]; then
|
||||
COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
|
||||
@@ -100,7 +97,10 @@ grep -q 'firewall_mod' "$CRASHDIR/configs/ShellClash.cfg" 2>/dev/null || {
|
||||
setconfig firewall_mod $firewall_mod
|
||||
}
|
||||
#设置更新地址
|
||||
[ -n "$url" ] && setconfig update_url $url
|
||||
[ -n "$url" ] && setconfig update_url "$url"
|
||||
[ -n "$release_type" ] && setconfig release_type "$release_type"
|
||||
#设置语言
|
||||
[ -n "$language" ] && echo "$language" > "$CRASHDIR/configs/i18n.cfg"
|
||||
#设置环境变量
|
||||
[ -w /opt/etc/profile ] && [ "$systype" = "Padavan" ] && profile=/opt/etc/profile
|
||||
[ -w /jffs/configs/profile.add ] && profile=/jffs/configs/profile.add
|
||||
@@ -187,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
|
||||
done
|
||||
[ ! -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
|
||||
done
|
||||
#配置文件改名
|
||||
@@ -202,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
|
||||
mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/tools/"$file" 2>/dev/null
|
||||
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
|
||||
done
|
||||
mv -f "$CRASHDIR"/menus/task_cmd.sh "$CRASHDIR"/task/task.sh 2>/dev/null
|
||||
@@ -213,7 +213,7 @@ sed -i '/shellclash/d' /etc/group
|
||||
rm -rf /etc/init.d/clash
|
||||
rm -rf "$CRASHDIR"/rules
|
||||
[ "$systype" = "mi_snapshot" -a "$CRASHDIR" != '/data/clash' ] && rm -rf /data/clash
|
||||
for file in webget.sh misnap_init.sh core.new; do
|
||||
for file in webget.sh misnap_init.sh core.new configs/ShellCrash.cfg.bak; do
|
||||
rm -f "$CRASHDIR/$file"
|
||||
done
|
||||
#旧版变量改名
|
||||
@@ -222,12 +222,13 @@ sed -i "s/clash_v/core_v/g" "$CFG_PATH"
|
||||
sed -i "s/clash.meta/meta/g" "$CFG_PATH"
|
||||
sed -i "s/ShellClash/ShellCrash/g" "$CFG_PATH"
|
||||
sed -i "s/cpucore=armv8/cpucore=arm64/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=Nft基础/redir_mod=Redir模式/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=Nft混合/redir_mod=Tproxy模式/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=Tproxy混合/redir_mod=Tproxy模式/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=Redir模式/redir_mod=Redir/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=Tproxy模式/redir_mod=Tproxy/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=Tun模式/redir_mod=Tun/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=混合模式/redir_mod=Mix/g" "$CFG_PATH"
|
||||
sed -i "s/redir_mod=纯净模式/firewall_area=4/g" "$CFG_PATH"
|
||||
#变量统一使用ON/OFF
|
||||
sed -i 's/=\(已启用\|已开启\)$/=ON/' "$CFG_PATH"
|
||||
sed -i 's/=\(未启用\|未开启\)$/=OFF/' "$CFG_PATH"
|
||||
|
||||
echo -e "\033[32m脚本初始化完成,请输入\033[30;47m $my_alias \033[0;33m命令开始使用!\033[0m"
|
||||
printf '\033[32m脚本初始化完成,请输入\033[30;47m %s \033[0;33m命令开始使用!\033[0m\n' "$my_alias"
|
||||
|
||||
10
scripts/lang/chs/1_start.lang
Normal file
10
scripts/lang/chs/1_start.lang
Normal file
@@ -0,0 +1,10 @@
|
||||
# ===== 启动完成 =====
|
||||
START_SERVICE_OK="服务已启动!"
|
||||
START_WEB_HINT="管理面板:"
|
||||
START_PAC_HINT="其他设备可使用 PAC 配置:"
|
||||
START_PROXY_HINT="或使用 HTTP / SOCKS5 方式连接:"
|
||||
|
||||
# ===== 启动流程 =====
|
||||
START_NO_CORE_CFG_TRY_GEN="没有找到核心配置文件,尝试生成 providers 配置文件!"
|
||||
START_NO_CORE_CFG_IMPORT_FIRST="没有找到核心配置文件,请先导入配置文件!"
|
||||
START_FIREWALL_DONE="已完成防火墙设置!"
|
||||
164
scripts/lang/chs/2_settings.lang
Normal file
164
scripts/lang/chs/2_settings.lang
Normal file
@@ -0,0 +1,164 @@
|
||||
# =================================================
|
||||
# Settings main menu
|
||||
# =================================================
|
||||
SET_MENU_TITLE="功能设置菜单"
|
||||
SET_MENU_REDIR="路由模式设置:"
|
||||
SET_MENU_DNS="DNS设置: "
|
||||
SET_MENU_FW_FILTER="透明路由流量过滤:"
|
||||
SET_MENU_FW_FILTER_DESC="端口、设备、协议或列表"
|
||||
SET_MENU_SKIP_CERT="跳过证书验证:"
|
||||
SET_MENU_SNIFFER="启用域名嗅探:"
|
||||
SET_MENU_ADV_PORT="自定义端口及密钥"
|
||||
SET_MENU_IPV6="IPv6设置: "
|
||||
SET_MENU_RESET="重置/备份/还原脚本设置"
|
||||
SET_MENU_LANG="多语言切换"
|
||||
SET_MENU_UI="UI切换"
|
||||
|
||||
# =================================================
|
||||
# Main menu messages
|
||||
# =================================================
|
||||
SET_WARN_NONROOT="非root用户可能无法正确配置其他模式,是否继续?"
|
||||
SET_SKIP_CERT_ON="已启用跳过本地证书验证!"
|
||||
SET_SKIP_CERT_OFF="已禁用跳过本地证书验证!"
|
||||
|
||||
SET_SNIFFER_CORE_SWITCH="已自动切换至Meta内核(域名嗅探需要)"
|
||||
SET_SNIFFER_LOCKED="当前内核与DNS模式组合下,域名嗅探无法关闭!"
|
||||
|
||||
SET_CORE_RUNNING="检测到服务正在运行,需要先停止服务!"
|
||||
SET_CORE_STOP_CONFIRM="是否确认停止服务?"
|
||||
|
||||
# =================================================
|
||||
# Backup / Restore / Reset
|
||||
# =================================================
|
||||
SET_BACKUP="备份脚本设置"
|
||||
SET_RESTORE="还原脚本设置"
|
||||
SET_RESET="重置脚本设置"
|
||||
|
||||
SET_BACKUP_OK="备份脚本设置成功!"
|
||||
SET_BACKUP_FAIL="备份脚本设置失败!"
|
||||
SET_RESTORE_OK="脚本设置已还原!(被覆盖配置已备份)"
|
||||
SET_RESET_OK="重置脚本设置成功!(旧配置已备份)"
|
||||
SET_RESET_FAIL="重置脚本设置失败!"
|
||||
SET_BACKUP_MISS="未找到备份文件,请先备份!"
|
||||
SET_NEED_RESTART="请重新启动脚本以生效!"
|
||||
|
||||
# =================================================
|
||||
# Redir mode
|
||||
# =================================================
|
||||
SET_REDIR_DEFAULT="Redir模式"
|
||||
SET_REDIR_CURRENT="当前路由模式为:"
|
||||
SET_CORE_CURRENT="ShellCrash 核心为:"
|
||||
SET_REDIR_RESTART_HINT="注意:切换模式后需要手动重启服务以生效!"
|
||||
|
||||
SET_REDIR_APPLIED="已设为"
|
||||
|
||||
SET_REDIR_REDIR="Redir模式"
|
||||
SET_REDIR_MIX="Mix模式"
|
||||
SET_REDIR_TPROXY="Tproxy模式"
|
||||
SET_REDIR_TUN="Tun模式"
|
||||
|
||||
SET_REDIR_REDIRDES="Redir转发TCP,不转发UDP"
|
||||
SET_REDIR_MIXDES="Redir转发TCP,Tun转发UDP"
|
||||
SET_REDIR_TPROXYDES="Tproxy转发TCP&UDP"
|
||||
SET_REDIR_TUNDES="Tun转发TCP&UDP(占用高不推荐)"
|
||||
|
||||
SET_NO_MOD="设备未检测到内核模块:"
|
||||
SET_NO_MOD2="请尝试其他模式或者安装相关依赖!"
|
||||
XIAOMI_QOS="小米设备的 QoS 服务与当前模式冲突,是否禁用相关功能?"
|
||||
|
||||
# =================================================
|
||||
# Firewall / VM
|
||||
# =================================================
|
||||
SET_FW_AREA="设置路由劫持范围"
|
||||
SET_VM_REDIR="容器/虚拟机劫持"
|
||||
SET_FW_SWITCH="切换防火墙应用"
|
||||
|
||||
SET_FW_AREA_DESC="仅局域网|仅本机|局域网+本机|纯净模式|旁路转发"
|
||||
|
||||
FW_AREA_NOTE_1="如你使用了第三方DNS如smartdns等,"
|
||||
FW_AREA_NOTE_2="请勿启用本机劫持或使用shellcrash用户执行!"
|
||||
FW_AREA_LAN="仅劫持局域网流量"
|
||||
FW_AREA_LOCAL="仅劫持本机流量"
|
||||
FW_AREA_BOTH="劫持局域网 + 本机流量"
|
||||
FW_AREA_NONE="不配置流量劫持(纯净模式)"
|
||||
FW_NO_NFTABLES="当前设备未安装 nftables,或 nftables 版本过低(< 1.0.2),无法切换!"
|
||||
FW_NO_IPTABLES="当前设备未安装 iptables,无法切换!"
|
||||
FW_NO_FIREWALL_BACKEND="检测不到可用的防火墙应用(iptables / nftables),无法切换!"
|
||||
|
||||
VM_DETECT_DESC="默认的容器/虚拟机网段为:"
|
||||
VM_ENABLE_AUTO="启用劫持并使用自动检测的网段"
|
||||
VM_ENABLE_MANUAL="启用劫持并手动指定网段"
|
||||
VM_DISABLE="禁用劫持"
|
||||
VM_INPUT_INFO="多个网段请用空格连接,可使用【ip route】命令查看,例如:"
|
||||
VM_INPUT_NET="请输入自定义网段"
|
||||
VM_NO_NET_DETECTED="未检测到容器或虚拟机网段,请先运行容器后再运行脚本,或选择手动设置网段!"
|
||||
VM_INPUT_DESC_1="多个网段请使用空格分隔,可通过【ip route】命令查看"
|
||||
VM_INPUT_DESC_2="例如:"
|
||||
|
||||
#inputport
|
||||
INPUT_PORT="请输入端口号"
|
||||
# =================================================
|
||||
# Advanced config
|
||||
# =================================================
|
||||
ADV_HTTP_PORT="修改HTTP/SOCKS5端口"
|
||||
ADV_HTTP_AUTH="设置HTTP/SOCKS5认证"
|
||||
ADV_REDIR_PORT="修改Redir/Tproxy端口"
|
||||
ADV_DNS_PORT="修改DNS监听端口"
|
||||
ADV_PANEL_PORT="修改面板访问端口"
|
||||
ADV_PANEL_PASS="设置面板访问密码"
|
||||
ADV_PANEL_PASS_INPUT="请输入面板访问密码(输入0删除)"
|
||||
ADV_HOST="自定义本机 Host 地址"
|
||||
ADV_TABLE="自定义路由表"
|
||||
# Advanced auth
|
||||
ADV_AUTH_FORMAT_DESC="格式必须为 \033[32m用户名:密码\033[0m,请使用英文冒号分隔!"
|
||||
ADV_AUTH_WARN="请尽量不要使用特殊符号,以避免产生未知错误!"
|
||||
ADV_AUTH_REMOVE_HINT="输入 0 可删除认证信息"
|
||||
ADV_AUTH_INPUT="请输入 HTTP / SOCKS5 用户名及密码"
|
||||
ADV_AUTH_REMOVED="认证信息已移除!"
|
||||
ADV_AUTH_ENV_CONFLICT="请先禁用本机劫持功能或使用增强模式!"
|
||||
ADV_AUTH_INVALID="输入格式错误,请重新输入!"
|
||||
# Host
|
||||
ADV_HOST_WARN_LAN="如果你的局域网网段不是 192.168.x / 172.16.x / 10.x,请务必修改!"
|
||||
ADV_HOST_WARN_CHANGE="设置后如本机 Host 地址发生变化,请务必重新修改!"
|
||||
ADV_HOST_INPUT="请输入自定义 Host 地址(输入 0 移除)"
|
||||
ADV_HOST_REMOVED="自定义 Host 地址已移除,请重新运行脚本以自动获取!"
|
||||
ADV_HOST_INVALID="输入错误,请仔细核对!"
|
||||
# Routing table
|
||||
ADV_TABLE_WARN="仅当 Tproxy/Tun/混合模式 下路由表发生冲突时才需要设置!"
|
||||
ADV_TABLE_INPUT="请输入路由表编号(不清楚请勿修改,建议 102-125)"
|
||||
|
||||
# =================================================
|
||||
# IPv6
|
||||
# =================================================
|
||||
IPV6_REDIR="IPv6透明路由(劫持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="当前端口已被其他进程占用,请重新输入!"
|
||||
13
scripts/lang/chs/common.lang
Normal file
13
scripts/lang/chs/common.lang
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
COMMON_INPUT="请输入对应数字"
|
||||
COMMON_INPUT_L="请输入对应字母或数字"
|
||||
COMMON_INPUT_R="是否启用?(1/0) > "
|
||||
COMMON_BACK="返回上级菜单"
|
||||
COMMON_SUCCESS="操作成功!"
|
||||
COMMON_FAILED="操作失败!"
|
||||
COMMON_UNSET="未设置"
|
||||
COMMON_MOD="模式"
|
||||
COMMON_ERR_NUM="请输入正确的数字!"
|
||||
COMMON_ERR_LETTER="请输入正确的字母或数字!"
|
||||
COMMON_ERR_INPUT="输入错误,请重新输入!"
|
||||
COMMON_ERR_CANCEL="操作已取消!"
|
||||
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="请输入正确数字!"
|
||||
72
scripts/lang/chs/dns.lang
Normal file
72
scripts/lang/chs/dns.lang
Normal file
@@ -0,0 +1,72 @@
|
||||
#=====DNS主菜单=====
|
||||
DNS_CURRENT_MODE="当前DNS运行模式为:"
|
||||
DNS_RESTART_NOTICE="切换模式后需要手动重启服务以生效!"
|
||||
|
||||
DNS_MODE_MIX_DESC="CN域名DIRECT-DNS,其它fake-ip"
|
||||
DNS_MODE_ROUTE_DESC="CN域名DIRECT-DNS,其它PROXY-DNS"
|
||||
DNS_MODE_REDIR_DESC="建议搭配加密/第三方DNS服务使用"
|
||||
|
||||
DNS_MENU_PROTECT="DNS防泄漏"
|
||||
DNS_MENU_HOSTS="Hosts优化"
|
||||
DNS_MENU_ECS="ECS优化"
|
||||
DNS_MENU_REDIR="DNS劫持端口"
|
||||
|
||||
DNS_PROTECT_DESC="——启用时少量网站可能出现连接卡顿"
|
||||
DNS_HOSTS_DESC="——调用本机hosts并劫持NTP服务"
|
||||
DNS_ECS_DESC="——解决CDN下载浪费流量等问题"
|
||||
DNS_REDIR_PORT_DESC="——用于兼容第三方DNS服务"
|
||||
|
||||
DNS_FAKEIP_MENU="管理Fake-IP过滤列表"
|
||||
DNS_ADV_MENU="修改DNS服务器"
|
||||
|
||||
DNS_SET_OK="DNS模式已设置为"
|
||||
DNS_CORE_UNSUPPORTED="当前内核不支持该功能!"
|
||||
|
||||
#=====DNS重定向=====
|
||||
DNS_REDIR_WARN="仅限搭配第三方DNS服务(AdGuard、SmartDNS等)使用!"
|
||||
DNS_REDIR_HINT="建议第三方DNS上游指向"
|
||||
DNS_REDIR_NO_SERVICE="该端口未检测到正在运行的DNS服务!"
|
||||
|
||||
#=====Fake-IP=====
|
||||
DNS_FAKEIP_DESC="用于解决Fake-IP模式下部分地址或应用无法连接的问题"
|
||||
DNS_FAKEIP_TIP="脚本已内置大量地址,只需添加出现问题的地址"
|
||||
DNS_FAKEIP_EXAMPLE="示例格式如下:\na.b.com\n*.b.com\n*.*.b.com"
|
||||
DNS_FAKEIP_EXIST="已添加的Fake-IP过滤地址:"
|
||||
DNS_FAKEIP_EMPTY="当前尚未添加任何自定义Fake-IP过滤地址"
|
||||
DNS_FAKEIP_EDIT="输入序号移除,输入地址添加"
|
||||
|
||||
#=====DNS高级=====
|
||||
DNS_ADV_SPLIT="多个DNS地址请使用“|”或“,”分隔输入"
|
||||
DNS_ADV_CERT="使用DoH/DoT需具备本地根证书文件"
|
||||
DNS_ADV_SINGBOX_LIMIT="注意:SingBox内核仅加载第一个DNS"
|
||||
|
||||
DNS_ADV_EDIT_DIRECT="修改DIRECT-DNS"
|
||||
DNS_ADV_EDIT_PROXY="修改PROXY-DNS(该DNS查询会经过节点)"
|
||||
DNS_ADV_EDIT_DEFAULT="修改DEFAULT-DNS(必须是IP,用于解析其他DNS)"
|
||||
DNS_ADV_AUTO_ENCRYPT="一键配置加密DNS"
|
||||
DNS_ADV_RESET="重置默认DNS配置"
|
||||
|
||||
DNS_IPV6_NOT_SUPPORT="该选项暂不支持IPv6加密DNS!"
|
||||
|
||||
DNS_ENCRYPT_OK="已设置加密DNS,如遇DNS解析问题,请重置DNS配置!"
|
||||
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="设备列表已清空!"
|
||||
89
scripts/lang/chs/menu.lang
Normal file
89
scripts/lang/chs/menu.lang
Normal file
@@ -0,0 +1,89 @@
|
||||
# ===== 通用提示 =====
|
||||
|
||||
MENU_RESTART_NOTICE="检测到配置变更,是否立即重启服务以应用新配置?"
|
||||
MENU_RESTART_NOW="立即重启"
|
||||
MENU_RESTART_LATER="暂不重启"
|
||||
|
||||
MENU_PORT_CONFLICT_TITLE="检测到端口被以下进程占用!内核可能无法正常启动!"
|
||||
MENU_PORT_CONFLICT_HINT="请修改默认端口配置!"
|
||||
|
||||
MENU_CORE_LOADED_OK="内核加载完成!"
|
||||
MENU_CORE_LOADED_BAD="检测到不可用的内核文件!可能是文件受损或CPU架构不匹配!"
|
||||
MENU_CORE_REMOVED="内核文件已移除,请认真检查后重新上传!"
|
||||
|
||||
MENU_CFG_LOADED_OK="配置文件加载完成!"
|
||||
|
||||
MENU_OVERRIDE_WARN="你已经禁用了配置文件覆写功能,这会导致大量脚本功能无法使用!"
|
||||
MENU_OVERRIDE_ASK="是否取消禁用?"
|
||||
MENU_YES="是"
|
||||
MENU_NO="否"
|
||||
|
||||
# ===== 欢迎与状态 =====
|
||||
MENU_WELCOME="欢迎使用ShellCrash!"
|
||||
|
||||
MENU_RUN_ON="正在运行"
|
||||
MENU_RUN_SET="已设置"
|
||||
MENU_RUN_OFF="没有运行"
|
||||
|
||||
MENU_PURE_MOD="纯净"
|
||||
MENU_MOD="模式"
|
||||
MENU_IP_DF="设备IP地址"
|
||||
|
||||
MENU_AUTOSTART_ON="已设置开机启动!"
|
||||
MENU_AUTOSTART_OFF="未设置开机启动!"
|
||||
MENU_AUTOSTART_DEBUG="并处于debug状态!"
|
||||
|
||||
MENU_MEM_USED="当前内存占用:"
|
||||
MENU_RUNNING_TIME="已运行:"
|
||||
|
||||
MENU_TG_CHANNEL="TG频道:"
|
||||
|
||||
# ===== /tmp 文件检测 =====
|
||||
MENU_TMP_CORE_FOUND="发现可用的内核文件:"
|
||||
MENU_TMP_CORE_ASK="是否立即加载该内核(会停止当前服务)?"
|
||||
MENU_LOAD_NOW="立即加载"
|
||||
MENU_LOAD_LATER="暂不加载"
|
||||
|
||||
MENU_TMP_CFG_FOUND="发现内核配置文件:"
|
||||
MENU_TMP_CFG_ASK="是否立即加载为配置文件?"
|
||||
|
||||
MENU_MAIN_1="启动/重启服务"
|
||||
MENU_MAIN_2="功能设置"
|
||||
MENU_MAIN_3="停止服务"
|
||||
MENU_MAIN_4="启动设置"
|
||||
MENU_MAIN_5="自动任务"
|
||||
MENU_MAIN_6="配置文件管理"
|
||||
MENU_MAIN_7="访问与控制"
|
||||
MENU_MAIN_8="工具与优化"
|
||||
MENU_MAIN_9="更新与支持"
|
||||
MENU_MAIN_0="退出脚本"
|
||||
|
||||
MENU_MAIN_PROMPT="请输入对应数字> "
|
||||
|
||||
# ===== 服务操作 =====
|
||||
MENU_SERVICE_STOPPED="服务已停止!"
|
||||
|
||||
# ===== 测试 / 调试 =====
|
||||
MENU_TEST_RUNNING_1="正在测试运行!"
|
||||
MENU_TEST_RUNNING_2="如发现错误请截图后前往咨询:"
|
||||
MENU_TEST_DONE_OK="测试完成!没有发现问题,请重新启动服务~"
|
||||
MENU_TEST_DONE_FAIL="测试完成!"
|
||||
MENU_TEST_LOG_HINT="完整执行记录请查看:"
|
||||
|
||||
MENU_ERROR_FOUND="发现错误:"
|
||||
|
||||
# ===== 命令行帮助 =====
|
||||
|
||||
MENU_CLI_TEST="测试模式"
|
||||
MENU_CLI_HELP="帮助列表"
|
||||
MENU_CLI_UNINSTALL="卸载脚本"
|
||||
MENU_CLI_INIT="初始化脚本"
|
||||
MENU_CLI_DEBUG="测试运行"
|
||||
|
||||
MENU_CLI_START="启动服务"
|
||||
MENU_CLI_STOP="停止服务"
|
||||
MENU_CLI_BOOT_INIT="开机初始化"
|
||||
|
||||
MENU_HELP_ONLINE="在线求助:"
|
||||
MENU_HELP_BLOG="官方博客:"
|
||||
MENU_HELP_GITHUB="发布页面:"
|
||||
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="暂不导入"
|
||||
10
scripts/lang/en/1_start.lang
Normal file
10
scripts/lang/en/1_start.lang
Normal file
@@ -0,0 +1,10 @@
|
||||
# ===== Startup =====
|
||||
START_SERVICE_OK="Service started successfully!"
|
||||
START_WEB_HINT="Dashboard:"
|
||||
START_PAC_HINT="Other devices can connect using PAC configuration:"
|
||||
START_PROXY_HINT="Or connect using HTTP / SOCKS5:"
|
||||
|
||||
# ===== Startup Flow =====
|
||||
START_NO_CORE_CFG_TRY_GEN="Core configuration not found. Attempting to generate providers configuration!"
|
||||
START_NO_CORE_CFG_IMPORT_FIRST="Core configuration not found. Please import a configuration first!"
|
||||
START_FIREWALL_DONE="Firewall configuration completed!"
|
||||
158
scripts/lang/en/2_settings.lang
Normal file
158
scripts/lang/en/2_settings.lang
Normal file
@@ -0,0 +1,158 @@
|
||||
# =================================================
|
||||
# Settings main menu
|
||||
# =================================================
|
||||
SET_MENU_TITLE="Welcome to the Function Settings Menu:"
|
||||
SET_MENU_REDIR="Routing Mode:"
|
||||
SET_MENU_DNS="DNS Settings:"
|
||||
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_SNIFFER="Enable Sniff:"
|
||||
SET_MENU_ADV_PORT="Custom Ports and Secrets"
|
||||
SET_MENU_IPV6="IPv6 Settings:"
|
||||
SET_MENU_RESET="Reset / Backup / Restore Script Settings"
|
||||
SET_MENU_LANG="Language"
|
||||
SET_MENU_UI="UI Switch"
|
||||
|
||||
# =================================================
|
||||
# Main menu messages
|
||||
# =================================================
|
||||
SET_WARN_NONROOT="Non-root users may not be able to configure some modes correctly. Continue anyway?"
|
||||
SET_SKIP_CERT_ON="Skipping local certificate verification is now ENABLED!"
|
||||
SET_SKIP_CERT_OFF="Skipping local certificate verification is now DISABLED!"
|
||||
|
||||
SET_SNIFFER_CORE_SWITCH="Automatically switched to Meta core (required for domain sniffing)"
|
||||
SET_SNIFFER_LOCKED="Domain sniffing cannot be disabled with the current core and DNS mode combination!"
|
||||
|
||||
SET_CORE_RUNNING="Service is currently running and must be stopped first!"
|
||||
SET_CORE_STOP_CONFIRM="Do you want to stop the service?"
|
||||
|
||||
# =================================================
|
||||
# Backup / Restore / Reset
|
||||
# =================================================
|
||||
SET_BACKUP="Backup Script Settings"
|
||||
SET_RESTORE="Restore Script Settings"
|
||||
SET_RESET="Reset Script Settings"
|
||||
|
||||
SET_BACKUP_OK="Script settings have been backed up!"
|
||||
SET_RESTORE_OK="Script settings have been restored! (Overwritten config has been backed up)"
|
||||
SET_RESET_OK="Script settings have been reset! (Old config has been backed up)"
|
||||
SET_BACKUP_MISS="Backup file not found. Please back up first!"
|
||||
SET_NEED_RESTART="Please restart the script for changes to take effect!"
|
||||
|
||||
# =================================================
|
||||
# Redir mode
|
||||
# =================================================
|
||||
SET_REDIR_DEFAULT="Redir Mode"
|
||||
SET_REDIR_CURRENT="Current routing mode:"
|
||||
SET_CORE_CURRENT="ShellCrash core:"
|
||||
SET_REDIR_RESTART_HINT="You must manually restart the service for the change to take effect!"
|
||||
|
||||
SET_REDIR_APPLIED="Routing mode set to"
|
||||
|
||||
SET_REDIR_REDIR="Redir Mode"
|
||||
SET_REDIR_MIX="Mix Mode"
|
||||
SET_REDIR_TPROXY="Tproxy Mode"
|
||||
SET_REDIR_TUN="Tun Mode"
|
||||
|
||||
SET_REDIR_REDIRDES="Redirect TCP traffic only (no UDP)"
|
||||
SET_REDIR_MIXDES="Redirect TCP via Redir, UDP via Tun"
|
||||
SET_REDIR_TPROXYDES="Tproxy forwards both TCP UDP"
|
||||
SET_REDIR_TUNDES="Tun forwards both TCP UDP (high resource usage)"
|
||||
|
||||
SET_NO_MOD="The kernel module not detected:"
|
||||
SET_NO_MOD2="Please install required dependencies or select another mode!"
|
||||
XIAOMI_QOS="Xiaomi QoS service conflicts with the current mode. Disable related features?"
|
||||
|
||||
# =================================================
|
||||
# Firewall / VM
|
||||
# =================================================
|
||||
SET_FW_AREA="Set Routing Hijack Scope"
|
||||
SET_VM_REDIR="Container / VM Hijacking"
|
||||
SET_FW_SWITCH="Switch Firewall Backend"
|
||||
|
||||
SET_FW_AREA_DESC="LAN only|Local only|LAN&Local|Pure mode|Bypass:"
|
||||
|
||||
FW_AREA_NOTE="If you are using a third-party DNS like SmartDNS, \ndo not enable local hijacking or run the service as a ShellCrash user"
|
||||
FW_AREA_LAN="Hijack LAN traffic only"
|
||||
FW_AREA_LOCAL="Hijack local device traffic only"
|
||||
FW_AREA_BOTH="Hijack both LAN and local device traffic"
|
||||
FW_AREA_NONE="Do not hijack traffic (Pure mode)"
|
||||
FW_NO_NFTABLES="nftables is not installed, or the version is too old (< 1.0.2). Unable to switch!"
|
||||
FW_NO_IPTABLES="iptables is not installed. Unable to switch!"
|
||||
FW_NO_FIREWALL_BACKEND="No available firewall backend detected (iptables / nftables). Unable to switch!"
|
||||
|
||||
VM_DETECT_DESC="Default Container/VM Subnet:"
|
||||
VM_ENABLE_AUTO="Enable hijacking using automatically detected subnets"
|
||||
VM_ENABLE_MANUAL="Enable hijacking and manually specify subnets"
|
||||
VM_DISABLE="Disable hijacking"
|
||||
VM_INPUT_INFO="Separate multiple segments with spaces. Check your configuration using ip route. Example:"
|
||||
VM_INPUT_NET="Please enter cust subnets"
|
||||
VM_NO_NET_DETECTED="No container or VM subnet detected. Please start the container first, or configure the subnet manually!"
|
||||
VM_INPUT_DESC="Multiple subnets should be separated by spaces. You can check them using the 'ip route' command, for example:"
|
||||
|
||||
#inputport
|
||||
INPUT_PORT="Input port"
|
||||
# =================================================
|
||||
# Advanced config
|
||||
# =================================================
|
||||
ADV_HTTP_PORT="Change HTTP / SOCKS5 Port"
|
||||
ADV_HTTP_AUTH="Set HTTP / SOCKS5 Authentication"
|
||||
ADV_REDIR_PORT="Change Redir / Tproxy Ports"
|
||||
ADV_DNS_PORT="Change DNS Listening Port"
|
||||
ADV_PANEL_PORT="Change Web Panel Port"
|
||||
ADV_PANEL_PASS="Set Web Panel Password"
|
||||
ADV_PANEL_PASS_INPUT="Enter web panel password (enter 0 to remove)"
|
||||
ADV_HOST="Custom Local Host Address"
|
||||
ADV_TABLE="Custom Routing Table"
|
||||
# Advanced auth
|
||||
ADV_AUTH_FORMAT_DESC="Format must be \033[32musername:password\033[0m, separated by a colon!"
|
||||
ADV_AUTH_WARN="Avoid using special characters to prevent unexpected issues!"
|
||||
ADV_AUTH_REMOVE_HINT="Enter 0 to remove authentication"
|
||||
ADV_AUTH_INPUT="Please enter HTTP / SOCKS5 username and password"
|
||||
ADV_AUTH_REMOVED="Authentication information has been removed!"
|
||||
ADV_AUTH_ENV_CONFLICT="Please disable local hijacking or switch to enhanced mode first!"
|
||||
ADV_AUTH_INVALID="Invalid input format. Please try again!"
|
||||
# Host
|
||||
ADV_HOST_WARN_LAN="If your LAN subnet is not 192.168.x / 172.16.x / 10.x, you must modify it!"
|
||||
ADV_HOST_WARN_CHANGE="If the local host address changes after setting, please update it again!"
|
||||
ADV_HOST_INPUT="Please enter a custom host address (enter 0 to remove)"
|
||||
ADV_HOST_REMOVED="Custom host address removed. Please rerun the script to auto-detect!"
|
||||
ADV_HOST_INVALID="Invalid input. Please check carefully!"
|
||||
# Routing table
|
||||
ADV_TABLE_WARN="Only required when routing table conflicts occur in Tproxy, Tun, or Mixed mode!"
|
||||
ADV_TABLE_INPUT="Please enter the routing table ID (do not modify unless necessary, recommended 102-125)"
|
||||
# =================================================
|
||||
# IPv6
|
||||
# =================================================
|
||||
IPV6_REDIR="IPv6 Transparent Routing (Hijack IPv6 Traffic)"
|
||||
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!"
|
||||
13
scripts/lang/en/common.lang
Normal file
13
scripts/lang/en/common.lang
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
COMMON_INPUT="Please enter a number"
|
||||
COMMON_INPUT_L="Enter a letter or a number"
|
||||
COMMON_INPUT_R="Enable? (1/0) > "
|
||||
COMMON_BACK="Back"
|
||||
COMMON_SUCCESS="Setup Success!"
|
||||
COMMON_FAILED="Setup failed!"
|
||||
COMMON_UNSET="Not set"
|
||||
COMMON_MOD="Mod"
|
||||
COMMON_ERR_NUM="Please enter a valid number!"
|
||||
COMMON_ERR_LETTER="Please enter a valid letter or number!"
|
||||
COMMON_ERR_INPUT="Invalid input, please try again!"
|
||||
COMMON_ERR_CANCEL="Operation cancelled!"
|
||||
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!"
|
||||
74
scripts/lang/en/dns.lang
Normal file
74
scripts/lang/en/dns.lang
Normal file
@@ -0,0 +1,74 @@
|
||||
#===== DNS Main Menu =====
|
||||
DNS_CURRENT_MODE="Current DNS running mode:"
|
||||
DNS_RESTART_NOTICE="Changes require a manual service restart to take effect."
|
||||
|
||||
DNS_MODE_MIX_DESC="CN domains use DIRECT-DNS, others use fake-ip"
|
||||
DNS_MODE_ROUTE_DESC="CN domains use DIRECT-DNS, others use PROXY-DNS"
|
||||
DNS_MODE_REDIR_DESC="All domains use DIRECT-DNS"
|
||||
|
||||
DNS_MENU_PROTECT="DNS Leak Protect"
|
||||
DNS_MENU_HOSTS="Hosts Optimization"
|
||||
DNS_MENU_ECS="ECS Optimization"
|
||||
DNS_MENU_REDIR="DNS Redirect Port"
|
||||
|
||||
DNS_PROTECT_DESC="May cause slow connections on some websites when enabled"
|
||||
DNS_HOSTS_DESC="Use local hosts file and hijack NTP service"
|
||||
DNS_ECS_DESC="Reduce wasted traffic caused by CDN misrouting"
|
||||
DNS_REDIR_PORT_DESC="Used for compatibility with third-party DNS services"
|
||||
|
||||
DNS_FAKEIP_MENU="Manage Fake-IP Filter List"
|
||||
DNS_ADV_MENU="Configure DNS Servers"
|
||||
|
||||
DNS_SET_OK="DNS mode has been set to"
|
||||
DNS_CORE_UNSUPPORTED="The current core does not support this feature."
|
||||
|
||||
#===== DNS Redirect =====
|
||||
DNS_REDIR_WARN="For use with third-party DNS services only (AdGuard, SmartDNS, etc.)"
|
||||
DNS_REDIR_HINT="It is recommended to set the upstream DNS of the third-party service to"
|
||||
DNS_REDIR_INPUT="Enter the listening port of the third-party DNS service (0 to reset)>"
|
||||
DNS_REDIR_NO_SERVICE="No running DNS service detected on this port!"
|
||||
|
||||
#===== Fake-IP =====
|
||||
DNS_FAKEIP_DESC="Used to resolve connectivity issues for certain addresses or applications in Fake-IP mode"
|
||||
DNS_FAKEIP_TIP="The script already includes many built-in entries. Only add problematic addresses."
|
||||
DNS_FAKEIP_EXAMPLE="Examples:\na.b.com\n*.b.com\n*.*.b.com"
|
||||
DNS_FAKEIP_EXIST="Existing Fake-IP filter entries:"
|
||||
DNS_FAKEIP_EMPTY="No Fake-IP filter entries have been added"
|
||||
DNS_FAKEIP_EDIT="Enter a number to remove an entry, or enter an address to add one"
|
||||
|
||||
#===== Advanced DNS =====
|
||||
DNS_ADV_SPLIT="Use '|' or ',' to separate multiple DNS addresses"
|
||||
DNS_ADV_CERT="DoH/DoT requires a local root certificate file"
|
||||
DNS_ADV_SINGBOX_LIMIT="Note: SingBox core only loads the first DNS entry"
|
||||
|
||||
DNS_ADV_EDIT_DIRECT="Edit DIRECT-DNS"
|
||||
DNS_ADV_EDIT_PROXY="Edit PROXY-DNS (queries go through the proxy)"
|
||||
DNS_ADV_EDIT_DEFAULT="Edit DEFAULT-DNS (must be an IP, used to resolve other DNS servers)"
|
||||
DNS_ADV_AUTO_ENCRYPT="Auto-configure Encrypted DNS"
|
||||
DNS_ADV_RESET="Reset to default DNS configuration"
|
||||
|
||||
DNS_INPUT_NEW="Enter new DNS address>"
|
||||
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_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!"
|
||||
89
scripts/lang/en/menu.lang
Normal file
89
scripts/lang/en/menu.lang
Normal file
@@ -0,0 +1,89 @@
|
||||
# ===== Common Prompts =====
|
||||
|
||||
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_HINT="Please modify the default port configuration!"
|
||||
|
||||
MENU_CORE_LOADED_OK="Core loaded successfully!"
|
||||
MENU_CORE_LOADED_BAD="The core file is invalid. It may be corrupted or incompatible with the CPU architecture!"
|
||||
MENU_CORE_REMOVED="The core file has been removed. Please verify and upload it again!"
|
||||
|
||||
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_ASK="Cancel the disable setting?"
|
||||
MENU_YES="Yes"
|
||||
MENU_NO="No"
|
||||
|
||||
# ===== Welcome & Status =====
|
||||
MENU_WELCOME="Welcome to ShellCrash!"
|
||||
|
||||
MENU_RUN_ON=" Running"
|
||||
MENU_RUN_SET="Configured"
|
||||
MENU_RUN_OFF="Stopped"
|
||||
|
||||
MENU_PURE_MOD="Pure"
|
||||
MENU_MOD=" Mod"
|
||||
MENU_IP_DF="Device IP Address"
|
||||
|
||||
MENU_AUTOSTART_ON="Autostart enable!"
|
||||
MENU_AUTOSTART_OFF="Autostart disable!"
|
||||
MENU_AUTOSTART_DEBUG="Debug mode!"
|
||||
|
||||
MENU_MEM_USED="Memory usage: "
|
||||
MENU_RUNNING_TIME="Running time: "
|
||||
|
||||
MENU_TG_CHANNEL="Telegram Channel: "
|
||||
|
||||
# ===== /tmp File Detection =====
|
||||
MENU_TMP_CORE_FOUND="Available core file found:"
|
||||
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_ASK="Load as the configuration file? (1/0) > "
|
||||
|
||||
# ===== Main Menu =====
|
||||
MENU_MAIN_1="Start / Restart Service"
|
||||
MENU_MAIN_2="Feature Settings"
|
||||
MENU_MAIN_3="Stop Service"
|
||||
MENU_MAIN_4="Startup Settings"
|
||||
MENU_MAIN_5="Scheduled Tasks"
|
||||
MENU_MAIN_6="Configuration Management"
|
||||
MENU_MAIN_7="Access & Control"
|
||||
MENU_MAIN_8="Tools & Optimization"
|
||||
MENU_MAIN_9="Updates & Support"
|
||||
MENU_MAIN_0="Exit Script"
|
||||
|
||||
MENU_MAIN_PROMPT="Please enter a number > "
|
||||
|
||||
# ===== Service Operations =====
|
||||
MENU_SERVICE_STOPPED="Service has been stopped!"
|
||||
|
||||
# ===== Test / Debug =====
|
||||
MENU_TEST_RUNNING="Running test mode. If errors occur, please take a screenshot and seek assistance."
|
||||
MENU_TEST_DONE_OK="Test completed! No issues found. Please restart the service."
|
||||
MENU_TEST_DONE_FAIL="Test completed!"
|
||||
MENU_TEST_LOG_HINT="Full execution log can be found at:"
|
||||
|
||||
MENU_ERROR_FOUND="Error found:"
|
||||
|
||||
# ===== Command Line Help =====
|
||||
|
||||
MENU_CLI_TEST="Test Mode"
|
||||
MENU_CLI_HELP="Help List"
|
||||
MENU_CLI_UNINSTALL="Uninstall Script"
|
||||
MENU_CLI_INIT="Initialize Script"
|
||||
MENU_CLI_DEBUG="Debug Mode"
|
||||
|
||||
MENU_CLI_START="Start Service"
|
||||
MENU_CLI_STOP="Stop Service"
|
||||
MENU_CLI_BOOT_INIT="Boot Initialization"
|
||||
|
||||
MENU_HELP_ONLINE="Online Support:"
|
||||
MENU_HELP_BLOG="Official Blog:"
|
||||
MENU_HELP_GITHUB="Release Page:"
|
||||
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
|
||||
elif [ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ]; then
|
||||
[ -n "$(find /etc/rc.d -name '*shellcrash')" ] && return 0
|
||||
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
||||
elif ckcmd systemctl; then
|
||||
[ "$(systemctl is-enabled shellcrash.service 2>&1)" = enabled ] && return 0
|
||||
elif grep -q 's6' /proc/1/comm; then
|
||||
|
||||
@@ -72,8 +72,11 @@ core_webget(){
|
||||
[ -z "$zip_type" ] && zip_type='tar.gz'
|
||||
get_bin "$TMPDIR/Coretmp.$zip_type" "bin/$crashcore/${target}-linux-${cpucore}.$zip_type"
|
||||
else
|
||||
zip_type=$(echo "$custcorelink" | grep -oE 'tar.gz$')
|
||||
[ -z "$zip_type" ] && zip_type=$(echo "$custcorelink" | grep -oE 'gz$')
|
||||
case "$custcorelink" in
|
||||
*.tar.gz) zip_type="tar.gz" ;;
|
||||
*.gz) zip_type="gz" ;;
|
||||
*.upx) zip_type="upx" ;;
|
||||
esac
|
||||
[ -n "$zip_type" ] && webget "$TMPDIR/Coretmp.$zip_type" "$custcorelink"
|
||||
fi
|
||||
#校验内核
|
||||
|
||||
@@ -16,7 +16,7 @@ routing_mark=$((fwmark + 2))
|
||||
|
||||
[ -z "$dns_nameserver" ] && {
|
||||
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_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1"
|
||||
|
||||
8
scripts/libs/i18n.sh
Normal file
8
scripts/libs/i18n.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
load_lang() {
|
||||
i18n=$(cat "$CRASHDIR"/configs/i18n.cfg 2>/dev/null)
|
||||
[ -z "$i18n" ] && i18n=chs
|
||||
|
||||
i18n_file="$CRASHDIR/lang/$i18n/$1.lang"
|
||||
[ -s "$i18n_file" ] && . "$i18n_file"
|
||||
}
|
||||
@@ -1,3 +1,7 @@
|
||||
|
||||
[ -n "$__IS_LIB_LOGGER" ] && return
|
||||
__IS_LIB_LOGGER=1
|
||||
|
||||
#日志工具
|
||||
. "$CRASHDIR"/libs/web_json.sh
|
||||
#$1日志内容$2显示颜色$3是否推送$4是否覆盖上一条
|
||||
@@ -23,7 +27,8 @@ logger() {
|
||||
web_json_post "$url" "$content" &
|
||||
}
|
||||
[ -n "$push_Deer" ] && {
|
||||
url="https://api2.pushdeer.com/message/push"
|
||||
url="${push_Deer_url%/}"
|
||||
url="${url:-https://api2.pushdeer.com}/message/push"
|
||||
content="{\"pushkey\":\"${push_Deer}\",\"text\":\"$log_text\"}"
|
||||
web_json_post "$url" "$content" &
|
||||
}
|
||||
|
||||
@@ -10,17 +10,19 @@ touch "$tmpcron"
|
||||
cronadd() { #定时任务工具
|
||||
if crontab -h 2>&1 | grep -q '\-l'; then
|
||||
crontab "$1"
|
||||
else
|
||||
elif [ -f "$crondir/$USER" ];then
|
||||
cat "$1" >"$crondir"/"$USER" && cru a REFRESH "0 0 1 1 * /bin/true" 2>/dev/null
|
||||
else
|
||||
echo "找不到可用的crond或者crontab应用!No available crond or crontab application can be found!"
|
||||
fi
|
||||
}
|
||||
cronload() { #定时任务工具
|
||||
if [ -f "$crondir/$USER" ];then
|
||||
cat "$crondir"/"$USER" 2>/dev/null
|
||||
elif crontab -h 2>&1 | grep -q '\-l'; then
|
||||
if crontab -h 2>&1 | grep -q '\-l'; then
|
||||
crontab -l
|
||||
elif [ -f "$crondir/$USER" ];then
|
||||
cat "$crondir"/"$USER" 2>/dev/null
|
||||
else
|
||||
echo "找不到可用的crond或者crontab应用!No available crond or crontab application can be found!"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
cronset() { #定时任务设置
|
||||
@@ -34,5 +36,4 @@ cronset() { #定时任务设置
|
||||
else
|
||||
rm -f "$tmpcron"
|
||||
fi
|
||||
sleep 1
|
||||
}
|
||||
|
||||
@@ -5,4 +5,5 @@ set_profile() {
|
||||
echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量
|
||||
sed -i '/export CRASHDIR=*/'d "$1"
|
||||
echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量
|
||||
. "$1" >/dev/null 2>&1 || true
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
webget(){
|
||||
if pidof CrashCore >/dev/null; then
|
||||
setproxy #设置临时代理
|
||||
setproxy #设置临时代理,【$1】代表下载目录,【$2】代表在线地址
|
||||
url=$(printf '%s\n' "$2" |
|
||||
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/#')
|
||||
@@ -10,6 +10,8 @@ webget(){
|
||||
url=$(printf '%s\n' "$2" |
|
||||
sed 's#https://raw.githubusercontent.com/juewuy/ShellCrash/#https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@#')
|
||||
fi
|
||||
# ===============================================
|
||||
|
||||
#参数【$1】代表下载目录,【$2】代表在线地址
|
||||
#参数【$3】代表输出显示,【$4】不启用重定向
|
||||
#参数【$5】代表验证证书,【$6】使用自定义UA
|
||||
@@ -26,23 +28,41 @@ webget(){
|
||||
wget -Y off $agent $progress $redirect $certificate --timeout=5 -O "$1" "$2"
|
||||
return $?
|
||||
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'
|
||||
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
|
||||
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")
|
||||
else
|
||||
result=$(curl $agent -w '%{http_code}' --connect-timeout 3 $progress $redirect $certificate -o "$1" "$url")
|
||||
[ -n "$auth_b64" ] && auth_arg="--proxy-header Proxy-Authorization:Basic $auth_b64"
|
||||
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 #成功则退出否则重试
|
||||
export https_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")
|
||||
fi
|
||||
[ "$result" = "200" ]
|
||||
return $?
|
||||
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() { #获取面板信息
|
||||
get_save() { #获取面板信息并内部处理所有异常
|
||||
local response exit_code
|
||||
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)
|
||||
exit_code=$?
|
||||
[ $exit_code -eq 0 ] && [ -n "$response" ] && [ "$response" != "{}" ] && {
|
||||
echo "$response"
|
||||
return 0
|
||||
}
|
||||
return 1
|
||||
elif [ -n "$(wget --help 2>&1 | grep '\-\-method')" ]; then
|
||||
wget -q --header="Authorization: Bearer ${secret}" --header="Content-Type:application/json" -O - "$1"
|
||||
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() { #最小化保存面板节点选择
|
||||
#使用get_save获取面板节点设置
|
||||
get_save "http://127.0.0.1:${db_port}/proxies" | sed 's/{}//g' | sed 's/:{/\
|
||||
/g'| grep -aE '"Selector"' >"$TMPDIR"/web_proxies
|
||||
#使用get_save获取面板节点设置,失败自动退出
|
||||
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
|
||||
|
||||
>"$TMPDIR"/web_save
|
||||
[ -s "$TMPDIR"/web_proxies ] && while read line; do
|
||||
def=$(echo $line | grep -oE '"all".*",' | awk -F "[\"]" '{print $4}')
|
||||
now=$(echo $line | grep -oE '"now".*",' | awk -F "[\"]" '{print $4}')
|
||||
def=$(echo "$line" | grep -oE '"all".*",' | awk -F "[\"]" '{print $4}')
|
||||
now=$(echo "$line" | grep -oE '"now".*",' | awk -F "[\"]" '{print $4}')
|
||||
[ "$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
|
||||
}
|
||||
done <"$TMPDIR"/web_proxies
|
||||
rm -rf "$TMPDIR"/web_proxies
|
||||
#对比文件,如果有变动则写入磁盘,否则清除缓存
|
||||
for file in web_save; do
|
||||
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
|
||||
rm -f "$TMPDIR"/web_proxies
|
||||
. "$CRASHDIR"/libs/compare.sh && compare "$TMPDIR"/web_save "$CRASHDIR"/configs/web_save
|
||||
[ "$?" = 0 ] && rm -f "$TMPDIR"/web_save || mv -f "$TMPDIR"/web_save "$CRASHDIR"/configs/web_save
|
||||
}
|
||||
|
||||
334
scripts/menu.sh
334
scripts/menu.sh
@@ -5,54 +5,103 @@ CRASHDIR=$(
|
||||
cd $(dirname $0)
|
||||
pwd
|
||||
)
|
||||
|
||||
CFG_PATH="$CRASHDIR"/configs/ShellCrash.cfg
|
||||
#加载执行目录,失败则初始化
|
||||
|
||||
# 加载执行目录,失败则初始化
|
||||
. "$CRASHDIR"/libs/get_config.sh
|
||||
[ -z "$BINDIR" -o -z "$TMPDIR" -o -z "$COMMAND" ] && . "$CRASHDIR"/init.sh >/dev/null 2>&1
|
||||
[ ! -f "$TMPDIR" ] && mkdir -p "$TMPDIR"
|
||||
|
||||
#通用工具
|
||||
# 通用工具
|
||||
. "$CRASHDIR"/libs/set_config.sh
|
||||
. "$CRASHDIR"/libs/check_cmd.sh
|
||||
. "$CRASHDIR"/libs/check_autostart.sh
|
||||
. "$CRASHDIR"/libs/i18n.sh
|
||||
. "$CRASHDIR"/menus/common.sh
|
||||
. "$CRASHDIR"/menus/1_start.sh
|
||||
. "$CRASHDIR"/menus/running_status.sh
|
||||
errornum() {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m请输入正确的字母或数字!\033[0m"
|
||||
}
|
||||
|
||||
# 加载Tui界面
|
||||
[ -z "$tui_type" ] && tui_type='tui_layout'
|
||||
[ "$1" = '-l' ] && tui_type='tui_lite'
|
||||
. "$CRASHDIR"/menus/"$tui_type".sh
|
||||
|
||||
# 加载语言
|
||||
load_lang common
|
||||
load_lang menu
|
||||
|
||||
checkrestart() {
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m检测到已变更的内容,请重启服务!\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "是否现在重启服务?(1/0) > " res
|
||||
[ "$res" = 1 ] && start_service
|
||||
comp_box "\033[32m$MENU_RESTART_NOTICE\033[0m"
|
||||
btm_box "1) $MENU_RESTART_NOW" \
|
||||
"0) $MENU_RESTART_LATER"
|
||||
read -r -p "$COMMON_INPUT> " res
|
||||
if [ "$res" = 1 ]; then
|
||||
start_service
|
||||
fi
|
||||
}
|
||||
|
||||
checkport() { #检查端口冲突
|
||||
for portx in $dns_port $mix_port $redir_port $((redir_port + 1)) $db_port; do
|
||||
if [ -n "$(netstat -ntul 2>&1 | grep ':$portx ')" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "检测到端口【$portx】被以下进程占用!内核可能无法正常启动!\033[33m"
|
||||
echo $(netstat -ntul | grep :$portx | head -n 1)
|
||||
echo -e "\033[0m-----------------------------------------------"
|
||||
echo -e "\033[36m请修改默认端口配置!\033[0m"
|
||||
# 检查端口冲突
|
||||
checkport() {
|
||||
. "$CRASHDIR"/menus/check_port.sh
|
||||
|
||||
while true; do
|
||||
local conflict_found=0
|
||||
local conflict_port=""
|
||||
local conflict_info=""
|
||||
|
||||
conflict_info=$(check_port_with_info "$mix_port")
|
||||
if [ $? -ne 0 ]; then
|
||||
conflict_found=1
|
||||
conflict_port="$mix_port"
|
||||
fi
|
||||
|
||||
if [ "$conflict_found" -eq 0 ]; then
|
||||
conflict_info=$(check_port_with_info "$redir_port")
|
||||
[ $? -ne 0 ] && conflict_found=1 && conflict_port="$redir_port"
|
||||
fi
|
||||
|
||||
if [ "$conflict_found" -eq 0 ]; then
|
||||
conflict_info=$(check_port_with_info "$((redir_port + 1))")
|
||||
[ $? -ne 0 ] && conflict_found=1 && conflict_port="$((redir_port + 1))"
|
||||
fi
|
||||
|
||||
if [ "$conflict_found" -eq 0 ]; then
|
||||
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"/libs/get_config.sh
|
||||
checkport
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
ckstatus() { #脚本启动前检查
|
||||
|
||||
# 脚本启动前检查
|
||||
ckstatus() {
|
||||
versionsh=$(cat "$CRASHDIR"/version)
|
||||
[ -n "$versionsh" ] && versionsh_l=$versionsh
|
||||
[ -z "$redir_mod" ] && redir_mod=纯净模式
|
||||
#获取本机host地址
|
||||
[ -z "$redir_mod" ] && redir_mod="$MENU_PURE_MOD"
|
||||
|
||||
# 获取本机host地址
|
||||
[ -z "$host" ] && host=$(ubus call network.interface.lan status 2>&1 | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
|
||||
[ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'lan' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1)
|
||||
[ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1)
|
||||
[ -z "$host" ] && host='设备IP地址'
|
||||
#dashboard目录位置
|
||||
[ -z "$host" ] && host='$MENU_IP_DF'
|
||||
|
||||
# dashboard目录位置
|
||||
if [ -f /www/clash/index.html ]; then
|
||||
dbdir=/www/clash
|
||||
hostdir=/clash
|
||||
@@ -60,114 +109,125 @@ ckstatus() { #脚本启动前检查
|
||||
dbdir="$CRASHDIR"/ui
|
||||
hostdir=":$db_port/ui"
|
||||
fi
|
||||
#开机自启检测
|
||||
|
||||
if check_autostart; then
|
||||
auto="\033[32m已设置开机启动!\033[0m"
|
||||
auto1="\033[36m禁用\033[0mShellCrash开机启动"
|
||||
auto="\033[32m$MENU_AUTOSTART_ON\033[0m"
|
||||
else
|
||||
auto="\033[31m未设置开机启动!\033[0m"
|
||||
auto1="\033[36m允许\033[0mShellCrash开机启动"
|
||||
auto="\033[31m$MENU_AUTOSTART_OFF\033[0m"
|
||||
fi
|
||||
#获取运行状态
|
||||
|
||||
PID=$(pidof CrashCore | awk '{print $NF}')
|
||||
if [ -n "$PID" ]; then
|
||||
run="\033[32m正在运行($redir_mod)\033[0m"
|
||||
run="\033[32m$MENU_RUN_ON($redir_mod$MENU_MOD)\033[0m"
|
||||
running_status
|
||||
elif [ "$firewall_area" = 5 ] && [ -n "$(ip route list table 100)" ]; then
|
||||
run="\033[32m已设置($redir_mod)\033[0m"
|
||||
run="\033[32m$MENU_RUN_SET($redir_mod$MENU_MOD)\033[0m"
|
||||
else
|
||||
run="\033[31m没有运行($redir_mod)\033[0m"
|
||||
#检测系统端口占用
|
||||
run="\033[31m$MENU_RUN_OFF($redir_mod$MENU_MOD)\033[0m"
|
||||
# 检测系统端口占用
|
||||
checkport
|
||||
fi
|
||||
corename=$(echo $crashcore | sed 's/singboxr/SingBoxR/' | sed 's/singbox/SingBox/' | sed 's/clash/Clash/' | sed 's/meta/Mihomo/')
|
||||
[ "$firewall_area" = 5 ] && corename='转发'
|
||||
[ -f "$TMPDIR"/debug.log -o -f "$CRASHDIR"/debug.log -a -n "$PID" ] && auto="\033[33m并处于debug状态!\033[0m"
|
||||
#输出状态
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;46m欢迎使用ShellCrash!\033[0m 版本:$versionsh_l"
|
||||
echo -e "$corename服务$run,$auto"
|
||||
if [ -n "$PID" ]; then
|
||||
echo -e "当前内存占用:\033[44m"$VmRSS"\033[0m,已运行:\033[46;30m"$day"\033[44;37m"$time"\033[0m"
|
||||
fi
|
||||
echo -e "TG频道:\033[36;4mhttps://t.me/ShellClash\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
#检查新手引导
|
||||
# [ "$firewall_area" = 5 ] && corename='转发'
|
||||
[ -f "$TMPDIR"/debug.log -o -f "$CRASHDIR"/debug.log -a -n "$PID" ] && auto="\033[33m$MENU_AUTOSTART_DEBUG\033[0m"
|
||||
|
||||
# 检查新手引导
|
||||
if [ -z "$userguide" ]; then
|
||||
userguide=1
|
||||
. "$CRASHDIR"/menus/userguide.sh && userguide
|
||||
setconfig userguide 1
|
||||
. "$CRASHDIR"/menus/8_tools.sh && userguide
|
||||
. "$CRASHDIR"/configs/ShellCrash.cfg
|
||||
fi
|
||||
#检查执行权限
|
||||
|
||||
# 检查执行权限
|
||||
[ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh
|
||||
#检查/tmp内核文件
|
||||
|
||||
# 检查/tmp内核文件
|
||||
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do
|
||||
echo -e "发现可用的内核文件: \033[36m/tmp/$file\033[0m "
|
||||
read -p "是否加载(会停止当前服务)?(1/0) > " res
|
||||
local tmp_file="/tmp/$file"
|
||||
comp_box "$MENU_TMP_CORE_FOUND \033[36m$tmp_file\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 "$file" | grep -oE 'tar.gz$|upx$|gz$')
|
||||
zip_type=$(echo "$tmp_file" | grep -oE 'tar.gz$|upx$|gz$')
|
||||
. "$CRASHDIR"/menus/9_upgrade.sh && setcoretype
|
||||
. "$CRASHDIR"/libs/core_tools.sh && core_check "/tmp/$file"
|
||||
if [ "$?" = 0 ]; then
|
||||
echo -e "\033[32m内核加载完成!\033[0m "
|
||||
. "$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
|
||||
echo -e "\033[33m检测到不可用的内核文件!可能是文件受损或CPU架构不匹配!\033[0m"
|
||||
rm -rf /tmp/"$file"
|
||||
echo -e "\033[33m内核文件已移除,请认真检查后重新上传!\033[0m"
|
||||
rm -rf "$tmp_file"
|
||||
msg_alert "\033[33m$MENU_CORE_LOADED_BAD\033[0m" \
|
||||
"\033[33m$MENU_CORE_REMOVED\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
}
|
||||
echo "-----------------------------------------------"
|
||||
done
|
||||
#检查/tmp配置文件
|
||||
|
||||
# 检查/tmp配置文件
|
||||
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do
|
||||
tmp_file=/tmp/$file
|
||||
echo -e "发现内核配置文件: \033[36m/tmp/$file\033[0m "
|
||||
read -p "是否加载为$crashcore的配置文件?(1/0) > " res
|
||||
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
|
||||
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
|
||||
mv -f "$tmp_file" "$CRASHDIR"/yamls/config.yaml
|
||||
fi
|
||||
echo -e "\033[32m配置文件加载完成!\033[0m "
|
||||
sleep 1
|
||||
msg_alert "\033[32m$MENU_CFG_LOADED_OK\033[0m "
|
||||
}
|
||||
done
|
||||
#检查禁用配置覆写
|
||||
|
||||
# 检查禁用配置覆写
|
||||
[ "$disoverride" = "1" ] && {
|
||||
echo -e "\033[33m你已经禁用了配置文件覆写功能,这会导致大量脚本功能无法使用!\033[0m "
|
||||
read -p "是否取消禁用?(1/0) > " res
|
||||
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
|
||||
echo "-----------------------------------------------"
|
||||
}
|
||||
|
||||
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 "-"
|
||||
content_line "$corename$run\t $auto"
|
||||
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"
|
||||
fi
|
||||
separator_line "="
|
||||
}
|
||||
|
||||
#主菜单
|
||||
main_menu() {
|
||||
#############################
|
||||
while true; do
|
||||
ckstatus
|
||||
#############################
|
||||
echo -e " 1 \033[32m启动/重启服务\033[0m"
|
||||
echo -e " 2 \033[36m功能设置\033[0m"
|
||||
echo -e " 3 \033[31m停止服务\033[0m"
|
||||
echo -e " 4 \033[33m启动设置\033[0m"
|
||||
echo -e " 5 设置\033[32m自动任务\033[0m"
|
||||
echo -e " 6 管理\033[36m配置文件\033[0m"
|
||||
echo -e " 7 \033[33m访问与控制\033[0m"
|
||||
echo -e " 8 \033[0m工具与优化\033[0m"
|
||||
echo -e " 9 \033[32m更新与支持\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 \033[0m退出脚本\033[0m"
|
||||
read -p "请输入对应数字 > " num
|
||||
|
||||
btm_box "1) \033[32m$MENU_MAIN_1\033[0m" \
|
||||
"2) \033[36m$MENU_MAIN_2\033[0m" \
|
||||
"3) \033[31m$MENU_MAIN_3\033[0m" \
|
||||
"4) \033[33m$MENU_MAIN_4\033[0m" \
|
||||
"5) \033[32m$MENU_MAIN_5\033[0m" \
|
||||
"6) \033[36m$MENU_MAIN_6\033[0m" \
|
||||
"7) \033[33m$MENU_MAIN_7\033[0m" \
|
||||
"8) $MENU_MAIN_8" \
|
||||
"9) \033[32m$MENU_MAIN_9\033[0m" \
|
||||
"" \
|
||||
"0) $MENU_MAIN_0"
|
||||
read -r -p "$MENU_MAIN_PROMPT" num
|
||||
|
||||
case "$num" in
|
||||
0)
|
||||
exit
|
||||
"" | 0)
|
||||
line_break
|
||||
exit 0
|
||||
;;
|
||||
1)
|
||||
start_service
|
||||
line_break
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
@@ -177,27 +237,21 @@ main_menu() {
|
||||
checkcfg_new=$(cat "$CFG_PATH")
|
||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||
fi
|
||||
main_menu
|
||||
;;
|
||||
3)
|
||||
[ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
||||
"$CRASHDIR"/start.sh stop
|
||||
sleep 1
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m$corename服务已停止!\033[0m"
|
||||
main_menu
|
||||
msg_alert "\033[31m$corename$MENU_SERVICE_STOPPED\033[0m"
|
||||
;;
|
||||
4)
|
||||
. "$CRASHDIR"/menus/4_setboot.sh && setboot
|
||||
main_menu
|
||||
;;
|
||||
5)
|
||||
. "$CRASHDIR"/menus/5_task.sh && task_menu
|
||||
main_menu
|
||||
;;
|
||||
6)
|
||||
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config
|
||||
main_menu
|
||||
;;
|
||||
7)
|
||||
GT_CFG_PATH="$CRASHDIR"/configs/gateway.cfg
|
||||
@@ -208,11 +262,9 @@ main_menu() {
|
||||
checkcfg_new=$(cat "$CFG_PATH" "$GT_CFG_PATH")
|
||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||
fi
|
||||
main_menu
|
||||
;;
|
||||
8)
|
||||
. "$CRASHDIR"/menus/8_tools.sh && tools
|
||||
main_menu
|
||||
;;
|
||||
9)
|
||||
checkcfg=$(cat "$CFG_PATH")
|
||||
@@ -221,31 +273,33 @@ main_menu() {
|
||||
checkcfg_new=$(cat "$CFG_PATH")
|
||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||
fi
|
||||
main_menu
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
"")
|
||||
"")
|
||||
main_menu
|
||||
;;
|
||||
-t)
|
||||
shtype=sh
|
||||
ckcmd bash && shtype=bash
|
||||
$shtype -x "$CRASHDIR"/menu.sh
|
||||
-l)
|
||||
main_menu
|
||||
;;
|
||||
-s)
|
||||
-t)
|
||||
shtype=sh
|
||||
[ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash
|
||||
"$shtype" -x "$CRASHDIR"/menu.sh -l
|
||||
;;
|
||||
-s)
|
||||
"$CRASHDIR"/start.sh "$2" "$3" "$4" "$5" "$6"
|
||||
;;
|
||||
-i)
|
||||
-i)
|
||||
. "$CRASHDIR"/init.sh 2>/dev/null
|
||||
;;
|
||||
-st)
|
||||
-st)
|
||||
shtype=sh
|
||||
ckcmd bash && shtype=bash
|
||||
"$shtype" -x "$CRASHDIR"/starts/bfstart.sh
|
||||
@@ -254,47 +308,51 @@ case "$1" in
|
||||
"$shtype" -x "$CRASHDIR"/starts/afstart.sh
|
||||
"$CRASHDIR"/start.sh stop
|
||||
;;
|
||||
-d)
|
||||
-d)
|
||||
shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash
|
||||
echo -e "正在测试运行!如发现错误请截图后前往\033[32;4mt.me/ShellClash\033[0m咨询"
|
||||
$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
|
||||
echo -----------------------------------------
|
||||
comp_box "$MENU_TEST_RUNNING_1" \
|
||||
"$MENU_TEST_RUNNING_2\033[36;4mhttps://t.me/ShellClash\033[0m"
|
||||
"$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
|
||||
cat "$TMPDIR"/debug_sh_bug.log | grep 'start\.sh' >"$TMPDIR"/sh_bug
|
||||
if [ -s "$TMPDIR"/sh_bug ]; then
|
||||
line_break
|
||||
echo "==========================================================="
|
||||
while read line; do
|
||||
echo -e "发现错误:\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
|
||||
echo -----------------------------------------
|
||||
echo
|
||||
done <"$TMPDIR"/sh_bug
|
||||
echo "==========================================================="
|
||||
rm -rf "$TMPDIR"/sh_bug
|
||||
echo -e "\033[32m测试完成!\033[0m完整执行记录请查看:\033[36m$TMPDIR/debug_sh.log\033[0m"
|
||||
comp_box "\033[32m$MENU_TEST_DONE_FAIL\033[0m" \
|
||||
"$MENU_TEST_LOG_HINT\033[36m$TMPDIR/debug_sh.log\033[0m"
|
||||
else
|
||||
echo -e "\033[32m测试完成!没有发现问题,请重新启动服务~\033[0m"
|
||||
rm -rf "$TMPDIR"/debug_sh.log
|
||||
comp_box "\033[32m$MENU_TEST_DONE_OK\033[0m"
|
||||
line_break
|
||||
fi
|
||||
"$CRASHDIR"/start.sh stop
|
||||
;;
|
||||
-u)
|
||||
-u)
|
||||
. "$CRASHDIR"/menus/uninstall.sh && uninstall
|
||||
;;
|
||||
*)
|
||||
echo -----------------------------------------
|
||||
echo "欢迎使用ShellCrash"
|
||||
echo -----------------------------------------
|
||||
echo " -t 测试模式"
|
||||
echo " -h 帮助列表"
|
||||
echo " -u 卸载脚本"
|
||||
echo " -i 初始化脚本"
|
||||
echo " -d 测试运行"
|
||||
echo -----------------------------------------
|
||||
echo " crash -s start 启动服务"
|
||||
echo " crash -s stop 停止服务"
|
||||
echo " $CRASHDIR/start.sh init 开机初始化"
|
||||
echo -----------------------------------------
|
||||
echo "在线求助:t.me/ShellClash"
|
||||
echo "官方博客:juewuy.github.io"
|
||||
echo "发布页面:github.com/juewuy/ShellCrash"
|
||||
echo -----------------------------------------
|
||||
*)
|
||||
comp_box "$MENU_WELCOME"
|
||||
content_line "-t $MENU_CLI_TEST"
|
||||
content_line "-h $MENU_CLI_HELP"
|
||||
content_line "-u $MENU_CLI_UNINSTALL"
|
||||
content_line "-i $MENU_CLI_INIT"
|
||||
content_line "-d $MENU_CLI_DEBUG"
|
||||
separator_line "-"
|
||||
content_line "crash -s start $MENU_CLI_START"
|
||||
content_line "crash -s stop $MENU_CLI_STOP"
|
||||
content_line "$CRASHDIR/start.sh init $MENU_CLI_BOOT_INIT"
|
||||
separator_line "-"
|
||||
content_line "$MENU_HELP_ONLINE\033[36mhttps://t.me/ShellClash\033[0m"
|
||||
content_line "$MENU_HELP_BLOG\033[36mhttps://juewuy.github.io\033[0m"
|
||||
content_line "$MENU_HELP_GITHUB\033[36mhttps://github.com/juewuy/ShellCrash\033[0m"
|
||||
separator_line "="
|
||||
line_break
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -3,49 +3,65 @@
|
||||
|
||||
[ -n "$__IS_MODULE_1_START_LOADED" ] && return
|
||||
__IS_MODULE_1_START_LOADED=1
|
||||
load_lang 1_start
|
||||
|
||||
#启动相关
|
||||
# ===== 启动完成提示 =====
|
||||
startover() {
|
||||
echo -ne " \r"
|
||||
echo -e "\033[32m服务已启动!\033[0m"
|
||||
echo -e "请使用 \033[4;36mhttp://$host$hostdir\033[0m 管理内置规则"
|
||||
if [ "$redir_mod" = "纯净模式" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "其他设备可以使用PAC配置连接:\033[4;32mhttp://$host:$db_port/ui/pac\033[0m"
|
||||
echo -e "或者使用HTTP/SOCK5方式连接:IP{\033[36m$host\033[0m}端口{\033[36m$mix_port\033[0m}"
|
||||
top_box "\033[32m$START_SERVICE_OK\033[0m" \
|
||||
"$START_WEB_HINT \033[4;36mhttp://$host$hostdir\033[0m"
|
||||
if [ "$firewall_area" = 4 ]; then
|
||||
content_line ""
|
||||
content_line "$START_PAC_HINT \033[4;32mhttp://$host:$db_port/ui/pac\033[0m"
|
||||
content_line "$START_PROXY_HINT IP{\033[36m$host\033[0m} Port{\033[36m$mix_port\033[0m}"
|
||||
fi
|
||||
separator_line "="
|
||||
line_break
|
||||
sleep 1
|
||||
return 0
|
||||
}
|
||||
|
||||
# ===== 启动核心 =====
|
||||
start_core() {
|
||||
if echo "$crashcore" | grep -q 'singbox'; then
|
||||
core_config="$CRASHDIR"/jsons/config.json
|
||||
core_config="$CRASHDIR/jsons/config.json"
|
||||
else
|
||||
core_config="$CRASHDIR"/yamls/config.yaml
|
||||
core_config="$CRASHDIR/yamls/config.yaml"
|
||||
fi
|
||||
|
||||
if [ ! -s "$core_config" ] && [ -s "$CRASHDIR/configs/providers.cfg" ]; then
|
||||
if [ "$crashcore" = singboxr ]; then
|
||||
CORE_TYPE=singbox
|
||||
else
|
||||
CORE_TYPE=clash
|
||||
fi
|
||||
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh" && gen_providers
|
||||
|
||||
comp_box "\033[33m$START_NO_CORE_CFG_TRY_GEN\033[0m"
|
||||
elif [ -s "$core_config" ] || [ -n "$Url" ] || [ -n "$Https" ]; then
|
||||
"$CRASHDIR/start.sh" start
|
||||
|
||||
# 循环检测服务启动状态
|
||||
. "$CRASHDIR/libs/start_wait.sh"
|
||||
|
||||
[ -n "$test" ] || pidof CrashCore >/dev/null && {
|
||||
# 启动 TG 机器人
|
||||
if [ "$bot_tg_service" = ON ]; then
|
||||
. "$CRASHDIR/menus/bot_tg_service.sh" && bot_tg_start
|
||||
fi
|
||||
echo "-----------------------------------------------"
|
||||
if [ ! -s $core_config -a -s "$CRASHDIR"/configs/providers.cfg ]; then
|
||||
echo -e "\033[33m没有找到${crashcore}配置文件,尝试生成providers配置文件!\033[0m"
|
||||
[ "$crashcore" = singboxr ] && coretype=singbox
|
||||
[ "$crashcore" = meta -o "$crashcore" = clashpre ] && coretype=clash
|
||||
. "$CRASHDIR"/menus/6_core_config.sh && gen_${coretype}_providers
|
||||
elif [ -s $core_config -o -n "$Url" -o -n "$Https" ]; then
|
||||
"$CRASHDIR"/start.sh start
|
||||
#设置循环检测以判定服务启动是否成功
|
||||
. "$CRASHDIR"/libs/start_wait.sh
|
||||
[ -n "$test" -o -n "$(pidof CrashCore)" ] && {
|
||||
#启动TG机器人
|
||||
[ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_start
|
||||
startover
|
||||
}
|
||||
else
|
||||
echo -e "\033[31m没有找到${crashcore}配置文件,请先导入配置文件!\033[0m"
|
||||
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config
|
||||
comp_box "\033[31m$START_NO_CORE_CFG_IMPORT_FIRST\033[0m"
|
||||
. "$CRASHDIR/menus/6_core_config.sh" && set_core_config
|
||||
fi
|
||||
}
|
||||
|
||||
# ===== 启动服务入口 =====
|
||||
start_service() {
|
||||
if [ "$firewall_area" = 5 ]; then
|
||||
"$CRASHDIR"/start.sh start
|
||||
echo -e "\033[32m已完成防火墙设置!\033[0m"
|
||||
"$CRASHDIR/start.sh" start
|
||||
comp_box "\033[32m$START_FIREWALL_DONE\033[0m"
|
||||
line_break
|
||||
else
|
||||
start_core
|
||||
fi
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,8 +4,13 @@
|
||||
[ -n "$__IS_MODULE_4_SETBOOT_LOADED" ] && return
|
||||
__IS_MODULE_4_SETBOOT_LOADED=1
|
||||
|
||||
load_lang setboot
|
||||
|
||||
allow_autostart() {
|
||||
[ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ] && /etc/init.d/shellcrash enable
|
||||
if [ -f /etc/rc.common ] && [ "$(cat /proc/1/comm)" = "procd" ]; then
|
||||
/etc/init.d/shellcrash enable
|
||||
fi
|
||||
|
||||
ckcmd systemctl && systemctl enable shellcrash.service >/dev/null 2>&1
|
||||
grep -q 's6' /proc/1/comm && touch /etc/s6-overlay/s6-rc.d/user/contents.d/afstart
|
||||
rc-status -r >/dev/null 2>&1 && rc-update add shellcrash default >/dev/null 2>&1
|
||||
@@ -24,160 +29,225 @@ disable_autostart() {
|
||||
setboot() {
|
||||
while true; do
|
||||
[ -z "$start_old" ] && start_old=OFF
|
||||
[ -z "$start_delay" -o "$start_delay" = 0 ] && delay=未设置 || delay="${start_delay}秒"
|
||||
check_autostart && auto_set="\033[33m禁止" || auto_set="\033[32m允许"
|
||||
|
||||
if [ -z "$start_delay" ] || [ "$start_delay" = 0 ]; then
|
||||
delay="$SETBOOT_NOT_SET"
|
||||
else
|
||||
delay="${start_delay}$SETBOOT_SECOND"
|
||||
fi
|
||||
|
||||
check_autostart && auto_set="ON" || auto_set="OFF"
|
||||
[ "${BINDIR}" = "$CRASHDIR" ] && mini_clash=OFF || mini_clash=ON
|
||||
[ -z "$network_check" ] && network_check=ON
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用启动设置菜单:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 ${auto_set}\033[0mShellCrash开机启动"
|
||||
echo -e " 2 使用保守模式: \033[36m$start_old\033[0m ————基于定时任务(每分钟检测)"
|
||||
echo -e " 3 设置自启延时: \033[36m$delay\033[0m ————用于解决自启后服务受限"
|
||||
echo -e " 4 启用小闪存模式: \033[36m$mini_clash\033[0m ————用于闪存空间不足的设备"
|
||||
[ "${BINDIR}" != "$CRASHDIR" ] && echo -e " 5 设置小闪存目录: \033[36m${BINDIR}\033[0m"
|
||||
echo -e " 6 自启网络检查: \033[36m$network_check\033[0m ————禁用则跳过自启时网络检查"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 \033[0m返回上级菜单\033[0m"
|
||||
read -p "请输入对应数字 > " num
|
||||
echo "-----------------------------------------------"
|
||||
comp_box "\033[30;47m$SETBOOT_TITLE\033[0m"
|
||||
content_line "1) $SETBOOT_ITEM_AUTO \033[36m$(printf '%-4s' "$auto_set")\033[0m"
|
||||
content_line "2) $SETBOOT_ITEM_OLD \033[36m$(printf '%-4s' "$start_old")\033[0m $SETBOOT_ITEM_OLD_DESC"
|
||||
content_line "3) $SETBOOT_ITEM_DELAY \033[36m$(printf '%-7s' "$delay")\033[0m $SETBOOT_ITEM_DELAY_DESC"
|
||||
content_line "4) $SETBOOT_ITEM_MINI \033[36m$(printf '%-4s' "$mini_clash")\033[0m $SETBOOT_ITEM_MINI_DESC"
|
||||
[ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) $SETBOOT_ITEM_MINI_DIR \033[36m${BINDIR}\033[0m"
|
||||
btm_box "6) $SETBOOT_ITEM_NETCHK \033[36m$(printf '%-4s' "$network_check")\033[0m $SETBOOT_ITEM_NETCHK_DESC" \
|
||||
"7) $SETBOOT_VIEW_LOG" \
|
||||
"" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
|
||||
if check_autostart; then
|
||||
# 禁止自启动:删除各系统的启动项
|
||||
disable_autostart
|
||||
echo -e "\033[33m已禁止ShellCrash开机启动!\033[0m"
|
||||
msg_alert "\033[33m$SETBOOT_AUTO_OFF\033[0m"
|
||||
else
|
||||
# 允许自启动:配置各系统的启动项
|
||||
allow_autostart
|
||||
echo -e "\033[32m已设置ShellCrash开机启动!\033[0m"
|
||||
msg_alert "\033[32m$SETBOOT_AUTO_ON\033[0m"
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
if [ "$start_old" = "OFF" ] >/dev/null 2>&1; then
|
||||
echo -e "\033[33m改为使用保守模式启动服务!!\033[0m"
|
||||
disable_autostart
|
||||
start_old=ON
|
||||
setconfig start_old "$start_old"
|
||||
"$CRASHDIR"/start.sh stop
|
||||
msg_alert "\033[33m$SETBOOT_OLDMODE_ON\033[0m"
|
||||
else
|
||||
if grep -qE 'procd|systemd|s6' /proc/1/comm || rc-status -r >/dev/null 2>&1; then
|
||||
echo -e "\033[32m改为使用系统守护进程启动服务!!\033[0m"
|
||||
"$CRASHDIR"/start.sh cronset "ShellCrash初始化"
|
||||
"$CRASHDIR"/start.sh cronset "$SETBOOT_CRON_INIT"
|
||||
start_old=OFF
|
||||
setconfig start_old "$start_old"
|
||||
"$CRASHDIR"/start.sh stop
|
||||
|
||||
msg_alert "\033[32m$SETBOOT_OLDMODE_OFF\033[0m"
|
||||
else
|
||||
echo -e "\033[31m当前设备不支持以其他模式启动!!\033[0m"
|
||||
msg_alert "\033[31m$SETBOOT_MODE_UNSUPPORTED\033[0m"
|
||||
fi
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
3)
|
||||
echo -e "\033[33m如果你的设备启动后可以正常使用,则无需设置!!\033[0m"
|
||||
echo -e "\033[36m推荐设置为30~120秒之间,请根据设备问题自行试验\033[0m"
|
||||
read -p "请输入启动延迟时间(0~300秒) > " sec
|
||||
comp_box "\033[33m$SETBOOT_DELAY_HINT1\033[0m" \
|
||||
"\033[36m$SETBOOT_DELAY_HINT2\033[0m"
|
||||
read -r -p "$SETBOOT_DELAY_INPUT> " sec
|
||||
case "$sec" in
|
||||
[0-9] | [0-9][0-9] | [0-2][0-9][0-9] | 300)
|
||||
start_delay=$sec
|
||||
setconfig start_delay $sec
|
||||
echo -e "\033[32m设置成功!\033[0m"
|
||||
setconfig start_delay "$sec"
|
||||
msg_alert "\033[32m$SETBOOT_SET_OK\033[0m"
|
||||
;;
|
||||
*)
|
||||
echo -e "\033[31m输入有误,或超过300秒,请重新输入!\033[0m"
|
||||
msg_alert "\033[31m$SETBOOT_DELAY_INVALID\033[0m"
|
||||
;;
|
||||
esac
|
||||
sleep 1
|
||||
;;
|
||||
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}')
|
||||
if [ "$mini_clash" = "OFF" ]; then
|
||||
if [ "$dir_size" -gt 20480 ]; then
|
||||
echo -e "\033[33m您的设备空间充足(>20M),无需开启!\033[0m"
|
||||
elif [ "$start_old" != 'ON' -a "$(cat /proc/1/comm)" = "systemd" ]; then
|
||||
echo -e "\033[33m不支持systemd启动模式,请先启用保守模式!\033[0m"
|
||||
msg_alert "\033[33m$SETBOOT_MINI_NEEDED_NO\033[0m"
|
||||
elif [ "$start_old" != 'ON' ] && [ "$(cat /proc/1/comm)" = "systemd" ]; then
|
||||
msg_alert "\033[33m$SETBOOT_SYSTEMD_WARN\033[0m"
|
||||
else
|
||||
[ "$BINDIR" = "$CRASHDIR" ] && BINDIR="$TMPDIR"
|
||||
echo -e "\033[32m已经启用小闪存功能!\033[0m"
|
||||
echo -e "如需更换目录,请使用【设置小闪存目录】功能\033[0m"
|
||||
msg_alert "\033[32m$SETBOOT_MINI_ENABLED\033[0m" \
|
||||
"$SETBOOT_MINI_DIR_HINT\033[0m"
|
||||
fi
|
||||
else
|
||||
if [ "$dir_size" -lt 8192 ]; then
|
||||
echo -e "\033[31m您的设备剩余空间不足8M,停用后可能无法正常运行!\033[0m"
|
||||
read -p "确认停用此功能?(1/0) > " res
|
||||
[ "$res" = 1 ] && BINDIR="$CRASHDIR" && echo -e "\033[33m已经停用小闪存功能!\033[0m"
|
||||
comp_box "\033[31m$SETBOOT_MINI_DISABLE_WARN\033[0m" \
|
||||
"$SETBOOT_MINI_DISABLE_CONFIRM"
|
||||
btm_box "1) $SETBOOT_YES" \
|
||||
"0) $SETBOOT_NO_BACK"
|
||||
read -r -p "$COMMON_INPUT> " res
|
||||
if [ "$res" = 1 ]; then
|
||||
BINDIR="$CRASHDIR"
|
||||
msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m"
|
||||
else
|
||||
continue
|
||||
fi
|
||||
else
|
||||
rm -rf /tmp/ShellCrash
|
||||
BINDIR="$CRASHDIR"
|
||||
echo -e "\033[33m已经停用小闪存功能!\033[0m"
|
||||
msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m"
|
||||
fi
|
||||
fi
|
||||
setconfig BINDIR "$BINDIR" "$CRASHDIR"/configs/command.env
|
||||
sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env
|
||||
sleep 1
|
||||
;;
|
||||
5)
|
||||
echo -e "\033[33m如设置到内存,则每次开机后都自动重新下载相关文件\033[0m"
|
||||
echo -e "\033[33m请确保安装源可用裸连,否则会导致启动失败\033[0m"
|
||||
echo " 1 使用内存(/tmp)"
|
||||
echo " 2 选择U盘目录"
|
||||
echo " 3 自定义目录"
|
||||
read -p "请输入相应数字 > " num
|
||||
while true; do
|
||||
comp_box "\033[33m$SETBOOT_BINDIR_HINT1\033[0m" \
|
||||
"\033[33m$SETBOOT_BINDIR_HINT2\033[0m"
|
||||
btm_box "1) $SETBOOT_BINDIR_TMP" \
|
||||
"2) $SETBOOT_BINDIR_USB" \
|
||||
"3) $SETBOOT_BINDIR_CUSTOM" \
|
||||
"" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
1)
|
||||
BINDIR="$TMPDIR"
|
||||
;;
|
||||
2)
|
||||
set_usb_dir() {
|
||||
echo "请选择安装目录"
|
||||
du -hL /mnt | awk '{print " "NR" "$2" "$1}'
|
||||
read -p "请输入相应数字 > " num
|
||||
while true; do
|
||||
comp_box "$SETBOOT_SELECT_INSTALL_DIR"
|
||||
du -hL /mnt |
|
||||
awk '{print NR") "$2" ($SETBOOT_SPACE_USED$1")"}' |
|
||||
while IFS= read -r line; do
|
||||
content_line "$line"
|
||||
done
|
||||
content_line ""
|
||||
content_line "0) $COMMON_BACK"
|
||||
separator_line "="
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||
if [ -z "$BINDIR" ]; then
|
||||
echo "\033[31m输入错误!请重新设置!\033[0m"
|
||||
set_usb_dir
|
||||
if [ "$num" = 0 ]; then
|
||||
return 1
|
||||
elif [ -z "$BINDIR" ]; then
|
||||
msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
set_usb_dir
|
||||
if [ $? -eq 1 ]; then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
3)
|
||||
input_dir() {
|
||||
read -p "请输入自定义目录 > " BINDIR
|
||||
if [ ! -d "$BINDIR" ]; then
|
||||
echo "\033[31m输入错误!请重新设置!\033[0m"
|
||||
input_dir
|
||||
while true; do
|
||||
comp_box "\033[36m$SETBOOT_INPUT_CMD\033[0m" \
|
||||
"$SETBOOT_INPUT_OR_BACK"
|
||||
read -r -p "$SETBOOT_INPUT> " BINDIR
|
||||
if [ "$BINDIR" = 0 ]; then
|
||||
return 1
|
||||
elif [ ! -d "$BINDIR" ]; then
|
||||
msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m"
|
||||
fi
|
||||
return 0
|
||||
done
|
||||
}
|
||||
input_dir
|
||||
if [ $? -eq 1 ]; then
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
setconfig BINDIR "$BINDIR" "$CRASHDIR"/configs/command.env
|
||||
sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env
|
||||
break
|
||||
done
|
||||
;;
|
||||
6)
|
||||
echo -e "\033[33m如果你的设备启动后可以正常使用,则无需变更设置!!\033[0m"
|
||||
echo -e "\033[36m禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!\033[0m"
|
||||
echo -e "\033[32m启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!\033[0m"
|
||||
read -p "是否切换?(1/0) > " res
|
||||
[ "$res" = '1' ] && {
|
||||
comp_box "\033[33m$SETBOOT_NETCHK_HINT1\033[0m" \
|
||||
"\033[36m$SETBOOT_NETCHK_HINT2\033[0m" \
|
||||
"\033[32m$SETBOOT_NETCHK_HINT3\033[0m"
|
||||
|
||||
if [ "$network_check" = "OFF" ]; then
|
||||
content_line "$SETBOOT_NETCHK_OFF_CONFIRM"
|
||||
else
|
||||
content_line "$SETBOOT_NETCHK_ON_CONFIRM"
|
||||
fi
|
||||
separator_line "-"
|
||||
btm_box "1) $SETBOOT_YES" \
|
||||
"0) $SETBOOT_NO_BACK"
|
||||
read -r -p "$COMMON_INPUT> " res
|
||||
if [ "$res" = '1' ]; then
|
||||
if [ "$network_check" = "OFF" ]; then
|
||||
network_check=ON
|
||||
else
|
||||
network_check=OFF
|
||||
fi
|
||||
setconfig network_check "$network_check"
|
||||
}
|
||||
sleep 1
|
||||
if setconfig network_check "$network_check"; then
|
||||
common_success
|
||||
else
|
||||
common_failed
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
7)
|
||||
if [ -s "$TMPDIR"/ShellCrash.log ]; then
|
||||
line_break
|
||||
echo "==========================================================="
|
||||
grep -v "$SETBOOT_TASK_WORD" "$TMPDIR"/ShellCrash.log
|
||||
echo "==========================================================="
|
||||
line_break
|
||||
exit
|
||||
else
|
||||
msg_alert "\033[31m$SETBOOT_LOG_NOT_FOUND\033[0m"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
@@ -4,99 +4,128 @@
|
||||
[ -n "$__IS_MODULE_5_TASK_LOADED" ] && return
|
||||
__IS_MODULE_5_TASK_LOADED=1
|
||||
|
||||
#通用工具
|
||||
# 通用工具
|
||||
. "$CRASHDIR"/libs/set_config.sh
|
||||
. "$CRASHDIR"/libs/set_cron.sh
|
||||
#任务工具
|
||||
set_cron(){
|
||||
[ -z $week ] && week=*
|
||||
[ -z $hour ] && hour=*
|
||||
[ -z $min ] && min=0
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m$cron_time\033[0m执行任务:\033[36m$task_name\033[0m"
|
||||
read -p "是否确认添加定时任务?(1/0) > " res
|
||||
|
||||
load_lang 5_task
|
||||
|
||||
# 任务工具
|
||||
set_cron() {
|
||||
[ -z "$week" ] && week=*
|
||||
[ -z "$hour" ] && hour=*
|
||||
[ -z "$min" ] && min=0
|
||||
comp_box "\033[33m$cron_time\033[0m$TASK5_RUN_TASK\033[36m$task_name\033[0m" \
|
||||
"" \
|
||||
"$TASK5_CONFIRM_ADD_CRON"
|
||||
btm_box "1) $TASK5_YES" \
|
||||
"0) $TASK5_NO"
|
||||
read -r -p "$COMMON_INPUT> " res
|
||||
if [ "$res" = '1' ]; then
|
||||
task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name"
|
||||
cronset "$cron_time$task_name" "$task_txt"
|
||||
echo -e "任务【$cron_time$task_name】\033[32m已添加!\033[0m"
|
||||
msg_alert -t 0 "$TASK5_TASK_PREFIX$cron_time$task_name$TASK5_TASK_ADDED"
|
||||
fi
|
||||
unset week hour min
|
||||
sleep 1
|
||||
}
|
||||
set_service(){
|
||||
|
||||
set_service() {
|
||||
# 参数1代表要任务类型,参数2代表任务ID,参数3代表任务描述,参数4代表running任务cron时间
|
||||
task_file="$CRASHDIR"/task/$1
|
||||
[ -s $task_file ] && sed -i "/$3/d" $task_file
|
||||
#运行时每分钟执行的任务特殊处理
|
||||
if [ "$1" = "running" ];then
|
||||
[ -s "$task_file" ] && sed -i "/$3/d" "$task_file"
|
||||
# 运行时每分钟执行的任务特殊处理
|
||||
if [ "$1" = "running" ]; then
|
||||
task_txt="$4 $CRASHDIR/task/task.sh $2 $3"
|
||||
echo "$task_txt" >> $task_file
|
||||
echo "$task_txt" >>"$task_file"
|
||||
[ -n "$(pidof CrashCore)" ] && cronset "$3" "$task_txt"
|
||||
else
|
||||
echo "$CRASHDIR/task/task.sh $2 $3" >> $task_file
|
||||
echo "$CRASHDIR/task/task.sh $2 $3" >>"$task_file"
|
||||
fi
|
||||
echo -e "任务【$3】\033[32m添加成功!\033[0m"
|
||||
content_line "【$3】\033[32m$COMMON_SUCCESS\033[0m"
|
||||
sleep 1
|
||||
}
|
||||
#任务界面
|
||||
task_user_add(){ #自定义命令添加
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[33m命令可包含空格,请确保命令可执行!\033[0m"
|
||||
echo -e "\033[36m此处不要添加执行条件,请在添加完成后返回添加具体执行条件!\033[0m"
|
||||
echo -e "也可以手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m添加"
|
||||
read -p "请输入命令语句 > " script
|
||||
if [ -n "$script" ];then
|
||||
|
||||
# 任务界面
|
||||
#
|
||||
# 自定义命令添加
|
||||
task_user_add() {
|
||||
while true; do
|
||||
comp_box "\033[33m$TASK5_USER_ADD_HINT1\033[0m" \
|
||||
"\033[36m$TASK5_USER_ADD_HINT2\033[0m" \
|
||||
"$TASK5_USER_ADD_HINT3\033[32m${CRASHDIR}/task/task.user\033[0m$TASK5_USER_ADD_HINT4"
|
||||
btm_box "\033[36m$TASK5_INPUT_CMD\033[0m" \
|
||||
"$TASK5_OR_BACK"
|
||||
read -r -p "$TASK5_INPUT> " script
|
||||
if [ "$script" = 0 ]; then
|
||||
break
|
||||
elif [ -n "$script" ]; then
|
||||
task_command=$script
|
||||
echo -e "请检查输入:\033[32m$task_command\033[0m"
|
||||
#获取本任务ID
|
||||
comp_box "$TASK5_CHECK_INPUT\033[32m$task_command\033[0m"
|
||||
# 获取本任务ID
|
||||
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
|
||||
task_id=$((task_max_id + 1))
|
||||
read -p "请输入任务备注 > " txt
|
||||
[ -n "$txt" ] && task_name=$txt || task_name=自定义任务$task_id
|
||||
echo "$task_id#$task_command#$task_name" >> "$CRASHDIR"/task/task.user
|
||||
echo -e "\033[32m自定义任务已添加!\033[0m"
|
||||
sleep 1
|
||||
read -r -p "$TASK5_INPUT_REMARK> " txt
|
||||
[ -n "$txt" ] && task_name=$txt || task_name="$TASK5_CUSTOM_TASK$task_id"
|
||||
echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user
|
||||
msg_alert "\033[32m$TASK5_CUSTOM_ADDED\033[0m"
|
||||
break
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
sleep 1
|
||||
msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m"
|
||||
fi
|
||||
done
|
||||
}
|
||||
task_user_del(){ #自定义命令删除
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "请输入对应ID移除对应自定义任务(不会影响内置任务)"
|
||||
echo -e "也可以手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cat "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^#' | awk -F '#' '{print $1" "$3}'
|
||||
echo "-----------------------------------------------"
|
||||
echo "0 返回上级菜单"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "请输入对应数字 > " num
|
||||
if [ -n "$num" ];then
|
||||
|
||||
# 自定义命令删除
|
||||
task_user_del() {
|
||||
while true; do
|
||||
if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then
|
||||
comp_box "$TASK5_USER_DEL_HINT1" \
|
||||
"$TASK5_USER_DEL_HINT2\033[32m${CRASHDIR}/task/task.user\033[0m"
|
||||
grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null |
|
||||
awk -F '#' '{print $1") "$3}' |
|
||||
while IFS= read -r line; do
|
||||
content_line "$line"
|
||||
done
|
||||
btm_box "" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
if [ "$num" = 0 ]; then
|
||||
break
|
||||
elif [ -n "$num" ]; then
|
||||
sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null
|
||||
[ "$num" != 0 ] && task_user_del
|
||||
common_success
|
||||
else
|
||||
echo -e "\033[31m输入错误,请重新输入!\033[0m"
|
||||
sleep 1
|
||||
msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m"
|
||||
fi
|
||||
else
|
||||
msg_alert "\033[33m$TASK5_NO_CUSTOM_TASK\033[0m"
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
task_add(){ #任务添加
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m请选择需要添加的任务\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
#输出任务列表
|
||||
cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print " "NR" "$3}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
|
||||
# 任务添加
|
||||
task_add() {
|
||||
while true; do
|
||||
comp_box "\033[36m$TASK5_SELECT_ADD\033[0m"
|
||||
# 输出任务列表
|
||||
list=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}')
|
||||
list_box "$list"
|
||||
btm_box "" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
0)
|
||||
break
|
||||
;;
|
||||
[1-9]|[1-9][0-9])
|
||||
if [ "$num" -le "$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | 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_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}')
|
||||
[1-9] | [1-9][0-9])
|
||||
if [ "$num" -le "$(echo "$list" | wc -l)" ]; then
|
||||
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_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}')
|
||||
task_type
|
||||
break
|
||||
else
|
||||
errornum
|
||||
fi
|
||||
@@ -105,240 +134,251 @@ task_add(){ #任务添加
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
task_del(){ #任务删除
|
||||
#删除定时任务
|
||||
|
||||
# 任务删除
|
||||
task_del() {
|
||||
# 删除定时任务
|
||||
cronset "$1"
|
||||
#删除条件任务
|
||||
# 删除条件任务
|
||||
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/afstart 2>/dev/null
|
||||
sed -i "/$1/d" "$CRASHDIR"/task/running 2>/dev/null
|
||||
sed -i "/$1/d" "$CRASHDIR"/task/affirewall 2>/dev/null
|
||||
}
|
||||
task_type(){ #任务条件选择菜单
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "请选择任务\033[36m【$task_name】\033[0m执行条件:"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 定时任务\033[32m每周执行\033[0m"
|
||||
echo -e " 2 定时任务\033[32m每日执行\033[0m"
|
||||
echo -e " 3 定时任务\033[32m每小时执行\033[0m"
|
||||
echo -e " 4 定时任务\033[32m每分钟执行\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[31m注意:\033[0m逻辑水平不及格的请勿使用下方触发条件!"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 5 服务\033[33m启动前执行\033[0m"
|
||||
echo -e " 6 服务\033[33m启动后执行\033[0m"
|
||||
echo -e " 7 服务\033[33m运行时每分钟执行\033[0m"
|
||||
echo -e " 8 防火墙服务\033[33m重启后执行\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
case "$num" in
|
||||
|
||||
# 任务条件选择菜单
|
||||
task_type() {
|
||||
comp_box "$TASK5_SELECT_COND\033[36m【$task_name】\033[0m$TASK5_SELECT_COND2"
|
||||
btm_box "1) $TASK5_COND_1" \
|
||||
"2) $TASK5_COND_2" \
|
||||
"3) $TASK5_COND_3" \
|
||||
"4) $TASK5_COND_4" \
|
||||
"$TASK5_WARN_LINE1" \
|
||||
"$TASK5_WARN_LINE2" \
|
||||
"$TASK5_WARN_LINE3" \
|
||||
"5) $TASK5_COND_5" \
|
||||
"6) $TASK5_COND_6" \
|
||||
"7) $TASK5_COND_7" \
|
||||
"8) $TASK5_COND_8" \
|
||||
"" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
0)
|
||||
return 1
|
||||
;;
|
||||
1)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 输入 1-7 对应\033[33m每周的指定某天\033[0m运行(7=周日)"
|
||||
echo -e " 输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行"
|
||||
echo -e " 输入 1-5 代表\033[36m周一至周五\033[0m运行"
|
||||
read -p "在每周哪天执行? > " week
|
||||
week=`echo ${week/7/0}` #把7换成0
|
||||
echo "-----------------------------------------------"
|
||||
read -p "想在该日的具体哪个小时执行?(0-23) > " hour
|
||||
cron_time="在每周$week的$hour点整"
|
||||
cron_time=`echo ${cron_time/周0/周日}` #把0换成日
|
||||
|
||||
comp_box "$TASK5_WEEK_HINT1" \
|
||||
"$TASK5_WEEK_HINT2" \
|
||||
"$TASK5_WEEK_HINT3"
|
||||
read -r -p "$TASK5_WEEK_INPUT> " week
|
||||
# week=`echo ${week/7/0}` # 把7换成0
|
||||
read -r -p "$TASK5_HOUR_INPUT1> " hour
|
||||
cron_time="$TASK5_CRON_WEEK$week$TASK5_CRON_WEEK2$hour$TASK5_OCLOCK"
|
||||
# cron_time=`echo ${cron_time/周0/周日}` # 把0换成日
|
||||
[ -n "$week" ] && [ -n "$hour" ] && set_cron
|
||||
;;
|
||||
2)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行"
|
||||
echo -e " 输入 6-18 代表\033[36m早6点至晚18点间每小时\033[0m运行"
|
||||
read -p "想在每日的具体哪个小时执行?(0-23) > " hour
|
||||
echo "-----------------------------------------------"
|
||||
read -p "想在具体哪分钟执行?(0-59的整数) > " min
|
||||
cron_time="在每日的$hour点$min分"
|
||||
comp_box "$TASK5_DAY_HINT1" \
|
||||
"$TASK5_DAY_HINT2"
|
||||
read -r -p "$TASK5_HOUR_INPUT2> " hour
|
||||
read -r -p "$TASK5_MIN_INPUT> " min
|
||||
cron_time="$TASK5_CRON_DAY$hour$TASK5_POINT$min$TASK5_MINUTE"
|
||||
[ -n "$min" ] && [ -n "$hour" ] && set_cron
|
||||
;;
|
||||
3)
|
||||
echo "-----------------------------------------------"
|
||||
read -p "想每隔多少小时执行一次?(1-23的整数) > " num
|
||||
line_break
|
||||
read -r -p "$TASK5_EVERY_HOUR_INPUT> " num
|
||||
hour="*/$num"
|
||||
cron_time="每隔$num小时"
|
||||
cron_time="$TASK5_EVERY$num$TASK5_HOUR"
|
||||
[ -n "$hour" ] && set_cron
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
read -p "想每隔多少分钟执行一次?(1-59的整数) > " num
|
||||
line_break
|
||||
read -r -p "$TASK5_EVERY_MIN_INPUT> " num
|
||||
min="*/$num"
|
||||
cron_time="每隔$num分钟"
|
||||
cron_time="$TASK5_EVERY$num$TASK5_MIN"
|
||||
[ -n "$min" ] && set_cron
|
||||
;;
|
||||
5)
|
||||
set_service bfstart "$task_id" "服务启动前$task_name"
|
||||
set_service bfstart "$task_id" "$TASK5_BFSTART$task_name"
|
||||
;;
|
||||
6)
|
||||
set_service afstart "$task_id" "服务启动后$task_name"
|
||||
set_service afstart "$task_id" "$TASK5_AFSTART$task_name"
|
||||
;;
|
||||
7)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 输入10即每隔10分钟运行一次,1440即每隔24小时运行一次"
|
||||
echo -e " 大于60分钟的数值将按小时取整,且按当前时区记时"
|
||||
read -p "想每隔多少分钟执行一次?(1-1440的整数) > " num
|
||||
if [ "$num" -lt 60 ];then
|
||||
comp_box "$TASK5_RUNNING_HINT1" \
|
||||
"$TASK5_RUNNING_HINT2"
|
||||
read -r -p "$TASK5_RUNNING_INPUT> " num
|
||||
if [ "$num" -lt 60 ]; then
|
||||
min="$num"
|
||||
cron_time="*/$min * * * *"
|
||||
time_des="$min分钟"
|
||||
time_des="$min$TASK5_MIN"
|
||||
else
|
||||
hour="$((num / 60))"
|
||||
cron_time="0 */$hour * * *"
|
||||
time_des="$hour小时"
|
||||
time_des="$hour$TASK5_HOUR"
|
||||
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)
|
||||
echo -e "该功能会将相关启动代码注入到/etc/init.d/firewall中"
|
||||
read -p "是否继续?(1/0) > " res
|
||||
[ "$res" = 1 ] && set_service affirewall "$task_id" "防火墙重启后$task_name"
|
||||
comp_box "$TASK5_AFFW_HINT"
|
||||
"$TASK5_CONFIRM_CONTINUE"
|
||||
btm_box "1) $TASK5_YES" \
|
||||
"0) $TASK5_NO"
|
||||
read -r -p "$COMMON_INPUT> " res
|
||||
[ "$res" = 1 ] && set_service affirewall "$task_id" "$TASK5_AFFW_PREFIX$task_name"
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
task_manager(){ #任务管理列表
|
||||
echo "-----------------------------------------------"
|
||||
#抽取并生成临时列表
|
||||
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 "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >> "$TMPDIR"/task_list
|
||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >> "$TMPDIR"/task_list
|
||||
|
||||
# 任务管理列表
|
||||
task_manager() {
|
||||
while true; do
|
||||
# 抽取并生成临时列表
|
||||
cronload >"$TMPDIR"/task_cronlist
|
||||
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 | cut -d ' ' -f 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
|
||||
rm -rf "$TMPDIR"/task_cronlist
|
||||
#判断为空则返回
|
||||
if [ ! -s "$TMPDIR"/task_list ];then
|
||||
echo -e "\033[31m当前没有可供管理的任务!\033[36m"
|
||||
sleep 1
|
||||
# 判断为空则返回
|
||||
if [ ! -s "$TMPDIR"/task_list ]; then
|
||||
msg_alert "\033[31m$TASK5_NONE_TO_MANAGE\033[36m"
|
||||
break
|
||||
else
|
||||
echo -e "\033[33m已添加的任务:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
cat "$TMPDIR"/task_list | awk '{print " " NR " " $2}'
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " a 清空旧版任务"
|
||||
echo -e " d 清空任务列表"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
comp_box "\033[33m$TASK5_ADDED_TASKS\033[0m"
|
||||
list_box "$(cat "$TMPDIR"/task_list)"
|
||||
separator_line "-"
|
||||
btm_box "a) $TASK5_CLEAR_OLD" \
|
||||
"d) $TASK5_CLEAR_ALL" \
|
||||
"" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
0)
|
||||
"" | 0)
|
||||
break
|
||||
;;
|
||||
a)
|
||||
task_del "#"
|
||||
echo -e "\033[31m旧版任务已清空!\033[36m"
|
||||
sleep 1
|
||||
msg_alert "\033[31m$TASK5_OLD_CLEARED\033[36m"
|
||||
;;
|
||||
d)
|
||||
task_del "task.sh"
|
||||
echo -e "\033[31m全部任务已清空!\033[36m"
|
||||
sleep 1
|
||||
msg_alert "\033[31m$TASK5_ALL_CLEARED\033[36m"
|
||||
;;
|
||||
[1-9]|[1-9][0-9])
|
||||
|
||||
[1-9] | [1-9][0-9])
|
||||
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
||||
task_id=$(echo $task_txt | awk '{print $1}')
|
||||
if [ "$task_id" = 0 ];then
|
||||
read -p "旧版任务不支持管理,是否移除?(1/0) > " res
|
||||
[ "$res" = 1 ] && {
|
||||
cronname=$(echo $task_txt | awk -F '-' '{print $2}')
|
||||
task_id=$(echo "$task_txt" | awk '{print $1}')
|
||||
|
||||
if [ "$task_id" = 0 ]; then
|
||||
comp_box "$TASK5_OLD_NOT_SUPPORT"
|
||||
btm_box "1) $TASK5_YES" \
|
||||
"0) $TASK5_NO_BACK"
|
||||
read -r -p "$COMMON_INPUT> " res
|
||||
if [ "$res" = 1 ]; then
|
||||
cronname=$(echo "$task_txt" | awk -F '-' '{print $2}')
|
||||
cronset "$cronname"
|
||||
sed -i "/$cronname/d" "$CRASHDIR"/task/cron 2>/dev/null
|
||||
}
|
||||
|
||||
break
|
||||
fi
|
||||
else
|
||||
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}')
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "当前任务为:\033[36m $task_des\033[0m"
|
||||
echo -e " 1 \033[33m修改\033[0m当前任务"
|
||||
echo -e " 2 \033[31m删除\033[0m当前任务"
|
||||
echo -e " 3 \033[32m立即执行\033[0m一次"
|
||||
echo -e " 4 查看\033[33m执行记录\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请选择需要执行的操作 > " num
|
||||
task_des=$(echo "$task_txt" | awk '{print $2}')
|
||||
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"
|
||||
btm_box "1) $TASK5_EDIT_TASK" \
|
||||
"2) $TASK5_DEL_TASK" \
|
||||
"3) $TASK5_RUN_ONCE" \
|
||||
"4) $TASK5_VIEW_RECORD" \
|
||||
"" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
0)
|
||||
"" | 0)
|
||||
continue
|
||||
;;
|
||||
1)
|
||||
task_type && task_del $task_des
|
||||
task_type && task_del "$task_des"
|
||||
;;
|
||||
2)
|
||||
task_del $task_des
|
||||
task_del "$task_des"
|
||||
common_success
|
||||
;;
|
||||
3)
|
||||
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
||||
eval $task_command && task_res='执行成功!' || task_res='执行失败!'
|
||||
echo -e "\033[33m任务【$task_des】$task_res\033[0m"
|
||||
sleep 1
|
||||
task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
||||
eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL"
|
||||
msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des】$task_res\033[0m"
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep "$task_name")" ];then
|
||||
if cat "$TMPDIR"/ShellCrash.log | grep -q "$task_name"; then
|
||||
line_break
|
||||
echo "==========================================================="
|
||||
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
||||
echo "==========================================================="
|
||||
else
|
||||
echo -e "\033[31m未找到相关执行记录!\033[0m"
|
||||
msg_alert "\033[31m$TASK5_RECORD_NOT_FOUND\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
task_manager
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
}
|
||||
task_recom(){ #任务推荐
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[32m启用推荐的自动任务配置?这包括:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "每隔10分钟自动保存面板配置"
|
||||
echo -e "服务启动后自动同步ntp时间"
|
||||
echo -e "在每日的3点0分重启服务"
|
||||
echo "-----------------------------------------------"
|
||||
read -p "是否启用?(1/0) > " res
|
||||
|
||||
# 任务推荐
|
||||
task_recom() {
|
||||
comp_box "\033[36m$TASK_RECOM_TITLE\033[0m" \
|
||||
"" \
|
||||
"$TASK_RECOM_ITEM_1" \
|
||||
"$TASK_RECOM_ITEM_2" \
|
||||
"$TASK_RECOM_ITEM_3"
|
||||
btm_box "1) $TASK5_YES" \
|
||||
"0) $TASK5_NO"
|
||||
read -r -p "$COMMON_INPUT>" res
|
||||
|
||||
[ "$res" = 1 ] && {
|
||||
set_service running "106" "运行时每10分钟自动保存面板配置" "*/10 * * * *"
|
||||
set_service afstart "107" "服务启动后自动同步ntp时间"
|
||||
cronset "在每日的3点0分重启服务" "0 3 * * * ${CRASHDIR}/task/task.sh 103 在每日的3点0分重启服务" && \
|
||||
echo -e "任务【在每日的3点0分重启服务】\033[32m添加成功!\033[0m"
|
||||
line_break
|
||||
separator_line "="
|
||||
set_service running "106" "$TASK_RECOM_ITEM_1" "*/10 * * * *"
|
||||
set_service afstart "107" "$TASK_RECOM_ITEM_2"
|
||||
cronset "$TASK_RECOM_ITEM_3" "0 3 * * * ${CRASHDIR}/task/task.sh 103 $TASK_RECOM_ITEM_3" &&
|
||||
content_line "【$TASK_RECOM_ITEM_3】\033[32m$COMMON_SUCCESS\033[0m"
|
||||
separator_line "="
|
||||
}
|
||||
}
|
||||
|
||||
# 任务菜单
|
||||
task_menu() {
|
||||
while true; do
|
||||
#检测并创建自定义任务文件
|
||||
[ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' >"$CRASHDIR"/task/task.user
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[30;47m欢迎使用自动任务功能:\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 1 添加\033[32m自动任务\033[0m"
|
||||
echo -e " 2 管理\033[33m任务列表\033[0m"
|
||||
echo -e " 3 查看\033[36m任务日志\033[0m"
|
||||
echo -e " 4 配置\033[36m日志推送\033[0m"
|
||||
echo -e " 5 添加\033[33m自定义任务\033[0m"
|
||||
echo -e " 6 删除\033[33m自定义任务\033[0m"
|
||||
echo -e " 7 使用\033[32m推荐设置\033[0m"
|
||||
echo "-----------------------------------------------"
|
||||
echo -e " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
# 检测并创建自定义任务文件
|
||||
[ -f "$CRASHDIR"/task/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$CRASHDIR"/task/task.user
|
||||
comp_box "\033[30;47m$TASK5_MENU_TITLE\033[0m"
|
||||
btm_box "1) $TASK5_MENU_1" \
|
||||
"2) $TASK5_MENU_2" \
|
||||
"3) $TASK5_MENU_3" \
|
||||
"4) $TASK5_MENU_4" \
|
||||
"5) $TASK5_MENU_5" \
|
||||
"6) $TASK5_MENU_6" \
|
||||
"7) $TASK5_MENU_7" \
|
||||
"" \
|
||||
"0) $COMMON_BACK"
|
||||
read -r -p "$COMMON_INPUT> " num
|
||||
case "$num" in
|
||||
"" | 0)
|
||||
break
|
||||
@@ -351,17 +391,17 @@ task_menu() {
|
||||
rm -rf "$TMPDIR"/task_list
|
||||
;;
|
||||
3)
|
||||
if [ -n "$(cat "$TMPDIR"/ShellCrash.log | grep '任务【')" ]; then
|
||||
echo "-----------------------------------------------"
|
||||
cat "$TMPDIR"/ShellCrash.log | grep '任务【'
|
||||
if cat "$TMPDIR"/ShellCrash.log | grep -q "$TASK5_TASK_GREP"; then
|
||||
line_break
|
||||
echo "==========================================================="
|
||||
cat "$TMPDIR"/ShellCrash.log | grep "$TASK5_TASK_GREP"
|
||||
echo "==========================================================="
|
||||
else
|
||||
echo -e "\033[31m未找到任务相关执行日志!\033[0m"
|
||||
msg_alert "\033[31m$TASK5_LOG_NOT_FOUND\033[0m"
|
||||
fi
|
||||
sleep 1
|
||||
;;
|
||||
4)
|
||||
echo "-----------------------------------------------"
|
||||
echo -e "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m"
|
||||
msg_alert "\033[36m$TASK5_PUSH_HINT\033[0m"
|
||||
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
||||
;;
|
||||
5)
|
||||
@@ -375,8 +415,6 @@ task_menu() {
|
||||
;;
|
||||
*)
|
||||
errornum
|
||||
sleep 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user