1
+ chcp 65001 > nul
2
+ @ echo off
3
+ cd " %~dp0 "
4
+ color A
5
+ setlocal enabledelayedexpansion
6
+ set version = 20220514
7
+
8
+ :main
9
+ cls
10
+ title CF优选IP
11
+ echo 1. IPV4优选& echo 2. IPV6优选& echo 3. 自定义IPV4段& echo 4. 单IP测速& echo 5. 清空缓存& echo 0. 退出& echo.
12
+ set /p menu = 请选择菜单:
13
+ if %menu% == 0 exit
14
+ if %menu% == 1 title IPV4优选& set ips=ipv4& set /a selfmode=0& goto bettercloudflareip
15
+ if %menu% == 2 title IPV6优选& set ips=ipv6& set /a selfmode=0& goto bettercloudflareip
16
+ if %menu% == 3 title 自定义IPV4段& set ips=ipv4& set /a selfmode=1& set /p selfip=请输入C类自定义IPV4(格式 104.16.16):& goto bettercloudflareip
17
+ if %menu% == 4 title 单IP测速& call :singletest
18
+ if %menu% == 5 del ipv4.txt ipv6.txt data.txt ip.txt CR.txt CRLF.txt cut.txt speed.txt meta.txt> nul 2 >& 1& RD /S /Q rtt> nul 2 >& 1
19
+ goto main
20
+
21
+ :singletest
22
+ set /p ip = 请输入需要测速的IP:
23
+ curl --resolve service.baipiao.eu.org:443:!ip! https://service.baipiao.eu.org -o temp.txt -#
24
+ for /f " tokens=2 delims==" %%i in ('findstr " domain=" temp.txt') do (
25
+ set domain = %%i
26
+ )
27
+ for /f " delims=" %%i in ('findstr " file=" temp.txt') do (
28
+ set file = %%i
29
+ set file = !file:~5 !
30
+ )
31
+ del temp.txt
32
+ title 正在测速 !ip!
33
+ curl --resolve !domain! :443:!ip! https://!domain! /!file! -o nul --connect-timeout 5 --max-time 15
34
+ goto :eof
35
+
36
+ :bettercloudflareip
37
+ set /a tasknum = 25
38
+ set /a bandwidth = 1
39
+ set /p bandwidth = 请设置期望的带宽大小(默认最小%bandwidth%,单位 Mbps):
40
+ set /p tasknum = 请设置RTT测试进程数(默认%tasknum%,最大50):
41
+ if %bandwidth% EQU 0 (set /a bandwidth=1)
42
+ if %tasknum% EQU 0 (set /a tasknum=25& echo 进程数不能为0,自动设置为默认值)
43
+ if %tasknum% GTR 50 (set /a tasknum=50& echo 超过最大进程限制,自动设置为最大值)
44
+ set /a speed = bandwidth* 128
45
+ set /a startH = %time:~ 0,2%
46
+ if %time:~3 ,1 % EQU 0 (set /a startM=%time:~4 ,1 % ) else (set /a startM=%time:~3 ,2 % )
47
+ if %time:~6 ,1 % EQU 0 (set /a startS=%time:~7 ,1 % ) else (set /a startS=%time:~6 ,2 % )
48
+ call :start
49
+ exit
50
+
51
+ :start
52
+ del data.txt ip.txt CR.txt CRLF.txt cut.txt speed.txt meta.txt> nul 2 >& 1
53
+ RD /S /Q rtt> nul 2 >& 1
54
+ if exist " !ips! .txt" goto resolve
55
+ if not exist " !ips! .txt" goto dnsresolve
56
+
57
+ :dnsresolve
58
+ echo DNS解析获取CF !ips! 节点
59
+ echo 如果域名被污染,请手动创建 !ips! .txt 做解析
60
+ curl --!ips! --retry 3 -s https://service.baipiao.eu.org/meta -o meta.txt
61
+ if not exist " meta.txt" goto start
62
+ for /f " tokens=2 delims==" %%i in ('findstr " asn=" meta.txt') do (
63
+ set asn = %%i
64
+ )
65
+ for /f " tokens=2 delims==" %%i in ('findstr " isp=" meta.txt') do (
66
+ set isp = %%i
67
+ )
68
+ for /f " tokens=2 delims==" %%i in ('findstr " country=" meta.txt') do (
69
+ set country = %%i
70
+ )
71
+ for /f " tokens=2 delims==" %%i in ('findstr " region=" meta.txt') do (
72
+ set region = %%i
73
+ )
74
+ for /f " tokens=2 delims==" %%i in ('findstr " city=" meta.txt') do (
75
+ set city = %%i
76
+ )
77
+ for /f " tokens=2 delims==" %%i in ('findstr " longitude=" meta.txt') do (
78
+ set longitude = %%i
79
+ )
80
+ for /f " tokens=2 delims==" %%i in ('findstr " latitude=" meta.txt') do (
81
+ set latitude = %%i
82
+ )
83
+ curl --!ips! --retry 3 https://service.baipiao.eu.org -o data.txt -#
84
+ if not exist " data.txt" goto start
85
+ goto checkupdate
86
+
87
+ :resolve
88
+ for /f " delims=" %%i in (!ips! .txt) do (
89
+ set resolveip = %%i
90
+ )
91
+ echo 指向解析获取CF !ips! 节点
92
+ echo 如果长时间无法获取CF !ips! 节点,重新运行程序并选择清空缓存
93
+ curl --!ips! --resolve service.baipiao.eu.org:443:!resolveip! --retry 3 -s https://service.baipiao.eu.org/meta -o meta.txt
94
+ if not exist " meta.txt" goto start
95
+ for /f " tokens=2 delims==" %%i in ('findstr " asn=" meta.txt') do (
96
+ set asn = %%i
97
+ )
98
+ for /f " tokens=2 delims==" %%i in ('findstr " isp=" meta.txt') do (
99
+ set isp = %%i
100
+ )
101
+ for /f " tokens=2 delims==" %%i in ('findstr " country=" meta.txt') do (
102
+ set country = %%i
103
+ )
104
+ for /f " tokens=2 delims==" %%i in ('findstr " region=" meta.txt') do (
105
+ set region = %%i
106
+ )
107
+ for /f " tokens=2 delims==" %%i in ('findstr " city=" meta.txt') do (
108
+ set city = %%i
109
+ )
110
+ for /f " tokens=2 delims==" %%i in ('findstr " longitude=" meta.txt') do (
111
+ set longitude = %%i
112
+ )
113
+ for /f " tokens=2 delims==" %%i in ('findstr " latitude=" meta.txt') do (
114
+ set latitude = %%i
115
+ )
116
+ curl --!ips! --resolve service.baipiao.eu.org:443:!resolveip! --retry 3 https://service.baipiao.eu.org -o data.txt -#
117
+ if not exist " data.txt" goto start
118
+ goto checkupdate
119
+
120
+ :checkupdate
121
+ for /f " tokens=2 delims==" %%i in ('findstr " domain=" data.txt') do (
122
+ set domain = %%i
123
+ )
124
+ for /f " delims=" %%i in ('findstr " file=" data.txt') do (
125
+ set file = %%i
126
+ set file = !file:~5 !
127
+ )
128
+ for /f " tokens=2 delims==" %%i in ('findstr " url=" data.txt') do (
129
+ set url = %%i
130
+ )
131
+ for /f " tokens=2 delims==" %%i in ('findstr " app=" data.txt') do (
132
+ set app = %%i
133
+ if !app! NEQ !version! (echo 发现新版本程序: !app! & echo 更新地址: !url! & title 更新后才可以使用& echo 按任意键退出程序& pause> nul & exit)
134
+ )
135
+ if not exist " RTT.bat" echo 当前程序不完整& echo 请重新下载Release版本: !url! & pause> nul & exit
136
+ if not exist " CR2CRLF.exe" echo 当前程序不完整& echo 请重新下载Release版本: !url! & pause> nul & exit
137
+ if !selfmode! == 0 (goto getip) else (set /a a=0& goto selfconfigip)
138
+
139
+ :getip
140
+ for /f " skip=4" %%i in (data.txt) do (
141
+ echo %%i >> ip.txt
142
+ )
143
+ goto rtt
144
+
145
+ :selfconfigip
146
+ if !a! == 256 (goto rtt) else (echo !selfip! .!a! >> ip.txt& set /a a=a+1& goto selfconfigip)
147
+
148
+ :rtt
149
+ del meta.txt data.txt
150
+ mkdir rtt
151
+ for /f " tokens=2 delims=:" %%i in ('find /c /v " " ip.txt') do (
152
+ set /a ipnum = %%i
153
+ )
154
+ if !tasknum! GTR !ipnum! set /a tasknum = ipnum
155
+ set /a iplist = ipnum/ tasknum
156
+ set /a a = 1
157
+ set /a b = 1
158
+ for /f " delims=" %%i in (ip.txt) do (
159
+ echo %%i >> rtt/!b! .txt
160
+ if !a! EQU !iplist! (set /a a=1& set /a b=b+1) else (set /a a=a+1)
161
+ )
162
+ del ip.txt
163
+ if !a! NEQ 1 set /a a = 1& set /a b=b+1
164
+ title RTT测试中
165
+ goto rtttest
166
+
167
+ :rtttest
168
+ if !a! NEQ !b! (start /b RTT.bat !a! > nul & set /a a=a+1& goto rtttest) else (goto rttstatus)
169
+
170
+ :rttstatus
171
+ timeout /T 2 /NOBREAK> nul
172
+ for /f " delims=" %%i in ('dir rtt /o:-s /b^ | findstr txt^ | find /c /v " " ') do (
173
+ set /a taskstatus = %%i
174
+ if !taskstatus! NEQ 0 (echo %time:~0 ,8 % 等待RTT测试结束,剩余进程数 !taskstatus! & goto rttstatus) else (echo %time:~0 ,8 % RTT测试完成)
175
+ )
176
+ for /f " delims=" %%i in ('dir rtt /o:-s /b^ | find /c /v " " ') do (
177
+ set /a status = %%i
178
+ if !status! EQU 0 echo 当前所有IP都存在RTT丢包& goto start
179
+ )
180
+ copy rtt\*.log rtt\ip.txt> nul
181
+ sort rtt/ip.txt /O ip.txt
182
+ for /f " tokens=2 delims=:" %%i in ('find /c /v " " ip.txt') do (
183
+ if %%i LSS 5 (echo 当前所有IP都存在RTT丢包& goto start)
184
+ )
185
+ set /a a = 0
186
+ for /f " tokens=2,3 delims= " %%i in (ip.txt) do (
187
+ set /a a = a+ 1
188
+ if !a! == 1 echo 第1个IP %%j 往返延迟 %%i 毫秒
189
+ )
190
+ set /a a = 0
191
+ for /f " tokens=2,3 delims= " %%i in (ip.txt) do (
192
+ set /a a = a+ 1
193
+ if !a! == 2 echo 第2个IP %%j 往返延迟 %%i 毫秒
194
+ )
195
+ set /a a = 0
196
+ for /f " tokens=2,3 delims= " %%i in (ip.txt) do (
197
+ set /a a = a+ 1
198
+ if !a! == 3 echo 第3个IP %%j 往返延迟 %%i 毫秒
199
+ )
200
+ set /a a = 0
201
+ for /f " tokens=2,3 delims= " %%i in (ip.txt) do (
202
+ set /a a = a+ 1
203
+ if !a! == 4 echo 第4个IP %%j 往返延迟 %%i 毫秒
204
+ )
205
+ set /a a = 0
206
+ for /f " tokens=2,3 delims= " %%i in (ip.txt) do (
207
+ set /a a = a+ 1
208
+ if !a! == 5 echo 第5个IP %%j 往返延迟 %%i 毫秒
209
+ )
210
+ title 启动测速
211
+ set /a a = 0
212
+ for /f " tokens=2,3 delims= " %%i in (ip.txt) do (
213
+ set /a a = a+ 1
214
+ if !a! GTR 5 echo 没有满足速度要求的IP& goto start
215
+ del CRLF.txt cut.txt speed.txt> nul 2 >& 1
216
+ set avgms = %%i
217
+ set anycast = %%j
218
+ echo 正在测试 !anycast!
219
+ curl --resolve !domain! :443:!anycast! https://!domain! /!file! -o nul --connect-timeout 5 --max-time 10 > CR.txt 2 >& 1
220
+ findstr " 0:" CR.txt >> CRLF.txt
221
+ CR2CRLF CRLF.txt> nul
222
+ for /f " delims=" %%i in (CRLF.txt) do (
223
+ set s = %%i
224
+ set s = !s:~73 ,5 !
225
+ echo !s%! >> cut.txt
226
+ )
227
+ for /f " delims=" %%i in ('findstr /v " k M" cut.txt') do (
228
+ set x = %%i
229
+ set x = !x:~0 ,5 !
230
+ set /a x = ! x%! / 1024
231
+ echo !x! >> speed.txt
232
+ )
233
+ for /f " delims=" %%i in ('findstr " k" cut.txt') do (
234
+ set x = %%i
235
+ set x = !x:~0 ,4 !
236
+ set /a x = ! x%!
237
+ echo !x! >> speed.txt
238
+ )
239
+ for /f " delims=" %%i in ('findstr " M" cut.txt') do (
240
+ set x = %%i
241
+ set x = !x:~0 ,2 !
242
+ set y = %%i
243
+ set y = !y:~3 ,1 !
244
+ set /a x = ! x%! * 1024
245
+ set /a y = ! y%! * 1024/ 10
246
+ set /a z = x+ y
247
+ echo !z! >> speed.txt
248
+ )
249
+ set /a max = 0
250
+ for /f " tokens=1,2" %%i in ('type " speed.txt" ') do (
251
+ if %%i GEQ !max! set /a max = %%i
252
+ )
253
+ echo !anycast! 峰值速度 !max! kB/s
254
+ if !max! GEQ !speed! cls& goto end
255
+ )
256
+
257
+ :end
258
+ set /a realbandwidth = max/ 128
259
+ set /a stopH = %time:~ 0,2%
260
+ if %time:~3 ,1 % EQU 0 (set /a stopM=%time:~4 ,1 % ) else (set /a stopM=%time:~3 ,2 % )
261
+ if %time:~6 ,1 % EQU 0 (set /a stopS=%time:~7 ,1 % ) else (set /a stopS=%time:~6 ,2 % )
262
+ set /a starttime = %startH%* 3600+ %startM%* 60+ %startS%
263
+ set /a stoptime = %stopH%* 3600+ %stopM%* 60+ %stopS%
264
+ if %starttime% GTR %stoptime% (set /a alltime=86400-%starttime% +%stoptime% ) else (set /a alltime=%stoptime% -%starttime% )
265
+ curl --!ips! --resolve service.baipiao.eu.org:443:!anycast! --retry 3 -s -X POST https://service.baipiao.eu.org -o data.txt
266
+ for /f " tokens=2 delims==" %%i in ('findstr " publicip=" data.txt') do (
267
+ set publicip = %%i
268
+ )
269
+ for /f " tokens=2 delims==" %%i in ('findstr " colo=" data.txt') do (
270
+ set colo = %%i
271
+ )
272
+ echo 优选IP !anycast!
273
+ echo 公网IP !publicip!
274
+ echo 自治域 AS!asn!
275
+ echo 运营商 !isp!
276
+ echo 经纬度 !longitude! ,!latitude!
277
+ echo 位置信息 !city! ,!region! ,!country!
278
+ echo 设置宽带 !bandwidth! Mbps
279
+ echo 实测带宽 !realbandwidth! Mbps
280
+ echo 峰值速度 !max! kB/s
281
+ echo 往返延迟 !avgms! 毫秒
282
+ echo 数据中心 !colo!
283
+ echo 总计用时 !alltime! 秒
284
+ echo !anycast! > !ips! .txt
285
+ echo !anycast! | clip
286
+ del data.txt ip.txt CR.txt CRLF.txt cut.txt speed.txt meta.txt> nul 2 >& 1
287
+ RD /S /Q rtt> nul 2 >& 1
288
+ title 优选IP已经自动复制到剪贴板
289
+ echo 按任意键关闭
290
+ pause> nul
291
+ goto :eof
0 commit comments