Skip to content

Instantly share code, notes, and snippets.

@pityonline
Created April 11, 2018 14:56
Show Gist options
  • Save pityonline/e4eacff7580369c3904a81ff456c9612 to your computer and use it in GitHub Desktop.
Save pityonline/e4eacff7580369c3904a81ff456c9612 to your computer and use it in GitHub Desktop.
批量过户 DNSPod 管理的域名
#!/bin/bash
# 该脚本用来批量过户 DNSPod 管理的域名到指定的账号下
# 参见 DNSPod API 文档: https://www.dnspod.cn/docs/index.html
# 要过户给哪个账号,需要填写账号的邮箱
email="master@example.com"
# 请求的时候必须设置 UserAgent,如果不设置或者设置为不合法的(比如设置为浏览器的)也会导致帐号被封禁 API
# UserAgent 的格式必须为:程序英文名称/版本(联系邮箱),比如:MJJ DDNS Client/1.0.0 (shallwedance@126.com)
ua="Domain BatTransfer Client/1.0.0 ($email)"
# 请求的地址为 https://dnsapi.cn/ 开头的地址,基于 SSL 安全传输。为了安全必须用 https 开头的地址,否则将有可能被封禁
base="https://dnsapi.cn"
# 公共请求参数
# API Token 是由 ID,Token 组合而成的,用英文的逗号分割
opt="login_token=ID,Token&format=json"
# 过户 API 地址
transfer_url="$base/Domain.Transfer"
# 获取分组列表
# curl -s -X POST -d "${opt}" $base/Domaingroup.List | jq
# 域名分组 ID 与组名称对应关系,API 返回分组中 size 不为 0 的表示该分组中有域名,可判断将有域名的分组全部过户
# group_id => group_name
# 1 => 默认分组
# 2 => 经常修改
# 3 => 很少修改
# 4 => 即将到期
# 5 => 私人域名
# 6 => 公司域名
# 7 => 客户域名
# 8 => 与我共享
# 取出公司域名分组[6]中的域名
group="group_id=6"
curl -s -A $ua -X POST -d "${opt}&${group}" $base/Domain.List | jq '.domains | .[] | .name' > domain_groups.list
# 域名过户
# https://www.dnspod.cn/docs/domains.html#domain-transfer
transfer() {
printf "%s\t" "$name"
# TODO: 这里应该判断一下返回是否正常,返回异常马上退出程序
curl -s -A $ua -X POST -d "${opt}&domain=${name}&email=${email}" $transfer_url | jq '.status| .message'
# 如果帐号尝试登录错误次数在 5 分钟内超过 30 次则会被禁止登录一个小时
sleep 10
}
# 去掉域名列表中的双引号,否则 API 返回 "Domain name invalid, please input tld domain"
# TODO: macOS 需要安装 gnu-sed,Linux 直接使用 sed
gsed -i "s/\"//g" domain_groups.list
# 单个域名过户测试
# name="example.com"
# transfer $name
# 批量过户
while read name; do
transfer $name
done < domain_groups.list
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment