在 python 中有一個 telnetlib,它的作用就是建立一個通到主機的 telnet連線實體, 然后向主機傳送命令 (就像用鍵盤輸入一樣 )并從該連線接收數據。利用它, 我們可以把示范 1的所有內容從 "人 -機 '交流變成'機 -機 '交流,這樣也可以做到處理 pop3 郵箱的工作。不過既然我們已經試過了 pop3,這一次可以試用真的 telnet 埠 23 做些好玩的東西。
# telnetdo.py #!/usr/bin/env python def telnetdo(HOST=None, USER=None, PASS=None, COMMAND=None): #定義一個函數, 這將要用它會很容易 import telnetlib, sys if not HOST: #如果沒有給出所要的資料,則要求用戶輸入 try: HOST = sys.argv[1] #記得吧, 序列是從 0開始數的,而sys.argv[0]會是你程式的名字 USER = sys.argv[2] PASS = sys.argv[3] COMMAND = sys.argv[4] except: print "Usage: telnetdo.py host user pass 'command'" return msg = ['Debug mesages:/n'] #這個用來存起所有從主機傳回的訊息, 作除錯時很有用 tn = telnetlib.Telnet() #準備一個 telnet 連線的實體 try: tn.open(HOST) #連接端綁定到主機 HOST 去 except: print "Cannot open host" return msg.append(tn.expect(['login:'],5)) #等待主機傳回含有 'login:'字符的訊息,等候時限為 5秒 tn.write(USER+'/n') #向主機送出字串 USER + '/n',如 USER 是 # 'pcheung' 則等于 'pcheung/n' if PASS: #就像是在鍵盤打入一樣。 msg.append(tn.expect(['Password:'],5)) #如果有 password 要打的話就送出密碼字串, tn.write(PASS+'/n') #但首先要等主機傳回含有 'Password:'字樣的訊息 msg.append(tn.expect([USER],5)) #因為通常登入后主機會顯示出登入者名稱,我們在主機回應中找這 #樣的字符,如有的話則代表登入成功了 tn.write(COMMAND+'/n') #向主機發出指令 msg.append(tn.expect(['%'],5)) #等 5秒,如果程式完成了一般我們會收到 # shell prompt 吧,假設為 '%' tn.close() #關閉連線 del tn return msg[len(msg)-1][2] #把收到的訊息通通傳回去。 #(注意 msg 中第 2個元素才是真的訊息, #其他是附加資訊。 44 if __name__ == '__main__' #這是 python 常用的技巧:如果 telnetdo.py 程式 #是從 command prompt #引發的話則 __name__ 的內容為 __main__,相反 #如果是從別的程式用 import telnetdo 的話則 # __name__ 會變成 'telnetdo' print telnetdo() #這樣寫的好處是從此 telnetdo 會成為你的擴展 #模組,你可以在別的程式中 #用telnetdo.telnetdo(HOST,USER,PASS,COMMAND)來調用它!
這個程式用法如下:
> chmod +x telnetdo.py
> telnetdo.py 'somehost' 'glace' 'xxxxxx' 'ls -lF'
(0, <SRE_Match object at 200f75a8>, '/015/012/015/012Linux
新聞熱點
疑難解答