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脚本来获取Cisco设备信息的示例
May 04 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
python的re正则表达式实例代码
Jan 24 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
如何利用python读取micaps文件详解
Oct 18 Python
python中如何对多变量连续赋值
Jun 03 Python
Python字符串格式化方式
Apr 07 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 array_flip() 删除数组重复元素
2009/01/14 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
jquery实现数字输入框
2017/02/22 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python字典对象实现原理详解
2019/07/01 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python多进程重复加载的解决方式
2019/12/13 Python
基于python实现模拟数据结构模型
2020/06/12 Python
python推导式的使用方法实例
2021/02/28 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
男方父母婚礼答谢词
2014/01/25 职场文书
房地产活动策划方案
2014/05/14 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers