前言
Cloudflare是全球知名的品牌,但是在众所周知的网络环境下,我们直接访问使用了Cloudflare CDN业务的网站或者应用,效果非常不理想
出于测速的目的,我遍历了Cloudflare所有的CDN节点,没想到仅IPv4地址竟然超过六千万个
这样一个一个测下来很显然是不现实的,所以我开发了这款后端程序并提供API接口供免费使用
原理
首先遍历所有Cloudflare的六千多万个CDN节点,将掩码为24的网段做合并并动态抽选其一,
这样就实现了在保证节点覆盖性和全面性的前提下,大幅度降低了节点数量,
理论上至少可以获取到每个地域中每个城市下每个机房的至少一个节点
注意
请不要对调用页面做静态缓存,因为每次获取都是跟随Cloudflare做动态处理的,并非一成不变的静态页面,故如做了静态缓存,虽然对于我来说可以有效降低负载,但是并不能保证你的数据是最新的,且在某些情况下,可能会导致静态缓存服务器信息泄露
除非存在恶意使用的情况,否则我不会对任何来访者做标记和分析,程序仅会记录调用总数,但CDN节点有可能会记录你的来访信息
程序会反馈你的公网IP地址供来访者作参考用途,这项功能也是为了我推出的“Cloudflare CDN节点测试工具”使用,使用的获取公网IP的API接口同样源自Topstalk API,了解更多
调用方式(示例)
1、手动获取
使用浏览器访问:https://tools.topstalk.com/Api/GetCloudflareCDNIP.php
2、使用SH、BAT等批处理程序获取
curl https://tools.topstalk.com/Api/GetCloudflareCDNIP.php -o CloudflareCDNIP.txt
3、使用PHP获取
<?php $filename = './Cloudflare-CDN-IP.txt'; echo "获取Cloudflare数据...."; $url='https://tools.topstalk.com/Api/GetCloudflareCDNIP.php'; $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $timeout=5; curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $IP_Section=curl_exec($ch); file_put_contents($filename , $IP_Section , LOCK_EX); curl_close($ch); ?>
4、更多方式
我并没有对获取做了限制,你可以发挥想象,制作出各种实现
发表回复