import logging
import telnetlib
import time

class TelnetClient():
def __init__(self,):
self.tn = telnetlib.Telnet()

# 此函数实现telnet登录主机
def login_host(self,host_ip,username,password):
try:
# self.tn = telnetlib.Telnet(host_ip,port=23)
self.tn.open(host_ip,port=23)
except:
logging.warning('%s网络连接失败'%host_ip)
return False
# 等待login出现后输入用户名,最多等待10秒
self.tn.read_until(b'login: ',timeout=10)
self.tn.write(username.encode('ascii') + b'\n')
# 等待Password出现后输入用户名,最多等待10秒
self.tn.read_until(b'Password: ',timeout=10)
self.tn.write(password.encode('ascii') + b'\n')
# 延时两秒再收取返回结果,给服务端足够响应时间
time.sleep(2)
# 获取登录结果
# read_very_eager()获取到的是的是上次获取之后本次获取之前的所有输出
command_result = self.tn.read_very_eager().decode('ascii')
if 'Login incorrect' not in command_result:
logging.warning('%s登录成功'%host_ip)
return True
else:
logging.warning('%s登录失败,用户名或密码错误'%host_ip)
return False

# 此函数实现执行传过来的命令,并输出其执行结果
def execute_some_command(self,command):
# 执行命令
self.tn.write(command.encode('ascii')+b'\n')
time.sleep(2)
# 获取命令结果
command_result = self.tn.read_very_eager().decode('ascii')
logging.warning('命令执行结果:\n%s' % command_result)

# 退出telnet
def logout_host(self):
self.tn.write(b"exit\n")

if __name__ == '__main__':
host_ip = '10.82.21.145'
username = 'root'
password = 'focus'
command = 'reboot'
telnet_client = TelnetClient()
# 如果登录结果返加True,则执行命令,然后退出
if telnet_client.login_host(host_ip,username,password):
telnet_client.execute_some_command(command)
telnet_client.logout_host()
转:https://www.cnblogs.com/lsdb/p/9258964.html

最新文章

  1. Nginx配置文件解析
  2. 移动端特殊css样式
  3. yii2-按需加载并管理CSS样式/JS脚本
  4. linux下的shell运算(加、减、乘、除)
  5. jquery layer弹出层插件
  6. 高级进程间通信之基于STREAMS的管道
  7. poj 2186 Popular Cows (强连通分量+缩点)
  8. 第三方分页控件aspnetPager出现问题解决方法
  9. VC-关于VC++ 6.0的那些事儿
  10. poj2739
  11. boost vc编译
  12. select count(*)优化 快速得到总记录数
  13. Linux虚拟主机通过FTP软件创建目录时提示550 Create Directory Operation Failed
  14. 关于MongoDB数据库的日志解析
  15. Web App架构
  16. [转]BT原理分析
  17. iptables简单应用
  18. UVa 1603 破坏正方形
  19. 前端之css笔记2
  20. fzu 2154 YesOrNo

热门文章

  1. Linux-常见报错注释
  2. 心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?
  3. 漫画CAS 的ABA 问题
  4. Struts2之文件上传与下载
  5. Lyndon 相关的炫酷字符串科技
  6. 【C语言】第5章 循环结构程序设计
  7. 你的域名是如何变成 IP 地址的?
  8. 1day漏洞反推技巧实战(2)
  9. Linux常用命令(一)之文件处理命令
  10. 【Spring 5.x】学习笔记汇总