# !/usr//bin/python3
# -*- coding:UTF-8 -*- from telnetlib import Telnet
import time, os, datetime, json
import logging class TelnetClient(): def __init__(self):
self.tn = Telnet() def __login_host(self, ip, username, password, enable=None, verbose=True):
try:
self.tn.open(ip, port=23)
except:
logging.warning('%s网络连接失败' % ip)
return False
self.tn.read_until(b'Username:', timeout=1)
self.tn.write(b'\n')
self.tn.write(username.encode() + b'\n')
rely = self.tn.expect([], timeout=1)[2].decode().strip() # 读显
if verbose:
print(rely)
self.tn.read_until(b'Password:', timeout=1)
self.tn.write(password.encode() + b'\n')
rely = self.tn.expect([], timeout=1)[2].decode().strip()
if verbose:
print(rely)
if enable is not None:
self.tn.write(b'enable\n')
self.tn.write(enable.encode() + b'\n')
if verbose:
rely = self.tn.expect([], timeout=1)[2].decode().strip()
print(rely)
time.sleep(1)
time.sleep(2)
rely = self.tn.read_very_eager().decode()
if 'Login invalid' not in rely:
logging.warning('%s登陆成功' % ip)
return True
else:
logging.warning('%s登陆失败,用户名或密码错误' % ip)
return False def __do_cmd(self, cmd, location=None):
if location:
os.system('mkdir backup\\{}'.format(location))
with open('backup/{}/configuration_{}.txt'.format(location, datetime.date.today()), 'w') as f:
self.tn.write(cmd.encode().strip() + b'\n')
time.sleep(3)
rescmd = self.tn.read_very_eager().decode()
f.write(rescmd)
logging.warning('命令执行结果:\n %s' % rescmd)
return True
else:
os.system('mkdir backup')
with open('backup/configuration_{}.txt'.format(location, datetime.date.today()), 'w') as f:
self.tn.write(cmd.encode().strip() + b'\n')
time.sleep(3)
rescmd = self.tn.read_very_eager().decode()
f.write(rescmd)
logging.warning('命令执行结果:\n %s' % rescmd)
return True def telnet_login(self, ip, user, pwd, enable=None, cmd=None, location=None):
res1 = self.__login_host(ip, user, pwd, enable)
if res1:
for i in cmd.split(';'):
self.__do_cmd(i, location)
self.__logout_host()
return True
else:
self.__logout_host()
return False def __logout_host(self):
self.tn.close() if __name__ == '__main__':
username = 'cisco' # 用户名
password = 'cisco' # 密码
# 存放设备登陆信息和要执行的命令(多条命令用;隔开),示例:["ip", "username", "password", "enable_password", "terminal length 0;show run", "backup_path"]
lists = 'list.text'
with open('test.txt', 'rt', encoding='utf-8') as list_obj:
# textline = list_obj.readline()
# while textline != '':
# print(json.loads(textline))
# textline = list_obj.readline()
telnet_client = TelnetClient()
for line in list_obj:
hostmsg = json.loads(line)
telnet_client.telnet_login(hostmsg[0], hostmsg[1], hostmsg[2], hostmsg[3], hostmsg[4])

常见网络设备命令结果全部显示

<H3C> screen-length disable     # no screen-length disable (华三)
Cisco# terminal length 0 # terminal no length (思科)
MaiPu# more off # more on (迈普)
<HuaWei> screen-length 0 temporary # undo screen-length temporary (华为)
RuiJie# terminal length 0 # terminal no length (锐捷)
ZTE# terminal length 0 # no terminal length (中兴)

常见网络设备巡检命令
https://blog.csdn.net/qq_46417230/article/details/122336116

