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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
python关键字and和or用法实例
May 28 Python
详解Python编程中包的概念与管理
Oct 16 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
Python判断telnet通不通的实例
Jan 26 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
pymysql 开启调试模式的实现
Sep 24 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 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中文分词的简单实现代码分享
2011/07/17 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
php中序列化与反序列化详解
2017/02/13 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
python实现图像拼接功能
2020/03/23 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
入党申请人的自我鉴定
2013/12/01 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
勤俭节约倡议书
2014/04/14 职场文书
ktv好的活动方案
2014/08/17 职场文书
安阳殷墟导游词
2015/02/10 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
运动会通讯稿50字
2015/07/20 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