簡介
telnetlib模塊提供的Telnet類實現了Telnet協議(參見rfc854)。它爲協議字符和telnet選項提供符號常量,符號常量來源於arpa/telnet.h,去掉了前綴TELOPT_。
telnet命令有: IAC, DONT, DO, WONT, WILL, SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK (Break), IP (Interrupt process), AO (Abort output), AYT (Are You There), EC (Erase Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin)。
class telnetlib.Telnet(host=None, port=0[, timeout])
快速入門
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author Rongzhong Xu 2016-08-25 wechat: pythontesting
"""
Name: telnet_demo.py
Tesed in python3.5
"""
import telnetlib
HOST = "172.17.100.18"
user = "test"
password = "123456"
def command(con, flag, str_=""):
data = con.read_until(flag.encode())
print(data.decode(errors='ignore'))
con.write(str_.encode() + b"\n")
return data
tn = telnetlib.Telnet(HOST)
command(tn, "login: ", user)
if password:
command(tn, "Password: ", password)
command(tn, "$", "ls")
command(tn, "$", " exit")
command(tn, "$", "")
tn.close()
執行結果:
$ python3 telnet_demo.py
CentOS release 6.7 (Final)
Kernel 2.6.32-573.18.1.el6.x86_64 on an x86_64
login:
Password:
Last login: Thu Aug 25 17:20:18 from 172.17.153.6
[test@public01 ~]$
ls
[test@public01 ~]$
exit
logout
參考資料
- python測試等IT技術支持qq羣: 144081101(後期會錄製視頻存在該羣羣文件) 591302926 567351477
- 本文最新版本地址
- 本文涉及的python測試開發庫 謝謝點贊!
- 本文相關海量書籍下載
- python官方文檔:https://docs.python.org/3/library/telnetlib.html
- effbot: http://effbot.org/librarybook/telnetlib.htm
- rfc854: https://tools.ietf.org/html/rfc854.html
方法
- Telnet.read_until(expected[, timeout])
讀取直到遇到了給定的字符串expected或超時秒數。
當找不到匹配時,返回讀取內容。連接關閉或者沒有數據時觸發EOFError異常。
- Telnet.read_all()
讀取所有數據直到EOF,阻塞直到連接關閉。
- Telnet.read_some()
讀取至少一個字節的數據,除非EOF。 如果沒有數據則阻塞。
- Telnet.read_very_eager()
非阻塞地讀取。連接關閉或者沒有數據時觸發EOFError異常。返回b''如果沒有數據,
- Telnet.read_eager()
讀取的已有數據。(快)
連接關閉或者沒有數據時觸發EOFError異常。返回b''如果沒有數據,
- Telnet.read_lazy()
讀取的已有數據(懶)
連接關閉或者沒有數據時觸發EOFError異常。返回b''如果沒有數據,
- Telnet.read_very_lazy()
讀取的已有數據(很懶)
連接關閉或者沒有數據時觸發EOFError異常。返回b''如果沒有數據,
- Telnet.read_sb_data()
返回的SB/SE pair (suboption begin/end)之間的數據。此方法永遠不會阻塞。
- Telnet.open(host[, port[, timeout]])
連接到主機。可選的第二個參數是默認爲標準的 Telnet 端口 (23) 的端口號。可選的超時參數指定以秒計) 阻塞操作 (如連接嘗試超時 (如果不指定,將使用全局默認超時設置)。
- Telnet.msg(msg[, *args])
當調試級別爲> 0 打印調試消息。
- Telnet.set_debuglevel(debuglevel)
設置調試級別。debuglevel越高信息越多。
- Telnet.close()
關閉該連接。
- Telnet.get_socket()
返回套接字供內部使用。
- Telnet.fileno()
返回套接字對象內部使用的文件描述符。
- Telnet.write(buffer)
寫入字符串到套接字,加倍 IAC 的任何字符。連接關閉是可能觸發OSError異常。
- Telnet.interact()
交由用戶控制。
- Telnet.mt_interact()
多線程的版本的interact()。
- Telnet.expect(list[, timeout])
讀取直到匹配正則表達式項列表中的一個。
list是一個正則表達式列表,包含編譯(regex 對象)或未編譯(字節字符串)。timeout以秒爲單位, 默認值爲無限期阻塞。
返回元組的三個項目: index爲匹配正則表達式的位置;match 對象;此時讀了的字節。
文件結尾或沒有數據時觸發EOFError異常,不匹配時返回(-1, None, data)。
如果正則表達式是貪婪模式或者如果多個表達式可以匹配相同的輸入,結果是不確定的,可能取決於I/O定時。
- Telnet.set_option_negotiation_callback(callback)
每次從輸入流讀取telnet選項時,調用callback(telnet socket, command (DO/DONT/WILL/WONT), option),後續步驟不會執行。