标签分类 技术文章:
当前位置:首页 > Python技术文章 > python telnetlib模块安装

python telnetlib模块安装实例

  • 发布时间:
  • 作者:码农之家原创
  • 点击:293

这篇文章主要知识点是关于python、telnetlib、模块、安装、实例、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python可以这样学
Python可以这样学带讲义代码版
  • 类型:Python编程大小:22 MB格式:PDF出版:清华大学出版社作者:董付国
立即下载

更多Python相关的学习资源可以参阅 Python电子书程序设计电子书 等栏目。

python telnetlib模块安装

python中telnetlib模块的使用

python下能支持telnet的模块telnetlib是内置模块,直接import就可以了,其基本的使用方法也是比较简单的。

#encoding=utf-8  
  
def do_telnet(Host, username, password, finish, commands):  
    import telnetlib  
    '''''Telnet远程登录:Windows客户端连接Linux服务器'''  
   
    # 连接Telnet服务器  
    tn = telnetlib.Telnet(Host, port=23, timeout=10)  
    tn.set_debuglevel(2)  
       
    # 输入登录用户名  
    tn.read_until('login: ')  
    tn.write(username + '\n')  
      
    # 输入登录密码  
    tn.read_until('password: ')  
    tn.write(password + '\n')  
        
    # 登录完毕后执行命令  
    tn.read_until(finish)  
    for command in commands:  
        tn.write('%s\n' % command)  
      
    #执行完毕后,终止Telnet连接(或输入exit退出)  
    tn.read_until(finish)  
    tn.close() # tn.write('exit\n')  
  
if __name__=='__main__':  
     # 配置选项  
    Host = '10.255.254.205' # Telnet服务器IP  
    username = 'administrator'   # 登录用户名  
    password = 'dell1950'  # 登录密码  
    finish = ':~$ '      # 命令提示符  
    commands = ['echo "test"']  
    do_telnet(Host, username, password, finish, commands)  

其中port和timeout是可选的参数,而timeout的只是在初始化socket连接时起作用,而一旦连接成功后如果出现等待那就不会起作用了,比如使用read_until方式获取内容时返回的内容与指定的内容没有吻合,那么就会造成提示等待的情况,这时timeout是不会起作用的,而这个socket连接会一直保持着,永生不死。

那么如何解决这个问题呢,其实还有一种比较原始的方法,就是使用sleep方法来代替read_until方法,这样就不会出现种情况,因为到点就会自己输入,最多也就是最后得不到想要的结果,但是这个方式很不稳定,兼容性也不好;另一种方法是使用线程来启动这个函数,然后对子线程进行超时设置,这样就可以达到间接控制这个telnet连接的目的了。

import threading  
pars = replace_db_keyworlds(vars_dict, pars)  
configs = pars.split(r'@')  
host = configs[0].encode()  
user = configs[1]  
passwd = configs[2]  
finish = configs[3]  
commands = configs[4].split(r'\n')  
th1 = threading.Thread(target=do_telnet, args=(host.encode('utf-8'), user.encode('utf-8'), passwd.encode('utf-8'), finish.encode('utf-8'), commands))  
th1.start()  
th1.join(20)  ##20秒超时时间  

还有一个需要注意的是,传递给Telnet方法的字符串都会被解一次码,所以如果你传递过去需要write的字符串是已经解码的unicode的话,那么就会报错的,所以在传递发送的字符串之前还是先编成utf-8为妥,

python telnet远程登录端口交互执行命令

端口交互在代码中会用到telnetlib,python sys模块

#!/usr/bin/env python
#这个usr/bin/的作用及好处,在www.iplaypy.com之前的文章中有介绍过,不清楚的朋友们可以再去温习下。
 
#下面开始正式的代码段
 
def telnetdo(HOST=None, USER=None, PASS=None, COMMAND=None): #define a function
    import telnetlib, sys
    if not HOST:
        try:
            HOST = sys.argv[1]
            USER = sys.argv[2]
            PASS = sys.argv[3]
            COMMAND = sys.argv[4]
        except:
            print "Usage: telnetdo.py host user pass command"
            return
    msg = ['Debug messages:\n'] #
    tn = telnetlib.Telnet() #
    try:
        tn.open(HOST)
    except:
        print "Cannot open host"
        return
     
        #msg.append(tn.expect(['login:'], 5)) #
     
        tn.read_until("login:")
    tn.write(USER + '\n')
    if PASS:
        #msg.append(tn.expect(['Password:'], 5))
        tn.read_until("Password:")
        tn.write(PASS + '\n')
     
        #msg.append(tn.expect([USER], 5))
     
        tn.write(COMMAND + '\n')
    tn.write("exit\n")
     
        #msg.append(tn.expect(['#'], 5))
     
        tmp = tn.read_all()
    tn.close()
    del tn
    return tmp
     
if __name__ == '__main__':
    print telnetdo()

 

以上就是本次给大家分享的关于Python的全部知识点内容总结,大家还可以在下方相关文章里找到python测试opencv时imread导致、 python ddt数据驱动实例代码、 如何由java转学python、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:python time获取两个时间点的差

下一篇:python opencv将特定颜色转换方法总结

展开 +

收起 -

学习笔记
网友NO.727236

使用python Telnet远程登录执行程序的方法

如下所示: # -*-coding:utf-8 -*-def do_telnet(Host, username, password, finish, commands): import telnetlib '''''Telnet远程登录:Windows客户端连接Linux服务器''' # 连接Telnet服务器 tn = telnetlib.Telnet(Host, port=23, timeout=10) tn.set_debuglevel(2) # 输入登录用户名 tn.read_until(b'login:') tn.write(username) # 输入登录密码 tn.read_until(b'password:') tn.write(password) # 登录完毕后执行命令 for command in commands: tn.read_until(finish) tn.write(command) #tn.read_until(finish) #执行完毕后,终止Telnet连接(或输入exit退出) tn.read_until(finish) tn.close() # tn.write('exit\n') if __name__=='__main__': # 配置选项 hosts = '172.23.128.' #Host = '172.23.128.28' # Telnet服务器IP username = b'user\r\n' # 登录用户名 password = b'123456\r\n' # 登录密码 finish = b'' # 命令提示符 commands =[b'cd c:\\CreateScheduleSharefolder\r\n',b'setup.bat\r\n'] for ip in range(1,100): Host = hosts + str(ip) #print(Host) try: do_telnet(Host, username, password, finish, commands) except: print(Host + "---- error") 注:在开始前需要net use 一下,不然会提示没有权限。 以上这篇使用python Telnet远程登录执行程序的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

网友NO.462548

对python使用telnet实现弱密码登录的方法详解

系统环境: 64位win7企业版 python2.7.10 2016.08.16修改内容: 1)read_until()函数是可以设置timeout的,之前不能获取到password之后的返回是因为调用read_some()函数次数不够,没有读取到返回信息 2)如果不设置read_until()函数的timeout值,那么程序将一直建立连接而不会关闭,导致程序永远没有返回,所以设置timeout还是有必要的 3)不同服务器返回的内容是不一样的,例如网络设备radware返回就不是"login:",而是"user:",有的password的p是大写的,所以匹配"assword:"比较好。并且,不同服务器返回到的用户密码错误提示也是不一样的,可以在python控制台先试试再去写代码。 def check_23_port(ip,username,passwd): try: tn=telnetlib.Telnet()# #tn.set_debuglevel(0),设置为2可以看到更多信息 tn.open(host=ip) tn.read_until('login:')#这里设置timeout=10比较好,否则如果不能匹配字符串,这个连接将一直建立,程序不会返回 tn.write(username+'\r\n') tn.read_until('password:') tn.write(passwd+'\r\n') tn.read_some()#为result准备数据,可能需要多调用几次才能够获取到服务器返回的信息"Login Failed" result = tn.read_some()#这里调用两次,不同的操作系统返回的不一样,AIX linux返回的是invalid rex = r'Login Failed' tmp = re.search(rex,result) if tmp == None: return True else: return False tn.write("exit\r\n") tn.close() except Exception as e: pass print "c……

网友NO.412890

Python判断telnet通不通的实例

这个跟ping那个差不多,ping的那个脚本就是通过这个改了下,大体一致,不过telnet的不需要判断返回的字符串。快一些 这里具体需要telnet的ip是需要自己向定义好的数组中写的 我这里加了一个定时,是7200秒,也就是2小时 行了,上代码吧: #!/usr/bin/env python# coding: utf8 import telnetlibimport timeimport codecsimport os # telnet hostdef telnetdo(host, statusFile): status1 = 'telnet success' status2 = 'telnet faild' for ipAdd in host: # get now time nowTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) try: t = telnetlib.Telnet(ipAdd, port=23, timeout=1) writeToText(nowTime, ipAdd, status1, statusFile) except: writeToText(nowTime, ipAdd, status2, statusFile) # write status information to txtdef writeToText(nowTime, ipAdd, status, statusFile): s_text = 'TIME:' + nowTime + '\t' + 'IP:' + ipAdd + '\t' + 'STATUS:' + status + '\r\n' if '0' == judgeFile(statusFile): with open(statusFile, 'a') as f: f.write(s_text) f.close() if '1' == judgeFile(statusFile): with open(statusFile, 'w') as f: f.write(s_text) f.close() # Determine whether statusFile exists # 0: exists# 1: no existsdef judgeFile(statusFile): if os.path.exists(statusFile): return '0' else: return '1' if __name__ == "__main__": host = ['192.168.1.254', '192.168.1.100'] # write file statusFile = '/root/telnetStatus.txt' i = 7200 while i: telnetdo(host, statusFile) time.sleep(2) i = i - 1 结果会存在/root下面 以上这篇P……

网友NO.471255

python 处理telnet返回的More,以及get想要的那个参数方法

问题: 需要循环获取网元返回的某个参数,并计算出平均值。 解决方案: 通过expect解决返回More的问题。 通过具体的参数位置,精确获取到参数。 讨论: 参数位置固定,不好复用。 #! usr/bin/env python# -*- coding: utf-8 -*-import telnetlibimport mathimport timedef get_param(b): "获取相应的参数,返回float型参数组" c = [] b = list(b) length = len(b) print length for x in b: c.append(float(x)) print c return cdef get_avg(a): "获取平均值" length = len(a) sum = 0 for x in a: sum += x avg = sum/length return avgdef get_telnet(tn): "获取telnet数据" for command in commands: tn.write('%s\n' % command) time.sleep(0.5)## result = tn.read_very_eager() # 不用read_all(),不能处理More print "**************" a = [] a.append('More') print a result = str() while True: b,c,d = tn.expect(a,timeout=1) print b # 有More为0,无More为-1 print 'cccccccccccccccccccccccccccccccccccccccccccc' print c print 'dddddddddddddddddddddddddddddddddddddddddddd' print d result += d if 0 == b: print "There has 'More'!!!" tn.write(r' ') #不用\r\n来继续 else: break print 'get result success!' print result #获取到带More的所有返回结果 a = result.split('\r\n') # 不要加r length = len(a) print length b = a[1].split(' ') print b print a[32] c = a[32] d = c.split(' ') print d length = len(d) print d[8] e = d[8].split('(') print e[0] return e[0] def close_telnet(tn): "执行完毕后,终止Telnet连接(或输……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明