Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
70 lines (61 loc) · 2.57 KB
/
Copy pathmain.py
File metadata and controls
70 lines (61 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import requests
import re
import subprocess
import telnetlib
from loguru import logger
class ModemManager:
def __init__(self, host="192.168.0.1", port=23):
self.host = host
self.port = port
self.mac_address = self.get_mac_address()
def set_host(self):
self.host = input(
"Please enter the IP address of the modem (default:192.168.0.1): ") or self.host
logger.info(f"Host set to: {self.host}")
return self.host
def get_mac_address(self):
arp_result = subprocess.check_output("arp -a", shell=True).decode('gbk')
mac_address = [re.split(r'\s+', line)[2] for line in arp_result.split("\n") if self.host + " " in line][0]
if mac_address:
logger.info(f"MAC Address obtained successfully: {mac_address}")
else:
logger.error("Failed to obtain MAC Address.")
return mac_address.upper().replace("-", "")
def enable_telnet(self):
url = f"http://{self.host}/cgi-bin/telnetenable.cgi?telnetenable=1&key={self.mac_address}"
logger.debug(f"Telnet Enable URL: {url}")
response = requests.get(url)
if "if (1 == 1)" in response.text:
logger.info("Telnet has been successfully enabled.")
return True
else:
logger.error("Failed to enable Telnet.")
return False
def get_admin_password(self):
username = "root"
password = f"Fh@{self.mac_address[-6:]}"
logger.debug(f"Using Username: {username}")
logger.debug(f"Using Password: {password}")
tn = telnetlib.Telnet(self.host, self.port)
tn.read_until(b"login: ")
tn.write(username.encode('ascii') + b"\n")
tn.read_until(b"Password: ")
tn.write(password.encode('ascii') + b"\n")
tn.write(b"cat /flash/cfg/agentconf/factory.conf\n")
tn.write(b"exit\n")
result = tn.read_all().decode('ascii')
admin_password = re.search(r'TelecomPasswd=(.*)', result).group(1).strip()
logger.debug(f"factory.conf: {result}")
logger.info(f"Admin Password obtained successfully: {admin_password}")
return admin_password
def manage_modem(self):
if self.enable_telnet():
return self.get_admin_password()
else:
logger.error(
"Please follow the manual confirmation steps at `https://www.bilibili.com/read/cv21044770/` and modify the code if necessary.")
return False
if __name__ == "__main__":
manager = ModemManager()
manager.set_host()
admin_password = manager.manage_modem()