Python telnet登陸功能實現程式碼
阿新 • • 發佈:2020-04-16
閱讀目錄
原始碼請參考: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,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->
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。