CloudflareSpeedTest README

The project's README from github.com/XIU2/CloudflareSpeedTest. As one markdown file: README.md.

XIU2/CloudflareSpeedTest

Go Version Release Version GitHub license GitHub Star GitHub Fork

国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。
虽然 Cloudflare 公开了所有 IP 段 ,但想要在这么多 IP 中找到适合自己的,怕是要累死,于是就有了这个软件。

「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP (IPv4+IPv6)!好用的话点个⭐鼓励一下叭~

分享我其他开源项目:TrackersList.com - 全网热门 BT Tracker 列表!有效提高 BT 下载速度~
UserScript - 🐵 Github 高速下载、知乎增强、自动无缝翻页、护眼模式 等十几个油猴脚本~
SNIProxy - 🧷 自用的简单 SNI Proxy(支持全平台、全系统、前置代理、配置简单等~

当然了,本项目也支持对 其他 CDN / 多个解析 IP 的网站 延迟测速,但相对应的下载测速地址需自行寻找。

[!IMPORTANT] Cloudflare CDN 已明文禁止代理方式使用,对于代理套 CDN 的自行承担风险,请勿过度依赖 #382 #383


# 快速使用

下载运行

  1. 下载编译好的可执行文件( Github Releases / 蓝奏云 )并解压。
  2. 双击运行 cfst.exe 文件(Windows 系统),等待测速完成...
「 点击查看 Windows 系统下其他安装方式」

如果你有 scoop(Windows 下的命令行安装程序),则可以这样安装:

# 添加最多人使用的中文软件包仓库:dorado
scoop bucket add dorado https://github.com/chawyehsu/dorado
# 安装cloudflare-speedtest
scoop install dorado/cloudflare-speedtest
「 点击查看 Linux / MAC 系统下的使用示例 」

以下命令仅为示例,版本号和文件名请前往 Releases 查看。

MAC 下 CFST 的安装和使用方式是一样的,不过 MAC 可以通过其他方式来下载解压(也就是可以跳过下面的前几个步骤),但运行的话还是需要在终端中运行(注意别忘了 赋予执行权限)。

# 如果是第一次使用,则建议创建新文件夹(后续更新时,跳过该步骤)
mkdir cfst

# 进入文件夹(后续更新,只需要从这里重复下面的下载、解压命令即可)
cd cfst

# 下载 CFST 压缩包(这个地址是始终指向最新版本,可自行根据需求替换 URL 末尾的 [文件名])
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz
# 如果你是在国内网络环境中下载,那么请使用下面这几个镜像加速之一:
# wget -N https://wget.la/https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz
# wget -N https://ghfast.top/https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz
# wget -N https://ghproxy.it/https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz
# wget -N https://gh-proxy.org/https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz
# wget -N https://cdn.gh-proxy.org/https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz
# 如果下载失败的话,尝试删除 -N 参数(如果是为了更新,则记得提前删除旧压缩包 rm cfst_linux_amd64.tar.gz )
# 如果要下载特定版本的,可以改用这种,例如:wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz

# 解压(不需要删除旧文件,会直接覆盖,自行根据需求替换 文件名)
tar -zxf cfst_linux_amd64.tar.gz

# 赋予执行权限
chmod +x cfst

# 运行(不带参数)
./cfst

# 运行(带参数示例)
./cfst -tl 200 -dn 20

如果平均延迟非常低(如 0.xx),则说明 CFST 测速时走了代理,请先关闭代理软件后再测速。
如果在路由器上运行,建议先关闭路由器内的代理(或将其排除),否则测速结果可能会不准确/无法使用。


在手机上独立运行 CFST 测速的简单教程:Android、Android APP、Android APP、IOS

[!NOTE] 注意!本软件仅适用于网站,不支持给使用 UDP 协议的 Cloudflare WARP 优选 IP,具体见:#392

结果示例

测速完毕后,默认会显示最快的 10 个 IP,示例(仅为输出内容示例):

IP 地址           已发送  已接收  丢包率  平均延迟  下载速度(MB/s)  地区码
104.27.200.69     4      4       0.00   146.23    28.64          LAX
172.67.60.78      4      4       0.00   139.82    15.02          SEA
104.25.140.153    4      4       0.00   146.49    14.90          SJC
104.27.192.65     4      4       0.00   140.28    14.07          LAX
172.67.62.214     4      4       0.00   139.29    12.71          LAX
104.27.207.5      4      4       0.00   145.92    11.95          LAX
172.67.54.193     4      4       0.00   146.71    11.55          LAX
104.22.66.8       4      4       0.00   147.42    11.11          SEA
104.27.197.63     4      4       0.00   131.29    10.26          FRA
172.67.58.91      4      4       0.00   140.19    9.14           SJC
...

# 如果平均延迟非常低(如 0.xx),则说明 CFST 测速时走了代理,请先关闭代理软件后再测速。
# 如果在路由器上运行,请先关闭路由器内的代理(或将其排除),否则测速结果可能会不准确/无法使用。

# 因为每次测速都是在每个 IP 段中随机 IP,所以每次的测速结果都不可能相同,这是正常的!

# 注意!我发现电脑开机后第一次测速延迟会明显偏高(手动 TCPing 也一样),后续测速都正常
# 因此建议大家开机后第一次正式测速前,先随便测几个 IP(无需等待延迟测速完成,只要进度条动了就可以直接关了)

# 软件在 默认参数 下的整个流程大概步骤:
# 1. 延迟测速(默认 TCPing 模式,HTTPing 模式需要手动加上参数)
# 2. 延迟排序(延迟 从低到高 排序并按条件过滤,不同丢包率会分开排序,因此可能会有一些延迟低但丢包的 IP 排到后面)
# 3. 下载测速(从延迟最低的 IP 开始依次下载测速,默认测够 10 个就会停止)
# 4. 速度排序(速度从高到低排序)
# 5. 输出结果(通过参数控制是否输出到命令行(-p 0)或输出到文件(-o ""))

# 注意:输出的结果文件 result.csv 通过微软 Excel 表格打开会中文乱码,这是正常的,其他表格软件/记事本都显示正常

测速结果第一行就是既下载速度最快、又平均延迟最低的最快 IP!

完整结果保存在当前目录下的 result.csv 文件中,用记事本/表格软件打开,格式如下:

IP 地址,已发送,已接收,丢包率,平均延迟,下载速度(MB/s),地区码
104.27.200.69,4,4,0.00,146.23,28.64,LAX

[!NOTE] 如果你发现下载速度为 0.00,那么可以用调试模式 -debug 排查一下,详见:# 下载测速都是 0.00 ?

大家可以按自己需求,对完整结果进一步筛选处理,或者去看一看进阶使用指定过滤条件!


# 进阶使用

直接运行使用的是默认参数,如果想要更好更高效的寻找最适合自己的 IP,那么就需要善用各个参数的搭配组合:

C:\>cfst -h

CloudflareSpeedTest vX.X.X
测试各个 CDN 或网站所有 IP 的延迟和速度,获取最快 IP (IPv4+IPv6)!
https://github.com/XIU2/CloudflareSpeedTest

参数:
    -n 200
        延迟测速线程;越多延迟测速越快,性能弱的设备 (如路由器) 请勿太高;(默认 200 最多 1000)
    -t 4
        延迟测速次数;单个 IP 延迟测速的次数;(默认 4 次)
    -dn 10
        下载测速数量;延迟测速并排序后,从最低延迟起下载测速的数量;(默认 10 个)
    -dt 10
        下载测速时间;单个 IP 下载测速最长时间,不能太短;(默认 10 秒)
    -tp 443
        指定测速端口;延迟测速/下载测速时使用的端口;(默认 443 端口)
    -url https://cf.xiu2.xyz/url
        指定测速地址;延迟测速(HTTPing)/下载测速时使用的地址,默认地址不保证可用性,建议自建;
        当下载测速时,软件会从 HTTP 响应头中获取该 IP 当前地区码(支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN)并显示出来。

    -httping
        切换测速模式;延迟测速模式改为 HTTP 协议,所用测试地址为 [-url] 参数;(默认 TCPing)
        当使用 HTTP 测速模式时,软件会从 HTTP 响应头中获取该 IP 当前地区码(支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN)并显示出来。
        注意:HTTPing 本质上也算一种 网络扫描 行为,因此如果你在服务器上面运行,需要降低并发(-n),否则可能会被一些严格的商家暂停服务。
        如果你遇到 HTTPing 首次测速可用 IP 数量正常,后续测速越来越少甚至直接为 0,但停一段时间后又恢复了的情况,那么也可能是被 运营商、Cloudflare CDN 认为你在网络扫描而 触发临时限制机制,因此才会过一会儿就恢复了,建议降低并发(-n)减少这种情况的发生。
    -httping-code 200
        有效状态代码;HTTPing 延迟测速时网页返回的有效 HTTP 状态码,仅限一个;(默认 200 301 302)
    -cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD
        匹配指定地区;IATA 机场地区码或国家/城市码,英文逗号分隔,大小写均可,仅 HTTPing 模式可用;(默认 所有地区)
        支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN
        其中 Cloudflare、AWS CloudFront、Fastly 使用的是 IATA 三字机场地区码,如:HKG,LAX
        其中 CDN77、Bunny 使用的是 二字国家/区域码,如:US,CN
        其中 Gcore 使用的是 二字城市码,如:FR,AM
        因此大家使用 -cfcolo 指定地区码时要根据不同的 CDN 来指定不同类型的地区码。

    -tl 200
        平均延迟上限;只输出低于指定平均延迟的 IP,各上下限条件可搭配使用;(默认 9999 ms)
    -tll 40
        平均延迟下限;只输出高于指定平均延迟的 IP;(默认 0 ms)
    -tlr 0.2
        丢包几率上限;只输出低于/等于指定丢包率的 IP,范围 0.00~1.00,0 过滤掉任何丢包的 IP;(默认 1.00)
    -sl 5
        下载速度下限;只输出高于指定下载速度的 IP,凑够指定数量 [-dn] 才会停止测速;(默认 0.00 MB/s)

    -p 10
        显示结果数量;测速后直接显示指定数量的结果,为 0 时不显示结果直接退出;(默认 10 个)
    -f ip.txt
        IP段数据文件;如路径含有空格请加上引号;支持其他 CDN IP段;(默认 ip.txt)
    -ip 1.1.1.1,2.2.2.2/24,2606:4700::/32
        指定IP段数据;直接通过参数指定要测速的 IP 段数据,英文逗号分隔;(默认 空)
    -o result.csv
        写入结果文件;如路径含有空格请加上引号;值为空时不写入文件 [-o ""];(默认 result.csv)
        注意:在一些环境下使用 -o "" 可能会被忽略掉这个空参数导致报错,可加个空格 -o " " 解决

    -dd
        禁用下载测速;禁用后测速结果会按延迟排序 (默认按下载速度排序);(默认 启用)
    -allip
        测速全部的IP;对 IP 段中的每个 IP (仅支持 IPv4) 进行测速;(默认 每个 /24 段随机测速一个 IP)

    -debug
        调试输出模式;会在一些非预期情况下输出更多日志以便判断原因;(默认 关闭)
        目前该功能仅针对 HTTPing 延迟测速过程 及 下载测速过程,当过程中因为各种原因导致当前 IP 测速中断都会输出错误原因
        例如:HTTPing 延迟测速过程中,因为 HTTP 状态码不符合或测速地址有问题或超时等原因而终止测速
        例如:下载测速过程中,因为下载测速地址有问题(被阻断、403状态码、超时)等原因而终止测速(导致显示 0.00)

    -v
        打印程序版本 + 检查版本更新
    -h
        打印帮助说明

界面解释

为了避免大家对测速过程中的输出内容产生误解(可用、队列等数字,下载测速一半就"中断"?下载测速"卡住"不动?),我特意解释下。

「 点击展开 查看内容 」

该示例把常用参数都给加上了,即为:-tll 40 -tl 150 -sl 1 -dn 5,最后输出结果如下:

# XIU2/CloudflareSpeedTest vX.X.X

开始延迟测速(模式:TCP, 端口:443, 范围:40 ~ 150 ms, 丢包:1.00)
321 / 321 [-----------------------------------------------------------] 可用: 30
开始下载测速(下限:1.00 MB/s, 数量:5, 队列:10)
3 / 5 [-----------------------------------------↗--------------------]
IP 地址           已发送  已接收  丢包率  平均延迟  下载速度(MB/s)  地区码
XXX.XXX.XXX.XXX   4      4       0.00   83.32     3.66           LAX
XXX.XXX.XXX.XXX   4      4       0.00   107.81    2.49           LAX
XXX.XXX.XXX.XXX   4      3       0.25   149.59    1.04           N/A

完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。
按下 回车键 或 Ctrl+C 退出。

刚接触 CFST 的人,可能会迷惑明明延迟测速可用 IP 有 30 个,怎么最后只剩下 3 个了呢?
下载测速里的队列又是什么意思?难道我下载测速还要排队?

CFST 会先延迟测速,在这过程中进度条右侧会实时显示可用 IP 数量(可用: 30),但注意该可用数量指的是测试通过没有超时的 IP 数量,和延迟上下限、丢包条件无关。当延迟测速完成后,因为还指定了延迟上下限、丢包的条件,所以按照条件过滤后只剩下 10 个了(也就是等待下载测速的 队列:10)。

即以上示例中,321 个 IP 延迟测速完成后,只有 30 个 IP 测试通过没有超时,然后根据延迟上下限范围:40 ~ 150 ms 及丢包上限条件过滤后,只剩下 10 个满足要求的 IP 了。如果你 -dd 禁用了下载测速,那么就会直接输出这 10 个 IP 了。当然该示例并未禁用,因此接下来软件会继续对这 10 个 IP 进行下载测速(队列:10)。

因为下载测速是单线程一个个 IP 挨着排队测速的,因此等待下载测速的 IP 数量才会叫做 队列。


你可能注意到了,明明指定了要找到 5 个满足下载速度条件的 IP,怎么才 3 个就 “中断” 了呢?

下载测速进度条中的 3 / 5,前者指的是找到了 3 个满足下载速度下限条件的 IP(即下载速度高于 1 MB/s ),后者 5 指的是你要求找到 5 个满足下载速度下限条件的 IP(-dn 5)。

另外,提醒一下,如果你指定的 -dn 大于下载测速队列,比如你延迟测速后只剩下 4 个 IP 了,那么下载测速进度条中后面的数字就会和下载测速队列一样都是 4 个,而非你 -dn 指定的 5 个了。

软件在测速完这 10 个 IP 后,只找到了 3 个下载速度高于 1 MB/s 的 IP,剩下的 7 个 IP 都是 “不及格” 的。

因此,这不是 “每次测速都不到 5 就中断了”,而是所有 IP 都下载测速完了,但却只找到了 3 个满足条件的。


还有一种情况,那就是当可用 IP 很多时(几百几千),你还设置了下载速度条件,那么可能就会遇到:怎么下载测速进度条老是卡在 X / 5 了呢?

这其实并不是卡住了,而是只有当找到一个满足条件的 IP 时,进度条才会 +1,因此如果一直找不到,那么 CFST 就会一直下载测速下去,因此在表现为进度条卡住不动,但这也是在提醒你:你设置的下载速度条件对你来说已经高于实际了,你需要适当调低预期。


如果不想遇到这种全部测速一遍都没几个满足条件的情况,那么就要调低下载速度上限参数 -sl,或者移除。

因为只要指定了 -sl 参数,那么只要没有凑够 -dn 的数量(默认 10 个),就会一直测速下去,直到凑够或全部测速完。移除 -sl 并添加 -dn 20 参数,这样就是只测速延迟最低的前 20 个 IP,测速完就停止,节省时间。


另外,如果全部队列 IP 都测速完了,但一个满足下载速度条件的 IP 都没有,你可能需要调低预期的下载测速下限条件,但你需要知道当前的大概测速速度都在什么范围,那么你就可以加上 -debug 参数开启调试模式,这样再遇到这种情况时,就会忽略条件返回所有测速结果,你就能看到这些 IP 的下载速度都有多少,心里也就有数了,然后适当调低 -sl 再试试。

注意,如果你没有指定下载测速下限 -sl 条件,那么无论什么情况下 CFST 都会输出所有测速结果。

同样,延迟测速方面,可用: 30、队列:10 这两个数值也可以让你清楚,你设置的延迟条件对你来说是否过于苛刻。如果可用 IP 一大堆,但条件过滤后只剩下 2、3 个,那不用说就知道需要调低预期的延迟/丢包条件了。

这两个机制,一个是告诉你延迟丢包条件是否合适的,一个是告诉你下载速度条件是否合适的。


使用示例

Windows 要指定参数需要在 CMD 中运行,或者把参数添加到快捷方式目标中。

[!TIP]

  • 各参数均有默认值,当使用默认值时参数可以省略(按需选择),参数不分前后顺序。
  • Windows PowerShell 只需把下面命令中的 cfst 改为 .\cfst 即可。
  • Linux / macOS 系统只需要把下面命令中的 cfst 改为 ./cfst 即可。

# CMD 带参数运行

对命令行程序不熟悉的人,可能不知道该如何带参数运行,我就简单说一下。

「 点击展开 查看内容 」

很多人打开 CMD 直接就以绝对路径运行 CFST 会报错,这是因为默认的 -f ip.txt 参数是相对路径,需要指定绝对路径的 ip.txt 才行,但这样毕竟太麻烦了,因此还是建议进入 CFST 程序目录下,以相对路径方式运行:

方式 一:

  1. 打开 CFST 程序所在目录
  2. 空白处按下 Shift + 鼠标右键 显示右键菜单
  3. 选择 [在此处打开命令窗口] 来打开 CMD 窗口,此时默认就位于当前目录下
  4. 输入带参数的命令,如:cfst -tl 200 -dn 20 即可运行

方式 二:

  1. 打开 CFST 程序所在目录
  2. 直接在文件夹地址栏中全选(或清空)并输入 cmd 回车就能打开 CMD 窗口,此时默认就位于当前目录下
  3. 输入带参数的命令,如:cfst -tl 200 -dn 20 即可运行

当然你也可以随便打开一个 CMD 窗口,然后输入如 cd /d "D:\Program Files\cfst" 来进入程序目录

提示:如果用的是 PowerShell 只需把命令中的 cfst 改为 .\cfst 即可。
注意:在 PowerShell 下使用 -o "" 会被忽略掉空参数导致报错,可加个空格 -o " " 解决


# Windows 快捷方式带参数运行

如果不经常修改运行参数(比如平时都是直接双击运行)的人,建议使用快捷方式,更方便点。

「 点击展开 查看内容 」

右键 cfst.exe 文件 - [创建快捷方式],然后右键该快捷方式 - [属性],修改其目标:

# 如果要不输出结果文件,那么请加上 -o " ",引号里的是空格(不加空格会导致该空参数被忽略从而报错)。
D:\ABC\cfst\cfst.exe -tl 200 -dn 20 -o " "

# 如果文件路径包含引号,则需要把启动参数放在引号外面,记得引号和 - 之间有空格。
"D:\Program Files\cfst\cfst.exe" -tl 200 -dn 20 -o " "

# 注意!快捷方式 - 起始位置 不能是空的,否则就会因为绝对路径而找不到 ip.txt 文件

# IPv4/IPv6

「 点击展开 查看内容 」
# 指定自带的 IPv4 数据文件可测速这些 IPv4 地址(-f 默认值就是 ip.txt,所以该参数可省略)
cfst -f ip.txt

# 指定自带的 IPv6 数据文件可测速这些 IPv6 地址
# 另外,v2.1.0 版本后支持 IPv4+IPv6 混合测速并移除了 -ipv6 参数,因此一个文件内可以同时包含 IPv4+IPv6 地址
cfst -f ipv6.txt

# 也可以直接通过参数指定要测速的 IP
cfst -ip 1.1.1.1,2606:4700::/32

测速 IPv6 时,可能会注意到每次测速数量都不一样,了解原因: #120
因为 IPv6 太多(以亿为单位),且绝大部分 IP 段压根未启用,所以我只扫了一部分可用的 IPv6 段写到 ipv6.txt 文件中,有兴趣的可以自行扫描增删,ASN 数据源来自:bgp.he.net


# HTTPing

「 点击展开 查看内容 」

目前有两种延迟测速模式,分别为 TCP 协议、HTTP 协议。
TCP 协议耗时更短、消耗资源更少,超时时间为 1 秒,该协议为默认模式。
HTTP 协议适用于快速测试某域名指向某 IP 时是否可以访问,超时时间为 2 秒。
同一个 IP,各协议去 Ping 得到的延迟一般为:ICMP < TCP < HTTP,越靠右对丢包等网络波动越敏感。

注意:HTTPing 本质上也算一种网络扫描行为,因此如果你在服务器上面运行,需要降低并发(-n),否则可能会被一些严格的商家暂停服务。如果你遇到 HTTPing 首次测速可用 IP 数量正常,后续测速越来越少甚至直接为 0,但停一段时间后又恢复了的情况,那么也可能是被 运营商、Cloudflare CDN 认为你在网络扫描而触发临时限制机制,因此才会过一会儿就恢复了,建议降低并发(-n)减少这种情况的发生。

另外,本软件 HTTPing 仅获取响应头(response headers),并不获取正文内容(即 URL 文件大小不影响 HTTPing 测试,但如果你还要下载测速的话,那么还是需要一个大文件的),类似于 curl -i 功能。

另外,HTTPing 过程中,软件会从 HTTP 响应头中获取该 IP 当前地区码(支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN)并显示出来,而 TCPing 过程中无法这样做(但 下载测速 时也会这样做来获取地区码,毕竟下载测速也是个 HTTP 链接)

# 只需加上 -httping 参数即可切换到 HTTP 协议延迟测速模式
cfst -httping

# 软件会根据访问时网页返回的有效 HTTP 状态码来判断可用性(当然超时也算),默认对返回 200 301 302 这三个 HTTP 状态码的视为有效,可以手动指定认为有效的 HTTP 状态码,但只能指定一个(你需要提前确定测试地址正常情况下会返回哪个状态码)
cfst -httping -httping-code 200

# 通过 -url 参数来指定 HTTPing 测试地址(可以是任意网页 URL,不局限于具体文件地址)
cfst -httping -url https://cf.xiu2.xyz/url
# 如果你要 HTTPing 测试其他网站/CDN,那么指定一个该网站/使用该 CDN 的地址(因为软件默认地址是 Cloudflare 的,只能用于测试 Cloudflare 的 IP)

# 注意:如果测速地址为 HTTP 协议,记得加上 -tp 80(这个参数会影响 延迟测速/下载测速 时使用的端口)
# 同理,如果要测速 80 端口,那么也需要加上 -url 参数来指定一个 http:// 协议的地址才行(且该地址不会强制重定向至 HTTPS),如果是非 80 443 端口,那么需要确定该下载测速地址是否支持通过该端口访问。
cfst -httping -tp 80 -url http://cdn.cloudflare.steamstatic.com/steam/apps/5952/movie_max.webm

# 匹配指定地区

「 点击展开 查看内容 」

Cloudflare CDN 的节点 IP 是 Anycast IP,即每个 IP 对应的服务器节点及地区不是固定的,而是动态变化的,不同地区、不同运营商、不同时间段访问同一个 IP 分配到的服务器节点地区和路线也都是不一样的(比如同一个 IP,美国人访问就是分配到就近的美国节点服务器,日本人访问则就又变成了就近的日本节点服务器了,国内内地就比较特殊了,只能给你分配到其他国家,当然不同的 IP 段路由变化/分配逻辑也是不同的,有的 IP 段会较为固定)。

注意!虽然 Cloudflare CDN 有很多亚洲节点,但不代表你就能用上,新加坡人测速可能随便一抓一大把的新加坡节点,但你全部扫一遍可能都遇不到一个,因为这是由 CDN 控制的。Anycast IP 的路由是经常变的,同一个 IP 今天可能是美国,明天你再访问可能就又分配到欧洲节点了(当然这只是个例子,一般没有那么频繁,这也和很多因素有关,比如线路拥塞程度,成本变动等),因此不要对该功能有过高期待~

或者你随便找个 Cloudflare CDN 的 IP(比如官网域名的解析 IP 104.16.123.96),然后去那些有全球节点的在线 Ping 测试网站,你就会发现这个 IP 在全球大部分地区的延迟都是个位数(而且很多都是 0.X ms),就算一些地方延迟高一些但也基本都控制在 几十ms,只有在国内才会发现突然变成了 上百ms 了。

这就是 Anycast 技术,也就只有国内大陆这种特殊的网络情况,才需要对 Anycast 的 CDN IP 进行优选。

因此,对于这种 Anycast IP 的实际服务器位置,就不能靠那些在线 IP 地址位置查询网站来判断了。

除了通过 HTTP 响应头获取地区码外(该功能的实现方式),还可以手动访问 http://CloudflareIP/cdn-cgi/trace 来获知 CDN 分配给你的实际节点地区码。

该功能支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN。
但注意,不是所有 CDN 都支持 Anycast 技术的,很多 CDN 会限制一个网站能使用的 IP 范围。

其中 Cloudflare、AWS CloudFront、Fastly 都使用的是 IATA 三字机场地区码,如:HKG,LAX
而 CDN77、Bunny 使用的是 二字国家/区域码,如:US,CN
Gcore 则使用的是 二字城市码,如:FR,AM
因此大家使用 -cfcolo 指定地区码时要根据不同的 CDN 来指定不同类型的地区码。

注意:如果你要用于筛选 AWS CloudFront CDN 地区,那么要通过 -url 参数指定一个使用 AWS CloudFront CDN 的下载测速地址(因为软件默认下载测速地址是 Cloudflare CDN 的),另外有时候 HTTPing 模式测速一些 AWS CloudFront 地址会返回 403 错误,这种情况下需要加上 -httping-code 403 才能正确获取地区码。

# 指定地区名后,延迟测速后得到的结果就都是指定地区的 IP 了(如果没有指定 -dd 的话则会继续进行下载测速)
# 如果延迟测速后结果为 0,则说明没有找到任何一个(未超时可用的)指定地区的 IP。
# 节点地区名为当地 IATA 机场地区码或国家/城市码,指定多个时用英文逗号分隔,v2.2.3 版本后支持小写

cfst -httping -cfcolo HKG,KHH,NRT,LAX,SEA,SJC,FRA,MAD

# 注意,该参数只有在 HTTPing 延迟测速模式下才可用(因为软件是通过 HTTP 链接中的响应头来获得该 IP 的实际地区码)

# 另外,HTTPing 过程中,软件会从 HTTP 响应头中获取该 IP 当前地区码(支持 Cloudflare、AWS CloudFront、Fastly、Gcore、CDN77、Bunny 等 CDN)并显示出来,而 TCPing 过程中无法这样做(但 下载测速 时也会这样做来获取地区码,毕竟下载测速也是个 HTTP 链接)

IATA 三字机场地区码,可见:https://www.cloudflarestatus.com/
二字国家码,可见:https://zh.wikipedia.org/wiki/ISO_3166-1二位字母代码#正式分配代码


# 文件相对/绝对路径

「 点击展开 查看内容 」
# 指定 IPv4 数据文件,不显示结果直接退出,输出结果到文件(-p 值为 0)
cfst -f 1.txt -p 0 -dd

# 指定 IPv4 数据文件,不输出结果到文件,直接显示结果(-p 值为 10 条,-o 值为空但引号不能少)
cfst -f 2.txt -o "" -p 10 -dd

# 指定 IPv4 数据文件 及 输出结果到文件(相对路径,即当前目录下,如含空格请加上引号)
cfst -f 3.txt -o result.txt -dd


# 指定 IPv4 数据文件 及 输出结果到文件(相对路径,即当前目录内的 abc 文件夹下,如含空格请加上引号)
# Linux(CFST 程序所在目录内的 abc 文件夹下)
./cfst -f abc/3.txt -o abc/result.txt -dd

# Windows(注意是反斜杠)
cfst -f abc\3.txt -o abc\result.txt -dd


# 指定 IPv4 数据文件 及 输出结果到文件(绝对路径,即 C:\abc\ 目录下,如含空格请加上引号)
# Linux(/abc/ 目录下)
./cfst -f /abc/4.txt -o /abc/result.csv -dd

# Windows(注意是反斜杠)
cfst -f C:\abc\4.txt -o C:\abc\result.csv -dd


# 如果要以【绝对路径】运行 CFST,那么 -f / -o 参数中的文件名也必须是【绝对路径】,否则会报错找不到文件!
# Linux(/abc/ 目录下)
/abc/cfst -f /abc/4.txt -o /abc/result.csv -dd

# Windows(注意是反斜杠)
C:\abc\cfst -f C:\abc\4.txt -o C:\abc\result.csv -dd

# 测速其他端口

「 点击展开 查看内容 」
# 如果你想要测速非默认 443 的其他端口,则需要通过 -tp 参数指定(该参数会影响 延迟测速/下载测速 时使用的端口)

# 如果要延迟测速 80 端口+下载测速(如果 -dd 禁用了下载测速则不需要),那么还需要指定 http:// 协议的下载测速地址才行(且该地址不会强制重定向至 HTTPS,因为那样就变成 443 端口了)
cfst -tp 80 -url http://speed.cloudflare.com/__down?bytes=99999999

# 如果是非 80 443 的其他端口,那么需要确定你使用的下载测速地址是否支持通过该非标端口访问。

# 自定义测速地址

「 点击展开 查看内容 」
# 该参数适用于下

CloudflareSpeedTest (XIU2/CloudflareSpeedTest)

Searching Database…

Что это такое?Утилита командной строки, которая замеряет задержку и скорость загрузки у CDN Cloudflare, чтобы найти самые быстрые IP-адреса (IPv4 + IPv6) для вашего подключения. Поддерживает и другие CDN, а также сайты, у которых одному домену соответствует несколько IP-адресов.
Это программа с окном или команда для терминала?Это команда для терминала (cfst.exe на Windows, ./cfst на Linux/macOS), которая принимает необязательные флаги — графического интерфейса нет. В Windows можно просто дважды щёлкнуть cfst.exe, чтобы запустить с настройками по умолчанию, или добавить флаги через CMD либо ярлык.
Как запустить её в первый раз?Скачайте готовый бинарник со страницы GitHub Releases и распакуйте архив, затем дважды щёлкните cfst.exe (Windows) или запустите ./cfst в терминале. На экране появятся 10 самых быстрых IP-адресов — лучший в первой строке — а полный список будет в файле result.csv.
Нужно ли что-то установить перед запуском?Ничего — на GitHub Releases опубликованы уже скомпилированные файлы, так что распаковка архива — это вся подготовка. Пользователи Windows, у которых установлен scoop, могут установить программу из командной строки.
Что может исказить результаты теста?Прокси: отключите прокси-программы перед тестированием, потому что подозрительно низкая средняя задержка (например, 0.xx мс) означает, что тест прошёл через прокси. Кроме того, Cloudflare запрещает использовать свой CDN для прокси, поэтому применение найденных IP-адресов таким способом — на ваш страх и риск.
Где ещё она работает, кроме Windows?В Linux и macOS точно так же из терминала, а в README есть ссылки на простые инструкции по самостоятельному запуску на Android и iOS. На роутерах тоже работает, но сначала отключите прокси на роутере, иначе результаты могут быть неточными.
Зачем она вообще нужна — разве Cloudflare сам не выдаёт мне нормальный IP?Далеко не всем: согласно README, IP-адреса, которые получают посетители из материкового Китая, часто страдают высокой задержкой, потерями пакетов и низкой скоростью. Cloudflare публикует все свои диапазоны IP-адресов, но вручную перебирать столько адресов нереально — поэтому и появилась эта утилита.
Она работает только с Cloudflare?Нет — она умеет проверять задержку и у других CDN, а также у любого сайта, которому соответствует несколько IP-адресов, но для них нужно самостоятельно подобрать URL для теста скорости загрузки. Определение кода региона по HTTP-заголовкам поддерживает Cloudflare, AWS CloudFront, Fastly, Gcore, CDN77 и Bunny.
Можно ли попросить её найти IP-адреса конкретного региона, например Гонконга?Да, с помощью флага -cfcolo: для Cloudflare/AWS CloudFront/Fastly используются коды аэропортов IATA, для CDN77/Bunny — коды стран, для Gcore — коды городов. Только не ждите слишком многого: маршрутизацией Anycast управляет сам CDN, и она со временем меняется, поэтому попадание в нужный регион не гарантировано.
Можно ли с её помощью подбирать IP-адреса для Cloudflare WARP?Нет. Утилита подходит только для сайтов и прямо не поддерживает WARP, который работает поверх UDP — в README об этом сказано в примечании со ссылкой на issue #392.
Creator
XIU2
Size
0.4 MB
Stars
29.5K
Age
6y
Commits · 90 Days