2 TC: A Tor control protocol (Version 1)
6 This document describes an implementation-specific protocol that is used
7 for other programs (such as frontend user-interfaces) to communicate with a
8 locally running Tor process. It is not part of the Tor onion routing
11 This protocol replaces version 0 of TC, which is now deprecated. For
12 reference, TC is described in "control-spec-v0.txt". Implementors are
13 recommended to avoid using TC directly, but instead to use a library that
14 can easily be updated to use the newer protocol. (Version 0 is used by Tor
15 versions 0.1.0.x; the protocol in this document only works with Tor
16 versions in the 0.1.1.x series and later.)
18 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
19 NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
20 "OPTIONAL" in this document are to be interpreted as described in
25 TC is a bidirectional message-based protocol. It assumes an underlying
26 stream for communication between a controlling process (the "client"
27 or "controller") and a Tor process (or "server"). The stream may be
28 implemented via TCP, TLS-over-TCP, a Unix-domain socket, or so on,
29 but it must provide reliable in-order delivery. For security, the
30 stream should not be accessible by untrusted parties.
32 In TC, the client and server send typed messages to each other over the
33 underlying stream. The client sends "commands" and the server sends
36 By default, all messages from the server are in response to messages from
37 the client. Some client requests, however, will cause the server to send
38 messages to the client indefinitely far into the future. Such
39 "asynchronous" replies are marked as such.
41 Servers respond to messages in the order messages are received.
43 1.1. Forward-compatibility
45 This is an evolving protocol; new client and server behavior will be
46 allowed in future versions. To allow new backward-compatible client
47 on behalf of the client, we may add new commands and allow existing
48 commands to take new arguments in future versions. To allow new
49 backward-compatible server behavior, we note various places below
50 where servers speaking a future versions of this protocol may insert
51 new data, and note that clients should/must "tolerate" unexpected
52 elements in these places. There are two ways that we do this:
54 * Adding a new field to a message:
56 For example, we might say "This message has three space-separated
57 fields; clients MUST tolerate more fields." This means that a
58 client MUST NOT crash or otherwise fail to parse the message or
59 other subsequent messages when there are more than three fields, and
60 that it SHOULD function at least as well when more fields are
61 provided as it does when it only gets the fields it accepts. The
62 most obvious way to do this is by ignoring additional fields; the
63 next-most-obvious way is to report additional fields verbatim to the
64 user, perhaps as part of an expert UI.
66 * Adding a new possible value to a list of alternatives:
68 For example, we might say "This field will be OPEN, CLOSED, or
69 CONNECTED. Clients MUST tolerate unexpected values." This means
70 that a client MUST NOT crash or otherwise fail to parse the message
71 or other subsequent when there are unexpected values, and that the
72 client SHOULD try to handle the rest of the message as well as it
73 can. The most obvious way to do this is by pretending that each
74 list of alternatives has an additional "unrecognized value" element,
75 and mapping any unrecognized values to that element; the
76 next-most-obvious way is to create a separate "unrecognized value"
77 element for each unrecognized value.
79 Clients SHOULD NOT "tolerate" unrecognized alternatives by
80 pretending that the message containing them is absent. For example,
81 a stream closed for an unrecognized reason is nevertheless closed,
82 and should be reported as such.
86 2.1. Description format
88 The message formats listed below use ABNF as described in RFC 2234.
89 The protocol itself is loosely based on SMTP (see RFC 2821).
91 We use the following nonterminals from RFC 2822: atom, qcontent
93 We define the following general-use nonterminals:
95 String = DQUOTE *qcontent DQUOTE
97 There are explicitly no limits on line length. All 8-bit characters are
98 permitted unless explicitly disallowed.
100 Wherever CRLF is specified to be accepted from the controller, Tor MAY also
101 accept LF. Tor, however, MUST NOT generate LF instead of CRLF.
102 Controllers SHOULD always send CRLF.
104 2.2. Commands from controller to Tor
106 Command = Keyword OptArguments CRLF / "+" Keyword OptArguments CRLF CmdData
108 OptArguments = [ SP *(SP / VCHAR) ]
110 A command is either a single line containing a Keyword and arguments, or a
111 multiline command whose initial keyword begins with +, and whose data
112 section ends with a single "." on a line of its own. (We use a special
113 character to distinguish multiline commands so that Tor can correctly parse
114 multi-line commands that it does not recognize.) Specific commands and
115 their arguments are described below in section 3.
117 2.3. Replies from Tor to the controller
119 Reply = SyncReply / AsyncReply
120 SyncReply = *(MidReplyLine / DataReplyLine) EndReplyLine
121 AsyncReply = *(MidReplyLine / DataReplyLine) EndReplyLine
123 MidReplyLine = StatusCode "-" ReplyLine
124 DataReplyLine = StatusCode "+" ReplyLine Data
125 EndReplyLine = StatusCode SP ReplyLine
126 ReplyLine = [ReplyText] CRLF
130 Specific replies are mentioned below in section 3, and described more fully
133 [Compatibility note: versions of Tor before 0.2.0.3-alpha sometimes
134 generate AsyncReplies of the form "*(MidReplyLine / DataReplyLine)".
135 This is incorrect, but controllers that need to work with these
136 versions of Tor should be prepared to get multi-line AsyncReplies with
137 the final line (usually "650 OK") omitted.]
139 2.4. General-use tokens
141 ; CRLF means, "the ASCII Carriage Return character (decimal value 13)
142 ; followed by the ASCII Linefeed character (decimal value 10)."
145 ; How a controller tells Tor about a particular OR. There are four
147 ; $Fingerprint -- The router whose identity key hashes to the fingerprint.
148 ; This is the preferred way to refer to an OR.
149 ; $Fingerprint~Nickname -- The router whose identity key hashes to the
150 ; given fingerprint, but only if the router has the given nickname.
151 ; $Fingerprint=Nickname -- The router whose identity key hashes to the
152 ; given fingerprint, but only if the router is Named and has the given
154 ; Nickname -- The Named router with the given nickname, or, if no such
155 ; router exists, any router whose nickname matches the one given.
156 ; This is not a safe way to refer to routers, since Named status
157 ; could under some circumstances change over time.
159 ; The tokens that implement the above follow:
161 ServerSpec = LongName / Nickname
162 LongName = Fingerprint [ ( "=" / "~" ) Nickname ]
164 Fingerprint = "$" 40*HEXDIG
165 NicknameChar = "a"-"z" / "A"-"Z" / "0" - "9"
166 Nickname = 1*19 NicknameChar
168 ; What follows is an outdated way to refer to ORs.
169 ; Feature VERBOSE_NAMES replaces ServerID with LongName in events and
170 ; GETINFO results. VERBOSE_NAMES can be enabled starting in Tor version
171 ; 0.1.2.2-alpha and it is always-on in 0.2.2.1-alpha and later.
172 ServerID = Nickname / Fingerprint
175 ; Unique identifiers for streams or circuits. Currently, Tor only
176 ; uses digits, but this may change
177 StreamID = 1*16 IDChar
178 CircuitID = 1*16 IDChar
179 IDChar = ALPHA / DIGIT
181 Address = ip4-address / ip6-address / hostname (XXXX Define these)
183 ; A "CmdData" section is a sequence of octets concluded by the terminating
184 ; sequence CRLF "." CRLF. The terminating sequence may not appear in the
185 ; body of the data. Leading periods on lines in the data are escaped with
186 ; an additional leading period as in RFC 2821 section 4.5.2.
187 CmdData = *DataLine "." CRLF
188 DataLine = CRLF / "." 1*LineItem CRLF / NonDotItem *LineItem CRLF
189 LineItem = NonCR / 1*CR NonCRLF
190 NonDotItem = NonDotCR / 1*CR NonCRLF
192 ; ISOTime, ISOTime2, and ISOTime2Frac are time formats as specified in
194 ; example ISOTime: "2012-01-11 12:15:33"
195 ; example ISOTime2: "2012-01-11T12:15:33"
196 ; example ISOTime2Frac: "2012-01-11T12:15:33.51"
197 IsoDatePart = 4*DIGIT "-" 2*DIGIT "-" 2*DIGIT
198 IsoTimePart = 2*DIGIT ":" 2*DIGIT ":" 2*DIGIT
199 ISOTime = IsoDatePart " " IsoTimePart
200 ISOTime2 = IsoDatePart "T" IsoTimePart
201 ISOTime2Frac = IsoTime2 [ "." 1*DIGIT ]
205 All commands are case-insensitive, but most keywords are case-sensitive.
209 Change the value of one or more configuration variables. The syntax is:
211 "SETCONF" 1*(SP keyword ["=" value]) CRLF
212 value = String / QuotedString
214 Tor behaves as though it had just read each of the key-value pairs
215 from its configuration file. Keywords with no corresponding values have
216 their configuration values reset to 0 or NULL (use RESETCONF if you want
217 to set it back to its default). SETCONF is all-or-nothing: if there
218 is an error in any of the configuration settings, Tor sets none of them.
220 Tor responds with a "250 configuration values set" reply on success.
221 If some of the listed keywords can't be found, Tor replies with a
222 "552 Unrecognized option" message. Otherwise, Tor responds with a
223 "513 syntax error in configuration values" reply on syntax error, or a
224 "553 impossible configuration setting" reply on a semantic error.
226 Some configuration options (e.g. "Bridge") take multiple values. Also,
227 some configuration keys (e.g. for hidden services and for entry
228 guard lists) form a context-sensitive group where order matters (see
229 GETCONF below). In these cases, setting _any_ of the options in a
230 SETCONF command is taken to reset all of the others. For example,
231 if two ORListenAddress values are configured, and a SETCONF command
232 arrives containing a single ORListenAddress value, the new command's
233 value replaces the two old values.
235 Sometimes it is not possible to change configuration options solely by
236 issuing a series of SETCONF commands, because the value of one of the
237 configuration options depends on the value of another which has not yet
238 been set. Such situations can be overcome by setting multiple configuration
239 options with a single SETCONF command (e.g. SETCONF ORPort=443
240 ORListenAddress=9001).
244 Remove all settings for a given configuration option entirely, assign
245 its default value (if any), and then assign the String provided.
246 Typically the String is left empty, to simply set an option back to
247 its default. The syntax is:
249 "RESETCONF" 1*(SP keyword ["=" String]) CRLF
251 Otherwise it behaves like SETCONF above.
255 Request the value of a configuration variable. The syntax is:
257 "GETCONF" 1*(SP keyword) CRLF
259 If all of the listed keywords exist in the Tor configuration, Tor replies
260 with a series of reply lines of the form:
262 If any option is set to a 'default' value semantically different from an
263 empty string, Tor may reply with a reply line of the form:
266 Value may be a raw value or a quoted string. Tor will try to use
267 unquoted values except when the value could be misinterpreted through
270 If some of the listed keywords can't be found, Tor replies with a
271 "552 unknown configuration keyword" message.
273 If an option appears multiple times in the configuration, all of its
274 key-value pairs are returned in order.
276 Some options are context-sensitive, and depend on other options with
277 different keywords. These cannot be fetched directly. Currently there
278 is only one such option: clients should use the "HiddenServiceOptions"
279 virtual keyword to get all HiddenServiceDir, HiddenServicePort,
280 HiddenServiceVersion, and HiddenserviceAuthorizeClient option settings.
284 Request the server to inform the client about interesting events. The
287 "SETEVENTS" [SP "EXTENDED"] *(SP EventCode) CRLF
289 EventCode = "CIRC" / "STREAM" / "ORCONN" / "BW" / "DEBUG" /
290 "INFO" / "NOTICE" / "WARN" / "ERR" / "NEWDESC" / "ADDRMAP" /
291 "AUTHDIR_NEWDESCS" / "DESCCHANGED" / "STATUS_GENERAL" /
292 "STATUS_CLIENT" / "STATUS_SERVER" / "GUARD" / "NS" / "STREAM_BW" /
293 "CLIENTS_SEEN" / "NEWCONSENSUS" / "BUILDTIMEOUT_SET" / "SIGNAL" /
294 "CONF_CHANGED" / "CIRC_MINOR"
296 Any events *not* listed in the SETEVENTS line are turned off; thus, sending
297 SETEVENTS with an empty body turns off all event reporting.
299 The server responds with a "250 OK" reply on success, and a "552
300 Unrecognized event" reply if one of the event codes isn't recognized. (On
301 error, the list of active event codes isn't changed.)
303 If the flag string "EXTENDED" is provided, Tor may provide extra
304 information with events for this connection; see 4.1 for more information.
305 NOTE: All events on a given connection will be provided in extended format,
307 NOTE: "EXTENDED" was first supported in Tor 0.1.1.9-alpha; it is
308 always-on in Tor 0.2.2.1-alpha and later.
310 Each event is described in more detail in Section 4.1.
314 Sent from the client to the server. The syntax is:
315 "AUTHENTICATE" [ SP 1*HEXDIG / QuotedString ] CRLF
317 The server responds with "250 OK" on success or "515 Bad authentication" if
318 the authentication cookie is incorrect. Tor closes the connection on an
319 authentication failure.
321 The authentication token can be specified as either a quoted ASCII string,
322 or as an unquoted hexadecimal encoding of that same string (to avoid escaping
325 For information on how the implementation securely stores authentication
326 information on disk, see section 5.1.
328 Before the client has authenticated, no command other than
329 PROTOCOLINFO, AUTHCHALLENGE, AUTHENTICATE, or QUIT is valid. If the
330 controller sends any other command, or sends a malformed command, or
331 sends an unsuccessful AUTHENTICATE command, or sends PROTOCOLINFO or
332 AUTHCHALLENGE more than once, Tor sends an error reply and closes
335 To prevent some cross-protocol attacks, the AUTHENTICATE command is still
336 required even if all authentication methods in Tor are disabled. In this
337 case, the controller should just send "AUTHENTICATE" CRLF.
339 (Versions of Tor before 0.1.2.16 and 0.2.0.4-alpha did not close the
340 connection after an authentication failure.)
344 Sent from the client to the server. The syntax is:
347 Instructs the server to write out its config options into its torrc. Server
348 returns "250 OK" if successful, or "551 Unable to write configuration
349 to disk" if it can't write the file or some other error occurs.
351 See also the "getinfo config-text" command, if the controller wants
352 to write the torrc file itself.
356 Sent from the client to the server. The syntax is:
358 "SIGNAL" SP Signal CRLF
360 Signal = "RELOAD" / "SHUTDOWN" / "DUMP" / "DEBUG" / "HALT" /
361 "HUP" / "INT" / "USR1" / "USR2" / "TERM" / "NEWNYM" /
364 The meaning of the signals are:
366 RELOAD -- Reload: reload config items. (like HUP)
367 SHUTDOWN -- Controlled shutdown: if server is an OP, exit immediately.
368 If it's an OR, close listeners and exit after
369 ShutdownWaitLength seconds. (like INT)
370 DUMP -- Dump stats: log information about open connections and
371 circuits. (like USR1)
372 DEBUG -- Debug: switch all open logs to loglevel debug. (like USR2)
373 HALT -- Immediate shutdown: clean up and exit now. (like TERM)
374 CLEARDNSCACHE -- Forget the client-side cached IPs for all hostnames.
375 NEWNYM -- Switch to clean circuits, so new application requests
376 don't share any circuits with old ones. Also clears
377 the client-side DNS cache. (Tor MAY rate-limit its
378 response to this signal.)
380 The server responds with "250 OK" if the signal is recognized (or simply
381 closes the socket if it was asked to close immediately), or "552
382 Unrecognized signal" if the signal is unrecognized.
386 Sent from the client to the server. The syntax is:
388 "MAPADDRESS" 1*(Address "=" Address SP) CRLF
390 The first address in each pair is an "original" address; the second is a
391 "replacement" address. The client sends this message to the server in
392 order to tell it that future SOCKS requests for connections to the original
393 address should be replaced with connections to the specified replacement
394 address. If the addresses are well-formed, and the server is able to
395 fulfill the request, the server replies with a 250 message:
396 250-OldAddress1=NewAddress1
397 250 OldAddress2=NewAddress2
399 containing the source and destination addresses. If request is
400 malformed, the server replies with "512 syntax error in command
401 argument". If the server can't fulfill the request, it replies with
402 "451 resource exhausted".
404 The client may decline to provide a body for the original address, and
405 instead send a special null address ("0.0.0.0" for IPv4, "::0" for IPv6, or
406 "." for hostname), signifying that the server should choose the original
407 address itself, and return that address in the reply. The server
408 should ensure that it returns an element of address space that is unlikely
409 to be in actual use. If there is already an address mapped to the
410 destination address, the server may reuse that mapping.
412 If the original address is already mapped to a different address, the old
413 mapping is removed. If the original address and the destination address
414 are the same, the server removes any mapping in place for the original
418 C: MAPADDRESS 0.0.0.0=torproject.org 1.2.3.4=tor.freehaven.net
419 S: 250-127.192.10.10=torproject.org
420 S: 250 1.2.3.4=tor.freehaven.net
422 {Note: This feature is designed to be used to help Tor-ify applications
423 that need to use SOCKS4 or hostname-less SOCKS5. There are three
424 approaches to doing this:
425 1. Somehow make them use SOCKS4a or SOCKS5-with-hostnames instead.
426 2. Use tor-resolve (or another interface to Tor's resolve-over-SOCKS
427 feature) to resolve the hostname remotely. This doesn't work
428 with special addresses like x.onion or x.y.exit.
429 3. Use MAPADDRESS to map an IP address to the desired hostname, and then
430 arrange to fool the application into thinking that the hostname
431 has resolved to that IP.
432 This functionality is designed to help implement the 3rd approach.}
434 Mappings set by the controller last until the Tor process exits:
435 they never expire. If the controller wants the mapping to last only
436 a certain time, then it must explicitly un-map the address when that
441 Sent from the client to the server. The syntax is as for GETCONF:
442 "GETINFO" 1*(SP keyword) CRLF
443 one or more NL-terminated strings. The server replies with an INFOVALUE
444 message, or a 551 or 552 error.
446 Unlike GETCONF, this message is used for data that are not stored in the Tor
447 configuration file, and that may be longer than a single line. On success,
448 one ReplyLine is sent for each requested value, followed by a final 250 OK
449 ReplyLine. If a value fits on a single line, the format is:
451 If a value must be split over multiple lines, the format is:
455 Recognized keys and their values include:
457 "version" -- The version of the server's software, including the name
458 of the software. (example: "Tor 0.0.9.4")
460 "config-file" -- The location of Tor's configuration file ("torrc").
462 "config-text" -- The contents that Tor would write if you send it
463 a SAVECONF command, so the controller can write the file to
464 disk itself. [First implemented in 0.2.2.7-alpha.]
466 ["exit-policy/prepend" -- The default exit policy lines that Tor will
467 *prepend* to the ExitPolicy config option.
468 -- Never implemented. Useful?]
470 "exit-policy/default" -- The default exit policy lines that Tor will
471 *append* to the ExitPolicy config option.
473 "desc/id/<OR identity>" or "desc/name/<OR nickname>" -- the latest
474 server descriptor for a given OR.
476 "md/id/<OR identity>" or "md/name/<OR nickname>" -- the latest
477 microdescriptor for a given OR. [First implemented in
480 "dormant" -- A nonnegative integer: zero if Tor is currently active and
481 building circuits, and nonzero if Tor has gone idle due to lack of use
482 or some similar reason. [First implemented in 0.2.3.16-alpha]
484 "desc-annotations/id/<OR identity>" -- outputs the annotations string
485 (source, timestamp of arrival, purpose, etc) for the corresponding
486 descriptor. [First implemented in 0.2.0.13-alpha.]
488 "extra-info/digest/<digest>" -- the extrainfo document whose digest (in
489 hex) is <digest>. Only available if we're downloading extra-info
492 "ns/id/<OR identity>" or "ns/name/<OR nickname>" -- the latest router
493 status info (v2 directory style) for a given OR. Router status
495 dir-spec.txt, and reflects the current beliefs of this Tor about the
496 router in question. Like directory clients, controllers MUST
497 tolerate unrecognized flags and lines. The published date and
498 descriptor digest are those believed to be best by this Tor,
499 not necessarily those for a descriptor that Tor currently has.
500 [First implemented in 0.1.2.3-alpha.]
502 "ns/all" -- Router status info (v2 directory style) for all ORs we
503 have an opinion about, joined by newlines. [First implemented
506 "ns/purpose/<purpose>" -- Router status info (v2 directory style)
507 for all ORs of this purpose. Mostly designed for /ns/purpose/bridge
508 queries. [First implemented in 0.2.0.13-alpha.]
510 "desc/all-recent" -- the latest server descriptor for every router that
513 "network-status" -- a space-separated list (v1 directory style)
514 of all known OR identities. This is in the same format as the
515 router-status line in v1 directories; see dir-spec-v1.txt section
516 3 for details. (If VERBOSE_NAMES is enabled, the output will
517 not conform to dir-spec-v1.txt; instead, the result will be a
518 space-separated list of LongName, each preceded by a "!" if it is
519 believed to be not running.) This option is deprecated; use
522 "address-mappings/all"
523 "address-mappings/config"
524 "address-mappings/cache"
525 "address-mappings/control" -- a \r\n-separated list of address
526 mappings, each in the form of "from-address to-address expiry".
527 The 'config' key returns those address mappings set in the
528 configuration; the 'cache' key returns the mappings in the
529 client-side DNS cache; the 'control' key returns the mappings set
530 via the control interface; the 'all' target returns the mappings
531 set through any mechanism.
532 Expiry is formatted as with ADDRMAP events, except that "expiry" is
533 always a time in GMT or the string "NEVER"; see section 4.1.7.
534 First introduced in 0.2.0.3-alpha.
536 "addr-mappings/*" -- as for address-mappings/*, but without the
537 expiry portion of the value. Use of this value is deprecated
538 since 0.2.0.3-alpha; use address-mappings instead.
540 "address" -- the best guess at our external IP address. If we
541 have no guess, return a 551 error. (Added in 0.1.2.2-alpha)
543 "fingerprint" -- the contents of the fingerprint file that Tor
544 writes as a relay, or a 551 if we're not a relay currently.
545 (Added in 0.1.2.3-alpha)
548 A series of lines as for a circuit status event. Each line is of
549 the form described in section 4.1.1, omitting the initial
550 "650 CIRC ". Note that clients must be ready to accept additional
551 arguments as described in section 4.1.
554 A series of lines as for a stream status event. Each is of the form:
555 StreamID SP StreamStatus SP CircID SP Target CRLF
558 A series of lines as for an OR connection status event. In Tor
559 0.1.2.2-alpha with feature VERBOSE_NAMES enabled and in Tor
560 0.2.2.1-alpha and later by default, each line is of the form:
561 LongName SP ORStatus CRLF
563 In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
564 VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, each line
566 ServerID SP ORStatus CRLF
569 A series of lines listing the currently chosen entry guards, if any.
570 In Tor 0.1.2.2-alpha with feature VERBOSE_NAMES enabled and in Tor
571 0.2.2.1-alpha and later by default, each line is of the form:
572 LongName SP Status [SP ISOTime] CRLF
574 In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
575 VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, each line
577 ServerID2 SP Status [SP ISOTime] CRLF
578 ServerID2 = Nickname / 40*HEXDIG
580 The definition of Status is the same for both:
581 Status = "up" / "never-connected" / "down" /
582 "unusable" / "unlisted"
584 [From 0.1.1.4-alpha to 0.1.1.10-alpha, entry-guards was called
585 "helper-nodes". Tor still supports calling "helper-nodes", but it
586 is deprecated and should not be used.]
588 [Older versions of Tor (before 0.1.2.x-final) generated 'down' instead
589 of unlisted/unusable. Current Tors never generate 'down'.]
591 [XXXX ServerID2 differs from ServerID in not prefixing fingerprints
592 with a $. This is an implementation error. It would be nice to add
593 the $ back in if we can do so without breaking compatibility.]
595 "traffic/read" -- Total bytes read (downloaded).
597 "traffic/written" -- Total bytes written (uploaded).
600 "accounting/hibernating"
602 "accounting/bytes-left"
603 "accounting/interval-start"
604 "accounting/interval-wake"
605 "accounting/interval-end"
606 Information about accounting status. If accounting is enabled,
607 "enabled" is 1; otherwise it is 0. The "hibernating" field is "hard"
608 if we are accepting no data; "soft" if we're accepting no new
609 connections, and "awake" if we're not hibernating at all. The "bytes"
610 and "bytes-left" fields contain (read-bytes SP write-bytes), for the
611 start and the rest of the interval respectively. The 'interval-start'
612 and 'interval-end' fields are the borders of the current interval; the
613 'interval-wake' field is the time within the current interval (if any)
614 where we plan[ned] to start being active. The times are GMT.
617 A series of lines listing the available configuration options. Each is
619 OptionName SP OptionType [ SP Documentation ] CRLF
621 OptionType = "Integer" / "TimeInterval" / "TimeMsecInterval" /
622 "DataSize" / "Float" / "Boolean" / "Time" / "CommaList" /
623 "Dependant" / "Virtual" / "String" / "LineList"
627 A series of lines listing default values for each configuration
628 option. Options which don't have a valid default don't show up
629 in the list. Introduced in Tor 0.2.4.1-alpha.
630 OptionName SP OptionValue CRLF
635 A series of lines listing the available GETINFO options. Each is of
637 OptionName SP Documentation CRLF
638 OptionPrefix SP Documentation CRLF
639 OptionPrefix = OptionName "/*"
642 A space-separated list of all the events supported by this version of
646 A space-separated list of all the events supported by this version of
650 Maps IP addresses to 2-letter country codes. For example,
651 "GETINFO ip-to-country/18.0.0.1" should give "US".
653 "next-circuit/IP:port"
656 "process/pid" -- Process id belonging to the main tor process.
657 "process/uid" -- User id running the tor process, -1 if unknown (this is
658 unimplemented on Windows, returning -1).
659 "process/user" -- Username under which the tor process is running,
660 providing an empty string if none exists (this is unimplemented on
661 Windows, returning an empty string).
662 "process/descriptor-limit" -- Upper bound on the file descriptor limit, -1
665 "dir/status-vote/current/consensus" [added in Tor 0.2.1.6-alpha]
666 "dir/status/authority"
668 "dir/status/fp/<F1>+<F2>+<F3>"
671 "dir/server/fp/<F1>+<F2>+<F3>"
673 "dir/server/d/<D1>+<D2>+<D3>"
674 "dir/server/authority"
676 A series of lines listing directory contents, provided according to the
677 specification for the URLs listed in Section 4.4 of dir-spec.txt. Note
678 that Tor MUST NOT provide private information, such as descriptors for
679 routers not marked as general-purpose. When asked for 'authority'
680 information for which this Tor is not authoritative, Tor replies with
683 "status/circuit-established"
684 "status/enough-dir-info"
685 "status/good-server-descriptor"
686 "status/accepted-server-descriptor"
688 These provide the current internal Tor values for various Tor
689 states. See Section 4.1.10 for explanations. (Only a few of the
690 status events are available as getinfo's currently. Let us know if
691 you want more exposed.)
692 "status/reachability-succeeded/or"
693 0 or 1, depending on whether we've found our ORPort reachable.
694 "status/reachability-succeeded/dir"
695 0 or 1, depending on whether we've found our DirPort reachable.
696 "status/reachability-succeeded"
697 "OR=" ("0"/"1") SP "DIR=" ("0"/"1")
698 Combines status/reachability-succeeded/*; controllers MUST ignore
699 unrecognized elements in this entry.
700 "status/bootstrap-phase"
701 Returns the most recent bootstrap phase status event
702 sent. Specifically, it returns a string starting with either
703 "NOTICE BOOTSTRAP ..." or "WARN BOOTSTRAP ...". Controllers should
704 use this getinfo when they connect or attach to Tor to learn its
705 current bootstrap state.
706 "status/version/recommended"
707 List of currently recommended versions.
708 "status/version/current"
709 Status of the current version. One of: new, old, unrecommended,
710 recommended, new in series, obsolete, unknown.
711 "status/clients-seen"
712 A summary of which countries we've seen clients from recently,
713 formatted the same as the CLIENTS_SEEN status event described in
714 Section 4.1.14. This GETINFO option is currently available only
719 "net/listeners/socks"
720 "net/listeners/trans"
723 "net/listeners/control"
724 A space-separated list of the addresses at which Tor is listening for
725 connections of each specified type. [New in Tor 0.2.2.26-beta.]
728 C: GETINFO version desc/name/moria1
729 S: 250+desc/name/moria=
730 S: [Descriptor for moria]
732 S: 250-version=Tor 0.1.1.0-alpha-cvs
737 Sent from the client to the server. The format is:
738 "EXTENDCIRCUIT" SP CircuitID
739 [SP ServerSpec *("," ServerSpec)]
740 [SP "purpose=" Purpose] CRLF
742 This request takes one of two forms: either the CircuitID is zero, in
743 which case it is a request for the server to build a new circuit,
744 or the CircuitID is nonzero, in which case it is a request for the
745 server to extend an existing circuit with that ID according to the
748 If the CircuitID is 0, the controller has the option of providing
749 a path for Tor to use to build the circuit. If it does not provide
750 a path, Tor will select one automatically from high capacity nodes
751 according to path-spec.txt.
753 If CircuitID is 0 and "purpose=" is specified, then the circuit's
754 purpose is set. Two choices are recognized: "general" and
755 "controller". If not specified, circuits are created as "general".
757 If the request is successful, the server sends a reply containing a
758 message body consisting of the CircuitID of the (maybe newly created)
759 circuit. The syntax is "250" SP "EXTENDED" SP CircuitID CRLF.
761 3.11. SETCIRCUITPURPOSE
763 Sent from the client to the server. The format is:
764 "SETCIRCUITPURPOSE" SP CircuitID SP Purpose CRLF
766 This changes the circuit's purpose. See EXTENDCIRCUIT above for details.
768 3.12. SETROUTERPURPOSE
770 Sent from the client to the server. The format is:
771 "SETROUTERPURPOSE" SP NicknameOrKey SP Purpose CRLF
773 This changes the descriptor's purpose. See +POSTDESCRIPTOR below
776 NOTE: This command was disabled and made obsolete as of Tor
777 0.2.0.8-alpha. It doesn't exist anymore, and is listed here only for
782 Sent from the client to the server. The syntax is:
783 "ATTACHSTREAM" SP StreamID SP CircuitID [SP "HOP=" HopNum] CRLF
785 This message informs the server that the specified stream should be
786 associated with the specified circuit. Each stream may be associated with
787 at most one circuit, and multiple streams may share the same circuit.
788 Streams can only be attached to completed circuits (that is, circuits that
789 have sent a circuit status 'BUILT' event or are listed as built in a
790 GETINFO circuit-status request).
792 If the circuit ID is 0, responsibility for attaching the given stream is
795 If HOP=HopNum is specified, Tor will choose the HopNumth hop in the
796 circuit as the exit node, rather than the last node in the circuit.
797 Hops are 1-indexed; generally, it is not permitted to attach to hop 1.
799 Tor responds with "250 OK" if it can attach the stream, 552 if the circuit
800 or stream didn't exist, or 551 if the stream couldn't be attached for
803 {Implementation note: Tor will close unattached streams by itself,
804 roughly two minutes after they are born. Let the developers know if
805 that turns out to be a problem.}
807 {Implementation note: By default, Tor automatically attaches streams to
808 circuits itself, unless the configuration variable
809 "__LeaveStreamsUnattached" is set to "1". Attempting to attach streams
810 via TC when "__LeaveStreamsUnattached" is false may cause a race between
811 Tor and the controller, as both attempt to attach streams to circuits.}
813 {Implementation note: You can try to attachstream to a stream that
814 has already sent a connect or resolve request but hasn't succeeded
815 yet, in which case Tor will detach the stream from its current circuit
816 before proceeding with the new attach request.}
820 Sent from the client to the server. The syntax is:
821 "+POSTDESCRIPTOR" [SP "purpose=" Purpose] [SP "cache=" Cache]
822 CRLF Descriptor CRLF "." CRLF
824 This message informs the server about a new descriptor. If Purpose is
825 specified, it must be either "general", "controller", or "bridge",
826 else we return a 552 error. The default is "general".
828 If Cache is specified, it must be either "no" or "yes", else we
829 return a 552 error. If Cache is not specified, Tor will decide for
830 itself whether it wants to cache the descriptor, and controllers
831 must not rely on its choice.
833 The descriptor, when parsed, must contain a number of well-specified
834 fields, including fields for its nickname and identity.
836 If there is an error in parsing the descriptor, the server must send a
837 "554 Invalid descriptor" reply. If the descriptor is well-formed but
838 the server chooses not to add it, it must reply with a 251 message
839 whose body explains why the server was not added. If the descriptor
840 is added, Tor replies with "250 OK".
844 Sent from the client to the server. The syntax is:
845 "REDIRECTSTREAM" SP StreamID SP Address [SP Port] CRLF
847 Tells the server to change the exit address on the specified stream. If
848 Port is specified, changes the destination port as well. No remapping
849 is performed on the new provided address.
851 To be sure that the modified address will be used, this event must be sent
852 after a new stream event is received, and before attaching this stream to
855 Tor replies with "250 OK" on success.
859 Sent from the client to the server. The syntax is:
861 "CLOSESTREAM" SP StreamID SP Reason *(SP Flag) CRLF
863 Tells the server to close the specified stream. The reason should be one
864 of the Tor RELAY_END reasons given in tor-spec.txt, as a decimal. Flags is
865 not used currently; Tor servers SHOULD ignore unrecognized flags. Tor may
866 hold the stream open for a while to flush any data that is pending.
868 Tor replies with "250 OK" on success, or a 512 if there aren't enough
869 arguments, or a 552 if it doesn't recognize the StreamID or reason.
874 "CLOSECIRCUIT" SP CircuitID *(SP Flag) CRLF
877 Tells the server to close the specified circuit. If "IfUnused" is
878 provided, do not close the circuit unless it is unused.
880 Other flags may be defined in the future; Tor SHOULD ignore unrecognized
883 Tor replies with "250 OK" on success, or a 512 if there aren't enough
884 arguments, or a 552 if it doesn't recognize the CircuitID.
888 Tells the server to hang up on this controller connection. This command
889 can be used before authenticating.
893 Adding additional features to the control protocol sometimes will break
894 backwards compatibility. Initially such features are added into Tor and
895 disabled by default. USEFEATURE can enable these additional features.
899 "USEFEATURE" *(SP FeatureName) CRLF
900 FeatureName = 1*(ALPHA / DIGIT / "_" / "-")
902 Feature names are case-insensitive.
904 Once enabled, a feature stays enabled for the duration of the connection
905 to the controller. A new connection to the controller must be opened to
906 disable an enabled feature.
908 Features are a forward-compatibility mechanism; each feature will eventually
909 become a standard part of the control protocol. Once a feature becomes part
910 of the protocol, it is always-on. Each feature documents the version it was
911 introduced as a feature and the version in which it became part of the
914 Tor will ignore a request to use any feature that is always-on. Tor will give
915 a 552 error in response to an unrecognized feature.
919 Same as passing 'EXTENDED' to SETEVENTS; this is the preferred way to
920 request the extended event syntax.
922 This feature was first introduced in 0.1.2.3-alpha. It is always-on
923 and part of the protocol in Tor 0.2.2.1-alpha and later.
927 Replaces ServerID with LongName in events and GETINFO results. LongName
928 provides a Fingerprint for all routers, an indication of Named status,
929 and a Nickname if one is known. LongName is strictly more informative
930 than ServerID, which only provides either a Fingerprint or a Nickname.
932 This feature was first introduced in 0.1.2.2-alpha. It is always-on and
933 part of the protocol in Tor 0.2.2.1-alpha and later.
938 "RESOLVE" *Option *Address CRLF
939 Option = "mode=reverse"
940 Address = a hostname or IPv4 address
942 This command launches a remote hostname lookup request for every specified
943 request (or reverse lookup if "mode=reverse" is specified). Note that the
944 request is done in the background: to see the answers, your controller will
945 need to listen for ADDRMAP events; see 4.1.7 below.
947 [Added in Tor 0.2.0.3-alpha]
952 "PROTOCOLINFO" *(SP PIVERSION) CRLF
954 The server reply format is:
955 "250-PROTOCOLINFO" SP PIVERSION CRLF *InfoLine "250 OK" CRLF
957 InfoLine = AuthLine / VersionLine / OtherLine
959 AuthLine = "250-AUTH" SP "METHODS=" AuthMethod *("," AuthMethod)
960 *(SP "COOKIEFILE=" AuthCookieFile) CRLF
961 VersionLine = "250-VERSION" SP "Tor=" TorVersion OptArguments CRLF
964 "NULL" / ; No authentication is required
965 "HASHEDPASSWORD" / ; A controller must supply the original password
966 "COOKIE" / ; A controller must supply the contents of a cookie
967 "SAFECOOKIE" ; A controller must prove knowledge of a cookie
969 AuthCookieFile = QuotedString
970 TorVersion = QuotedString
972 OtherLine = "250-" Keyword OptArguments CRLF
976 Tor MAY give its InfoLines in any order; controllers MUST ignore InfoLines
977 with keywords they do not recognize. Controllers MUST ignore extraneous
978 data on any InfoLine.
980 PIVERSION is there in case we drastically change the syntax one day. For
981 now it should always be "1". Controllers MAY provide a list of the
982 protocolinfo versions they support; Tor MAY select a version that the
983 controller does not support.
985 AuthMethod is used to specify one or more control authentication
986 methods that Tor currently accepts.
988 AuthCookieFile specifies the absolute path and filename of the
989 authentication cookie that Tor is expecting and is provided iff the
990 METHODS field contains the method "COOKIE" and/or "SAFECOOKIE".
991 Controllers MUST handle escape sequences inside this string.
993 All authentication cookies are 32 bytes long. Controllers MUST NOT
994 use the contents of a non-32-byte-long file as an authentication
997 If the METHODS field contains the method "SAFECOOKIE", every
998 AuthCookieFile must contain the same authentication cookie.
1000 The COOKIE authentication method exposes the user running a
1001 controller to an unintended information disclosure attack whenever
1002 the controller has greater filesystem read access than the process
1003 that it has connected to. (Note that a controller may connect to a
1004 process other than Tor.) It is almost never safe to use, even if
1005 the controller's user has explicitly specified which filename to
1006 read an authentication cookie from. For this reason, the COOKIE
1007 authentication method has been deprecated and will be removed from
1008 a future version of Tor.
1010 The VERSION line contains the Tor version.
1012 [Unlike other commands besides AUTHENTICATE, PROTOCOLINFO may be used (but
1013 only once!) before AUTHENTICATE.]
1015 [PROTOCOLINFO was not supported before Tor 0.2.0.5-alpha.]
1020 "+LOADCONF" CRLF ConfigText CRLF "." CRLF
1022 This command allows a controller to upload the text of a config file
1023 to Tor over the control port. This config file is then loaded as if
1024 it had been read from disk.
1026 [LOADCONF was added in Tor 0.2.1.1-alpha.]
1031 "TAKEOWNERSHIP" CRLF
1033 This command instructs Tor to shut down (as if it had received
1034 SIGINT or a "SIGNAL INT" controller command) when this control
1035 connection is closed. This command affects each control connection
1036 that sends it independently; if multiple control connections send
1037 the TAKEOWNERSHIP command to a Tor instance, Tor will shut down when
1038 any of those connections closes.
1040 This command is intended to be used with the
1041 __OwningControllerProcess configuration option. A controller that
1042 starts a Tor process which the user cannot easily control or stop
1043 should 'own' that Tor process:
1045 * When starting Tor, the controller should specify its PID in an
1046 __OwningControllerProcess on Tor's command line. This will
1047 cause Tor to poll for the existence of a process with that PID,
1048 and exit if it does not find such a process. (This is not a
1049 completely reliable way to detect whether the 'owning
1050 controller' is still running, but it should work well enough in
1053 * Once the controller has connected to Tor's control port, it
1054 should send the TAKEOWNERSHIP command along its control
1055 connection. At this point, *both* the TAKEOWNERSHIP command and
1056 the __OwningControllerProcess option are in effect: Tor will
1057 exit when the control connection ends *and* Tor will exit if it
1058 detects that there is no process with the PID specified in the
1059 __OwningControllerProcess option.
1061 * After the controller has sent the TAKEOWNERSHIP command, it
1062 should send "RESETCONF __OwningControllerProcess" along its
1063 control connection. This will cause Tor to stop polling for the
1064 existence of a process with its owning controller's PID; Tor
1065 will still exit when the control connection ends.
1067 [TAKEOWNERSHIP was added in Tor 0.2.2.28-beta.]
1072 "AUTHCHALLENGE" SP "SAFECOOKIE"
1076 ClientNonce = 2*HEXDIG / QuotedString
1078 If the server accepts the command, the server reply format is:
1080 SP "SERVERHASH=" ServerHash
1081 SP "SERVERNONCE=" ServerNonce
1084 ServerHash = 64*64HEXDIG
1085 ServerNonce = 64*64HEXDIG
1087 The ClientNonce, ServerHash, and ServerNonce values are
1088 encoded/decoded in the same way as the argument passed to the
1089 AUTHENTICATE command. ServerNonce MUST be 32 bytes long.
1091 ServerHash is computed as:
1092 HMAC-SHA256("Tor safe cookie authentication server-to-controller hash",
1093 CookieString | ClientNonce | ServerNonce)
1094 (with the HMAC key as its first argument)
1096 After a controller sends a successful AUTHCHALLENGE command, the
1097 next command sent on the connection must be an AUTHENTICATE command,
1098 and the only authentication string which that AUTHENTICATE command
1100 HMAC-SHA256("Tor safe cookie authentication controller-to-server hash",
1101 CookieString | ClientNonce | ServerNonce)
1103 [Unlike other commands besides AUTHENTICATE, AUTHCHALLENGE may be
1104 used (but only once!) before AUTHENTICATE.]
1106 [AUTHCHALLENGE was added in Tor FIXME.]
1110 Reply codes follow the same 3-character format as used by SMTP, with the
1111 first character defining a status, the second character defining a
1112 subsystem, and the third designating fine-grained information.
1114 The TC protocol currently uses the following first characters:
1116 2yz Positive Completion Reply
1117 The command was successful; a new request can be started.
1119 4yz Temporary Negative Completion reply
1120 The command was unsuccessful but might be reattempted later.
1122 5yz Permanent Negative Completion Reply
1123 The command was unsuccessful; the client should not try exactly
1124 that sequence of commands again.
1126 6yz Asynchronous Reply
1127 Sent out-of-order in response to an earlier SETEVENTS command.
1129 The following second characters are used:
1132 Sent in response to ill-formed or nonsensical commands.
1135 Refers to operations of the Tor Control protocol.
1138 Refers to actual operations of Tor system.
1140 The following codes are defined:
1143 251 Operation was unnecessary
1144 [Tor has declined to perform the operation, but no harm was done.]
1146 451 Resource exhausted
1148 500 Syntax error: protocol
1150 510 Unrecognized command
1151 511 Unimplemented command
1152 512 Syntax error in command argument
1153 513 Unrecognized command argument
1154 514 Authentication required
1155 515 Bad authentication
1157 550 Unspecified Tor error
1160 [Something went wrong inside Tor, so that the client's
1161 request couldn't be fulfilled.]
1163 552 Unrecognized entity
1164 [A configuration key, a stream ID, circuit ID, event,
1165 mentioned in the command did not actually exist.]
1167 553 Invalid configuration value
1168 [The client tried to set a configuration option to an
1169 incorrect, ill-formed, or impossible value.]
1171 554 Invalid descriptor
1173 555 Unmanaged entity
1175 650 Asynchronous event notification
1177 Unless specified to have specific contents, the human-readable messages
1178 in error replies should not be relied upon to match those in this document.
1180 4.1. Asynchronous events
1182 These replies can be sent after a corresponding SETEVENTS command has been
1183 received. They will not be interleaved with other Reply elements, but they
1184 can appear between a command and its corresponding reply. For example,
1185 this sequence is possible:
1189 C: GETCONF SOCKSPORT ORPORT
1190 S: 650 CIRC 1000 EXTENDED moria1,moria2
1191 S: 250-SOCKSPORT=9050
1194 But this sequence is disallowed:
1197 C: GETCONF SOCKSPORT ORPORT
1198 S: 250-SOCKSPORT=9050
1199 S: 650 CIRC 1000 EXTENDED moria1,moria2
1202 Clients MUST tolerate more arguments in an asynchronous reply than
1203 expected, and MUST tolerate more lines in an asynchronous reply than
1204 expected. For instance, a client that expects a CIRC message like:
1205 650 CIRC 1000 EXTENDED moria1,moria2
1207 650-CIRC 1000 EXTENDED moria1,moria2 0xBEEF
1211 If clients receives extended events (selected by USEFEATUERE
1212 EXTENDED_EVENTS in Tor 0.1.2.2-alpha..Tor-0.2.1.x, and always-on in
1213 Tor 0.2.2.x and later), then each event line as specified below may be
1214 followed by additional arguments and additional lines. Additional
1215 lines will be of the form:
1216 "650" ("-"/" ") KEYWORD ["=" ARGUMENTS] CRLF
1217 Additional arguments will be of the form
1218 SP KEYWORD ["=" ( QuotedString / * NonSpDquote ) ]
1220 Clients MUST tolerate events with arguments and keywords they do not
1221 recognize, and SHOULD process those events as if any unrecognized
1222 arguments and keywords were not present.
1224 Clients SHOULD NOT depend on the order of keywords=value arguments,
1225 and SHOULD NOT depend on there being no new keyword=value arguments
1226 appearing between existing keyword=value arguments, though as of this
1227 writing (Jun 2011) some do. Thus, extensions to this protocol should
1228 add new keywords only after the existing keywords, until all
1229 controllers have been fixed. At some point this "SHOULD NOT" might
1230 become a "MUST NOT".
1232 4.1.1. Circuit status changed
1236 "650" SP "CIRC" SP CircuitID SP CircStatus [SP Path]
1237 [SP "BUILD_FLAGS=" BuildFlags] [SP "PURPOSE=" Purpose]
1238 [SP "HS_STATE=" HSState] [SP "REND_QUERY=" HSAddress]
1239 [SP "TIME_CREATED=" TimeCreated]
1240 [SP "REASON=" Reason [SP "REMOTE_REASON=" Reason]] CRLF
1243 "LAUNCHED" / ; circuit ID assigned to new circuit
1244 "BUILT" / ; all hops finished, can now accept streams
1245 "EXTENDED" / ; one more hop has been completed
1246 "FAILED" / ; circuit closed (was not built)
1247 "CLOSED" ; circuit closed (was built)
1249 Path = LongName *("," LongName)
1250 ; In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
1251 ; VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, Path
1253 ; Path = ServerID *("," ServerID)
1255 BuildFlags = BuildFlag *("," BuildFlag)
1256 BuildFlag = "ONEHOP_TUNNEL" / "IS_INTERNAL" /
1257 "NEED_CAPACITY" / "NEED_UPTIME"
1259 Purpose = "GENERAL" / "HS_CLIENT_INTRO" / "HS_CLIENT_REND" /
1260 "HS_SERVICE_INTRO" / "HS_SERVICE_REND" / "TESTING" /
1263 HSState = "HSCI_CONNECTING" / "HSCI_INTRO_SENT" / "HSCI_DONE" /
1264 "HSCR_CONNECTING" / "HSCR_ESTABLISHED_IDLE" /
1265 "HSCR_ESTABLISHED_WAITING" / "HSCR_JOINED" /
1266 "HSSI_CONNECTING" / "HSSI_ESTABLISHED" /
1267 "HSSR_CONNECTING" / "HSSR_JOINED"
1269 HSAddress = 16*Base32Character
1270 Base32Character = ALPHA / "2" / "3" / "4" / "5" / "6" / "7"
1272 TimeCreated = ISOTime2Frac
1274 Microseconds = 1*DIGIT
1276 Reason = "NONE" / "TORPROTOCOL" / "INTERNAL" / "REQUESTED" /
1277 "HIBERNATING" / "RESOURCELIMIT" / "CONNECTFAILED" /
1278 "OR_IDENTITY" / "OR_CONN_CLOSED" / "TIMEOUT" /
1279 "FINISHED" / "DESTROYED" / "NOPATH" / "NOSUCHSERVICE" /
1280 "MEASUREMENT_EXPIRED"
1282 The path is provided only when the circuit has been extended at least one
1285 The "BUILD_FLAGS" field is provided only in versions 0.2.3.11-alpha
1286 and later. Clients MUST accept build flags not listed above.
1287 Build flags are defined as follows:
1289 ONEHOP_TUNNEL (one-hop circuit, used for tunneled directory conns)
1290 IS_INTERNAL (internal circuit, not to be used for exiting streams)
1291 NEED_CAPACITY (this circuit must use only high-capacity nodes)
1292 NEED_UPTIME (this circuit must use only high-uptime nodes)
1294 The "PURPOSE" field is provided only in versions 0.2.1.6-alpha and
1295 later, and only if extended events are enabled (see 3.19). Clients
1296 MUST accept purposes not listed above. Purposes are defined as
1299 GENERAL (circuit for AP and/or directory request streams)
1300 HS_CLIENT_INTRO (HS client-side introduction-point circuit)
1301 HS_CLIENT_REND (HS client-side rendezvous circuit; carries AP streams)
1302 HS_SERVICE_INTRO (HS service-side introduction-point circuit)
1303 HS_SERVICE_REND (HS service-side rendezvous circuit)
1304 TESTING (reachability-testing circuit; carries no traffic)
1305 CONTROLLER (circuit built by a controller)
1307 The "HS_STATE" field is provided only for hidden-service circuits,
1308 and only in versions 0.2.3.11-alpha and later. Clients MUST accept
1309 hidden-service circuit states not listed above. Hidden-service
1310 circuit states are defined as follows:
1312 HSCI_* (client-side introduction-point circuit states)
1313 HSCI_CONNECTING (connecting to intro point)
1314 HSCI_INTRO_SENT (sent INTRODUCE1; waiting for reply from IP)
1315 HSCI_DONE (received reply from IP relay; closing)
1317 HSCR_* (client-side rendezvous-point circuit states)
1318 HSCR_CONNECTING (connecting to or waiting for reply from RP)
1319 HSCR_ESTABLISHED_IDLE (established RP; waiting for introduction)
1320 HSCR_ESTABLISHED_WAITING (introduction sent to HS; waiting for rend)
1321 HSCR_JOINED (connected to HS)
1323 HSSI_* (service-side introduction-point circuit states)
1324 HSSI_CONNECTING (connecting to intro point)
1325 HSSI_ESTABLISHED (established intro point)
1327 HSSR_* (service-side rendezvous-point circuit states)
1328 HSSR_CONNECTING (connecting to client's rend point)
1329 HSSR_JOINED (connected to client's RP circuit)
1331 The "REND_QUERY" field is provided only for hidden-service-related
1332 circuits, and only in versions 0.2.3.11-alpha and later. Clients
1333 MUST accept hidden service addresses in formats other than that
1336 The "TIME_CREATED" field is provided only in versions 0.2.3.11-alpha and
1337 later. TIME_CREATED is the time at which the circuit was created or
1340 The "REASON" field is provided only for FAILED and CLOSED events, and only
1341 if extended events are enabled (see 3.19). Clients MUST accept reasons
1342 not listed above. Reasons are as given in tor-spec.txt, except for:
1344 NOPATH (Not enough nodes to make circuit)
1346 The "REMOTE_REASON" field is provided only when we receive a DESTROY or
1347 TRUNCATE cell, and only if extended events are enabled. It contains the
1348 actual reason given by the remote OR for closing the circuit. Clients MUST
1349 accept reasons not listed above. Reasons are as listed in tor-spec.txt.
1351 4.1.2. Stream status changed
1355 "650" SP "STREAM" SP StreamID SP StreamStatus SP CircID SP Target
1356 [SP "REASON=" Reason [ SP "REMOTE_REASON=" Reason ]]
1357 [SP "SOURCE=" Source] [ SP "SOURCE_ADDR=" Address ":" Port ]
1358 [SP "PURPOSE=" Purpose]
1362 "NEW" / ; New request to connect
1363 "NEWRESOLVE" / ; New request to resolve an address
1364 "REMAP" / ; Address re-mapped to another
1365 "SENTCONNECT" / ; Sent a connect cell along a circuit
1366 "SENTRESOLVE" / ; Sent a resolve cell along a circuit
1367 "SUCCEEDED" / ; Received a reply; stream established
1368 "FAILED" / ; Stream failed and not retriable
1369 "CLOSED" / ; Stream closed
1370 "DETACHED" ; Detached from circuit; still retriable
1372 Target = Address ":" Port
1374 The circuit ID designates which circuit this stream is attached to. If
1375 the stream is unattached, the circuit ID "0" is given.
1377 Reason = "MISC" / "RESOLVEFAILED" / "CONNECTREFUSED" /
1378 "EXITPOLICY" / "DESTROY" / "DONE" / "TIMEOUT" /
1379 "NOROUTE" / "HIBERNATING" / "INTERNAL"/ "RESOURCELIMIT" /
1380 "CONNRESET" / "TORPROTOCOL" / "NOTDIRECTORY" / "END" /
1383 The "REASON" field is provided only for FAILED, CLOSED, and DETACHED
1384 events, and only if extended events are enabled (see 3.19). Clients MUST
1385 accept reasons not listed above. Reasons are as given in tor-spec.txt,
1388 END (We received a RELAY_END cell from the other side of this
1390 PRIVATE_ADDR (The client tried to connect to a private address like
1391 127.0.0.1 or 10.0.0.1 over Tor.)
1392 [XXXX document more. -NM]
1394 The "REMOTE_REASON" field is provided only when we receive a RELAY_END
1395 cell, and only if extended events are enabled. It contains the actual
1396 reason given by the remote OR for closing the stream. Clients MUST accept
1397 reasons not listed above. Reasons are as listed in tor-spec.txt.
1399 "REMAP" events include a Source if extended events are enabled:
1400 Source = "CACHE" / "EXIT"
1401 Clients MUST accept sources not listed above. "CACHE" is given if
1402 the Tor client decided to remap the address because of a cached
1403 answer, and "EXIT" is given if the remote node we queried gave us
1404 the new address as a response.
1406 The "SOURCE_ADDR" field is included with NEW and NEWRESOLVE events if
1407 extended events are enabled. It indicates the address and port
1408 that requested the connection, and can be (e.g.) used to look up the
1411 Purpose = "DIR_FETCH" / "UPLOAD_DESC" / "DNS_REQUEST" /
1412 "USER" / "DIRPORT_TEST"
1414 The "PURPOSE" field is provided only for NEW and NEWRESOLVE events, and
1415 only if extended events are enabled (see 3.19). Clients MUST accept
1416 purposes not listed above.
1418 4.1.3. OR Connection status changed
1422 "650" SP "ORCONN" SP (LongName / Target) SP ORStatus [ SP "REASON="
1423 Reason ] [ SP "NCIRCS=" NumCircuits ] CRLF
1425 ORStatus = "NEW" / "LAUNCHED" / "CONNECTED" / "FAILED" / "CLOSED"
1427 ; In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
1428 ; VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, OR
1429 ; Connection is as follows:
1430 "650" SP "ORCONN" SP (ServerID / Target) SP ORStatus [ SP "REASON="
1431 Reason ] [ SP "NCIRCS=" NumCircuits ] CRLF
1433 NEW is for incoming connections, and LAUNCHED is for outgoing
1434 connections. CONNECTED means the TLS handshake has finished (in
1435 either direction). FAILED means a connection is being closed that
1436 hasn't finished its handshake, and CLOSED is for connections that
1439 A LongName or ServerID is specified unless it's a NEW connection, in
1440 which case we don't know what server it is yet, so we use Address:Port.
1442 If extended events are enabled (see 3.19), optional reason and
1443 circuit counting information is provided for CLOSED and FAILED
1446 Reason = "MISC" / "DONE" / "CONNECTREFUSED" /
1447 "IDENTITY" / "CONNECTRESET" / "TIMEOUT" / "NOROUTE" /
1448 "IOERROR" / "RESOURCELIMIT"
1450 NumCircuits counts both established and pending circuits.
1452 4.1.4. Bandwidth used in the last second
1455 "650" SP "BW" SP BytesRead SP BytesWritten *(SP Type "=" Num) CRLF
1457 BytesWritten = 1*DIGIT
1458 Type = "DIR" / "OR" / "EXIT" / "APP" / ...
1461 BytesRead and BytesWritten are the totals. [In a future Tor version,
1462 we may also include a breakdown of the connection types that used
1463 bandwidth this second (not implemented yet).]
1468 "650" SP Severity SP ReplyText CRLF
1470 "650+" Severity CRLF Data 650 SP "OK" CRLF
1472 Severity = "DEBUG" / "INFO" / "NOTICE" / "WARN"/ "ERR"
1474 4.1.6. New descriptors available
1477 "650" SP "NEWDESC" 1*(SP LongName) CRLF
1478 ; In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
1479 ; VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, it
1481 "650" SP "NEWDESC" 1*(SP ServerID) CRLF
1483 4.1.7. New Address mapping
1486 "650" SP "ADDRMAP" SP Address SP NewAddress SP Expiry
1487 [SP Error] SP GMTExpiry CRLF
1489 NewAddress = Address / "<error>"
1490 Expiry = DQUOTE ISOTime DQUOTE / "NEVER"
1492 Error = "error=" ErrorCode
1494 GMTExpiry = "EXPIRES=" DQUOTE IsoTime DQUOTE
1496 Error and GMTExpiry are only provided if extended events are enabled.
1498 Expiry is expressed as the local time (rather than GMT). This is a bug,
1499 left in for backward compatibility; new code should look at GMTExpiry
1502 These events are generated when a new address mapping is entered in the
1503 cache, or when the answer for a RESOLVE command is found.
1505 4.1.8. Descriptors uploaded to us in our role as authoritative dirserver
1508 "650" "+" "AUTHDIR_NEWDESCS" CRLF Action CRLF Message CRLF
1509 Descriptor CRLF "." CRLF "650" SP "OK" CRLF
1510 Action = "ACCEPTED" / "DROPPED" / "REJECTED"
1513 4.1.9. Our descriptor changed
1516 "650" SP "DESCCHANGED" CRLF
1518 [First added in 0.1.2.2-alpha.]
1520 4.1.10. Status events
1522 Status events (STATUS_GENERAL, STATUS_CLIENT, and STATUS_SERVER) are sent
1523 based on occurrences in the Tor process pertaining to the general state of
1524 the program. Generally, they correspond to log messages of severity Notice
1525 or higher. They differ from log messages in that their format is a
1526 specified interface.
1529 "650" SP StatusType SP StatusSeverity SP StatusAction
1530 [SP StatusArguments] CRLF
1532 StatusType = "STATUS_GENERAL" / "STATUS_CLIENT" / "STATUS_SERVER"
1533 StatusSeverity = "NOTICE" / "WARN" / "ERR"
1534 StatusAction = 1*ALPHA
1535 StatusArguments = StatusArgument *(SP StatusArgument)
1536 StatusArgument = StatusKeyword '=' StatusValue
1537 StatusKeyword = 1*(ALNUM / "_")
1538 StatusValue = 1*(ALNUM / '_') / QuotedString
1540 StatusAction is a string, and StatusArguments is a series of
1541 keyword=value pairs on the same line. Values may be space-terminated
1542 strings, or quoted strings.
1544 These events are always produced with EXTENDED_EVENTS and
1545 VERBOSE_NAMES; see the explanations in the USEFEATURE section
1548 Controllers MUST tolerate unrecognized actions, MUST tolerate
1549 unrecognized arguments, MUST tolerate missing arguments, and MUST
1550 tolerate arguments that arrive in any order.
1552 Each event description below is accompanied by a recommendation for
1553 controllers. These recommendations are suggestions only; no controller
1554 is required to implement them.
1556 Compatibility note: versions of Tor before 0.2.0.22-rc incorrectly
1557 generated "STATUS_SERVER" as "STATUS_SEVER". To be compatible with those
1558 versions, tools should accept both.
1560 Actions for STATUS_GENERAL events can be as follows:
1564 Tor spent enough time without CPU cycles that it has closed all
1565 its circuits and will establish them anew. This typically
1566 happens when a laptop goes to sleep and then wakes up again. It
1567 also happens when the system is swapping so heavily that Tor is
1568 starving. The "time" argument specifies the number of seconds Tor
1569 thinks it was unconscious for (or alternatively, the number of
1570 seconds it went back in time).
1572 This status event is sent as NOTICE severity normally, but WARN
1573 severity if Tor is acting as a server currently.
1575 {Recommendation for controller: ignore it, since we don't really
1576 know what the user should do anyway. Hm.}
1580 "REASON=NEW/OBSOLETE/UNRECOMMENDED"
1581 "RECOMMENDED=\"version, version, ...\""
1582 Tor has found that directory servers don't recommend its version of
1583 the Tor software. RECOMMENDED is a comma-and-space-separated string
1584 of Tor versions that are recommended. REASON is NEW if this version
1585 of Tor is newer than any recommended version, OBSOLETE if
1586 this version of Tor is older than any recommended version, and
1587 UNRECOMMENDED if some recommended versions of Tor are newer and
1588 some are older than this version. (The "OBSOLETE" reason was called
1589 "OLD" from Tor 0.1.2.3-alpha up to and including 0.2.0.12-alpha.)
1591 {Controllers may want to suggest that the user upgrade OLD or
1592 UNRECOMMENDED versions. NEW versions may be known-insecure, or may
1593 simply be development versions.}
1595 TOO_MANY_CONNECTIONS
1597 Tor has reached its ulimit -n or whatever the native limit is on file
1598 descriptors or sockets. CURRENT is the number of sockets Tor
1599 currently has open. The user should really do something about
1600 this. The "current" argument shows the number of connections currently
1603 {Controllers may recommend that the user increase the limit, or
1604 increase it for them. Recommendations should be phrased in an
1605 OS-appropriate way and automated when possible.}
1609 Tor has encountered a situation that its developers never expected,
1610 and the developers would like to learn that it happened. Perhaps
1611 the controller can explain this to the user and encourage her to
1614 {Controllers should log bugs, but shouldn't annoy the user in case a
1615 bug appears frequently.}
1618 SKEW="+" / "-" SECONDS
1619 MIN_SKEW="+" / "-" SECONDS.
1620 SOURCE="DIRSERV:" IP ":" Port /
1621 "NETWORKSTATUS:" IP ":" Port /
1624 If "SKEW" is present, it's an estimate of how far we are from the
1625 time declared in the source. (In other words, if we're an hour in
1626 the past, the value is -3600.) "MIN_SKEW" is present, it's a lower
1627 bound. If the source is a DIRSERV, we got the current time from a
1628 connection to a dirserver. If the source is a NETWORKSTATUS, we
1629 decided we're skewed because we got a v2 networkstatus from far in
1630 the future. If the source is OR, the skew comes from a NETINFO
1631 cell from a connection to another relay. If the source is
1632 CONSENSUS, we decided we're skewed because we got a networkstatus
1633 consensus from the future.
1635 {Tor should send this message to controllers when it thinks the
1636 skew is so high that it will interfere with proper Tor operation.
1637 Controllers shouldn't blindly adjust the clock, since the more
1638 accurate source of skew info (DIRSERV) is currently
1642 "METHOD=" libevent method
1643 "VERSION=" libevent version
1644 "BADNESS=" "BROKEN" / "BUGGY" / "SLOW"
1645 "RECOVERED=" "NO" / "YES"
1646 Tor knows about bugs in using the configured event method in this
1647 version of libevent. "BROKEN" libevents won't work at all;
1648 "BUGGY" libevents might work okay; "SLOW" libevents will work
1649 fine, but not quickly. If "RECOVERED" is YES, Tor managed to
1650 switch to a more reliable (but probably slower!) libevent method.
1652 {Controllers may want to warn the user if this event occurs, though
1653 generally it's the fault of whoever built the Tor binary and there's
1654 not much the user can do besides upgrade libevent or upgrade the
1658 Tor believes that none of the known directory servers are
1659 reachable -- this is most likely because the local network is
1660 down or otherwise not working, and might help to explain for the
1661 user why Tor appears to be broken.
1663 {Controllers may want to warn the user if this event occurs; further
1664 action is generally not possible.}
1667 Tor has received and validated a new consensus networkstatus.
1668 (This event can be delayed a little while after the consensus
1669 is received, if Tor needs to fetch certificates.)
1671 Actions for STATUS_CLIENT events can be as follows:
1680 "RECOMMENDATION=" Keyword
1683 Tor has made some progress at establishing a connection to the
1684 Tor network, fetching directory information, or making its first
1685 circuit; or it has encountered a problem while bootstrapping. This
1686 status event is especially useful for users with slow connections
1687 or with connectivity problems.
1689 "Progress" gives a number between 0 and 100 for how far through
1690 the bootstrapping process we are. "Summary" is a string that can
1691 be displayed to the user to describe the *next* task that Tor
1692 will tackle, i.e., the task it is working on after sending the
1693 status event. "Tag" is a string that controllers can use to
1694 recognize bootstrap phases, if they want to do something smarter
1695 than just blindly displaying the summary string; see Section 5
1696 for the current tags that Tor issues.
1698 The StatusSeverity describes whether this is a normal bootstrap
1699 phase (severity notice) or an indication of a bootstrapping
1700 problem (severity warn).
1702 For bootstrap problems, we include the same progress, tag, and
1703 summary values as we would for a normal bootstrap event, but we
1704 also include "warning", "reason", "count", and "recommendation"
1705 key/value combos. The "count" number tells how many bootstrap
1706 problems there have been so far at this phase. The "reason"
1707 string lists one of the reasons allowed in the ORCONN event. The
1708 "warning" argument string with any hints Tor has to offer about
1709 why it's having troubles bootstrapping.
1711 The "reason" values are long-term-stable controller-facing tags to
1712 identify particular issues in a bootstrapping step. The warning
1713 strings, on the other hand, are human-readable. Controllers
1714 SHOULD NOT rely on the format of any warning string. Currently
1715 the possible values for "recommendation" are either "ignore" or
1716 "warn" -- if ignore, the controller can accumulate the string in
1717 a pile of problems to show the user if the user asks; if warn,
1718 the controller should alert the user that Tor is pretty sure
1719 there's a bootstrapping problem.
1721 Currently Tor uses recommendation=ignore for the first
1722 nine bootstrap problem reports for a given phase, and then
1723 uses recommendation=warn for subsequent problems at that
1724 phase. Hopefully this is a good balance between tolerating
1725 occasional errors and reporting serious problems quickly.
1728 Tor now knows enough network-status documents and enough server
1729 descriptors that it's going to start trying to build circuits now.
1731 {Controllers may want to use this event to decide when to indicate
1732 progress to their users, but should not interrupt the user's browsing
1736 We discarded expired statuses and router descriptors to fall
1737 below the desired threshold of directory information. We won't
1738 try to build any circuits until ENOUGH_DIR_INFO occurs again.
1740 {Controllers may want to use this event to decide when to indicate
1741 progress to their users, but should not interrupt the user's browsing
1745 Tor is able to establish circuits for client use. This event will
1746 only be sent if we just built a circuit that changed our mind --
1747 that is, prior to this event we didn't know whether we could
1750 {Suggested use: controllers can notify their users that Tor is
1751 ready for use as a client once they see this status event. [Perhaps
1752 controllers should also have a timeout if too much time passes and
1753 this event hasn't arrived, to give tips on how to troubleshoot.
1754 On the other hand, hopefully Tor will send further status events
1755 if it can identify the problem.]}
1757 CIRCUIT_NOT_ESTABLISHED
1758 "REASON=" "EXTERNAL_ADDRESS" / "DIR_ALL_UNREACHABLE" / "CLOCK_JUMPED"
1759 We are no longer confident that we can build circuits. The "reason"
1760 keyword provides an explanation: which other status event type caused
1761 our lack of confidence.
1763 {Controllers may want to use this event to decide when to indicate
1764 progress to their users, but should not interrupt the user's browsing
1766 [Note: only REASON=CLOCK_JUMPED is implemented currently.]
1770 "RESULT=" "REJECT" / "WARN"
1771 A stream was initiated to a port that's commonly used for
1772 vulnerable-plaintext protocols. If the Result is "reject", we
1773 refused the connection; whereas if it's "warn", we allowed it.
1775 {Controllers should warn their users when this occurs, unless they
1776 happen to know that the application using Tor is in fact doing so
1777 correctly (e.g., because it is part of a distributed bundle). They
1778 might also want some sort of interface to let the user configure
1779 their RejectPlaintextPorts and WarnPlaintextPorts config options.}
1782 "PROTOCOL=" "SOCKS4" / "SOCKS5"
1784 A connection was made to Tor's SOCKS port using one of the SOCKS
1785 approaches that doesn't support hostnames -- only raw IP addresses.
1786 If the client application got this address from gethostbyname(),
1787 it may be leaking target addresses via DNS.
1789 {Controllers should warn their users when this occurs, unless they
1790 happen to know that the application using Tor is in fact doing so
1791 correctly (e.g., because it is part of a distributed bundle).}
1793 SOCKS_UNKNOWN_PROTOCOL
1795 A connection was made to Tor's SOCKS port that tried to use it
1796 for something other than the SOCKS protocol. Perhaps the user is
1797 using Tor as an HTTP proxy? The DATA is the first few characters
1798 sent to Tor on the SOCKS port.
1800 {Controllers may want to warn their users when this occurs: it
1801 indicates a misconfigured application.}
1804 "HOSTNAME=QuotedString"
1805 Some application gave us a funny-looking hostname. Perhaps
1806 it is broken? In any case it won't work with Tor and the user
1809 {Controllers may want to warn their users when this occurs: it
1810 usually indicates a misconfigured application.}
1812 Actions for STATUS_SERVER can be as follows:
1817 "METHOD=CONFIGURED/DIRSERV/RESOLVED/INTERFACE/GETHOSTNAME"
1818 Our best idea for our externally visible IP has changed to 'IP'.
1819 If 'HOSTNAME' is present, we got the new IP by resolving 'NAME'. If the
1820 method is 'CONFIGURED', the IP was given verbatim as a configuration
1821 option. If the method is 'RESOLVED', we resolved the Address
1822 configuration option to get the IP. If the method is 'GETHOSTNAME',
1823 we resolved our hostname to get the IP. If the method is 'INTERFACE',
1824 we got the address of one of our network interfaces to get the IP. If
1825 the method is 'DIRSERV', a directory server told us a guess for what
1828 {Controllers may want to record this info and display it to the user.}
1830 CHECKING_REACHABILITY
1832 "DIRADDRESS=IP:port"
1833 We're going to start testing the reachability of our external OR port
1836 {This event could affect the controller's idea of server status, but
1837 the controller should not interrupt the user to tell them so.}
1839 REACHABILITY_SUCCEEDED
1841 "DIRADDRESS=IP:port"
1842 We successfully verified the reachability of our external OR port or
1843 directory port (depending on which of ORADDRESS or DIRADDRESS is
1846 {This event could affect the controller's idea of server status, but
1847 the controller should not interrupt the user to tell them so.}
1849 GOOD_SERVER_DESCRIPTOR
1850 We successfully uploaded our server descriptor to at least one
1851 of the directory authorities, with no complaints.
1853 {Originally, the goal of this event was to declare "every authority
1854 has accepted the descriptor, so there will be no complaints
1855 about it." But since some authorities might be offline, it's
1856 harder to get certainty than we had thought. As such, this event
1857 is equivalent to ACCEPTED_SERVER_DESCRIPTOR below. Controllers
1858 should just look at ACCEPTED_SERVER_DESCRIPTOR and should ignore
1859 this event for now.}
1861 SERVER_DESCRIPTOR_STATUS
1862 "STATUS=" "LISTED" / "UNLISTED"
1863 We just got a new networkstatus consensus, and whether we're in
1864 it or not in it has changed. Specifically, status is "listed"
1865 if we're listed in it but previous to this point we didn't know
1866 we were listed in a consensus; and status is "unlisted" if we
1867 thought we should have been listed in it (e.g. we were listed in
1868 the last one), but we're not.
1870 {Moving from listed to unlisted is not necessarily cause for
1871 alarm. The relay might have failed a few reachability tests,
1872 or the Internet might have had some routing problems. So this
1873 feature is mainly to let relay operators know when their relay
1874 has successfully been listed in the consensus.}
1876 [Not implemented yet. We should do this in 0.2.2.x. -RD]
1880 "STATUS=" "UP" / "DOWN"
1882 One of our nameservers has changed status.
1884 {This event could affect the controller's idea of server status, but
1885 the controller should not interrupt the user to tell them so.}
1888 All of our nameservers have gone down.
1890 {This is a problem; if it happens often without the nameservers
1891 coming up again, the user needs to configure more or better
1895 Our DNS provider is providing an address when it should be saying
1896 "NOTFOUND"; Tor will treat the address as a synonym for "NOTFOUND".
1898 {This is an annoyance; controllers may want to tell admins that their
1899 DNS provider is not to be trusted.}
1902 Our DNS provider is giving a hijacked address instead of well-known
1903 websites; Tor will not try to be an exit node.
1905 {Controllers could warn the admin if the relay is running as an
1906 exit node: the admin needs to configure a good DNS server.
1907 Alternatively, this happens a lot in some restrictive environments
1908 (hotels, universities, coffeeshops) when the user hasn't registered.}
1910 BAD_SERVER_DESCRIPTOR
1913 A directory authority rejected our descriptor. Possible reasons
1914 include malformed descriptors, incorrect keys, highly skewed clocks,
1917 {Controllers should warn the admin, and try to cope if they can.}
1919 ACCEPTED_SERVER_DESCRIPTOR
1921 A single directory authority accepted our descriptor.
1924 {This event could affect the controller's idea of server status, but
1925 the controller should not interrupt the user to tell them so.}
1929 "DIRADDRESS=IP:port"
1930 We failed to connect to our external OR port or directory port
1933 {This event could affect the controller's idea of server status. The
1934 controller should warn the admin and suggest reasonable steps to take.}
1936 4.1.11. Our set of guard nodes has changed
1939 "650" SP "GUARD" SP Type SP Name SP Status ... CRLF
1941 Name = The (possibly verbose) nickname of the guard affected.
1942 Status = "NEW" | "UP" | "DOWN" | "BAD" | "GOOD" | "DROPPED"
1944 [explain states. XXX]
1946 4.1.12. Network status has changed
1949 "650" "+" "NS" CRLF 1*NetworkStatus "." CRLF "650" SP "OK" CRLF
1951 The event is used whenever our local view of a relay status changes.
1952 This happens when we get a new v3 consensus (in which case the entries
1953 we see are a duplicate of what we see in the NEWCONSENSUS event,
1954 below), but it also happens when we decide to mark a relay as up or
1955 down in our local status, for example based on connection attempts.
1957 [First added in 0.1.2.3-alpha]
1959 4.1.13. Bandwidth used on an application stream
1962 "650" SP "STREAM_BW" SP StreamID SP BytesWritten SP BytesRead CRLF
1963 BytesWritten = 1*DIGIT
1966 BytesWritten and BytesRead are the number of bytes written and read
1967 by the application since the last STREAM_BW event on this stream.
1969 Note that from Tor's perspective, *reading* a byte on a stream means
1970 that the application *wrote* the byte. That's why the order of "written"
1971 vs "read" is opposite for stream_bw events compared to bw events.
1973 These events are generated about once per second per stream; no events
1974 are generated for streams that have not written or read. These events
1975 apply only to streams entering Tor (such as on a SOCKSPort, TransPort,
1976 or so on). They are not generated for exiting streams.
1978 4.1.14. Per-country client stats
1981 "650" SP "CLIENTS_SEEN" SP TimeStarted SP CountrySummary CRLF
1983 We just generated a new summary of which countries we've seen clients
1984 from recently. The controller could display this for the user, e.g.
1985 in their "relay" configuration window, to give them a sense that they
1986 are actually being useful.
1988 Currently only bridge relays will receive this event, but once we figure
1989 out how to sufficiently aggregate and sanitize the client counts on
1990 main relays, we might start sending these events in other cases too.
1992 TimeStarted is a quoted string indicating when the reported summary
1993 counts from (in GMT).
1995 The CountrySummary keyword has as its argument a comma-separated,
1996 possibly empty set of "countrycode=count" pairs. For example (without
1998 650-CLIENTS_SEEN TimeStarted="2008-12-25 23:50:43"
1999 CountrySummary=us=16,de=8,uk=8
2001 4.1.15. New consensus networkstatus has arrived
2004 "650" "+" "NEWCONSENSUS" CRLF 1*NetworkStatus "." CRLF "650" SP
2007 A new consensus networkstatus has arrived. We include NS-style lines for
2008 every relay in the consensus. NEWCONSENSUS is a separate event from the
2009 NS event, because the list here represents every usable relay: so any
2010 relay *not* mentioned in this list is implicitly no longer recommended.
2012 [First added in 0.2.1.13-alpha]
2014 4.1.16. New circuit buildtime has been set
2017 "650" SP "BUILDTIMEOUT_SET" SP Type SP "TOTAL_TIMES=" Total SP
2018 "TIMEOUT_MS=" Timeout SP "XM=" Xm SP "ALPHA=" Alpha SP
2019 "CUTOFF_QUANTILE=" Quantile SP "TIMEOUT_RATE=" TimeoutRate SP
2020 "CLOSE_MS=" CloseTimeout SP "CLOSE_RATE=" CloseRate
2022 Type = "COMPUTED" / "RESET" / "SUSPENDED" / "DISCARD" / "RESUME"
2023 Total = Integer count of timeouts stored
2024 Timeout = Integer timeout in milliseconds
2025 Xm = Estimated integer Pareto parameter Xm in milliseconds
2026 Alpha = Estimated floating point Paredo paremter alpha
2027 Quantile = Floating point CDF quantile cutoff point for this timeout
2028 TimeoutRate = Floating point ratio of circuits that timeout
2029 CloseTimeout = How long to keep measurement circs in milliseconds
2030 CloseRate = Floating point ratio of measurement circuits that are closed
2032 A new circuit build timeout time has been set. If Type is "COMPUTED",
2033 Tor has computed the value based on historical data. If Type is "RESET",
2034 initialization or drastic network changes have caused Tor to reset
2035 the timeout back to the default, to relearn again. If Type is
2036 "SUSPENDED", Tor has detected a loss of network connectivity and has
2037 temporarily changed the timeout value to the default until the network
2038 recovers. If type is "DISCARD", Tor has decided to discard timeout
2039 values that likely happened while the network was down. If type is
2040 "RESUME", Tor has decided to resume timeout calculation.
2042 The Total value is the count of circuit build times Tor used in
2043 computing this value. It is capped internally at the maximum number
2044 of build times Tor stores (NCIRCUITS_TO_OBSERVE).
2046 The Timeout itself is provided in milliseconds. Internally, Tor rounds
2047 this value to the nearest second before using it.
2049 [First added in 0.2.2.7-alpha]
2051 4.1.17. Signal received
2054 "650" SP "SIGNAL" SP Signal CRLF
2056 Signal = "RELOAD" / "DUMP" / "DEBUG" / "NEWNYM" / "CLEARDNSCACHE"
2058 A signal has been received and actions taken by Tor. The meaning of each
2059 signal, and the mapping to Unix signals, is as defined in section 3.7.
2060 Future versions of Tor MAY generate signals other than those listed here;
2061 controllers MUST be able to accept them.
2063 If Tor chose to ignore a signal (such as NEWNYM), this event will not be
2064 sent. Note that some options (like ReloadTorrcOnSIGHUP) may affect the
2065 semantics of the signals here.
2067 Note that the HALT (SIGTERM) and SHUTDOWN (SIGINT) signals do not currently
2070 [First added in 0.2.3.1-alpha]
2072 4.1.18. Configuration changed
2075 StartReplyLine *(MidReplyLine) EndReplyLine
2077 StartReplyLine = "650-CONF_CHANGED" CRLF
2078 MidReplyLine = "650-" KEYWORD ["=" VALUE] CRLF
2079 EndReplyLine = "650 OK"
2081 Tor configuration options have changed (such as via a SETCONF or RELOAD
2082 signal). KEYWORD and VALUE specify the configuration option that was changed.
2083 Undefined configuration options contain only the KEYWORD.
2085 4.1.19. Circuit status changed slightly
2089 "650" SP "CIRC_MINOR" SP CircuitID SP CircEvent [SP Path]
2090 [SP "BUILD_FLAGS=" BuildFlags] [SP "PURPOSE=" Purpose]
2091 [SP "HS_STATE=" HSState] [SP "REND_QUERY=" HSAddress]
2092 [SP "TIME_CREATED=" TimeCreated]
2093 [SP "OLD_PURPOSE=" Purpose [SP "OLD_HS_STATE=" HSState]] CRLF
2096 "PURPOSE_CHANGED" / ; circuit purpose or HS-related state changed
2097 "CANNIBALIZED" ; circuit cannibalized
2099 Clients MUST accept circuit events not listed above.
2101 The "OLD_PURPOSE" field is provided for both PURPOSE_CHANGED and
2102 CANNIBALIZED events. The "OLD_HS_STATE" field is provided whenever
2103 the "OLD_PURPOSE" field is provided and is a hidden-service-related
2106 Other fields are as specified in section 4.1.1 above.
2108 [First added in 0.2.3.11-alpha]
2110 5. Implementation notes
2114 If the control port is open and no authentication operation is enabled, Tor
2115 trusts any local user that connects to the control port. This is generally
2118 If the 'CookieAuthentication' option is true, Tor writes a "magic
2119 cookie" file named "control_auth_cookie" into its data directory (or
2120 to another file specified in the 'CookieAuthFile' option). To
2121 authenticate, the controller must demonstrate that it can read the
2122 contents of the cookie file:
2124 * Current versions of Tor support cookie authentication
2125 using the "COOKIE" authentication method: the controller sends the
2126 contents of the cookie file, encoded in hexadecimal. This
2127 authentication method exposes the user running a controller to an
2128 unintended information disclosure attack whenever the controller
2129 has greater filesystem read access than the process that it has
2130 connected to. (Note that a controller may connect to a process
2131 other than Tor.) It is almost never safe to use, even if the
2132 controller's user has explicitly specified which filename to read
2133 an authentication cookie from. For this reason, the COOKIE
2134 authentication method has been deprecated and will be removed from
2135 Tor before some future version of Tor.
2137 * 0.2.2.x versions of Tor starting with 0.2.2.36, and all versions of
2138 Tor after 0.2.3.12-alpha, support cookie authentication using the
2139 "SAFECOOKIE" authentication method, which discloses much less
2140 information about the contents of the cookie file.
2142 If the 'HashedControlPassword' option is set, it must contain the salted
2143 hash of a secret password. The salted hash is computed according to the
2144 S2K algorithm in RFC 2440 (OpenPGP), and prefixed with the s2k specifier.
2145 This is then encoded in hexadecimal, prefixed by the indicator sequence
2146 "16:". Thus, for example, the password 'foo' could encode to:
2147 16:660537E3E1CD49996044A3BF558097A981F539FEA2F9DA662B4626C1C2
2148 ++++++++++++++++**^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2151 You can generate the salt of a password by calling
2152 'tor --hash-password <password>'
2153 or by using the example code in the Python and Java controller libraries.
2154 To authenticate under this scheme, the controller sends Tor the original
2155 secret that was used to generate the password, either as a quoted string
2156 or encoded in hexadecimal.
2158 5.2. Don't let the buffer get too big.
2160 If you ask for lots of events, and 16MB of them queue up on the buffer,
2161 the Tor process will close the socket.
2163 5.3. Backward compatibility with v0 control protocol.
2165 The 'version 0' control protocol was replaced in Tor 0.1.1.x. Support
2166 was removed in Tor 0.2.0.x. Every non-obsolete version of Tor now
2167 supports the version 1 control protocol.
2169 For backward compatibility with the "version 0" control protocol,
2170 Tor used to check whether the third octet of the first command is zero.
2171 (If it was, Tor assumed that version 0 is in use.)
2173 This compatibility was removed in Tor 0.1.2.16 and 0.2.0.4-alpha.
2175 5.4. Tor config options for use by controllers
2177 Tor provides a few special configuration options for use by controllers.
2178 These options can be set and examined by the SETCONF and GETCONF commands,
2179 but are not saved to disk by SAVECONF.
2181 Generally, these options make Tor unusable by disabling a portion of Tor's
2182 normal operations. Unless a controller provides replacement functionality
2183 to fill this gap, Tor will not correctly handle user requests.
2185 __AllDirActionsPrivate
2187 If true, Tor will try to launch all directory operations through
2188 anonymous connections. (Ordinarily, Tor only tries to anonymize
2189 requests related to hidden services.) This option will slow down
2190 directory access, and may stop Tor from working entirely if it does not
2191 yet have enough directory information to build circuits.
2193 (Boolean. Default: "0".)
2195 __DisablePredictedCircuits
2197 If true, Tor will not launch preemptive "general-purpose" circuits for
2198 streams to attach to. (It will still launch circuits for testing and
2199 for hidden services.)
2201 (Boolean. Default: "0".)
2203 __LeaveStreamsUnattached
2205 If true, Tor will not automatically attach new streams to circuits;
2206 instead, the controller must attach them with ATTACHSTREAM. If the
2207 controller does not attach the streams, their data will never be routed.
2209 (Boolean. Default: "0".)
2211 __HashedControlSessionPassword
2213 As HashedControlPassword, but is not saved to the torrc file by
2214 SAVECONF. Added in Tor 0.2.0.20-rc.
2216 __ReloadTorrcOnSIGHUP
2218 If this option is true (the default), we reload the torrc from disk
2219 every time we get a SIGHUP (from the controller or via a signal).
2220 Otherwise, we don't. This option exists so that controllers can keep
2221 their options from getting overwritten when a user sends Tor a HUP for
2222 some other reason (for example, to rotate the logs).
2224 (Boolean. Default: "1")
2226 __OwningControllerProcess
2228 If this option is set to a process ID, Tor will periodically check
2229 whether a process with the specified PID exists, and exit if one
2230 does not. Added in Tor 0.2.2.28-beta. This option's intended use
2231 is documented in section 3.23 with the related TAKEOWNERSHIP
2234 Note that this option can only specify a single process ID, unlike
2235 the TAKEOWNERSHIP command which can be sent along multiple control
2238 (String. Default: unset.)
2240 5.5. Phases from the Bootstrap status event.
2242 This section describes the various bootstrap phases currently reported
2243 by Tor. Controllers should not assume that the percentages and tags
2244 listed here will continue to match up, or even that the tags will stay
2245 in the same order. Some phases might also be skipped (not reported)
2246 if the associated bootstrap step is already complete, or if the phase
2247 no longer is necessary. Only "starting" and "done" are guaranteed to
2248 exist in all future versions.
2250 Current Tor versions enter these phases in order, monotonically.
2251 Future Tors MAY revisit earlier stages.
2254 tag=starting summary="Starting"
2256 Tor starts out in this phase.
2259 tag=conn_dir summary="Connecting to directory mirror"
2261 Tor sends this event as soon as Tor has chosen a directory mirror --
2262 e.g. one of the authorities if bootstrapping for the first time or
2263 after a long downtime, or one of the relays listed in its cached
2264 directory information otherwise.
2266 Tor will stay at this phase until it has successfully established
2267 a TCP connection with some directory mirror. Problems in this phase
2268 generally happen because Tor doesn't have a network connection, or
2269 because the local firewall is dropping SYN packets.
2272 tag=handshake_dir summary="Finishing handshake with directory mirror"
2274 This event occurs when Tor establishes a TCP connection with a relay used
2275 as a directory mirror (or its https proxy if it's using one). Tor remains
2276 in this phase until the TLS handshake with the relay is finished.
2278 Problems in this phase generally happen because Tor's firewall is
2279 doing more sophisticated MITM attacks on it, or doing packet-level
2280 keyword recognition of Tor's handshake.
2283 tag=onehop_create summary="Establishing one-hop circuit for dir info"
2285 Once TLS is finished with a relay, Tor will send a CREATE_FAST cell
2286 to establish a one-hop circuit for retrieving directory information.
2287 It will remain in this phase until it receives the CREATED_FAST cell
2288 back, indicating that the circuit is ready.
2291 tag=requesting_status summary="Asking for networkstatus consensus"
2293 Once we've finished our one-hop circuit, we will start a new stream
2294 for fetching the networkstatus consensus. We'll stay in this phase
2295 until we get the 'connected' relay cell back, indicating that we've
2296 established a directory connection.
2299 tag=loading_status summary="Loading networkstatus consensus"
2301 Once we've established a directory connection, we will start fetching
2302 the networkstatus consensus document. This could take a while; this
2303 phase is a good opportunity for using the "progress" keyword to indicate
2306 This phase could stall if the directory mirror we picked doesn't
2307 have a copy of the networkstatus consensus so we have to ask another,
2308 or it does give us a copy but we don't find it valid.
2311 tag=loading_keys summary="Loading authority key certs"
2313 Sometimes when we've finished loading the networkstatus consensus,
2314 we find that we don't have all the authority key certificates for the
2315 keys that signed the consensus. At that point we put the consensus we
2316 fetched on hold and fetch the keys so we can verify the signatures.
2319 tag=requesting_descriptors summary="Asking for relay descriptors"
2321 Once we have a valid networkstatus consensus and we've checked all
2322 its signatures, we start asking for relay descriptors. We stay in this
2323 phase until we have received a 'connected' relay cell in response to
2324 a request for descriptors.
2327 tag=loading_descriptors summary="Loading relay descriptors"
2329 We will ask for relay descriptors from several different locations,
2330 so this step will probably make up the bulk of the bootstrapping,
2331 especially for users with slow connections. We stay in this phase until
2332 we have descriptors for at least 1/4 of the usable relays listed in
2333 the networkstatus consensus. This phase is also a good opportunity to
2334 use the "progress" keyword to indicate partial steps.
2337 tag=conn_or summary="Connecting to entry guard"
2339 Once we have a valid consensus and enough relay descriptors, we choose
2340 some entry guards and start trying to build some circuits. This step
2341 is similar to the "conn_dir" phase above; the only difference is
2344 If a Tor starts with enough recent cached directory information,
2345 its first bootstrap status event will be for the conn_or phase.
2348 tag=handshake_or summary="Finishing handshake with entry guard"
2350 This phase is similar to the "handshake_dir" phase, but it gets reached
2351 if we finish a TCP connection to a Tor relay and we have already reached
2352 the "conn_or" phase. We'll stay in this phase until we complete a TLS
2353 handshake with a Tor relay.
2356 tag=circuit_create summary="Establishing circuits"
2358 Once we've finished our TLS handshake with an entry guard, we will
2359 set about trying to make some 3-hop circuits in case we need them soon.
2362 tag=done summary="Done"
2364 A full 3-hop exit circuit has been established. Tor is ready to handle
2365 application connections now.