Linux
Kali 安装
Kali-WIFI密码(字典)
Armbian安装OMV(NAS)
NPS 内网穿透
CloudFlare
CloudFlare-免端口
CloudFlare-KV存储
API 使用
API-抓包信息使用
Linux-系统配置
Linux-更换源
Linux-一键更换源
Linux-权限
Linux-分区管理
Linux-网卡配置
Linux 端口转发
Linux 交换内存
Linux 进程优先级
Linux 共享打印机
Linux-自定义服务(支持Docker开机自启)
Linux-硬/软链接/挂载
Linux-系统时钟
Linux-清理命令记录
Linux-一键DD脚本
Linux-安装根证书
Linux-TheFuck(命令纠正)
Linux 服务器
Linux-面试鸭
Linux-Mall-Cook(商店可视化搭建)
Linux-Scratch
Linux-CasaOS(家庭云操作系统)
Linux-TiddlyWiki(非线性网页笔记)
Linux-拖拽式H5
Linux-鲁班H5
Linux-SSL证书续订
Linux-acme(SSL证书脚本)
SSL证书转换
SSL-httpsok
SSL-其它工具
Linux-LoveCards(表白墙)
Linux-游戏导航
Linux 常用命令
Linux-scp
Linux-打包/解压/压缩
Linux-SSH
Linux-portknocking(端口敲击)
Linux-获取当前公网IP
Linux-自动挂载盘
Linux-代理
Linux-nmap(局域网扫描)
Linux-jq(JSON处理)
Linux-DDNS(自制脚本)
Linux-shell传递参数
Linux-if(判断)
Linux-curl/wget
Linux-which(查看命令所在路径)
Linux-Maven
Linux-ncdu(清理日志)
Linux-共享
Linux-screen(终端切换)
Linux-Macchanger(MAC修改)
Linux-iptables(包过滤防火墙系统)
Linux-祸害人脚本
Linux-模拟网络延迟环境
Linux-Git
Linux-apt(安装软件)
Linux-crontab(定时任务)
Linux-nano/vi/vim 编辑器
Linux 环境安装
Linux 安装 Node.js
Node.js-创建通用执行
Linux 安装 Java
Linux 安装 Go
域名注册
MariaDB-相关操作
未测试开源项目
SQL 学习
SQL-常用指令
Ansible(自动化运维)
Zabbix(运维监控)
网络设备概述
备份概述
雷池WAF
Linux-新旧服务器同步rpm软件包
本文档使用 MrDoc 发布
-
+
首页
Linux-DDNS(自制脚本)
自用脚本,可能有很多Bug ```bash #!/bin/sh # CloudFlare DDNS,可不更改文件直接使用参数使用 # sh CloudFlare.sh -a <邮箱账户> -b <APIkey> -c <一级域名> -d <二级域名> -e <IPv4|IPv6> -f <强制更新> # ———————————————————————————————————更改为自己的配置——————————————————————————————————————— # -a 邮箱账户 CFUSER='Email' # -b APIKey(非登录密码,在 https://dash.cloudflare.com/profile/api-tokens 创建) CFKEY='APIKey' # -c 一级域名 CFZONE='918178.xyz' # -d 二级域名 CFZONENAME='vps' # -e 需解析为:A(IPv4)|AAAA(IPv6) CFRECORD_TYPE='A' # -f 强制更新,sh CloudFlare.sh -f # FORCE='true' # ———————————————————————————————————传递参数——————————————————————————————————————— while getopts a:b:c:d:e:f: opts; do case ${opts} in a) CFUSER=${OPTARG} ;; b) CFKEY=${OPTARG} ;; c) CFZONE=${OPTARG} ;; d) CFZONENAME=${OPTARG} ;; e) CFRECORD_TYPE=${OPTARG} ;; f) FORCE=${OPTARG} ;; esac done # ——————————————————————————————————检测所需环境——————————————————————————————————————— # 检测系统是否安装了curl,没有则自动安装 if ! type curl >/dev/null 2>&1; then echo 'curl 未安装,自动安装...' # 一般以管理员账户运行,无需sudo apt install -y curl echo 'curl 安装完成.' fi # 检测系统是否安装了jq,没有则自动安装 if ! type jq >/dev/null 2>&1; then echo 'jq 未安装,自动安装...' # 一般以管理员账户运行,无需sudo apt install -y jq echo 'jq 安装完成.' fi # ——————————————————————————————————获取公网IP——————————————————————————————————————— # 检查参数否正确,并且配置获取IP网站 echo '检测可以的获取IP地址网站...' # curl -s 静默,-connect-timeout 2 连接超时2s,-m 2 请求超时2s if [ "$CFRECORD_TYPE" = "A" ]; then # 选个最快的获取IPv4地址网站,--connect-timeout <s> if [ `curl -s -connect-timeout 2 -m 2 ipinfo.io/ip` ]; then WANIPSITE="ipinfo.io/ip" elif [ `curl -s -connect-timeout 2 -m 2 ipecho.net/plain` ]; then WANIPSITE="ipecho.net/plain" elif [ `curl -s -connect-timeout 2 -m 2 ipv4.ip.sb` ]; then WANIPSITE="ipv4.ip.sb" elif [ `curl -s -connect-timeout 2 -m 2 ipv4.icanhazip.com` ]; then WANIPSITE="ipv4.icanhazip.com" else # 无法获取,报错停止脚本 echo "无法连接到获取IPv4服务,请检查网络!!!" exit 2 fi elif [ "$CFRECORD_TYPE" = "AAAA" ]; then # 选个最快的获取IPv6地址网站 if [ `curl -s curl -s -connect-timeout 2 -m 2 ipv6.ip.sb` ]; then WANIPSITE="curl -s ipv6.ip.sb" elif [ `curl -s -connect-timeout 2 -m 2 ipv6.icanhazip.com` ]; then WANIPSITE="ipv6.icanhazip.com" else # 无法获取,报错停止脚本 echo "无法连接到获取IPv6服务,请检查网络!!!" exit 2 fi else # 参数配置错误,报错停止脚本 echo "CFRECORD_TYPE 参数无效,只能是:A(IPv4)|AAAA(IPv6)" echo "当前参数为: $CFRECORD_TYPE" exit 2 fi echo "——————————————————————————————————————————————————————————————" echo "获取IP服务为: "$WANIPSITE # 获取当前公网IP WAN_IP=`curl -s ${WANIPSITE}` # 判断是否成功获取到公网IP,-z 判断是否为空;-n 判断是否非空 if [ -z "$WAN_IP" ]; then # 无法获取,报错停止脚本 echo "无法获取公网地址,请检查网络!!!" exit 2 fi echo "当前公网地址为: "$WAN_IP # ——————————————————————————————————自动抓取 CloudFlare 区域ID 和 名称标识符——————————————————————————————————————— # 获取域名信息,以json文件存储 curl -sX GET "https://api.cloudflare.com/client/v4/zones/" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" > filename.json # 从json文件中获取区域ID:查找文件,查找id,去除两侧双引号 zone_id=`jq -r '.result[] | select(.name=="'$CFZONE'")' filename.json | jq .id | sed 's/\"//g'` # 获取区域信息,以json文件存储 curl -sX GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" > filename.json # 从json文件中获取名称标识符:查找文件,查找id,去除两侧双引号 nameid=`jq -r '.result[] | select(.name=="'$CFZONENAME'.'$CFZONE'")' filename.json | jq .id | sed 's/\"//g'` # 从json文件中获取当前解析IP:查找文件,查找id,去除两侧双引号 ip=`jq -r '.result[] | select(.name=="'$CFZONENAME'.'$CFZONE'")' filename.json | jq .content | sed 's/\"//g'` echo "当前CloudFlare地址为: "$ip echo "——————————————————————————————————————————————————————————————" # ——————————————————————————————————更新 CloudFlare DNS——————————————————————————————————————— # 判断当前公网IP是否和CloudFlare中的解析一致 if [ "$FORCE" = "true" ]; then # 无法获取,报错停止脚本 echo "---强制更新DNS---" curl -sX PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$nameid/" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" \ --data '{"type":"'$CFRECORD_TYPE'","name":"'$CFZONENAME'.'$CFZONE'","content":"'$WAN_IP'","ttl":120,"proxied":false}' \ > filename.json elif [ "$ip" = "$WAN_IP" ]; then echo "---当前公网IP和CloudFlare中的解析一致,跳过---" else echo "---更新DNS---" curl -sX PUT "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$nameid/" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" \ --data '{"type":"'$CFRECORD_TYPE'","name":"'$CFZONENAME'.'$CFZONE'","content":"'$WAN_IP'","ttl":120,"proxied":false}' \ > filename.json fi # ——————————————————————————————————检测 DNS 更新状态——————————————————————————————————————— # 获取区域信息,以json文件存储 curl -sX GET "https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/" \ -H "X-Auth-Email: $CFUSER" \ -H "X-Auth-Key: $CFKEY" \ -H "Content-Type: application/json" > filename.json # 从json文件中获取当前解析IP:查找文件,查找id,去除两侧双引号 ip=`jq -r '.result[] | select(.name=="'$CFZONENAME'.'$CFZONE'")' filename.json | jq .content | sed 's/\"//g'` if [ "$ip" = "$WAN_IP" ]; then echo "---更新成功^_^---" else echo "---更新失败...---" fi # ——————————————————————————————————清理缓存文件——————————————————————————————————————— #删除用于临时存储json的文件 rm filename.json ```
造物者W
2023年2月15日 11:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码