blob: 4040f72ee8665deb679738430d8863ed696c9e38 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`telnetlib` --- Telnet client
2==================================
3
4.. module:: telnetlib
5 :synopsis: Telnet client class.
Christian Heimes895627f2007-12-08 17:28:33 +00006.. sectionauthor:: Skip Montanaro <skip@pobox.com>
Georg Brandl116aa622007-08-15 14:28:22 +00007
8
9.. index:: single: protocol; Telnet
10
Raymond Hettinger469271d2011-01-27 20:38:46 +000011**Source code:** :source:`Lib/telnetlib.py`
12
13--------------
14
Georg Brandl116aa622007-08-15 14:28:22 +000015The :mod:`telnetlib` module provides a :class:`Telnet` class that implements the
16Telnet protocol. See :rfc:`854` for details about the protocol. In addition, it
17provides symbolic constants for the protocol characters (see below), and for the
18telnet options. The symbolic names of the telnet options follow the definitions
19in ``arpa/telnet.h``, with the leading ``TELOPT_`` removed. For symbolic names
20of options which are traditionally not included in ``arpa/telnet.h``, see the
21module source itself.
22
23The symbolic constants for the telnet commands are: IAC, DONT, DO, WONT, WILL,
24SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK (Break), IP
25(Interrupt process), AO (Abort output), AYT (Are You There), EC (Erase
26Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin).
27
28
Georg Brandl7f01a132009-09-16 15:58:14 +000029.. class:: Telnet(host=None, port=0[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +000030
31 :class:`Telnet` represents a connection to a Telnet server. The instance is
32 initially not connected by default; the :meth:`open` method must be used to
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000033 establish a connection. Alternatively, the host name and optional port
Tim Goldenfe5ac522015-04-08 16:52:27 +010034 number can be passed to the constructor too, in which case the connection to
Georg Brandld25a5da2010-05-21 21:33:23 +000035 the server will be established before the constructor returns. The optional
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000036 *timeout* parameter specifies a timeout in seconds for blocking operations
Georg Brandld25a5da2010-05-21 21:33:23 +000037 like the connection attempt (if not specified, the global default timeout
38 setting will be used).
Georg Brandl116aa622007-08-15 14:28:22 +000039
40 Do not reopen an already connected instance.
41
42 This class has many :meth:`read_\*` methods. Note that some of them raise
43 :exc:`EOFError` when the end of the connection is read, because they can return
44 an empty string for other reasons. See the individual descriptions below.
45
Georg Brandl116aa622007-08-15 14:28:22 +000046
47.. seealso::
48
49 :rfc:`854` - Telnet Protocol Specification
50 Definition of the Telnet protocol.
51
52
53.. _telnet-objects:
54
55Telnet Objects
56--------------
57
58:class:`Telnet` instances have the following methods:
59
60
Georg Brandl7f01a132009-09-16 15:58:14 +000061.. method:: Telnet.read_until(expected, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +000062
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000063 Read until a given byte string, *expected*, is encountered or until *timeout*
64 seconds have passed.
Georg Brandl116aa622007-08-15 14:28:22 +000065
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000066 When no match is found, return whatever is available instead, possibly empty
67 bytes. Raise :exc:`EOFError` if the connection is closed and no cooked data
68 is available.
Georg Brandl116aa622007-08-15 14:28:22 +000069
70
71.. method:: Telnet.read_all()
72
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000073 Read all data until EOF as bytes; block until connection closed.
Georg Brandl116aa622007-08-15 14:28:22 +000074
75
76.. method:: Telnet.read_some()
77
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000078 Read at least one byte of cooked data unless EOF is hit. Return ``b''`` if
79 EOF is hit. Block if no data is immediately available.
Georg Brandl116aa622007-08-15 14:28:22 +000080
81
82.. method:: Telnet.read_very_eager()
83
84 Read everything that can be without blocking in I/O (eager).
85
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000086 Raise :exc:`EOFError` if connection closed and no cooked data available.
87 Return ``b''`` if no cooked data available otherwise. Do not block unless in
88 the midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +000089
90
91.. method:: Telnet.read_eager()
92
93 Read readily available data.
94
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000095 Raise :exc:`EOFError` if connection closed and no cooked data available.
96 Return ``b''`` if no cooked data available otherwise. Do not block unless in
97 the midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +000098
99
100.. method:: Telnet.read_lazy()
101
102 Process and return data already in the queues (lazy).
103
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000104 Raise :exc:`EOFError` if connection closed and no data available. Return
105 ``b''`` if no cooked data available otherwise. Do not block unless in the
106 midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +0000107
108
109.. method:: Telnet.read_very_lazy()
110
111 Return any data available in the cooked queue (very lazy).
112
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000113 Raise :exc:`EOFError` if connection closed and no data available. Return
114 ``b''`` if no cooked data available otherwise. This method never blocks.
Georg Brandl116aa622007-08-15 14:28:22 +0000115
116
117.. method:: Telnet.read_sb_data()
118
119 Return the data collected between a SB/SE pair (suboption begin/end). The
120 callback should access these data when it was invoked with a ``SE`` command.
121 This method never blocks.
122
Georg Brandl116aa622007-08-15 14:28:22 +0000123
Georg Brandl7f01a132009-09-16 15:58:14 +0000124.. method:: Telnet.open(host, port=0[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126 Connect to a host. The optional second argument is the port number, which
127 defaults to the standard Telnet port (23). The optional *timeout* parameter
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000128 specifies a timeout in seconds for blocking operations like the connection
Georg Brandlf78e02b2008-06-10 17:40:04 +0000129 attempt (if not specified, the global default timeout setting will be used).
Georg Brandl116aa622007-08-15 14:28:22 +0000130
131 Do not try to reopen an already connected instance.
132
Georg Brandl116aa622007-08-15 14:28:22 +0000133
Georg Brandl7f01a132009-09-16 15:58:14 +0000134.. method:: Telnet.msg(msg, *args)
Georg Brandl116aa622007-08-15 14:28:22 +0000135
136 Print a debug message when the debug level is ``>`` 0. If extra arguments are
137 present, they are substituted in the message using the standard string
138 formatting operator.
139
140
141.. method:: Telnet.set_debuglevel(debuglevel)
142
143 Set the debug level. The higher the value of *debuglevel*, the more debug
144 output you get (on ``sys.stdout``).
145
146
147.. method:: Telnet.close()
148
149 Close the connection.
150
151
152.. method:: Telnet.get_socket()
153
154 Return the socket object used internally.
155
156
157.. method:: Telnet.fileno()
158
159 Return the file descriptor of the socket object used internally.
160
161
162.. method:: Telnet.write(buffer)
163
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000164 Write a byte string to the socket, doubling any IAC characters. This can
Antoine Pitrou5574c302011-10-12 17:53:43 +0200165 block if the connection is blocked. May raise :exc:`OSError` if the
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000166 connection is closed.
Georg Brandl116aa622007-08-15 14:28:22 +0000167
Antoine Pitrou5574c302011-10-12 17:53:43 +0200168 .. versionchanged:: 3.3
169 This method used to raise :exc:`socket.error`, which is now an alias
170 of :exc:`OSError`.
171
Georg Brandl116aa622007-08-15 14:28:22 +0000172
173.. method:: Telnet.interact()
174
175 Interaction function, emulates a very dumb Telnet client.
176
177
178.. method:: Telnet.mt_interact()
179
180 Multithreaded version of :meth:`interact`.
181
182
Georg Brandl7f01a132009-09-16 15:58:14 +0000183.. method:: Telnet.expect(list, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000184
185 Read until one from a list of a regular expressions matches.
186
187 The first argument is a list of regular expressions, either compiled
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300188 (:ref:`regex objects <re-objects>`) or uncompiled (byte strings). The
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000189 optional second argument is a timeout, in seconds; the default is to block
190 indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000191
192 Return a tuple of three items: the index in the list of the first regular
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000193 expression that matches; the match object returned; and the bytes read up
194 till and including the match.
Georg Brandl116aa622007-08-15 14:28:22 +0000195
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000196 If end of file is found and no bytes were read, raise :exc:`EOFError`.
197 Otherwise, when nothing matches, return ``(-1, None, data)`` where *data* is
198 the bytes received so far (may be empty bytes if a timeout happened).
Georg Brandl116aa622007-08-15 14:28:22 +0000199
200 If a regular expression ends with a greedy match (such as ``.*``) or if more
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000201 than one expression can match the same input, the results are
Georg Brandl6faee4e2010-09-21 14:48:28 +0000202 non-deterministic, and may depend on the I/O timing.
Georg Brandl116aa622007-08-15 14:28:22 +0000203
204
205.. method:: Telnet.set_option_negotiation_callback(callback)
206
207 Each time a telnet option is read on the input flow, this *callback* (if set) is
Serhiy Storchakaf47036c2013-12-24 11:04:36 +0200208 called with the following parameters: callback(telnet socket, command
Georg Brandl116aa622007-08-15 14:28:22 +0000209 (DO/DONT/WILL/WONT), option). No other action is done afterwards by telnetlib.
210
211
212.. _telnet-example:
213
214Telnet Example
215--------------
216
217.. sectionauthor:: Peter Funk <pf@artcom-gmbh.de>
218
219
220A simple example illustrating typical use::
221
222 import getpass
Georg Brandl116aa622007-08-15 14:28:22 +0000223 import telnetlib
224
Georg Brandl116aa622007-08-15 14:28:22 +0000225 HOST = "localhost"
Georg Brandl8d5c3922007-12-02 22:48:17 +0000226 user = input("Enter your remote account: ")
Georg Brandl116aa622007-08-15 14:28:22 +0000227 password = getpass.getpass()
228
229 tn = telnetlib.Telnet(HOST)
230
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000231 tn.read_until(b"login: ")
232 tn.write(user.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000233 if password:
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000234 tn.read_until(b"Password: ")
235 tn.write(password.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000236
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000237 tn.write(b"ls\n")
238 tn.write(b"exit\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000239
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000240 print(tn.read_all().decode('ascii'))
Georg Brandl116aa622007-08-15 14:28:22 +0000241