本帖最后由 sliceso 于 2021-03-08 22:18 编辑
0x00 背景 准备在家搭建一个服务器,动态公网IP正在申请中,由于要使用DDns对域名动态解析,但是我的域名提供商没有相关的服务,只能自己写个脚本 0x01 实现原理 由于家里到时候是动态公网IP,IP会变化,这种情况就要修改域名提供商的解析地址:
我理解的ddns就是检测家里的外网IP,然后自动修改这个解析地址就成了,于是就诞生了这个脚本 0x02 脚本实现
- 用户登陆:比较简单吧主要使用sessions()保存cookie方便后续的操作。
- 获取解析记录:
通过抓包可找到接口和参数格式 - 获取本机IP
通过curl ip.sb获得 - 修改记录
同样是抓包找到接口和参数格式
import requests import os import time mysession = requests.session() headers = { 'Host': 'api.zhujiwu.com', 'Content-Length': '46', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': 'http://www.zhujiwu.com', 'Referer': 'http://www.zhujiwu.com/', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'close'} def login(username, pwd): url = "http://www.zhujiwu.com/www/login.php" data = { "cmd": "login", "username": username, "password": pwd } try: r = mysession.post(url=url, data=data, headers=headers) if r.json()['response'] == '200': print('主机屋账户:【' + username + '】登陆成功!') print("当前Cookies:", mysession.cookies) else: print(r.json()) except Exception as e: print(e) def get_history(domain): url = "http://www.zhujiwu.com/www/domain.php" data = { "cmd": "jiexi_query", "count": "10", "page": "1", "domainname": domain, "title": ""} r = mysession.post(url=url, data=data, headers=headers) if r.json()['response'] == "200": dns_history = r.json()['data']['content'] print(domain) for i in dns_history: print(i["id"], i["set_type"], i["title"], i["content"]) return dns_history else: return def get_realIP(): real_IP = os.popen('curl ip.sb').read() print("本机IP:", real_IP) return real_IP def change_dns(domai_id, realIP, domainname): url = "http://www.zhujiwu.com/www/domain.php" realIP = realIP.replace("\n", "") data = { 'cmd': 'jiexi_modify', 'ac_id': domai_id, 'mx': '', 'content': realIP, 'ttl': '120' } r = mysession.post(url=url, data=data, headers=headers) if r.json()['response'] == "200": print("修改【", domainname, "】解析到【", realIP, "】成功") else: print("修改【", domainname, "】解析到【", realIP, "】失败") if __name__ == '__main__': username = '' pwd = '' domain = "" login(username, pwd) while 1: dns_history = get_history(domain) realIP = get_realIP().replace("\n", "") for i in dns_history: if realIP != i["content"]: print("检测IP变更,修改解析:", end=" ") change_dns(i["id"], realIP, i["title"]) time.sleep(60)
|