最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python遠(yuǎn)程登錄代碼

 更新時間:2008年04月29日 22:01:59   投稿:mdxy-dxy  
因?yàn)?python 已內(nèi)建了一個 pop3 的函式庫,所以我們直接用它來完成郵件的下載和處理。事實(shí)上, 如果我們不用 poplib 的話,我們還是可以完成那個例子中的所有作業(yè):就是通過模擬 telnet的協(xié)定。

在 python 中有一個 telnetlib,它的作用就是建立一個通到主機(jī)的 telnet連線實(shí)體, 然后向主機(jī)傳送命令 (就像用鍵盤輸入一樣 )并從該連線接收數(shù)據(jù)。利用它, 我們可以把示范 1的所有內(nèi)容從 "人 -機(jī) '交流變成'機(jī) -機(jī) '交流,這樣也可以做到處理 pop3 郵箱的工作。不過既然我們已經(jīng)試過了 pop3,這一次可以試用真的 telnet 埠 23 做些好玩的東西。 

 # telnetdo.py   
 #!/usr/bin/env python   
   
 def telnetdo(HOST=None, USER=None, PASS=None, COMMAND=None): #定義一個函數(shù), 這將要用它會很容易   
  import telnetlib, sys   
   
  if  not  HOST:              #如果沒有給出所要的資料,則要求用戶輸入           
   try:   
     HOST  = sys.argv[1]         #記得吧, 序列是從 0開始數(shù)的,而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']       #這個用來存起所有從主機(jī)傳回的訊息, 作除錯時很有用   
   
  tn  = telnetlib.Telnet()         #準(zhǔn)備一個 telnet 連線的實(shí)體   
  try:  
   tn.open(HOST)              #連接端綁定到主機(jī) HOST 去   
  except:  
   print  "Cannot open host"  
   return  
   
  msg.append(tn.expect(['login:'],5))    #等待主機(jī)傳回含有 'login:'字符的訊息,等候時限為 5秒   
  tn.write(USER+'\n')            #向主機(jī)送出字串 USER  + '\n',如 USER 是  
                       # 'pcheung' 則等于 'pcheung\n'  
  if  PASS:                 #就像是在鍵盤打入一樣。   
   msg.append(tn.expect(['Password:'],5)) #如果有 password 要打的話就送出密碼字串,   
   tn.write(PASS+'\n')           #但首先要等主機(jī)傳回含有 'Password:'字樣的訊息   
   
  msg.append(tn.expect([USER],5))      #因?yàn)橥ǔ5侨牒笾鳈C(jī)會顯示出登入者名稱,我們在主機(jī)回應(yīng)中找這   
                       #樣的字符,如有的話則代表登入成功了   
  tn.write(COMMAND+'\n')           #向主機(jī)發(fā)出指令   
  msg.append(tn.expect(['%'],5))       #等 5秒,如果程式完成了一般我們會收到   
                       # shell prompt 吧,假設(shè)為 '%'  
  tn.close()                 #關(guān)閉連線   
  del  tn  
  return  msg[len(msg)-1][2]        #把收到的訊息通通傳回去。   
                       #(注意 msg 中第 2個元素才是真的訊息,   
                       #其他是附加資訊。   
   44 if __name__  == '__main__'         #這是 python 常用的技巧:如果 telnetdo.py 程式  
                       #是從 command prompt  
                       #引發(fā)的話則 __name__ 的內(nèi)容為 __main__,相反  
                       #如果是從別的程式用 import telnetdo 的話則  
                       # __name__ 會變成 'telnetdo'  
  print  telnetdo()             #這樣寫的好處是從此 telnetdo 會成為你的擴(kuò)展  
                       #模組,你可以在別的程式中   
                        #用telnetdo.telnetdo(HOST,USER,PASS,COMMAND)來調(diào)用它! 

這個程式用法如下:

> chmod +x telnetdo.py
> telnetdo.py 'somehost' 'glace' 'xxxxxx' 'ls   -lF'

