利用CloudFlare的api获取本机IP和地区
需求是有时写Shell脚本是需要判断是否是国内服务器,来使用国内CDN或对国内友好的下载源。
正文
地址是:http://104.19.19.19/cdn-cgi/trace
104.19.19.19
可以是任意一个CloudFlare CDN的IP
但尽量不要用1.1.1.1
之类的国内被阻断的IP
访问http://104.19.19.19/cdn-cgi/trace
是这样的
- fl=12f505
- h=104.19.19.19
- ip=59.42.75.75
- ts=1615783919.891
- visit_scheme=http
- uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
- colo=LAX
- http=http/1.1
- loc=CN
- tls=off
- sni=off
- warp=off
- gateway=off
这里第3行的ip=59.42.75.75
就是本机公网IP,第10行的loc=CN
就是地区
使用它们的方法
获取IP:curl -s http://104.19.19.19/cdn-cgi/trace|grep ip|cut -d '=' -f 2
获取地区:curl -s http://104.19.19.19/cdn-cgi/trace|grep loc|cut -d '=' -f 2
当然,你要使用别的,将上面的命令改一下grep ip
这里的ip
就行了,比如改成uag
就是获取UA
shell脚本使用示例
- #!/bin/bash
- ip=$(curl –s http://104.19.19.19/cdn-cgi/trace|grep ip|cut -d ‘=’ -f 2)
- loc=$(curl –s http://104.19.19.19/cdn-cgi/trace|grep loc|cut -d ‘=’ -f 2)
- echo 你的IP:${ip},你的地区:${loc}
- if [ “${loc}” == “CN” ]; then
- # 如果是国内地区执行的命令
- echo “is China”
- else
- # 如果不是国内地区执行的命令
- echo “no China”
- fi