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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
详解Python实现按任意键继续/退出的功能
Aug 19 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
python实现批量nii文件转换为png图像
Jul 18 Python
详解python中index()、find()方法
Aug 29 Python
django有哪些好处和优点
Sep 01 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
python实现按日期归档文件
Jan 30 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
Javascript中的this绑定介绍
2011/09/22 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python numpy数组复制使用实例解析
2020/01/10 Python
python语言是免费还是收费的?
2020/06/15 Python
python和c语言哪个更适合初学者
2020/06/22 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
怎样客观的做好自我评价
2013/12/28 职场文书
幼儿园老师辞职信
2014/01/20 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
企业安全生产标语
2014/06/06 职场文书
企业文化宣传标语
2014/06/09 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
五年级下册复习计划
2015/01/19 职场文书
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python