(0, <SRE_Match object   at   200f75a8>, '\015\012\015\012Linux
(somehost)\015\012\015\015\012\015login: ')
(0, <SRE_Match object   at   20124848>, 'Password:')
(0, <SRE_Match object   at   20103e08>, '\015\012Yup Release 2.6 
somehost\015\012Last login: Wed   Mar    6 18:21:01 GMT 2002 by
UNKNOWN@xxx.xxx.xxx.xxxyou have   mail\015\012somehost:glace%')

total 320
-rw-r--r--    1 glace    user        139788 Feb    8 17:54 PQR2.1.txt
drwxr-xr-x    3 glace    user          4096 Feb   10 16:45 mytts/
drwxr-xr-x    3 glace    user          4096 Jan   29 19:03 sample/
drwxr-xr-x    2 glace    user          4096 Jan    6 16:38 tex/
drwxr-xr-x    2 glace    user          4096 Sep    5  2001 tmp/
drwxr-xr-x    2 glace    user            29 Feb   23  2001 tools/
drwxr-xr-x    2 glace    user            26 Feb    6 18:43 trash/
somehost:glace%

可以看到執(zhí)行的結(jié)果和一些附加的資訊。這就是遠(yuǎn)端執(zhí)行程式了。就算沒有 rsh,照用可也。 哈,很方便吧。不過你應(yīng)該留意到了程式執(zhí)行時只等候了 5秒,就是說如果你要向主機(jī)發(fā)出像'find . -name xxx   -print'這樣的命令應(yīng)該等不到執(zhí)行完這個 telnet session 就會被關(guān)閉了。不過仔細(xì)想一下,這要緊嗎?我們現(xiàn)在所能做到的和真正人手 telnet 的差別并不大,想一想你會怎樣解決長時間執(zhí)行的問題?沒錯,就是 'nohup'和背景作業(yè)了。 就是說只要把程式呼叫改成: telnetdo.py 'apocal' 'pcheung' 'xxxxxx' 'nohup   myprogram_or_scrīpt&' 就行了。如此一來,就算對方主機(jī)的 shell prompt 是 '>'或是 '>>>'都沒有關(guān)系了。

(注意安全性并非是這類范例程式的著重點(diǎn), 因此并不建議在實(shí)際工作中用它.) 

python中telnetlib模塊的使用

python下能支持telnet的模塊telnetlib是內(nèi)置模塊,直接import就可以了,其基本的使用方法也是比較簡單的。

#encoding=utf-8 
 
def do_telnet(Host, username, password, finish, commands): 
  import telnetlib 
  '''''Telnet遠(yuǎn)程登錄:Windows客戶端連接Linux服務(wù)器''' 
  
  # 連接Telnet服務(wù)器 
  tn = telnetlib.Telnet(Host, port=23, timeout=10) 
  tn.set_debuglevel(2) 
    
  # 輸入登錄用戶名 
  tn.read_until('login: ') 
  tn.write(username + '\n') 
   
  # 輸入登錄密碼 
  tn.read_until('password: ') 
  tn.write(password + '\n') 
    
  # 登錄完畢后執(zhí)行命令 
  tn.read_until(finish) 
  for command in commands: 
    tn.write('%s\n' % command) 
   
  #執(zhí)行完畢后,終止Telnet連接(或輸入exit退出) 
  tn.read_until(finish) 
  tn.close() # tn.write('exit\n') 
 
if __name__=='__main__': 
   # 配置選項(xiàng) 
  Host = '10.255.254.205' # Telnet服務(wù)器IP 
  username = 'administrator'  # 登錄用戶名 
  password = 'dell1950' # 登錄密碼 
  finish = ':~$ '   # 命令提示符 
  commands = ['echo "test"'] 
  do_telnet(Host, username, password, finish, commands) 

其中port和timeout是可選的參數(shù),而timeout的只是在初始化socket連接時起作用,而一旦連接成功后如果出現(xiàn)等待那就不會起作用了,比如使用read_until方式獲取內(nèi)容時返回的內(nèi)容與指定的內(nèi)容沒有吻合,那么就會造成提示等待的情況,這時timeout是不會起作用的,而這個socket連接會一直保持著,永生不死。

那么如何解決這個問題呢,其實(shí)還有一種比較原始的方法,就是使用sleep方法來代替read_until方法,這樣就不會出現(xiàn)種情況,因?yàn)榈近c(diǎn)就會自己輸入,最多也就是最后得不到想要的結(jié)果,但是這個方式很不穩(wěn)定,兼容性也不好;另一種方法是使用線程來啟動這個函數(shù),然后對子線程進(jìn)行超時設(shè)置,這樣就可以達(dá)到間接控制這個telnet連接的目的了。

import threading 
pars = replace_db_keyworlds(vars_dict, pars) 
configs = pars.split(r'@') 
host = configs[0].encode() 
user = configs[1] 
passwd = configs[2] 
finish = configs[3] 
commands = configs[4].split(r'\n') 
th1 = threading.Thread(target=do_telnet, args=(host.encode('utf-8'), user.encode('utf-8'), passwd.encode('utf-8'), finish.encode('utf-8'), commands)) 
th1.start() 
th1.join(20) ##20秒超時時間 

還有一個需要注意的是,傳遞給Telnet方法的字符串都會被解一次碼,所以如果你傳遞過去需要write的字符串是已經(jīng)解碼的unicode的話,那么就會報(bào)錯的,所以在傳遞發(fā)送的字符串之前還是先編成utf-8為妥,其它字符不知道支持不,我只試了utf-8,也沒看源碼。

此外,貌似還有一個pexpect的第三方模塊可以支持telnet等一系列的協(xié)議連接,并支持交互式的通信,只是這個模塊夠用就沒學(xué)習(xí)了,這里先備注一下。

相關(guān)文章

  • python文件處理fileinput使用方法詳解

    python文件處理fileinput使用方法詳解

    這篇文章主要介紹了python文件處理fileinput使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • python3.6的venv模塊使用詳解

    python3.6的venv模塊使用詳解

    這篇文章主要介紹了python3.6的venv模塊使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • opencv python簡易文檔之圖像處理算法

    opencv python簡易文檔之圖像處理算法

    OpenCV是一個開源庫,包含了許多計(jì)算機(jī)視覺算法,它在計(jì)算機(jī)視覺和圖像處理中起著重要作用,用于實(shí)時操作,其效率足以滿足工業(yè)上的要求,這篇文章主要給大家介紹了關(guān)于opencv python簡易文檔之圖像處理算法的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • PyCharm GUI界面開發(fā)和exe文件生成的實(shí)現(xiàn)

    PyCharm GUI界面開發(fā)和exe文件生成的實(shí)現(xiàn)

    這篇文章主要介紹了PyCharm GUI界面開發(fā)和exe文件生成,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python中selenium獲取token的方法

    Python中selenium獲取token的方法

    本文主要介紹了Python中selenium獲取token的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python私有屬性私有方法應(yīng)用實(shí)例解析

    Python私有屬性私有方法應(yīng)用實(shí)例解析

    這篇文章主要介紹了Python私有屬性私有方法應(yīng)用場景解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Django如何批量創(chuàng)建Model

    Django如何批量創(chuàng)建Model

    將測試數(shù)據(jù)全部敲入數(shù)據(jù)庫非常繁瑣,這篇文章主要介紹了Django如何批量創(chuàng)建Model,幫助大家快速錄入數(shù)據(jù),感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)求解括號匹配問題的方法

    Python實(shí)現(xiàn)求解括號匹配問題的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)求解括號匹配問題的方法,涉及Python基于棧的字符串遍歷、判斷、運(yùn)算解決括號匹配相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python docx庫代碼演示

    Python docx庫代碼演示

    這篇文章主要介紹了Python docx庫用法,結(jié)合實(shí)例形式分析了docx庫相關(guān)的docx文件讀取、文本添加、格式操作,需要的朋友可以參考下
    2021-10-10
  • Python要求O(n)復(fù)雜度求無序列表中第K的大元素實(shí)例

    Python要求O(n)復(fù)雜度求無序列表中第K的大元素實(shí)例

    這篇文章主要介紹了Python要求O(n)復(fù)雜度求無序列表中第K的大元素實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論

鱼台县| 郎溪县| 汉寿县| 呼伦贝尔市| 大厂| 南川市| 安化县| 琼中| 那曲县| 巩留县| 黄梅县| 乌兰县| 清流县| 虞城县| 年辖:市辖区| 宝丰县| 东辽县| 丰县| 广灵县| 河南省| 达孜县| 尼玛县| 松溪县| 孝义市| 黔江区| 正镶白旗| 顺平县| 南雄市| 蕲春县| 三河市| 巨野县| 洛川县| 会同县| 诸暨市| 邻水| 阿图什市| 佛坪县| 兰坪| 平和县| 霍州市| 三门县|