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装饰器使用示例及实际应用例子
Mar 06 Python
Python实现从百度API获取天气的方法
Mar 11 Python
Python使用scrapy抓取网站sitemap信息的方法
Apr 08 Python
Python数据类型学习笔记
Jan 13 Python
python rsa 加密解密
Mar 20 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
浅谈django orm 优化
Aug 18 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
python中 .npy文件的读写操作实例
Apr 14 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的开合式多级菜单程序
2006/10/09 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
jcrop基本参数一览
2013/07/16 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
python代码如何注释
2020/06/01 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
教师自我鉴定
2013/12/13 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
创新型城市实施方案
2014/03/06 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
大学生求职信例文
2014/06/29 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
通知的格式范文
2015/04/27 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL