利用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是这样的

利用CloudFlare的api获取本机IP和地区

  1. fl=12f505
  2. h=104.19.19.19
  3. ip=59.42.75.75
  4. ts=1615783919.891
  5. visit_scheme=http
  6. uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
  7. colo=LAX
  8. http=http/1.1
  9. loc=CN
  10. tls=off
  11. sni=off
  12. warp=off
  13. 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脚本使用示例

  1. #!/bin/bash
  2. ip=$(curl -s http://104.19.19.19/cdn-cgi/trace|grep ip|cut -d '=' -f 2)
  3. loc=$(curl -s http://104.19.19.19/cdn-cgi/trace|grep loc|cut -d '=' -f 2)
  4. echo 你的IP${ip},你的地区${loc}
  5. if [ "${loc}" == "CN" ]; then
  6. # 如果是国内地区执行的命令
  7. echo "is China"
  8. else
  9. # 如果不是国内地区执行的命令
  10. echo "no China"
  11. fi

阅读剩余
THE END