ddns_script/getRouterIP.py
2022-04-23 21:18:04 +08:00

102 lines
4.3 KiB
Python

import configparser
import requests
import sys
import os.path as osp
class GetRouterWanIP:
def __init__(self):
self.ip = None
self.username = None
self.password = None
self.stok = None
self.remain_time = None
self.cookie = None
self.error_time = None
self.get_router_info()
@staticmethod
def check_info_exist():
if not osp.exists("/home/marques/software/ddns/router_info.ini"):
print("Error: Router information config not exist!")
print("Info: Please fill the configuration file ./router_info.ini")
info_config = configparser.ConfigParser()
info_config["DEFAULT"] = {"ip": "", "username": "", "password": "", "error_time": 0}
with open("/home/marques/software/ddns/router_info.ini", "w") as file:
info_config.write(file)
def get_router_info(self):
router_info_config = configparser.ConfigParser()
router_info_config.read("/home/marques/software/ddns/router_info.ini", encoding="utf-8")
self.ip = router_info_config["DEFAULT"]["ip"]
self.username = router_info_config["DEFAULT"]["username"]
self.password = router_info_config["DEFAULT"]["password"]
self.error_time = int(router_info_config["DEFAULT"]["error_time"])
if self.error_time > 0:
print("please check your password and manually reset error_time's value to 0 in the router_info_ini")
sys.exit(0)
def get_stok(self):
# 获取stok
get_stok_url = 'http://{}/cgi-bin/turbo/admin_web/login_admin?username={}&password={}'.format(self.ip,
self.username,
self.password)
stok_response = requests.get(get_stok_url)
# print(stok_response.json())
# self.stok = stok_response.json()["stok"]
self.remain_time = stok_response.json()["remaining_num"]
# print(self.remain_time)
if self.remain_time != 10:
router_info_config = configparser.ConfigParser()
router_info_config.read("./router_info.ini", encoding="utf-8")
router_info_config["DEFAULT"]["error_time"] = str(10-self.remain_time)
with open("./router_info.ini", "w") as file:
router_info_config.write(file)
print("please check your password and manually reset error_time's value to 0 in the router_info_ini")
sys.exit(0)
self.stok = stok_response.json()["stok"]
self.cookie = requests.utils.dict_from_cookiejar(stok_response.cookies)
def get_wan_ip(self):
wan_ip_url = "http://{}/cgi-bin/turbo{}/proxy/call".format(self.ip, self.stok)
params = {"_roundRobinUpdateD": ""}
headers = {
"Host": self.ip,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/json",
"X-Requested-With": "XMLHttpRequest",
"X-KL-Ajax-Request": "Ajax_Request",
"Origin": "http://{}".format(self.ip),
"Connection": "keep-alive",
"Referer": "http://{}/cgi-bin/turbo{}/admin_web".format(self.ip, self.stok),
"Cookie": "sysauth={}".format(self.cookie['sysauth'])
}
post_json = {"muticall": "1", "mutiargs": [{"method": "wan.get_status", "data": {}}], "lang": "zh-CN",
"version": "v1"}
wan_ip_response = requests.post(wan_ip_url, headers=headers, params=params, json=post_json)
wan_ip = wan_ip_response.json()["data"]["results"][0]["result"]['data']["wan_ip"]
#with open("./wan_ip.txt", "w") as file:
# file.write(wan_ip)
print(wan_ip)
return wan_ip
if __name__ == '__main__':
GetRouterWanIP.check_info_exist()
getRouterWanIP = GetRouterWanIP()
getRouterWanIP.get_stok()
getRouterWanIP.get_wan_ip()