python telnet登陆

  源码请参考:starnightcyber/scripts

  主要使用TelnetClient类,封装了登录和执行命令的基本操作。

  源码如下,或请查看:scripts/telnet/telnet.py

#!/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->

  以上!

原文地址:https://www.cnblogs.com/Hi-blog/p/python-telnet.html

时间: 2024-10-04 05:22:58

python telnet登陆的相关文章

telnet登陆路由器。。。

登陆路由有两种方式,一种是console,另一种是使用telnet,因为我电脑是win7,不支持console,也懒得装软件,就使用telnent为例. 一,开启telnet客户端 对于XP,可以直接运行telnet,但是win7,却先要开启.如图: 然后找到打开或关闭windows功能: 将telnet客户端勾上就ok了.. 默等... 二,获取路由器Ip,then login~ 嘿嘿,之前学的cmd命令可以用一用了: 之后,查看默认网关: 最后在运行telnet +默认网关这里的ip就ok啦

Python 模拟系统登陆接口

Python 模拟登陆-验证用户名和密码 1. 如果输入错误,则输出用户名或密码错误: 2. 如果成功,则输出欢迎,xxx! 3. 三分钟内累计错误三次默认用户被锁, 三分钟后自动解锁继续验证. 简单代码如下: import getpass import datetime user_pwd_dict = {} user_login_sum_dict = {} with open('user_pwd', 'r') as  obj:  # 读取用户名密码文件(文件格式在本文底): while Tru

windows下使用远程工具登录虚拟机上的Linux、访问虚拟机上的服务 、端口转发、win7 telnet登陆虚拟机

首先要清楚virtual box如何设置端口转发: 一篇文章: 如何使用VirtualBox进行端口转发 由于默认的方式是用NAT来做虚拟机网络的,因此如果从外网想访问虚拟机的应用会比较麻烦.以前一直用桥接的方式,但IP有限,自己指定的IP可能会和局域网的IP冲突,而用DHCP方式获取的IP又可能会发生变化导致不确定,怎么办?网上查了一下,简单有效的解决方法就是用VirtualBox的“端口映射”功能.下面结合实例来讲讲怎么操做: 应用场景:要将虚拟机的Web 80端口从外面能访问到. 1. 首

python机器登陆新浪微博代码示例

前段时间开始学习Python,一直想不到有什么好的小项目可以做,憋得慌,这不, 绞尽脑汁想出了一个爬取新浪微博,并对爬取数据做简单统计的项目.一开始我自以为学习了点Python正则就可以搞定了,熟料在机器登陆上栽了跟头,从完全一头雾水到现在初步登陆获取到数据,整整历经了四五天.因为之前没搞过机器登陆方面的代码,所以这次项目的初步完成完全归功于网上的一些大神,我只是拾人牙慧,拼凑了几个大神的代码,另外加几行注释而已. # import 这边需要注意的是只有一个rsa这个模块是需要install的,

Python模拟登陆万能法-微博|知乎

Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入requests,最终用requests进行网站的抓取.优点就是不但规避了"selenium"其本身抓取速度慢的问题

使用telnet登陆mini2440开发板

使用telnet登陆mini2440开发板 by HYH | 2018 年 1 月 18 日 下午 3:40 一.说明 1.mini2440的linux自带的busybox包含有telnetd这个程序,故可用于telnet登陆,方便调试. 2.如果自己做的linux里面并没有busybox或者busybox并没有包含telnetd这个程序.可在https://busybox.net/downloads/binaries/下载任意一个版本的busybox(注意要下载armv4*版本). 3.登陆之

Python模拟登陆万能法

此文转自:https://zhuanlan.zhihu.com/p/28587931   转录只是为了方便学习,感谢他的分享 Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入reque

通过思科模拟器CISCO PACKET TRACER学习网络2——交换机的基本配置和telnet登陆

如图所示,添加交换机和终端设备 1,双击交换机进入交换机命令行(CLI)模式,通过命令切换配置模式 2大多数情况下为了安全考虑,需要配置交换机特权模式密码 验证测试 3配置telnet登陆交换机 欲实现远程登陆,首先需要配置登陆用户和设备的管理地址 验证配置,将pc的IP地址与交换机管理地址配成同一网段并尝试telnet登陆 原文地址:http://blog.51cto.com/13685543/2139215

HCNA实验指南-配置Telnet登陆系统

实验要求模拟终端通过Telnet登陆路由器AR1路由器IP:192.168.1.1,终端IP:192.168.1.10user:admin,password:hello,有管理权限user:gust,password:nihao,有监控权限 路由器(192.168.1.1),配置如下: <Huawei>system-view [Huawei]sysname AR1 //修改设备名称为AR1 [AR1]interface g0/0/0 //进入G0/0/0接口视图 [AR1-GigabitEth