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进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
python分析网页上所有超链接的方法
May 08 Python
浅谈Python中copy()方法的使用
May 21 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python计算两个日期相差天数的方法示例
May 23 Python
基于Python列表解析(列表推导式)
Jun 23 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python自动识别文本编码格式代码
Dec 26 Python
tensorflow使用指定gpu的方法
Feb 04 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 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
获得Google PR值的PHP代码
2007/01/28 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
C#面试题
2016/05/06 面试题
硕士研究生个人求职信
2013/12/04 职场文书
学习标兵获奖感言
2014/02/20 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
大学生求职计划书
2014/04/30 职场文书
师范生自荐信模板
2014/05/28 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
长城的导游词
2015/01/30 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers