gateway: Fix FTP server activation and check

pull/92/head
remittor 7 months ago
parent 55ddd95273
commit c1537c418f

@ -726,7 +726,8 @@ class Gateway():
self.passw = passw
ftp_en = self.check_tcp_connect(self.ip_addr, 21, contimeout = 1)
if ftp_en:
self.use_ftp = True
if self.check_ftp() == 0:
self.use_ftp = True
return 23
def ssh_close(self):
@ -830,6 +831,33 @@ class Gateway():
die("Can't login to TELNET (IP: {})".format(self.ip_addr))
return None
def check_ftp(self, timeout = None):
ret = -1
if not timeout:
timeout = self.timeout
ftp = None
try:
ftp = ftplib.FTP(self.ip_addr, user=self.login, passwd=self.passw, timeout=timeout)
ftp.voidcmd("NOOP")
ret = 0
except ftplib.error_proto as e:
ret = -2
if 'unrecognized option: w' in str(e):
ret = -10
except Exception:
ret = -1
finally:
if ftp:
try:
ftp.quit()
except Exception:
pass
try:
ftp.close()
except Exception:
pass
return ret
def get_ftp(self, verbose = 0):
if self.ftp and self.ftp.sock:
try:
@ -1052,16 +1080,32 @@ class Gateway():
print('#### TelNet server are activated! ####')
#print("")
#print('Run FTP server on port 21 ...')
self.run_cmd(r"rm -f /etc/inetd.conf")
self.run_cmd(r"sed -i 's/\\tftpd\\t/\\tftpd -w\\t/g' /etc/init.d/inetd")
self.run_cmd('/etc/init.d/inetd enable')
self.run_cmd('/etc/init.d/inetd restart')
self.use_ftp = True
ftp_en = self.ping(verbose = 0)
if ftp_en:
print('#### FTP server are activated! ####')
else:
cmd = r'''#!/bin/sh /etc/rc.common
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
start() {
service_start /usr/sbin/inetd -f
}
stop() {
service_stop /usr/sbin/inetd
}
'''
cmd = cmd.replace('\r\n', ';')
cmd = cmd.replace('\n', ';')
cfg = r'ftp\tstream\ttcp\tnowait\troot\t/usr/sbin/ftpd\tftpd -w\t/'
self.run_cmd(r"echo -e '" + cfg + "' > /etc/inetd.conf")
self.run_cmd(r"echo '" + cmd + "' | tr ';' '\n' > /etc/init.d/inetd")
self.run_cmd(r"chmod +x /etc/init.d/inetd")
self.run_cmd(r'/etc/init.d/inetd enable')
self.run_cmd(r'/etc/init.d/inetd restart')
ftp_en = self.check_ftp(timeout = 5)
if ftp_en == -10:
print(f'WARNING: FTP server is running, but upload mode is blocked!')
elif ftp_en != 0:
print(f"WARNING: FTP server not responding (IP: {self.ip_addr})")
else:
self.use_ftp = True
print('#### FTP server are activated! ####')
if ssh_en or telnet_en:
self.run_cmd('nvram set uart_en=1; nvram set boot_wait=on; nvram commit')

Loading…
Cancel
Save