Refactor: Update build scripts and improve Telnet handling in SSH flasher
This commit is contained in:
@@ -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...")
|
||||
|
||||
Reference in New Issue
Block a user