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中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
python通过ftplib登录到ftp服务器的方法
May 08 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
Django 路由控制的实现
Jul 17 Python
python 穷举指定长度的密码例子
Apr 02 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 Python
Python 图片处理库exifread详解
Feb 25 Python
对Keras自带Loss Function的深入研究
May 25 Python
Python 多线程处理任务实例
Nov 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
php中的MVC模式运用技巧
2007/05/03 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
详解webpack性能优化——DLL
2017/10/20 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
python计算n的阶乘的方法代码
2019/10/25 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
一般党员对照检查材料
2014/09/24 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
逃课检讨书范文
2015/05/06 职场文书
超级礼物观后感
2015/06/15 职场文书
环保主题班会教案
2015/08/13 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android