Telnet登陆网络设备执行命令脚本的更多相关文章

  1. expect实现远程主机自动执行命令脚本

    2014年第一个脚本,哈哈!!! expect实现远程主机自动执行命令脚本: #!/usr/bin/expect -- if { [llength $argv] < 4 } { puts &qu ...

  2. Python-SSH批量登陆并执行命令

    Python-SSH批量登陆并执行命令 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko from time import cti ...

  3. Shell下通过echo+telnet在远端执行命令

    创建脚本cmd.sh,用于输入telnet的用户与密码,以及生成远端需要执行的命令   执行命令 MY_SIGN=/tmp/sign; (sh cmd.sh ) | (telnet localhost ...

  4. webshell下执行命令脚本汇集

    cmd1.asp <object runat=server id=shell scope=page classid="clsid:72C24DD5-D70A-438B-8A42-984 ...

  5. shell中使用expect命令进行远程执行命令脚本

    expect是用来实现自动交互功能的工具之一,使用expect-send来实现交互过程. 注意: 1.脚本的执行方法与bash shell不一样,比如:expect example.sh 2.向一个脚 ...

  6. ssh登陆并执行命令不退出

    如果希望SSH登陆后先执行shell命令,可以这样: ssh user@ip -t "cd /data ; /bin/bash"

  7. Mysq登陆后执行命令提示You must SET PASSWORD before executing this statement

    mysql  安装完成后,在输入命令行时,提示:You must SET PASSWORD before executing this statement 提示必须设置密码,我想不是已经设置了密码吗? ...

  8. ssh 免交互登录 ,远程执行命令脚本。

    ##免交互SSH登录auto_login_ssh () {    expect -c "set timeout -1;                spawn -noecho ssh -o ...

  9. linux关机时候执行命令脚本或程序

    Write a service file and place it in /etc/systemd/system/beforeshuttingdown.service code: [Unit] Des ...

  10. 使用paramiko远程登录并执行命令脚本

    #!/usr/bin/env python #coding=utf-8 import paramiko, getpass,sys,traceback class ssh_utils(): def lo ...

随机推荐

  1. 基于C++的OpenGL 03 之纹理

    1. 概述 本文基于C++语言,描述OpenGL的纹理 前置知识可参考: 基于C++的OpenGL 02 之着色器 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描述 ...

  2. Word14 互联网络发展状况统计报告office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...

  3. [Python灰帽子-黑客与逆向工程师的Python编程之道]书籍

    [Python灰帽子-黑客与逆向工程师的Python编程之道]PDF高清版免费下载地址 提取码:76aw 内容简介  · · · · · · <Python灰帽子>是由知名安全机构Immu ...

  4. python GIL解释器

    1.GIL是什么? GIL全称Global Interpreter Lock,即全局解释器锁. 作用就是,限制多线程同时执行,保证同一时间内只有一个线程在执行. GIL并不是Python的特性,它是在 ...

  5. function的length,就是第一个具有默认值之前的参数个数。

    一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象,类数组对象和数组类似,但是不能调用数组的方法.常见的类数组对象有 arguments 和 DOM 方法的返回结果,还有一个函数也 ...

  6. Java中Set里remove详解

    例如 1 HashSet set = new HashSet(); 2 Person p1 = new Person(1001,"AA"); 3 Person p2 = new P ...

  7. java中List的浅拷贝与深拷贝

    List浅拷贝 众所周知,list本质上是数组,而数组的是以地址的形式进行存储. 如上图将list A浅拷贝给list B,由于进行的是浅拷贝,所以直接将A的内容复制给了B,java中相同内容的数组指 ...

  8. centos 7 删除乱码文件

    1.通过ls -li 获取要删除乱码文件名文件的inode号,比如得到的是 33575029 2.通过以下命令删除文件:find ./ -inum 33575029 -exec rm -rf {} \ ...

  9. React 安装 Sass 错误问题; node-sass 安装运行成功 yarn add sass node-sass@npm:sass

    正常安装是: yarn add node-sass 直接安装出现报错 例如: Node Sass does not yet support your current environment: Wind ...

  10. java HashMap 原理

    jdk1.7 和 1.8 大致相同但还是有区别,主要是数据结构的区别,1.7 为数组+链表:1.8 为数组+链表+红黑树 关键知识点 加载因子:装填因子,目的是何时对 map 进行扩容,默认是 0.7 ...