Python telnet登陆功能实现代码


Posted in Python onApril 16, 2020

阅读目录

源码请参考:starnightcyber/scripts

主要使用TelnetClient类,封装了登录和执行命令的基本操作。

源码如下,或请查看:scripts/telnet/telnet.py

telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。

终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样,可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器,Telnet是常用的远程控制Web服务器的方法。

代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import logging
import telnetlib
import time


# telnet登录认证相关
auth = {
 "user_prompt": b'Username:',      # 输入用户名提示
 "password_prompt": b'Password:',    # 输入密码提示
 "enter": b'\r',            # 回车
 "remote_enter": b'\n\r',
}


class TelnetClient(object):
  def __init__(self):
    self.tn = telnetlib.Telnet()    # Telnet client

  def login(self, ip, port, tel_dict):
    """
    telnet 登录
    :param ip: 目标ip
    :param port: 目标端口
    :param tel_dict: 密码字典
    :return: 登录成功(True) or 登录失败(False)
    """
    msg = 'trying to login {}:{} telnet service'.format(ip, port)
    print(msg)

    # telnet登录
    for username, password in tel_dict.items():

      # 创建一个telnet连接
      try:
        self.tn.open(ip, port)
      except:
        logging.warning('%s网络连接失败' % ip)
        return False, ''

      msg = 'try user:[{}], password:[{}]'.format(username, password)
      print(msg)

      # 登录尝试
      try:
        # 等待输入用户名提示user_prompt出现后,输入用户名
        self.tn.read_until(auth['user_prompt'], timeout=3)
        self.tn.write(username.encode('ascii') + auth['enter'])

        # 等待输入密码提示password_prompt出现后,输入密码
        self.tn.read_until(auth['password_prompt'], timeout=3)
        self.tn.write(password.encode('ascii') + auth['enter'])

        # 延时两秒再收取返回结果,给服务端足够响应时间
        time.sleep(2)

        # 获取登录结果, read_very_eager()获取到的是的是上次获取之后本次获取之前的所有输出
        command_result = self.tn.read_very_eager().decode('ascii')
        # print('===>', command_result)
        prompt, _ = command_result.split('->')
        # print('===>', prompt.strip())

        # 如果返回的结果中没有提示输入用户名,表示登录成功
        if auth['user_prompt'] not in command_result.encode('ascii'):
          print('登录成功')
          return True
        else:
          continue
      except:
        pass
    return False

  def execute_command(self, command):
    """
    执行一些命令
    :param command: 要执行的命令
    :return: None
    """
    try:
      self.tn.write(command.encode('ascii') + auth['enter'])
      time.sleep(2)
      # 获取命令结果
      command_result = self.tn.read_very_eager().decode('ascii')
      print('==>', command_result)
    except:
      print('something went wrong...')
      pass

  # 退出telnet,保留
  def logout_host(self):
    self.tn.write(b"bye\r")

if __name__ == '__main__':

  # 参数
  ip = '172.16.176.120'
  port = '2570'
  tel_dict = {'admin': 'admin', 'aaa': 'bbb', '': ''}

  # 登陆
  tn = TelnetClient()
  tn.login(ip, port, tel_dict)

  # 执行命令
  command = 'ver'
  tn.execute_command(command)

  # 退出
  tn.logout_host()

执行输出如下:

# python3 telnet_brute.py
trying to login 172.16.176.120:2570 telnet service
try user:[admin], password:[admin]
try user:[aaa], password:[bbb]
try user:[], password:[]
登录成功
==> ver
 Version :PAS_SIPPROXY_6.0.0.3.0.190831, Compile Time: 16:18:41, Feb 25 2020
Return value: 1
SipPrxoy->

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python脚本处理空格的方法
Aug 08 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
用tensorflow实现弹性网络回归算法
Jan 09 Python
Python命令行解析模块详解
Feb 01 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
Python中格式化字符串的四种实现
May 26 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
基于python 凸包问题的解决
Apr 16 #Python
python实现交并比IOU教程
Apr 16 #Python
python 弧度与角度互转实例
Apr 15 #Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 #Python
Python selenium自动化测试模型图解
Apr 15 #Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 #Python
Python unittest单元测试框架及断言方法
Apr 15 #Python
You might like
PHP 数组实例说明
2008/08/18 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
python3.3实现乘法表示例
2014/02/07 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python中count函数简单用法
2020/01/05 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
学习党章思想汇报
2014/01/07 职场文书
公司建议书怎么写
2014/05/15 职场文书
家长学校教学计划
2015/01/19 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
旷工检讨书大全
2015/08/15 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
Redis可视化客户端小结
2021/06/10 Redis
分析并发编程之LongAdder原理
2021/06/29 Java/Android
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技