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的id()函数介绍
Feb 10 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
解析Python3中的Import
Oct 13 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
Python 输出详细的异常信息(traceback)方式
Apr 08 Python
Python pickle模块常用方法代码实例
Oct 10 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实现插入排序?
2013/04/10 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
wxpython实现图书管理系统
2018/03/12 Python
深入浅析python 中的匿名函数
2018/05/21 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
Python全栈之列表数据类型详解
2019/10/01 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
学生党支部先进事迹
2014/02/04 职场文书
五好党支部事迹材料
2014/02/06 职场文书
如何写好建议书
2014/03/13 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python