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中的线程进行网络编程的入门教程
Apr 15 Python
Python抓取淘宝下拉框关键词的方法
Jul 08 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
Python 基础之字符串string详解及实例
Apr 01 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
python打开windows应用程序的实例
Jun 28 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
python基于selenium爬取斗鱼弹幕
Feb 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
PHP中cookie知识点学习
2018/05/06 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
Python中获取网页状态码的两个方法
2014/11/03 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
浅谈python常用程序算法
2019/03/22 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
python编写简单端口扫描器
2019/09/04 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
客房主管岗位职责
2013/12/09 职场文书
英语演讲稿范文
2014/01/03 职场文书
婚纱店策划方案
2014/05/22 职场文书
模特大赛策划方案
2014/05/28 职场文书
夏季药店促销方案
2014/08/22 职场文书
给校长的一封检讨书
2014/09/20 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
2015员工年度考核评语
2015/03/25 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
Python基础详解之描述符
2021/04/28 Python
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python