Python telnet登陆功能实现代码

 更新时间:2020年04月16日 09:21:55   作者:starnight_cyber  
这篇文章主要介绍了Python telnet登陆功能实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

阅读目录

  源码请参考: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 超时请求或计算的处理方案

    这篇文章主要介绍了Python 超时请求或计算的处理方案,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • python自动化测试实例解析

    python自动化测试实例解析

    这篇文章主要介绍了python自动化测试实例,并对实例中的注意点进行了简单的分析,需要的朋友可以参考下
    2014-09-09
  • Pytorch深度学习经典卷积神经网络resnet模块训练

    Pytorch深度学习经典卷积神经网络resnet模块训练

    这篇文章主要介绍了Pytorch深度学习经典卷积神经网络resnet模块训练,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python 窗体(tkinter)按钮 位置实例

    Python 窗体(tkinter)按钮 位置实例

    今天小编就为大家分享一篇Python 窗体(tkinter)按钮 位置实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python通过邮件服务器端口发送邮件的方法

    python通过邮件服务器端口发送邮件的方法

    这篇文章主要介绍了python通过邮件服务器端口发送邮件的方法,涉及Python发送邮件的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 基于python的七种经典排序算法(推荐)

    基于python的七种经典排序算法(推荐)

    本篇文章主要介绍基于python的七种经典排序算法(推荐),具有一定的参考价值,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-12-12
  • python3 使用openpyxl将mysql数据写入xlsx的操作

    python3 使用openpyxl将mysql数据写入xlsx的操作

    这篇文章主要介绍了python3 使用openpyxl将mysql数据写入xlsx的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python入门之Tkinter使用的方法详解

    python入门之Tkinter使用的方法详解

    作为Python开发者,图形用户界面(GUI)开发是必备技能之一,本文将介绍Python自带的GUI工具包TKinter,这篇文章主要给大家介绍了关于python入门之Tkinter使用的相关资料,需要的朋友可以参考下
    2022-03-03
  • Python使用Pickle模块进行数据保存和读取的讲解

    Python使用Pickle模块进行数据保存和读取的讲解

    今天小编就为大家分享一篇关于Python使用Pickle模块进行数据保存和读取的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • python中sort()函数用法详解

    python中sort()函数用法详解

    Python和Java等编程语言一样,提供了一种自动排序的方法,Java中是Arrays.sort()方法,而Python中是sort()方法,下面这篇文章主要给大家介绍了关于python中sort()函数用法的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论