当前位置:网站首页>telnet+ftp 对设备进行 操控 和 升级
telnet+ftp 对设备进行 操控 和 升级
2022-08-09 12:37:00 【洪大宇】
import telnetlib
import time
from ftplib import FTP
import serial
import configparser
import signal
import os
import tarfile
class TelnetClient():
def __init__(self, host_ip, username, password):
self.tn = telnetlib.Telnet()
self.host_ip = host_ip
self.username = username
self.password = password
def login_host(self):
try:
self.tn.open(self.host_ip, port=23)
except:
print('%s网络连接失败' % self.host_ip)
return False
self.tn.read_until(b'login: ', timeout=10)
self.tn.write(self.username.encode('ascii') + b'\n')
self.tn.read_until(b'Password: ', timeout=10)
self.tn.write(self.password.encode('ascii') + b'\n')
command_result = self.tn.read_very_eager().decode('ascii')
if 'Login incorrect' not in command_result:
print('%s登录成功' % self.host_ip)
return True
else:
print('%s登录失败,用户名或密码错误' % self.host_ip)
return False
def execute_some_command(self, command,mode="nowait"):
self.tn.write(command.encode('ascii')+b'\n')
time.sleep(5)
print("\n***************************************************\n")
if mode == "nowait":
command_result = self.tn.read_very_eager().decode('ascii')
elif mode == "wait":
command_result = self.tn.read_until("DONE".encode('ascii')).decode('ascii')
print('命令执行结果:\n%s' % command_result)
print("\n***************************************************\n")
def __del__(self):
self.tn.write(b"exit\n")
def TelnetExecCmd(tn: TelnetClient, cmd: str,mode="nowait") -> bool:
if tn.login_host():
tn.execute_some_command(cmd,mode)
return True
else:
return False
class FtpClient():
def __init__(self, ip: str, username: str, password: str) -> None:
self.ip = ip
self.user = username
self.password = password
self.ftp = FTP()
def connect(self):
try:
self.ftp.set_debuglevel(2)
self.ftp.connect(self.ip, port=21)
self.ftp.login(self.user, self.password)
print(self.ftp.getwelcome())
except:
print("ftp connect {} error ...".format(self.ip))
def put(self, filename: str):
try:
fp = open(filename, "rb")
self.ftp.storbinary("STOR "+filename, fp)
except:
print("ftp upload {} error".format(filename))
def get(self, filename: str):
try:
fp = open(filename, "wb")
self.ftp.retrbinary("RETR "+filename, fp.write)
except:
print("ftp get {} error".format(filename))
def __del__(self):
self.ftp.set_debuglevel(0)
self.ftp.quit()
class SerialClient:
def __init__(self, port: str, bps: int) -> None:
try:
self.port = port
self.bps = bps
self.ser = serial.Serial(port, bps)
except:
print("Open Serial Error {}".format(port))
def write(self, cmd: str) -> bool:
if self.ser.isOpen():
print("Open Serial {}".format(self.port))
cmd = cmd+" \n"
self.ser.write(cmd.encode("utf8"))
return True
else:
return False
#如果终端有响应一直读取数据
def read(self):
if self.ser.isOpen():
while self.ser.readable():
line = self.ser.readline(4096)
print(line.decode('ascii'))
def __del__(self):
self.ser.close()
# AU DEVICE: 192.168.1.2
# RRU DEVICE: 192.168.98.98
def dos2unix(dos: str, unix: str):
content = ''
outsize = 0
with open(dos, 'rb') as infile:
content = infile.read()
with open(unix, 'wb') as output:
for line in content.splitlines():
outsize += len(line) + 1
output.write(line + b'\n')
print("Done. Stripped %s bytes." % (len(content)-outsize))
def Exit(signum, frame):
exit()
def CompressFile(TarFile:str,File:str,module:str):
tar = tarfile.open(TarFile,module)
for root,dir,files in os.walk(File):
for file in files:
fullpath = os.path.join(root,file)
tar.add(fullpath)
tar.close()
if __name__ == '__main__':
signal.signal(signal.SIGINT, Exit)
Parser = configparser.ConfigParser()
config = "config.ini"
if os.access(config,os.F_OK) == False:
print("Error:Can't find upgrade.ini, Please check your ini config")
exit()
Parser.read(config)
Parser.sections()
IP = Parser["BaseConfig"]["ServerIpAddr"]
Scripts = Parser["BaseConfig"]["UpgradeScript"]
UserName = Parser["UserConfig"]["UserName"]
PassWord = Parser["UserConfig"]["UserPassword"]
Filename = Parser["UserConfig"]["UpgradeFilename"]
CompressedMode = Parser["BaseConfig"]["CompressedMode"]
dos2unix(Scripts,Scripts)
if os.access(Filename+".tar",os.F_OK):
os.remove(Filename+".tar")
CompressFile(Filename+".tar",Filename,CompressedMode)
ftp = FtpClient(IP,UserName,PassWord)
ftp.connect()
ftp.put(Scripts)
ftp.put(Filename+".tar")
os.remove(Filename+".tar")
exec_upgrade = TelnetClient(IP,UserName,PassWord)
CMD = "chmod +rwx "+ "/mnt/flash/"+Scripts+" && /mnt/flash/"+Scripts
TelnetExecCmd(exec_upgrade,CMD,"wait")
TelnetExecCmd(exec_upgrade,"rm /mnt/flash/"+Scripts+" ; rm -rf /run/"+Filename+"*")
os.system("pause")
边栏推荐
- 基于CAP组件实现补偿事务与幂等性保障
- 大佬们,请教一下,我看官方文档中,sqlserver cdc只支持2012版之后的,对于sqlser
- Flutter Getting Started and Advanced Tour (4) Text Input Widget TextField
- Flutter入门进阶之旅(八)Button Widget
- Report: The number of students who want to learn AI has increased by 200%, and there are not enough teachers
- 链表噩梦之一?5000多字带你弄清它的来龙去脉
- ctfshow七夕杯2022
- 如何求最大公约数?
- AQS同步组件-FutureTask解析和用例
- Flutter入门进阶之旅(十)Dialog&Toast
猜你喜欢
AI篮球裁判火了,走步算得特别准,就问哈登慌不慌
[Microservice ~ Remote Call] Integrate RestTemplate, WebClient, Feign
The new features of ABP 6.0.0 - rc. 1
我的2020年终总结
AQS同步组件-FutureTask解析和用例
农村区县域农业电商如何做?数字化转型如何进行?
Flutter Getting Started and Advanced Tour (2) Hello Flutter
h264 protocol
李开复花上千万投的缝纫机器人,团队出自大疆
The batch size does not have to be a power of 2!The latest conclusions of senior ML scholars
随机推荐
JVM之配置介绍(一)
如何修改data work上jdbc驱动的版本
[Microservice ~ Remote Call] Integrate RestTemplate, WebClient, Feign
单面线路板与精密多层PCB线路板区别有哪些?
OOM排查和处理
已解决IndentationError: unindent does not match any oute r indentation Level
Resolved IndentationError: unindent does not match any oute r indentation Level
水能自发变成“消毒水”,83岁斯坦福教授:揭示冬天容易得流感的部分原因...
MySQL principle and optimization of Group By optimization techniques
Fragment中嵌套ViewPager数据空白页异常问题分析
1-hour live broadcast recruitment order: industry big names share dry goods, and enterprise registration opens丨qubit·viewpoint
Win10 compiles the x264 library (there are also generated lib files)
注释、关键字、标识符的区别你知道吗?
农村区县域农业电商如何做?数字化转型如何进行?
FFmpeg在win10上编译安装(配置libx264)
链表噩梦之一?5000多字带你弄清它的来龙去脉
2022年非一线IT行业就业前景?
ABP中的数据过滤器 (转载非原创)
批量读取word docx文件指定表格内容,保存在excel文件中
Flutter入门进阶之旅(十)Dialog&Toast