# 文件结构 ddns_win.py windows106上使用的ddns程序:主要执行的脚本判断从dns解析的结果与当前ip是否一致,不一致则修改DNS记录 ddns_801.py ubuntu186上使用的ddns程序:主要执行的脚本判断从dns解析的结果与当前ip是否一致,不一致则修改DNS记录 getLocalIP 通过socket库获取本机IP,适用于本机PPPOE拨号的情况 getRouterIP 通过爬虫脚本获取路由器WAN口IP,只适用WIS两台路由器 router_info.ini 存放路由器的配置信息 # DDNS动态域名解析脚本 ## 域名服务商 与 API接口 安利一个域名服务商:porkbun API接口文档:https://porkbun.com/api/json/v3/documentation 通过查阅API接口了解如何通过接口修改域名记录 porkbun是通过json向接口提交参数完成操作 ## 获取目标IP ### 1. 获取路由器IP 目标:获取路由器WAN口IP,而非公网出口IP 方法:通过爬虫获取路由器系统信息 环境:必联路由(其实就是极路由系统换皮) 具体实现: 通过浏览器F12开发者工具可以获取以下信息: 1. 每次正确输入密码验证后,路由器通过一个密钥stok来验证用户的登录状态,因此需要抓取输入密码后返回的stok保持后续操作的可行性 抓取后可以看出,在提交密码时,浏览器用GET方式向http://192.168.199.1/cgi-bin/turbo/api/login/login_admin传递参数username和password 其中192.168.199.1时路由器的管理地址,admin时默认的username这个不用修改 从路由器返回结果可以看到直接返回了stok,所以可以直接使用(理论上可以直接按开发者工具response看到)但是没看到所以下面用python获取返回的结果。 2. 继续观察浏览器network中的数据包,可以发现浏览器通过POST方法向 http://{IP}/cgi-bin/turbo{STOK}/proxy/call 接口传递一个Form data模板来获取路由器信息。 3. 分析POST结果,可以得出只要按照浏览器的格式POST该模板就可以获取路由器地址,剔除无关信息后返回结果如下 ### 2. 获取本地IP 直接通过python的socket库就可以获取到 refer: 1. [Python 获取本机公网IPv6地址](https://coco56.blog.csdn.net/article/details/106725406) 2. [python获取本机IP地址](https://www.cnblogs.com/z-x-y/p/9529930.html)