blob: 646634db7c723f7f5ec05a55f551c712892003bd [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
34 number can be passed to the constructor, to, 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
165 block if the connection is blocked. May raise :exc:`socket.error` if the
166 connection is closed.
Georg Brandl116aa622007-08-15 14:28:22 +0000167
168
169.. method:: Telnet.interact()
170
171 Interaction function, emulates a very dumb Telnet client.
172
173
174.. method:: Telnet.mt_interact()
175
176 Multithreaded version of :meth:`interact`.
177
178
Georg Brandl7f01a132009-09-16 15:58:14 +0000179.. method:: Telnet.expect(list, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000180
181 Read until one from a list of a regular expressions matches.
182
183 The first argument is a list of regular expressions, either compiled
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000184 (:class:`re.RegexObject` instances) or uncompiled (byte strings). The
185 optional second argument is a timeout, in seconds; the default is to block
186 indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000187
188 Return a tuple of three items: the index in the list of the first regular
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000189 expression that matches; the match object returned; and the bytes read up
190 till and including the match.
Georg Brandl116aa622007-08-15 14:28:22 +0000191
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000192 If end of file is found and no bytes were read, raise :exc:`EOFError`.
193 Otherwise, when nothing matches, return ``(-1, None, data)`` where *data* is
194 the bytes received so far (may be empty bytes if a timeout happened).
Georg Brandl116aa622007-08-15 14:28:22 +0000195
196 If a regular expression ends with a greedy match (such as ``.*``) or if more
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000197 than one expression can match the same input, the results are
Georg Brandl6faee4e2010-09-21 14:48:28 +0000198 non-deterministic, and may depend on the I/O timing.
Georg Brandl116aa622007-08-15 14:28:22 +0000199
200
201.. method:: Telnet.set_option_negotiation_callback(callback)
202
203 Each time a telnet option is read on the input flow, this *callback* (if set) is
204 called with the following parameters : callback(telnet socket, command
205 (DO/DONT/WILL/WONT), option). No other action is done afterwards by telnetlib.
206
207
208.. _telnet-example:
209
210Telnet Example
211--------------
212
213.. sectionauthor:: Peter Funk <pf@artcom-gmbh.de>
214
215
216A simple example illustrating typical use::
217
218 import getpass
Georg Brandl116aa622007-08-15 14:28:22 +0000219 import telnetlib
220
Georg Brandl116aa622007-08-15 14:28:22 +0000221 HOST = "localhost"
Georg Brandl8d5c3922007-12-02 22:48:17 +0000222 user = input("Enter your remote account: ")
Georg Brandl116aa622007-08-15 14:28:22 +0000223 password = getpass.getpass()
224
225 tn = telnetlib.Telnet(HOST)
226
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000227 tn.read_until(b"login: ")
228 tn.write(user.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000229 if password:
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000230 tn.read_until(b"Password: ")
231 tn.write(password.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000232
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000233 tn.write(b"ls\n")
234 tn.write(b"exit\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000235
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000236 print(tn.read_all().decode('ascii'))
Georg Brandl116aa622007-08-15 14:28:22 +0000237