54 lines
1.8 KiB
Python
Executable File
54 lines
1.8 KiB
Python
Executable File
# -*-mode: python; py-indent-offset: 2; indent-tabs-mode: nil; coding: utf-8-unix -*-
|
|
# https://stem.torproject.org/tutorials/examples/exit_used.html
|
|
__doc__ = """Determine The Exit You're Using
|
|
|
|
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?
|
|
|
|
"""
|
|
|
|
import functools
|
|
import sys
|
|
import os
|
|
|
|
from stem import StreamStatus
|
|
from stem.control import EventType, Controller
|
|
from tor_controller import get_controller
|
|
|
|
def stream_event(controller, event):
|
|
if event.status == StreamStatus.SUCCEEDED and event.circ_id:
|
|
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("")
|
|
|
|
from tor_controller import get_controller
|
|
|
|
def iMain():
|
|
print("Please wait for requests for tor exits. Press 'enter' to end.")
|
|
print("")
|
|
if os.path.exists('/run/tor/control'):
|
|
controller = get_controller(unix='/run/tor/control')
|
|
else:
|
|
controller = get_controller(port=9051)
|
|
|
|
password = os.environ.get('TOR_CONTROLLER_PASSWORD')
|
|
controller.authenticate(password)
|
|
|
|
stream_listener = functools.partial(stream_event, controller)
|
|
controller.add_event_listener(stream_listener, EventType.STREAM)
|
|
|
|
if __name__ == '__main__':
|
|
iMain()
|
|
print('Press Enter')
|
|
input() # wait for user to press enter
|
|
|