blob: 102a42a24cc9159f2937b9a3b44fa7129478a2d4 [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
11The :mod:`telnetlib` module provides a :class:`Telnet` class that implements the
12Telnet protocol. See :rfc:`854` for details about the protocol. In addition, it
13provides symbolic constants for the protocol characters (see below), and for the
14telnet options. The symbolic names of the telnet options follow the definitions
15in ``arpa/telnet.h``, with the leading ``TELOPT_`` removed. For symbolic names
16of options which are traditionally not included in ``arpa/telnet.h``, see the
17module source itself.
18
19The symbolic constants for the telnet commands are: IAC, DONT, DO, WONT, WILL,
20SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK (Break), IP
21(Interrupt process), AO (Abort output), AYT (Are You There), EC (Erase
22Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin).
23
24
Georg Brandlb044b2a2009-09-16 16:05:59 +000025.. class:: Telnet(host=None, port=0[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +000026
27 :class:`Telnet` represents a connection to a Telnet server. The instance is
28 initially not connected by default; the :meth:`open` method must be used to
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000029 establish a connection. Alternatively, the host name and optional port
30 number can be passed to the constructor, to, in which case the connection to
Georg Brandlc7afb622010-05-21 21:33:56 +000031 the server will be established before the constructor returns. The optional
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000032 *timeout* parameter specifies a timeout in seconds for blocking operations
Georg Brandlc7afb622010-05-21 21:33:56 +000033 like the connection attempt (if not specified, the global default timeout
34 setting will be used).
Georg Brandl116aa622007-08-15 14:28:22 +000035
36 Do not reopen an already connected instance.
37
38 This class has many :meth:`read_\*` methods. Note that some of them raise
39 :exc:`EOFError` when the end of the connection is read, because they can return
40 an empty string for other reasons. See the individual descriptions below.
41
Georg Brandl116aa622007-08-15 14:28:22 +000042
43.. seealso::
44
45 :rfc:`854` - Telnet Protocol Specification
46 Definition of the Telnet protocol.
47
48
49.. _telnet-objects:
50
51Telnet Objects
52--------------
53
54:class:`Telnet` instances have the following methods:
55
56
Georg Brandlb044b2a2009-09-16 16:05:59 +000057.. method:: Telnet.read_until(expected, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +000058
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000059 Read until a given byte string, *expected*, is encountered or until *timeout*
60 seconds have passed.
Georg Brandl116aa622007-08-15 14:28:22 +000061
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000062 When no match is found, return whatever is available instead, possibly empty
63 bytes. Raise :exc:`EOFError` if the connection is closed and no cooked data
64 is available.
Georg Brandl116aa622007-08-15 14:28:22 +000065
66
67.. method:: Telnet.read_all()
68
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000069 Read all data until EOF as bytes; block until connection closed.
Georg Brandl116aa622007-08-15 14:28:22 +000070
71
72.. method:: Telnet.read_some()
73
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000074 Read at least one byte of cooked data unless EOF is hit. Return ``b''`` if
75 EOF is hit. Block if no data is immediately available.
Georg Brandl116aa622007-08-15 14:28:22 +000076
77
78.. method:: Telnet.read_very_eager()
79
80 Read everything that can be without blocking in I/O (eager).
81
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000082 Raise :exc:`EOFError` if connection closed and no cooked data available.
83 Return ``b''`` if no cooked data available otherwise. Do not block unless in
84 the midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +000085
86
87.. method:: Telnet.read_eager()
88
89 Read readily available data.
90
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +000091 Raise :exc:`EOFError` if connection closed and no cooked data available.
92 Return ``b''`` if no cooked data available otherwise. Do not block unless in
93 the midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +000094
95
96.. method:: Telnet.read_lazy()
97
98 Process and return data already in the queues (lazy).
99
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000100 Raise :exc:`EOFError` if connection closed and no data available. Return
101 ``b''`` if no cooked data available otherwise. Do not block unless in the
102 midst of an IAC sequence.
Georg Brandl116aa622007-08-15 14:28:22 +0000103
104
105.. method:: Telnet.read_very_lazy()
106
107 Return any data available in the cooked queue (very lazy).
108
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000109 Raise :exc:`EOFError` if connection closed and no data available. Return
110 ``b''`` if no cooked data available otherwise. This method never blocks.
Georg Brandl116aa622007-08-15 14:28:22 +0000111
112
113.. method:: Telnet.read_sb_data()
114
115 Return the data collected between a SB/SE pair (suboption begin/end). The
116 callback should access these data when it was invoked with a ``SE`` command.
117 This method never blocks.
118
Georg Brandl116aa622007-08-15 14:28:22 +0000119
Georg Brandlb044b2a2009-09-16 16:05:59 +0000120.. method:: Telnet.open(host, port=0[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +0000121
122 Connect to a host. The optional second argument is the port number, which
123 defaults to the standard Telnet port (23). The optional *timeout* parameter
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +0000124 specifies a timeout in seconds for blocking operations like the connection
Georg Brandlf78e02b2008-06-10 17:40:04 +0000125 attempt (if not specified, the global default timeout setting will be used).
Georg Brandl116aa622007-08-15 14:28:22 +0000126
127 Do not try to reopen an already connected instance.
128
Georg Brandl116aa622007-08-15 14:28:22 +0000129
Georg Brandlb044b2a2009-09-16 16:05:59 +0000130.. method:: Telnet.msg(msg, *args)
Georg Brandl116aa622007-08-15 14:28:22 +0000131
132 Print a debug message when the debug level is ``>`` 0. If extra arguments are
133 present, they are substituted in the message using the standard string
134 formatting operator.
135
136
137.. method:: Telnet.set_debuglevel(debuglevel)
138
139 Set the debug level. The higher the value of *debuglevel*, the more debug
140 output you get (on ``sys.stdout``).
141
142
143.. method:: Telnet.close()
144
145 Close the connection.
146
147
148.. method:: Telnet.get_socket()
149
150 Return the socket object used internally.
151
152
153.. method:: Telnet.fileno()
154
155 Return the file descriptor of the socket object used internally.
156
157
158.. method:: Telnet.write(buffer)
159
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000160 Write a byte string to the socket, doubling any IAC characters. This can
161 block if the connection is blocked. May raise :exc:`socket.error` if the
162 connection is closed.
Georg Brandl116aa622007-08-15 14:28:22 +0000163
164
165.. method:: Telnet.interact()
166
167 Interaction function, emulates a very dumb Telnet client.
168
169
170.. method:: Telnet.mt_interact()
171
172 Multithreaded version of :meth:`interact`.
173
174
Georg Brandlb044b2a2009-09-16 16:05:59 +0000175.. method:: Telnet.expect(list, timeout=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000176
177 Read until one from a list of a regular expressions matches.
178
179 The first argument is a list of regular expressions, either compiled
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000180 (:class:`re.RegexObject` instances) or uncompiled (byte strings). The
181 optional second argument is a timeout, in seconds; the default is to block
182 indefinitely.
Georg Brandl116aa622007-08-15 14:28:22 +0000183
184 Return a tuple of three items: the index in the list of the first regular
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000185 expression that matches; the match object returned; and the bytes read up
186 till and including the match.
Georg Brandl116aa622007-08-15 14:28:22 +0000187
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000188 If end of file is found and no bytes were read, raise :exc:`EOFError`.
189 Otherwise, when nothing matches, return ``(-1, None, data)`` where *data* is
190 the bytes received so far (may be empty bytes if a timeout happened).
Georg Brandl116aa622007-08-15 14:28:22 +0000191
192 If a regular expression ends with a greedy match (such as ``.*``) or if more
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000193 than one expression can match the same input, the results are
194 indeterministic, and may depend on the I/O timing.
Georg Brandl116aa622007-08-15 14:28:22 +0000195
196
197.. method:: Telnet.set_option_negotiation_callback(callback)
198
199 Each time a telnet option is read on the input flow, this *callback* (if set) is
200 called with the following parameters : callback(telnet socket, command
201 (DO/DONT/WILL/WONT), option). No other action is done afterwards by telnetlib.
202
203
204.. _telnet-example:
205
206Telnet Example
207--------------
208
209.. sectionauthor:: Peter Funk <pf@artcom-gmbh.de>
210
211
212A simple example illustrating typical use::
213
214 import getpass
Georg Brandl116aa622007-08-15 14:28:22 +0000215 import telnetlib
216
Georg Brandl116aa622007-08-15 14:28:22 +0000217 HOST = "localhost"
Georg Brandl8d5c3922007-12-02 22:48:17 +0000218 user = input("Enter your remote account: ")
Georg Brandl116aa622007-08-15 14:28:22 +0000219 password = getpass.getpass()
220
221 tn = telnetlib.Telnet(HOST)
222
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000223 tn.read_until(b"login: ")
224 tn.write(user.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000225 if password:
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000226 tn.read_until(b"Password: ")
227 tn.write(password.encode('ascii') + b"\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000228
Benjamin Peterson3de7fb82008-10-15 20:54:24 +0000229 tn.write(b"ls\n")
230 tn.write(b"exit\n")
Georg Brandl116aa622007-08-15 14:28:22 +0000231
Benjamin Petersonaaebe1c2008-10-15 22:28:54 +0000232 print(tn.read_all().decode('ascii'))
Georg Brandl116aa622007-08-15 14:28:22 +0000233