87 lines
2.6 KiB
Markdown
87 lines
2.6 KiB
Markdown
# 文件结构
|
||
|
||
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获取返回的结果。
|
||
|
||
<img src="README/img/fALmA9X.png" align="center">
|
||
|
||
<img src="H:\pycharm\ddns_script\README\img\uVaBflU.png" align="center" >
|
||
|
||
2. 继续观察浏览器network中的数据包,可以发现浏览器通过POST方法向 http://{IP}/cgi-bin/turbo{STOK}/proxy/call 接口传递一个Form data模板来获取路由器信息。
|
||
|
||
<img src="README/img/oX3tOdh.png" align="center" >
|
||
|
||
3. 分析POST结果,可以得出只要按照浏览器的格式POST该模板就可以获取路由器地址,剔除无关信息后返回结果如下
|
||
|
||
<img src="README/img/YbpRaBc.png" align="center" height="80%" width="80%" >
|
||
|
||
|
||
|
||
### 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)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|