目次を読む
ソースコードについては、starnightcyber / scriptsを参照してください。
TelnetClientクラスは主に、ログインしてコマンドを実行する基本的な操作をカプセル化するために使用されます。
ソースコードは次のとおりです。または、scripts / telnet /telnet.pyを確認してください。
telnetプロトコルはTCP / IPプロトコルスイートのメンバーであり、インターネットリモートログインサービスの標準プロトコルおよび主要な方法です。これにより、ユーザーはローカルコンピューターでリモートホストの作業を完了することができます。エンドユーザーのコンピューターで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',}classTelnetClient(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)またはログインに失敗しました(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('%sNetwork接続に失敗しました'% ip)return False,''
msg ='try user:[{}], password:[{}]'.format(username, password)print(msg)
# ログイン試行
try:
# ユーザー名がユーザーにプロンプトを表示するのを待っています_プロンプトが表示されたら、ユーザー名を入力します
self.tn.read_until(auth['user_prompt'], timeout=3)
self.tn.write(username.encode('ascii')+ auth['enter'])
# パスワードプロンプトパスワードを待っています_プロンプトが表示されたら、パスワードを入力します
self.tn.read_until(auth['password_prompt'], timeout=3)
self.tn.write(password.encode('ascii')+ auth['enter'])
# 返された結果を受信する前に2秒遅延し、サーバーに十分な応答時間を与えます
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 252020
Return value:1
SipPrxoy-
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts