README/img | ||
ddns_801.py | ||
ddns_win.py | ||
getLocal_IP.py | ||
getRouterIP.py | ||
porkbun_ddns.py | ||
README.MD | ||
router_info.ini |
文件结构
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开发者工具可以获取以下信息:
-
每次正确输入密码验证后,路由器通过一个密钥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获取返回的结果。
-
继续观察浏览器network中的数据包,可以发现浏览器通过POST方法向 http://{IP}/cgi-bin/turbo{STOK}/proxy/call 接口传递一个Form data模板来获取路由器信息。
-
分析POST结果,可以得出只要按照浏览器的格式POST该模板就可以获取路由器地址,剔除无关信息后返回结果如下
2. 获取本地IP
直接通过python的socket库就可以获取到
refer: