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


Posted in Python onApril 16, 2021

最近在学习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

输出如下:

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

注:我这边测试的目标主机是嵌入式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 相关文章推荐
深入理解Python 代码优化详解
Oct 27 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
快速入手Python字符编码
Aug 03 Python
在Python中定义一个常量的方法
Nov 10 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
Python 获取项目根路径的代码
Sep 27 Python
python实现实时视频流播放代码实例
Jan 11 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
Django前后端分离csrf token获取方式
Dec 25 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 Python
AI:如何训练机器学习的模型
python 用递归实现通用爬虫解析器
MATLAB 如何求取离散点的曲率最大值
用Python远程登陆服务器的步骤
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 #Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 #Python
python中print格式化输出的问题
Apr 16 #Python
You might like
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
php中过滤非法字符的具体实现
2013/10/29 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python实现的二维码生成小软件
2014/07/11 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python super函数使用方法详解
2020/02/14 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
详解HTML5新增标签
2017/11/27 HTML / CSS
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
教育英语专业毕业生的求职信
2014/03/13 职场文书
入股协议书
2014/04/14 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
余世维讲座观后感
2015/06/11 职场文书
催款函范文
2015/06/24 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers