Refactor: Update build scripts and improve Telnet handling in SSH flasher

This commit is contained in:
2026-03-08 17:08:38 +07:00
parent ef363ac61d
commit 1c1fbb7f92
5 changed files with 48 additions and 14 deletions

View File

@@ -30,7 +30,40 @@ def _create_ssh_client(ip, user, password, timeout=15):
time.sleep(1)
import telnetlib
import socket
class _SimpleTelnet:
"""Minimal Telnet client using raw sockets (replaces telnetlib removed in Python 3.13+)."""
def __init__(self, host, port=23, timeout=10):
self._sock = socket.create_connection((host, port), timeout=timeout)
def read_very_eager(self):
try:
self._sock.setblocking(False)
data = b""
while True:
try:
chunk = self._sock.recv(4096)
if not chunk:
break
data += chunk
except (BlockingIOError, OSError):
break
self._sock.setblocking(True)
return data
except Exception:
return b""
def write(self, data):
self._sock.sendall(data)
def close(self):
try:
self._sock.close()
except Exception:
pass
def set_device_password(ip, user="root", old_password="", new_password="admin123a",
status_cb=None):
@@ -45,7 +78,7 @@ def set_device_password(ip, user="root", old_password="", new_password="admin123
# 1. Thử Telnet trước (OpenWrt mặc định mở Telnet 23 và cấm SSH Root khi chưa có Pass)
try:
tn = telnetlib.Telnet(ip, timeout=5)
tn = _SimpleTelnet(ip, timeout=5)
# Nếu vô được Telnet tức là thiết bị vừa Reset cứng chưa có pass
if status_cb:
status_cb("Telnet connected! Setting password...")