规则更新

This commit is contained in:
2026-08-12 10:14:49 +08:00
parent 6bb5b11b61
commit 4e73e1edd7
70 changed files with 286 additions and 106 deletions
@@ -1,9 +1,10 @@
proxy_name: 🇯🇵AWS日本01 | 电信移动联通推荐
username: n0012
mixed_port: 7897
public_ip: 103.62.49.138
public_ipv4: 103.62.49.138
expired_public_ipv4: 103.62.49.138
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:17Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:08Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.162
public_ipv4: 103.62.49.162
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:22Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:09Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.170
public_ipv4: 103.62.49.170
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:23Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:10Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.178
public_ipv4: 103.62.49.178
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:23Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:10Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.154
public_ipv4: 103.62.49.154
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:24Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:11Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.154
public_ipv4: 103.62.49.154
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:25Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:12Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.178
public_ipv4: 103.62.49.178
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:25Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:12Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.170
public_ipv4: 103.62.49.170
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:26Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:13Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.162
public_ipv4: 103.62.49.162
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:27Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:14Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,8 +3,8 @@ username: n0021
mixed_port: 7897
public_ip: 103.62.49.138
public_ipv4: 103.62.49.138
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:27Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:14Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.138
public_ipv4: 103.62.49.138
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:10:58Z
public_ipv6_cached_at_utc: 2026-08-12T01:46:52Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.162
public_ipv4: 103.62.49.162
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:00Z
public_ipv6_cached_at_utc: 2026-08-12T01:46:53Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.170
public_ipv4: 103.62.49.170
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:01Z
public_ipv6_cached_at_utc: 2026-08-12T01:46:55Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.178
public_ipv4: 103.62.49.178
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:03Z
public_ipv6_cached_at_utc: 2026-08-12T01:46:56Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.154
public_ipv4: 103.62.49.154
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:05Z
public_ipv6_cached_at_utc: 2026-08-12T01:46:58Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.162
public_ipv4: 103.62.49.162
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:06Z
public_ipv6_cached_at_utc: 2026-08-12T01:46:59Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.170
public_ipv4: 103.62.49.170
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:08Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:01Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.178
public_ipv4: 103.62.49.178
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:10Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:02Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 103.62.49.154
public_ipv4: 103.62.49.154
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:11Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:03Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.146
public_ipv4: 67.159.48.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:38Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:23Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.147
public_ipv4: 67.159.48.147
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:39Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:24Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.148
public_ipv4: 67.159.48.148
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:39Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:26Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.149
public_ipv4: 67.159.48.149
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:40Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:26Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.150
public_ipv4: 67.159.48.150
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:41Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:31Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.146
public_ipv4: 67.159.48.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:51Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:34Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 203.27.106.146
public_ipv4: 203.27.106.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:13Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:05Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.146
public_ipv4: 67.159.48.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:28Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:15Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 203.27.106.146
public_ipv4: 203.27.106.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:15Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:07Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.147
public_ipv4: 67.159.48.147
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:30Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:17Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.148
public_ipv4: 67.159.48.148
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:32Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:18Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.149
public_ipv4: 67.159.48.149
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:34Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:20Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.150
public_ipv4: 67.159.48.150
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:36Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:22Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 67.159.48.146
public_ipv4: 67.159.48.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:52Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:35Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 203.27.106.146
public_ipv4: 203.27.106.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:54Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:36Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 203.27.106.146
public_ipv4: 203.27.106.146
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:00Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:42Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 146.235.17.47
public_ipv4: 146.235.17.47
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:03Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:45Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,10 @@
proxy_name: 🇹🇼台湾 | 避免晚高峰使用
username: n0054
mixed_port: 7897
public_ip: 114.37.199.26
public_ipv4: 114.37.199.26
public_ip: 114.37.200.234
public_ipv4: 114.37.200.234
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:19Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:01Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,10 @@
proxy_name: 🇹🇼台湾2 | 避免晚高峰使用
username: n0055
mixed_port: 7897
public_ip: 111.249.67.172
public_ipv4: 111.249.67.172
public_ip: 36.230.63.84
public_ipv4: 36.230.63.84
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:23Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:00Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,10 @@
proxy_name: 🇹🇼台湾3 | 避免晚高峰使用
username: n0056
mixed_port: 7897
public_ip: 36.231.97.241
public_ipv4: 36.231.97.241
public_ip: 36.231.109.102
public_ipv4: 36.231.109.102
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:24Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:08Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 108.181.24.43
public_ipv4: 108.181.24.43
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:26Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:14Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0032
mixed_port: 7897
public_ip: 134.195.101.193
public_ipv4: 134.195.101.193
public_ipv6: 2602:feda:f39b:2aa8:712f:fa9f:8b1e:e57
cached_at_utc: 2026-07-21T02:23:01Z
public_ipv6: 2602:feda:f398:aea:e567:188a:f89d:cc2b
public_ipv4_cached_at_utc: 2026-08-12T02:11:41Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:42Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 108.181.23.235
public_ipv4: 108.181.23.235
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:28Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:15Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0033
mixed_port: 7897
public_ip: 134.195.101.194
public_ipv4: 134.195.101.194
public_ipv6: 2602:feda:f39d:e4d5:f1e3:102e:a77b:2349
cached_at_utc: 2026-07-21T02:23:01Z
public_ipv6: 2602:feda:f391:4542:c3c6:7f3b:43fe:75b8
public_ipv4_cached_at_utc: 2026-08-12T02:11:43Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:43Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 208.87.242.97
public_ipv4: 208.87.242.97
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:29Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:16Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0034
mixed_port: 7897
public_ip: 134.195.101.195
public_ipv4: 134.195.101.195
public_ipv6: 2602:feda:f395:fc3c:5df5:b392:c36a:8cf7
cached_at_utc: 2026-07-21T02:23:01Z
public_ipv6: 2602:feda:f397:1ffa:3657:170b:ab41:bf28
public_ipv4_cached_at_utc: 2026-08-12T02:11:44Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:44Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 108.181.24.47
public_ipv4: 108.181.24.47
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:30Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:17Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0035
mixed_port: 7897
public_ip: 134.195.101.197
public_ipv4: 134.195.101.197
public_ipv6: 2602:feda:f39a:d2a8:39e5:647a:b949:cd64
cached_at_utc: 2026-07-21T02:23:03Z
public_ipv6: 2602:feda:f39c:3f65:a52e:ed9f:4b8f:f251
public_ipv4_cached_at_utc: 2026-08-12T02:11:45Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:45Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 108.181.24.41
public_ipv4: 108.181.24.41
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:32Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:18Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0036
mixed_port: 7897
public_ip: 134.195.101.120
public_ipv4: 134.195.101.120
public_ipv6: 2602:feda:f399:3482:1ef5:da10:a002:cf58
cached_at_utc: 2026-07-21T02:23:03Z
public_ipv6: 2602:feda:f39b:e6ac:b937:4b:bad7:ffba
public_ipv4_cached_at_utc: 2026-08-12T02:11:46Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:47Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0037
mixed_port: 7897
public_ip: 134.195.101.180
public_ipv4: 134.195.101.180
public_ipv6: 2602:feda:f398:da05:369a:e728:e327:2914
cached_at_utc: 2026-07-21T02:23:04Z
public_ipv6: 2602:feda:f39a:6185:a814:b010:5a7:bfd0
public_ipv4_cached_at_utc: 2026-08-12T02:11:47Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:48Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0038
mixed_port: 7897
public_ip: 134.195.101.188
public_ipv4: 134.195.101.188
public_ipv6: 2602:feda:f390:c2ea:d430:7bd5:7a06:a439
cached_at_utc: 2026-07-21T02:23:04Z
public_ipv6: 2602:feda:f390:eb17:1618:a833:95e7:33f9
public_ipv4_cached_at_utc: 2026-08-12T02:11:48Z
public_ipv6_cached_at_utc: 2026-08-12T02:11:49Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 203.10.96.139
public_ipv4: 203.10.96.139
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:11:50Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:34Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0062
mixed_port: 7897
public_ip: 134.195.101.193
public_ipv4: 134.195.101.193
public_ipv6: 2602:feda:f393:5162:25fc:91f:700e:4f1a
cached_at_utc: 2026-07-21T02:24:03Z
public_ipv6: 2602:feda:f39a:199:60fe:a88a:2864:ba13
public_ipv4_cached_at_utc: 2026-08-12T02:13:33Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:34Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞01-0.1倍
username: n0046
mixed_port: 7897
public_ip: 134.195.101.193
public_ipv4: 134.195.101.193
public_ipv6: 2602:feda:f392:d804:1396:1c34:2b3b:5b9a
cached_at_utc: 2026-07-21T02:23:23Z
expired_public_ipv4: 134.195.101.193
expired_public_ipv6: 2602:feda:f392:d804:1396:1c34:2b3b:5b9a
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:04Z
public_ipv6_cached_at_utc: 2026-08-12T02:12:09Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0063
mixed_port: 7897
public_ip: 134.195.101.194
public_ipv4: 134.195.101.194
public_ipv6: 2602:feda:f399:2c38:e3d3:d70c:33c9:21b3
cached_at_utc: 2026-07-21T02:24:04Z
public_ipv6: 2602:feda:f39f:c9a8:a110:3162:a48b:1f5a
public_ipv4_cached_at_utc: 2026-08-12T02:13:34Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:35Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞02-0.1倍
username: n0047
mixed_port: 7897
public_ip: 134.195.101.194
public_ipv4: 134.195.101.194
public_ipv6: 2602:feda:f399:83a4:5723:c2e1:d589:a253
cached_at_utc: 2026-07-21T02:23:25Z
expired_public_ipv4: 134.195.101.194
expired_public_ipv6: 2602:feda:f399:83a4:5723:c2e1:d589:a253
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:14Z
public_ipv6_cached_at_utc: 2026-08-12T02:12:19Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0064
mixed_port: 7897
public_ip: 134.195.101.195
public_ipv4: 134.195.101.195
public_ipv6: 2602:feda:f39a:13e5:d88e:29e8:5379:7486
cached_at_utc: 2026-07-21T02:24:04Z
public_ipv6: 2602:feda:f39b:cd95:6db2:d330:12ee:b024
public_ipv4_cached_at_utc: 2026-08-12T02:13:36Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:37Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞03-0.1倍
username: n0048
mixed_port: 7897
public_ip: 134.195.101.195
public_ipv4: 134.195.101.195
public_ipv6: 2602:feda:f39b:4401:de6f:8516:17c8:b20e
cached_at_utc: 2026-07-21T02:23:28Z
expired_public_ipv4: 134.195.101.195
expired_public_ipv6: 2602:feda:f39b:4401:de6f:8516:17c8:b20e
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:24Z
public_ipv6_cached_at_utc: 2026-08-12T02:12:29Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0065
mixed_port: 7897
public_ip: 134.195.101.197
public_ipv4: 134.195.101.197
public_ipv6: 2602:feda:f39a:c712:e32:2b7:76eb:3172
cached_at_utc: 2026-07-21T02:24:05Z
public_ipv6: 2602:feda:f392:f752:beab:7616:d5c:b6ca
public_ipv4_cached_at_utc: 2026-08-12T02:13:38Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:39Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞04-0.1倍
username: n0049
mixed_port: 7897
public_ip: 134.195.101.197
public_ipv4: 134.195.101.197
public_ipv6: 2602:feda:f397:99de:8796:ee83:4afd:ee69
cached_at_utc: 2026-07-21T02:23:30Z
expired_public_ipv4: 134.195.101.197
expired_public_ipv6: 2602:feda:f397:99de:8796:ee83:4afd:ee69
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:34Z
public_ipv6_cached_at_utc: 2026-08-12T02:12:39Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0066
mixed_port: 7897
public_ip: 134.195.101.120
public_ipv4: 134.195.101.120
public_ipv6: 2602:feda:f393:cb92:828b:312d:85e0:d1e5
cached_at_utc: 2026-07-21T02:24:10Z
public_ipv6: 2602:feda:f399:e96a:3378:5d7c:594f:aed8
public_ipv4_cached_at_utc: 2026-08-12T02:13:39Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:40Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞05-0.1倍
username: n0050
mixed_port: 7897
public_ip: 134.195.101.120
public_ipv4: 134.195.101.120
public_ipv6: 2602:feda:f392:c639:102e:dc8b:f841:144e
cached_at_utc: 2026-07-21T02:23:32Z
expired_public_ipv4: 134.195.101.120
expired_public_ipv6: 2602:feda:f392:c639:102e:dc8b:f841:144e
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:44Z
public_ipv6_cached_at_utc: 2026-08-12T02:12:49Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0067
mixed_port: 7897
public_ip: 134.195.101.180
public_ipv4: 134.195.101.180
public_ipv6: 2602:feda:f39d:dc3c:3361:70b2:1845:239d
cached_at_utc: 2026-07-21T02:24:11Z
public_ipv6: 2602:feda:f39b:d15a:2646:ce85:cad3:bd1e
public_ipv4_cached_at_utc: 2026-08-12T02:13:41Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:42Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞06-0.1倍
username: n0051
mixed_port: 7897
public_ip: 134.195.101.180
public_ipv4: 134.195.101.180
public_ipv6: 2602:feda:f398:ada:918f:3637:21ac:2f99
cached_at_utc: 2026-07-21T02:23:34Z
expired_public_ipv4: 134.195.101.180
expired_public_ipv6: 2602:feda:f398:ada:918f:3637:21ac:2f99
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:12:54Z
public_ipv6_cached_at_utc: 2026-08-12T02:12:59Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -3,7 +3,8 @@ username: n0068
mixed_port: 7897
public_ip: 134.195.101.188
public_ipv4: 134.195.101.188
public_ipv6: 2602:feda:f396:24f5:6a11:a635:1005:a67b
cached_at_utc: 2026-07-21T02:24:12Z
public_ipv6: 2602:feda:f398:49e7:adf2:ebe3:7e4f:36e6
public_ipv4_cached_at_utc: 2026-08-12T02:13:43Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:44Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,11 @@
proxy_name: 🇺🇸美国圣何塞07-0.1倍
username: n0052
mixed_port: 7897
public_ip: 134.195.101.188
public_ipv4: 134.195.101.188
public_ipv6: 2602:feda:f391:9ff:bb3:3469:73be:8c00
cached_at_utc: 2026-07-21T02:23:38Z
expired_public_ipv4: 134.195.101.188
expired_public_ipv6: 2602:feda:f391:9ff:bb3:3469:73be:8c00
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:04Z
public_ipv6_cached_at_utc: 2026-08-12T02:13:09Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -4,6 +4,7 @@ mixed_port: 7897
public_ip: 203.10.96.139
public_ipv4: 203.10.96.139
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:45Z
public_ipv6_cached_at_utc: 2026-08-12T01:48:19Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
@@ -1,9 +1,10 @@
proxy_name: 🇺🇸美国洛杉矶08-0.1倍
username: n0053
mixed_port: 7897
public_ip: 203.10.96.139
public_ipv4: 203.10.96.139
expired_public_ipv4: 203.10.96.139
public_ipv4_error: ipify 请求失败:SSL connection failed
public_ipv6_error: ipify 请求失败:SSL connection failed
public_ipv4_cached_at_utc: 2026-08-12T02:13:14Z
public_ipv6_cached_at_utc: 2026-08-12T01:47:55Z
ipv4_source: https://api4.ipify.org/?format=json
ipv6_source: https://api6.ipify.org/?format=json
+143 -37
View File
@@ -4,10 +4,12 @@
#include "Proxy_Ping0_Labeler.h"
#include "Async_Blocking.h"
#include "Ping0_Html_Parser.h"
#include "config.h"
#include "export.h"
#include <algorithm>
#include <array>
#include <chrono>
#include <ctime>
#include <filesystem>
#include <format>
#include <fstream>
@@ -40,14 +42,12 @@ struct Node_Route {
struct Public_Ip_Cache {
std::optional<std::string> ipv4;
std::optional<std::string> ipv6;
std::optional<std::string> expired_ipv4;
std::optional<std::string> expired_ipv6;
std::optional<std::string> ipv4_error;
std::optional<std::string> ipv6_error;
bool has_ipv4_state() const {
return ipv4.has_value() || ipv4_error.has_value();
}
bool has_ipv6_state() const {
return ipv6.has_value() || ipv6_error.has_value();
}
std::optional<std::chrono::system_clock::time_point> ipv4_cached_at_utc;
std::optional<std::chrono::system_clock::time_point> ipv6_cached_at_utc;
};
struct Node_Ping0_Result {
std::string name;
@@ -75,8 +75,7 @@ std::string trim_ascii(std::string value) {
const auto last = value.find_last_not_of(" \t\r\n");
return value.substr(first, last - first + 1);
}
std::string make_utc_time() {
const auto now = std::chrono::system_clock::now();
std::string make_utc_time(std::chrono::system_clock::time_point now) {
const auto value = std::chrono::system_clock::to_time_t(now);
std::tm utc{};
#ifdef _WIN32
@@ -86,6 +85,59 @@ std::string make_utc_time() {
#endif
return std::format("{:04}-{:02}-{:02}T{:02}:{:02}:{:02}Z", utc.tm_year + 1900, utc.tm_mon + 1, utc.tm_mday, utc.tm_hour, utc.tm_min, utc.tm_sec);
}
std::string make_utc_time() {
return make_utc_time(std::chrono::system_clock::now());
}
std::optional<int> parse_fixed_uint(std::string_view text, size_t offset, size_t size) {
int result = 0;
for (size_t i = 0; i < size; ++i) {
const auto ch = static_cast<unsigned char>(text[offset + i]);
if (ch < '0' || ch > '9') {
return std::nullopt;
}
result = result * 10 + ch - '0';
}
return result;
}
std::optional<std::chrono::system_clock::time_point> parse_utc_time(std::string_view text) {
if (text.size() != 20 || text[4] != '-' || text[7] != '-' || text[10] != 'T' || text[13] != ':' || text[16] != ':' || text[19] != 'Z') {
return std::nullopt;
}
const auto year = parse_fixed_uint(text, 0, 4);
const auto month = parse_fixed_uint(text, 5, 2);
const auto day = parse_fixed_uint(text, 8, 2);
const auto hour = parse_fixed_uint(text, 11, 2);
const auto minute = parse_fixed_uint(text, 14, 2);
const auto second = parse_fixed_uint(text, 17, 2);
if (!year || !month || !day || !hour || !minute || !second || *hour > 23 || *minute > 59 || *second > 59) {
return std::nullopt;
}
std::tm utc{};
utc.tm_year = *year - 1900;
utc.tm_mon = *month - 1;
utc.tm_mday = *day;
utc.tm_hour = *hour;
utc.tm_min = *minute;
utc.tm_sec = *second;
#ifdef _WIN32
const auto value = _mkgmtime(&utc);
#else
const auto value = timegm(&utc);
#endif
if (value == static_cast<std::time_t>(-1)) {
return std::nullopt;
}
std::tm checked{};
#ifdef _WIN32
gmtime_s(&checked, &value);
#else
gmtime_r(&value, &checked);
#endif
if (checked.tm_year != utc.tm_year || checked.tm_mon != utc.tm_mon || checked.tm_mday != utc.tm_mday || checked.tm_hour != utc.tm_hour || checked.tm_min != utc.tm_min || checked.tm_sec != utc.tm_sec) {
return std::nullopt;
}
return std::chrono::system_clock::from_time_t(value);
}
std::string make_safe_file_name(std::string_view name) {
std::string result;
result.reserve(name.size());
@@ -204,8 +256,16 @@ Public_Ip_Cache load_cached_public_ips(const fs::path& path) {
result.ipv4 = read_optional_string(cache, "public_ip");
}
result.ipv6 = read_optional_string(cache, "public_ipv6");
result.expired_ipv4 = read_optional_string(cache, "expired_public_ipv4");
result.expired_ipv6 = read_optional_string(cache, "expired_public_ipv6");
result.ipv4_error = read_optional_string(cache, "public_ipv4_error");
result.ipv6_error = read_optional_string(cache, "public_ipv6_error");
if (const auto cached_at = read_optional_string(cache, "public_ipv4_cached_at_utc")) {
result.ipv4_cached_at_utc = parse_utc_time(*cached_at);
}
if (const auto cached_at = read_optional_string(cache, "public_ipv6_cached_at_utc")) {
result.ipv6_cached_at_utc = parse_utc_time(*cached_at);
}
return result;
}
std::string query_public_ip_by_user(std::string_view username, uint16_t mixed_port, std::string_view host) {
@@ -243,13 +303,24 @@ void save_public_ip_cache(const fs::path& path, const Node_Route& route, const P
if (cache.ipv6) {
node["public_ipv6"] = *cache.ipv6;
}
if (cache.expired_ipv4) {
node["expired_public_ipv4"] = *cache.expired_ipv4;
}
if (cache.expired_ipv6) {
node["expired_public_ipv6"] = *cache.expired_ipv6;
}
if (cache.ipv4_error) {
node["public_ipv4_error"] = *cache.ipv4_error;
}
if (cache.ipv6_error) {
node["public_ipv6_error"] = *cache.ipv6_error;
}
node["cached_at_utc"] = make_utc_time();
if (cache.ipv4_cached_at_utc) {
node["public_ipv4_cached_at_utc"] = make_utc_time(*cache.ipv4_cached_at_utc);
}
if (cache.ipv6_cached_at_utc) {
node["public_ipv6_cached_at_utc"] = make_utc_time(*cache.ipv6_cached_at_utc);
}
node["ipv4_source"] = source_url(ipv4_query_url_host);
node["ipv6_source"] = source_url(ipv6_query_url_host);
YAML::Emitter emitter;
@@ -260,30 +331,65 @@ void save_public_ip_cache(const fs::path& path, const Node_Route& route, const P
}
write_file_atomic(path, std::string_view(emitter.c_str(), emitter.size()));
}
bool public_ip_cache_expired(const std::optional<std::chrono::system_clock::time_point>& cached_at_utc, int ttl_seconds) {
if (ttl_seconds <= 0) {
return false;
}
if (!cached_at_utc) {
return true;
}
return std::chrono::system_clock::now() - *cached_at_utc >= std::chrono::seconds(ttl_seconds);
}
void refresh_public_ipv4(Public_Ip_Cache& cache, std::string_view username, uint16_t mixed_port) {
const auto old_ipv4 = cache.ipv4 ? cache.ipv4 : cache.expired_ipv4;
cache.ipv4.reset();
cache.ipv4_error.reset();
cache.ipv4_cached_at_utc = std::chrono::system_clock::now();
try {
cache.ipv4 = query_public_ip_by_user(username, mixed_port, ipv4_query_url_host);
cache.expired_ipv4.reset();
}
catch (const std::exception& error) {
cache.expired_ipv4 = old_ipv4;
cache.ipv4_error = error_text_to_utf8(error.what());
}
}
void refresh_public_ipv6(Public_Ip_Cache& cache, std::string_view username, uint16_t mixed_port) {
const auto old_ipv6 = cache.ipv6 ? cache.ipv6 : cache.expired_ipv6;
cache.ipv6.reset();
cache.ipv6_error.reset();
cache.ipv6_cached_at_utc = std::chrono::system_clock::now();
try {
cache.ipv6 = query_public_ip_by_user(username, mixed_port, ipv6_query_url_host);
cache.expired_ipv6.reset();
}
catch (const std::exception& error) {
cache.expired_ipv6 = old_ipv6;
cache.ipv6_error = error_text_to_utf8(error.what());
}
}
std::optional<std::string> usable_ipv4(const Public_Ip_Cache& cache) {
return cache.ipv4 ? cache.ipv4 : cache.expired_ipv4;
}
std::optional<std::string> usable_ipv6(const Public_Ip_Cache& cache) {
return cache.ipv6 ? cache.ipv6 : cache.expired_ipv6;
}
Public_Ip_Cache get_public_ips(const Node_Route& route, const fs::path& cache_dir, std::optional<uint16_t> mixed_port) {
const auto cache_path = make_ip_cache_path(cache_dir, route.proxy_name);
std::lock_guard lock(public_ip_cache_lock(cache_path));
auto cache = load_cached_public_ips(cache_path);
Public_Ip_Cache cache = load_cached_public_ips(cache_path);
const bool ipv4_expired = public_ip_cache_expired(cache.ipv4_cached_at_utc, public_ipv4_cache_ttl_seconds);
const bool ipv6_expired = public_ip_cache_expired(cache.ipv6_cached_at_utc, public_ipv6_cache_ttl_seconds);
bool changed = false;
if (!mixed_port) {
return cache;
}
if (!cache.has_ipv4_state()) {
try {
cache.ipv4 = query_public_ip_by_user(route.username, *mixed_port, ipv4_query_url_host);
}
catch (const std::exception& error) {
cache.ipv4_error = error_text_to_utf8(error.what());
}
if (radical_ipv4 ? ipv4_expired : ipv4_expired && !cache.ipv4.has_value()) {
refresh_public_ipv4(cache, route.username, *mixed_port);
changed = true;
}
if (!cache.has_ipv6_state()) {
try {
cache.ipv6 = query_public_ip_by_user(route.username, *mixed_port, ipv6_query_url_host);
}
catch (const std::exception& error) {
cache.ipv6_error = error_text_to_utf8(error.what());
}
if (radical_ipv6 ? ipv6_expired : ipv6_expired && !cache.ipv6.has_value()) {
refresh_public_ipv6(cache, route.username, *mixed_port);
changed = true;
}
if (changed) {
@@ -404,7 +510,6 @@ std::string make_proxy_name_suffix(const Node_Ping0_Result& result) {
if (result.public_ipv6) {
parts.push_back("_" + compact_ip_text(*result.public_ipv6));
}
std::string suffix;
for (const auto& part : parts) {
if (!part.empty()) {
@@ -433,17 +538,18 @@ void print_ping0_info(const Node_Route& route, const Node_Ping0_Result& result)
}
std::optional<Node_Ping0_Result> load_node_ping0_result(const Node_Route& route, const fs::path& ip_cache_dir, const fs::path& html_cache_dir, std::optional<uint16_t> mixed_port) {
const auto public_ips = get_public_ips(route, ip_cache_dir, mixed_port);
if (!public_ips.ipv4) {
const auto public_ipv4 = usable_ipv4(public_ips);
if (!public_ipv4) {
std::cerr << std::format("Ping0 标注跳过:节点 {} 没有 IPv4 出口缓存\n", route.proxy_name);
return std::nullopt;
}
const auto html_path = find_ping0_html_path(html_cache_dir, *public_ips.ipv4);
const auto html_path = find_ping0_html_path(html_cache_dir, *public_ipv4);
if (!html_path) {
std::cerr << std::format("【注意添加缓存数据】================================ Ping0 HTML 缓存不存在,节点 {},出口 IPv4 {},目录 {}\n", route.proxy_name, *public_ips.ipv4, path_to_utf8(html_cache_dir));
std::cerr << std::format("【注意添加缓存数据】================================ Ping0 HTML 缓存不存在,节点 {},出口 IPv4 {},目录 {}\n", route.proxy_name, *public_ipv4, path_to_utf8(html_cache_dir));
return std::nullopt;
}
auto info = Ping0::parse_file(*html_path);
return Node_Ping0_Result{route.proxy_name, *public_ips.ipv4, public_ips.ipv6, make_ip_cache_path(ip_cache_dir, route.proxy_name), *html_path, std::move(info), route.index, std::nullopt};
return Node_Ping0_Result{route.proxy_name, *public_ipv4, usable_ipv6(public_ips), make_ip_cache_path(ip_cache_dir, route.proxy_name), *html_path, std::move(info), route.index, std::nullopt};
}
void record_ai_node_info(Node_Ping0_Result result, const fs::path& node_state_dir) {
const auto ai_score = ai_scene_score(result.info);
@@ -459,13 +565,13 @@ struct Node_Ping0_Task_Result {
std::string error;
};
asio::awaitable<void> load_node_ping0_result_task(asio::thread_pool& pool,
std::vector<Node_Ping0_Task_Result>& results,
size_t index,
fs::path ip_cache_dir,
fs::path html_cache_dir,
std::optional<uint16_t> mixed_port,
std::shared_ptr<size_t> pending,
asio::steady_timer& signal) {
std::vector<Node_Ping0_Task_Result>& results,
size_t index,
fs::path ip_cache_dir,
fs::path html_cache_dir,
std::optional<uint16_t> mixed_port,
std::shared_ptr<size_t> pending,
asio::steady_timer& signal) {
try {
const auto route = results[index].route;
results[index].result = co_await WyC::async_blocking(pool, [route, ip_cache_dir, html_cache_dir, mixed_port] {
@@ -501,7 +607,7 @@ asio::awaitable<void> append_ping0_info_to_proxy_names_async(YAML::Node& proxies
auto pending = std::make_shared<size_t>(routes.size());
auto executor = co_await asio::this_coro::executor;
asio::steady_timer signal(executor);
std::cout << std::format("Ping0 标注需要处理 {} 个节点,使用 {} 个 Asio 池线程\n", routes.size(), thread_count);
std::cout << std::format("Ping0 标注需要处理 {} 个节点,使用 {} 个 Asio 池线程IPv4 缓存 TTL {} 秒,IPv4 过期{}IPv6 缓存 TTL {} 秒,IPv6 过期{}\n", routes.size(), thread_count, public_ipv4_cache_ttl_seconds, radical_ipv4 ? "重新请求" : "仅缺失时请求", public_ipv6_cache_ttl_seconds, radical_ipv6 ? "重新请求" : "仅缺失时请求");
for (size_t i = 0; i < routes.size(); ++i) {
asio::co_spawn(executor, load_node_ping0_result_task(pool, results, i, ip_cache_dir, html_cache_dir, mixed_port, pending, signal), asio::detached);
}
+2 -2
View File
@@ -4,5 +4,5 @@ inline constexpr int public_ipv4_cache_ttl_seconds = 7 * 24 * 60 * 60;
// 出口 IPv6 缓存有效期,单位秒;0 表示永不过期。
inline constexpr int public_ipv6_cache_ttl_seconds = 7 * 24 * 60 * 60;
// true 表示对应缓存过期就重查;false 表示过期且缺少对应 IP 才重查。
inline constexpr bool radical_ipv4 = false;
inline constexpr bool radical_ipv6 = false;
inline constexpr bool radical_ipv4 = true;
inline constexpr bool radical_ipv6 = true;