blob: f9c5153e3f58acffc34ac59cb3680b765c9f0819 [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.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Christian Heimes895627f2007-12-08 17:28:33 +00007.. sectionauthor:: Skip Montanaro <skip@pobox.com>
Georg Brandl116aa622007-08-15 14:28:22 +00008
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04009**Source code:** :source:`Lib/telnetlib.py`
Georg Brandl116aa622007-08-15 14:28:22 +000010
11.. index:: single: protocol; Telnet
12
Raymond Hettinger469271d2011-01-27 20:38:46 +000013--------------
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
R David Murray4f098062015-11-28 12:24:52 -050046 A :class:`Telnet` object is a context manager and can be used in a
47 :keyword:`with` statement. When the :keyword:`with` block ends, the
48 :meth:`close` method is called::
49
50 >>> from telnetlib import Telnet
51 >>> with Telnet('localhost', 23) as tn:
52 ... tn.interact()
53 ...
54
55 .. versionchanged:: 3.6 Context manager support added
56
Georg Brandl116aa622007-08-15 14:28:22 +000057
58.. seealso::
59
60 :rfc:`854` - Telnet Protocol Specification
61 Definition of the Telnet protocol.
62
63
64.. _telnet-objects:
65
66Telnet Objects
67--------------
68
69:class:`Telnet` instances have the following methods:
70
71
Georg Brandl7f01a132009-09-16 15:58:14 +000072.. method:: Telnet.read_until(expected, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +000073
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000074 Read until a given byte string, *expected*, is encountered or until *timeout*
75 seconds have passed.
Georg Brandl116aa622007-08-15 14:28:22 +000076
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000077 When no match is found, return whatever is available instead, possibly empty
78 bytes. Raise :exc:`EOFError` if the connection is closed and no cooked data
79 is available.
Georg Brandl116aa622007-08-15 14:28:22 +000080
81
82.. method:: Telnet.read_all()
83
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000084 Read all data until EOF as bytes; block until connection closed.
Georg Brandl116aa622007-08-15 14:28:22 +000085
86
87.. method:: Telnet.read_some()
88
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000089 Read at least one byte of cooked data unless EOF is hit. Return ``b''`` if
90 EOF is hit. Block if no data is immediately available.
Georg Brandl116aa622007-08-15 14:28:22 +000091
92
93.. method:: Telnet.read_very_eager()
94
95 Read everything that can be without blocking in I/O (eager).
96
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000097 Raise :exc:`EOFError` if connection closed and no cooked data available.
98 Return ``b''`` if no cooked data available otherwise. Do not block unless in
99 the midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
101
102.. method:: Telnet.read_eager()
103
104 Read readily available data.
105
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000106 Raise :exc:`EOFError` if connection closed and no cooked data available.
107 Return ``b''`` if no cooked data available otherwise. Do not block unless in
108 the midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +0000109
110
111.. method:: Telnet.read_lazy()
112
113 Process and return data already in the queues (lazy).
114
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000115 Raise :exc:`EOFError` if connection closed and no data available. Return
116 ``b''`` if no cooked data available otherwise. Do not block unless in the
117 midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +0000118
119
120.. method:: Telnet.read_very_lazy()
121
122 Return any data available in the cooked queue (very lazy).
123
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000124 Raise :exc:`EOFError` if connection closed and no data available. Return
125 ``b''`` if no cooked data available otherwise. This method never blocks.
Georg Brandl116aa622007-08-15 14:28:22 +0000126
127
128.. method:: Telnet.read_sb_data()
129
130 Return the data collected between a SB/SE pair (suboption begin/end). The
131 callback should access these data when it was invoked with a ``SE`` command.
132 This method never blocks.
133
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Georg Brandl7f01a132009-09-16 15:58:14 +0000135.. method:: Telnet.open(host, port=0[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +0000136
137 Connect to a host. The optional second argument is the port number, which
138 defaults to the standard Telnet port (23). The optional *timeout* parameter
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000139 specifies a timeout in seconds for blocking operations like the connection
Georg Brandlf78e02b2008-06-10 17:40:04 +0000140 attempt (if not specified, the global default timeout setting will be used).
Georg Brandl116aa622007-08-15 14:28:22 +0000141
142 Do not try to reopen an already connected instance.
143
Georg Brandl116aa622007-08-15 14:28:22 +0000144
Georg Brandl7f01a132009-09-16 15:58:14 +0000145.. method:: Telnet.msg(msg, *args)
Georg Brandl116aa622007-08-15 14:28:22 +0000146
147 Print a debug message when the debug level is ``>`` 0. If extra arguments are
148 present, they are substituted in the message using the standard string
149 formatting operator.
150
151
152.. method:: Telnet.set_debuglevel(debuglevel)
153
154 Set the debug level. The higher the value of *debuglevel*, the more debug
155 output you get (on ``sys.stdout``).
156
157
158.. method:: Telnet.close()
159
160 Close the connection.
161
162
163.. method:: Telnet.get_socket()
164
165 Return the socket object used internally.
166
167
168.. method:: Telnet.fileno()
169
170 Return the file descriptor of the socket object used internally.
171
172
173.. method:: Telnet.write(buffer)
174
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000175 Write a byte string to the socket, doubling any IAC characters. This can
Antoine Pitrou5574c302011-10-12 17:53:43 +0200176 block if the connection is blocked. May raise :exc:`OSError` if the
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000177 connection is closed.
Georg Brandl116aa622007-08-15 14:28:22 +0000178
Antoine Pitrou5574c302011-10-12 17:53:43 +0200179 .. versionchanged:: 3.3
180 This method used to raise :exc:`socket.error`, which is now an alias
181 of :exc:`OSError`.
182
Georg Brandl116aa622007-08-15 14:28:22 +0000183
184.. method:: Telnet.interact()
185
186 Interaction function, emulates a very dumb Telnet client.
187
188
189.. method:: Telnet.mt_interact()
190
191 Multithreaded version of :meth:`interact`.
192
193
Georg Brandl7f01a132009-09-16 15:58:14 +0000194.. method:: Telnet.expect(list, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000195
196 Read until one from a list of a regular expressions matches.
197
198 The first argument is a list of regular expressions, either compiled
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300199 (:ref:`regex objects <re-objects>`) or uncompiled (byte strings). The
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000200 optional second argument is a timeout, in seconds; the default is to block
201 indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000202
203 Return a tuple of three items: the index in the list of the first regular
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000204 expression that matches; the match object returned; and the bytes read up
205 till and including the match.
Georg Brandl116aa622007-08-15 14:28:22 +0000206
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000207 If end of file is found and no bytes were read, raise :exc:`EOFError`.
208 Otherwise, when nothing matches, return ``(-1, None, data)`` where *data* is
209 the bytes received so far (may be empty bytes if a timeout happened).
Georg Brandl116aa622007-08-15 14:28:22 +0000210
211 If a regular expression ends with a greedy match (such as ``.*``) or if more
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000212 than one expression can match the same input, the results are
Georg Brandl6faee4e2010-09-21 14:48:28 +0000213 non-deterministic, and may depend on the I/O timing.
Georg Brandl116aa622007-08-15 14:28:22 +0000214
215
216.. method:: Telnet.set_option_negotiation_callback(callback)
217
218 Each time a telnet option is read on the input flow, this *callback* (if set) is
Serhiy Storchakaf47036c2013-12-24 11:04:36 +0200219 called with the following parameters: callback(telnet socket, command
Georg Brandl116aa622007-08-15 14:28:22 +0000220 (DO/DONT/WILL/WONT), option). No other action is done afterwards by telnetlib.
221
222
223.. _telnet-example:
224
225Telnet Example
226--------------
227
228.. sectionauthor:: Peter Funk <pf@artcom-gmbh.de>
229
230
231A simple example illustrating typical use::
232
233 import getpass
Georg Brandl116aa622007-08-15 14:28:22 +0000234 import telnetlib
235
Georg Brandl116aa622007-08-15 14:28:22 +0000236 HOST = "localhost"
Georg Brandl8d5c3922007-12-02 22:48:17 +0000237 user = input("Enter your remote account: ")
Georg Brandl116aa622007-08-15 14:28:22 +0000238 password = getpass.getpass()
239
240 tn = telnetlib.Telnet(HOST)
241
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000242 tn.read_until(b"login: ")
243 tn.write(user.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000244 if password:
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000245 tn.read_until(b"Password: ")
246 tn.write(password.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000247
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000248 tn.write(b"ls\n")
249 tn.write(b"exit\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000250
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000251 print(tn.read_all().decode('ascii'))
Georg Brandl116aa622007-08-15 14:28:22 +0000252