# !/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. 简单介绍Python中如何给字典设置默认值

    这篇文章主要介绍了Python中如何给字典设置默认值问题,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 Python字典设置默认值 我们都知道,在 Python 的字 ...

  2. mybatis:自定义映射关系resultMap

    创建表t_emp 定义实体类 package org.example.entity; public class Emp { private Integer empId; private String ...

  3. Day 23 23.2.1:微信公众平台案例

    微信公众平台案例 注意:接下来将的内容,请忽视具体网站,重点专注逆向的分析思路! 接下来就是爬什么网站,什么数据,什么形式都统统不重要!重点是分析思路 微信公众平台案例 url:https://mp. ...

  4. ShareWAF 软件&云形态安装部署说明

    一.常用文件说明sharewaf.js:主程序daemon.js:主程序守护程序oem.js:OEM 定制文件developer.js:二次开发接口rules.js:自定义规则文件regexp.js: ...

  5. Visual Studio 2017(vs2017)绿色便携版-北桃特供

    原版的VisualStudio2017有几十G,安装起来特别慢,不少用户叫苦连天.该版本是精简过的vs2017,且简化了原来的安装程序,特别适用于教学.个人开发者.某些要求不高的企业. 该绿色便携版是 ...

  6. 使用batch-import工具向neo4j中导入海量数据【转】

    转载备忘 链接:https://www.yisu.com/zixun/496254.html 这篇文章给大家分享的是有关数据库中怎么使用batch-import工具向neo4j中导入海量数据的内容.小 ...

  7. 用js实现元素两个元素位置对齐

    一.问题描述 使得填表单位那一行字与下面的表格左对齐,对表格使用css中的margin:auto实现了居中,但是对那一行字(用div包裹的)使用margin:auto不生效:并且2021年下面对应的月 ...

  8. 泛微js附件必填

    function fieldViewAttr(fieldid, viewtype) { alert('11') jQuery("#field" + fieldid).attr(&q ...

  9. 记录下vue表单验证

    公共common文件夹下建立validate.js /* 是否邮编*/ export function validateMail(rule, value,callback) { const reg = ...

  10. jssip3.9.1的demo,webphone网页电话

    用的目前最新的3.9.1版本,全版本在这里: https://jssip.net/download/releases/ https://github.com/versatica/JsSIP 代码: & ...