使用nmap + fping找到CF最快的IP

Cloudflare有1786880个IPv4,不过不是全部IPv4都用于节点加速,所以先用nmap做扫描,把做了加速的IP先拉出来.

nmap -sS -Pn -p 80 -n --open --min-hostgroup 1024 \
--min-parallelism 10 --host-timeout 30 \
-T4 -v -oG results-all.txt -iL ips.txt

或者可以使用带Header(慢但是更准确)

nmap -sS -Pn -p 80 -n --open --min-hostgroup 1024 \
--min-parallelism 10 --host-timeout 30 \
-T4 -v -oX results.xml --script=http-headers -iL ips.txt

其中ips.txt是网段.

173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/12
172.64.0.0/13
131.0.72.0/22

大概扫描也要1-2小时,因为有些IP对你而言,是超时无法连接的,预扫描可以先去掉这一部分.

扫描结果:

CF节点特征:

把有用的IP提取(我用第一种方法扫描,通常节约一半时间,准确度降低.):

cat results-all.txt | grep 80 | grep open | awk '{print $2}' > ips_result.txt

如果使用Header方法,需要先Python脚本选出有效IP:

from xml.dom.minidom import parse
import xml.dom.minidom

doc = xml.dom.minidom.parse("results.xml")
root = doc.documentElement
hosts = root.getElementsByTagName('host')
for host in hosts:
    ip = host.getElementsByTagName('address')[0].getAttribute('addr')
    c = host.getElementsByTagName('ports')[0].getElementsByTagName('port')[0]. \
        getElementsByTagName('script')[0].getAttribute('output')
    if 'Server: cloudflare' in c:
        print(ip)

我大概找到784566万个IP左右(CF大概拿了四五成IP出来用的样子),这还是因为国内扫描,部分节点估计已经GG,或者CF交替下来,而CF很多节点是带多播,所以也不能根据IP确定地理位置,再说地理位置距离近也不一定是速度快,由于IP是动态的,所以参考意义也不特别大.

fping -e -c 4 -i 1 -r 1 -f ips_result.txt -s | tee icmp_result.log

这个fping操作需要一些时间,如果尝试次数越多(c参数),结果当然越准确,结果里面某些IP是无数据,只是开端口.

由于IP量实在是太大,整个Ping过程会很漫长.吃过饭再看差不多,实测到上海比较低的延迟大概是123ms左右,大多数节点在190ms – 220ms之间,从123ms这个延迟看,到美国未免太好,到亚太地区未免太差,不知道具体什么地域的,至于两位数的没发现,也可能是我本地运营商不太好.

从全网延迟看,这个IP很可能来自澳大利亚/加拿大多播.

发表评论

电子邮件地址不会被公开。 必填项已用*标注