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之通过Python连接数据库
Oct 28 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
python实现树形打印目录结构
Mar 29 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
HTML的form表单和django的form表单
Jul 25 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
python实现mean-shift聚类算法
Jun 10 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
python如何快速拼接字符串
Oct 28 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 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实现WebService的简单示例和实现步骤
2015/03/27 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python的常用模块之collections模块详解
2018/12/06 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
印度在线杂货店:bigbasket
2018/08/23 全球购物
美容院店长岗位职责
2014/04/08 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
庆六一活动总结
2014/08/29 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
离婚协议书范文
2015/01/26 职场文书
合理化建议书
2015/02/04 职场文书
高中生社会实践心得体会
2016/01/14 职场文书