Created
April 11, 2018 14:56
-
-
Save pityonline/e4eacff7580369c3904a81ff456c9612 to your computer and use it in GitHub Desktop.
批量过户 DNSPod 管理的域名
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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