[雪峯磁針石博客]python庫介紹-telnetlib:Telnet客戶端

簡介

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

參考資料

方法

  • 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),後續步驟不會執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章