查找 Google 及 Cloudflare 的可用 IP

本文教你怎么查找 Google 和 Cloudflare 的可用 IP。其实不仅仅是这两个公司的,用同样的原理,我们能找到任何公司比如 Twitter 的可用 IP。

一般大公司的 IP 都是公开的,直接到 bgp 库去找就能找到。但是有些公司网站的 IP 全都被封了无法访问,比如 Google,即使找到也没用,我们应该找那些第三方提供中转的 IP。

 

怎么查找 Google IP


扫描公有云的 IP

一种方法是对公有云比如 AWS 的 IP 进行扫描,对逐个 IP 执行类似以下的命令:

curl https://google.com --connect-to ::<IP> -I

由于公有云的 IP 数量相当庞大,这种方法虽然有效但是相当耗时,是否有更高效的方法呢?当然有,不然就没有这篇文章了。

通过搜索引擎查找

Google 搜索是对网站内容搜索,但有些搜索引擎对设备进行搜索。当设备(包括服务器,或者摄像头等)连接上网络,拥有 IP 地址,基本就构成物联网(IoT)。我们要用到的这个就是 IoT 搜索引擎 censys

要搜出某个网站的 IP,首先要找出这个网站官方 IP 的特征,我们用 Google 搜索为例。如果没有网站官方 IP,在这里输入 Google 域名进行解析,或者 ping Google 未被 dns 污染的域名。我们用 142.251.111.106 为例。

打开 censys,输入 142.251.111.106 搜索。在搜出来的页面点击 VIEW ALL DATA 或者直接打开这个链接,往下拉找到 services.tls.certificates.leaf_data.fingerprint,这个值就是 Google 网站证书的指纹。我们点击那个搜索符号查找包含这个证书的 IP。

google ip 特征

是不是找到了很多 IP 地址,但是有小部分不能用于 Google,因为这不是实时的结果。在页面上还能选择地区,不过中国的都不能用。

google ip 搜索结果

我们用韩国 IP 1.11.2.165 测试一下。点击那个 IP,在出来的页面查找 Google Web Services,我们就得到了端口 30017,然后执行命令:

# 注意我们不能直接使用域名 www.google.com,因为会被防火墙拦截。
curl https://g.co --connect-to ::1.11.2.165:30017 -H "Host: www.google.com" -I

如果返回状态码 200,这个 IP 就能用于 Google 网站,但是不能直接修改 hosts 来用,而要使用域前置。看另一篇域前置

 

查找 Cloudflare IP


使用同样的方法,先查出 www.cloudflare.com 的官方 IP 104.16.124.96,在 censys 搜索,得到 cloudflare 证书的指纹,再用这个证书指纹去找 IP,结果类似:

cloudflare ip 搜索结果

同样的,如果测试 3.38.185.175 返回状态码 200,这个 IP 就能用于 Cloudflare 或者使用 Cloudflare CDN 的网站。

curl https://www.cloudflare.com --connect-to ::3.38.185.175 -I