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判断Abundant Number的方法
Jun 15 Python
获取python的list中含有重复值的index方法
Jun 27 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
详解Python打包分发工具setuptools
Aug 05 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
使用Pytorch来拟合函数方式
Jan 14 Python
新手入门学习python Numpy基础操作
Mar 02 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python中无限循环需要什么条件
May 27 Python
python对一个数向上取整的实例方法
Jun 18 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
Python中Continue语句的用法的举例详解
2015/05/14 Python
Python性能提升之延迟初始化
2016/12/04 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python实现ip代理池功能示例
2019/07/05 Python
python__name__原理及用法详解
2019/11/02 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
用python实现学生管理系统
2020/07/24 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
Python使用Pygame绘制时钟
2020/11/29 Python
Shell脚本如何向终端输出信息
2014/04/25 面试题
媒矿安全生产承诺书
2014/05/23 职场文书
节约粮食标语
2014/06/18 职场文书
演讲开场白台词大全
2015/05/29 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
redis protocol通信协议及使用详解
2022/07/15 Redis