File: exit_used.rst

package info (click to toggle)
python-stem 1.2.2-1.1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 4,568 kB
  • ctags: 2,036
  • sloc: python: 20,108; makefile: 127; sh: 3
file content (76 lines) | stat: -rw-r--r-- 2,217 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Determine The Exit You're Using
===============================

.. image:: /_static/buttons/back.png
   :target: ../double_double_toil_and_trouble.html

Lets say you're using Tor and one day you run into something odd. Maybe a
misconfigured relay, or maybe one that's being malicious. How can you figure
out what exit you're using?

Here's a simple script that prints information about the exits used to service
the requests going through Tor...

::

  import functools

  from stem import StreamStatus
  from stem.control import EventType, Controller

  def main():
    print "Tracking requests for tor exits. Press 'enter' to end."
    print

    with Controller.from_port() as controller:
      controller.authenticate()

      stream_listener = functools.partial(stream_event, controller)
      controller.add_event_listener(stream_listener, EventType.STREAM)

      raw_input()  # wait for user to press enter


  def stream_event(controller, event):
    if event.status == StreamStatus.SUCCEEDED:
      circ = controller.get_circuit(event.circ_id)

      exit_fingerprint = circ.path[-1][0]
      exit_relay = controller.get_network_status(exit_fingerprint)

      print "Exit relay for our connection to %s" % (event.target)
      print "  address: %s:%i" % (exit_relay.address, exit_relay.or_port)
      print "  fingerprint: %s" % exit_relay.fingerprint
      print "  nickname: %s" % exit_relay.nickname
      print "  locale: %s" % controller.get_info("ip-to-country/%s" % exit_relay.address, 'unknown')
      print


  if __name__ == '__main__':
    main()

Now if you make a request over Tor...

::

  % curl --socks4a 127.0.0.1:9050 google.com
  <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
  <TITLE>301 Moved</TITLE></HEAD><BODY>
  <H1>301 Moved</H1>
  The document has moved
  <A HREF="http://www.google.com/">here</A>.
  </BODY></HTML>

... this script will tell you about the exit...

::

  % python exit_used.py
  Tracking requests for tor exits. Press 'enter' to end.

  Exit relay for our connection to 64.15.112.44:80
    address: 31.172.30.2:443
    fingerprint: A59E1E7C7EAEE083D756EE1FF6EC31CA3D8651D7
    nickname: chaoscomputerclub19
    locale: unknown