ddns_script/README.MD
2022-04-23 21:20:45 +08:00

87 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文件结构
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)