[tor-dev] grabbing Tor circuit (node) data- Tor stem, torrc and Tor control port
SARAH CORTES
sarah at lewis.is
Tue Jun 11 12:32:55 UTC 2013
Damian, thanks. Your summary pretty well sums up where i am trying to start. I will try this out and go from there.
On Jun 10, 2013, at 11:08 PM, Damian Johnson <atagar at torproject.org> wrote:
> Hi Sarah. I'm not really sure what you're trying to ask in most of
> these questions. Assuming that your goal is simply 'I want to connect
> to port 9051 and dump information about all the relays I'm presently
> using in my circuits' then the following should do the trick.
>
> Take the following with a grain of salt - I just wrote it, I haven't
> tried running it. Should be close though. ;)
>
> from stem.control import Controller
>
> with Controller.from_port(port = 9051) as controller:
> my_relay_fingerprints = [] # fingerprints of all relays in our circuits
>
> for circ in controller.get_circuits():
> my_relay_fingerprints += [fp for (fp, nickname) in circ.path]
>
> for fingerprint in my_relay_fingerprints:
> desc = controller.get_network_status(fingerprint)
> country = controller.get_info("ip-to-country/%s" % desc.address, "unknown")
>
> print "relay: %s:" % fingerprint
> print " address: %s:%s" % (desc.address, desc.or_port)
> print " locale: %s" % country
>
>
> Did you have any other questions?
>
> On Mon, Jun 10, 2013 at 9:43 AM, SARAH CORTES <sarah at lewis.is> wrote:
>> Damian, thanks, this is very helpful.
>>
>> is there a way to do this in torrc? Else, i suppose i will need to:
>>
>> 1) create a socket or connection to my port 9051 ; do i need/can i use
>> TORRC_CONTROL_SOCKET ?
>> 2) call get_circuits() ; grab the relay fingerprints
>> Do I need circuit = controller.get_circuit(circ_id)
>> 3) return class:`stem.events.CircuitEvent` ; for the given circuit
>> Not sure whether or where to use the "path" attribute
>> 4) call controller.get_network_status() to get IP address, nickname, ORPort,
>> Should I use:
>> desc_by_fingerprint = controller.get_network_status(test_relay.fingerprint)
>>
>> + desc_by_nickname =
>> controller.get_network_status(test_relay.nickname)
>>
>> 5) use Maxmind- i already have the GeoIPLite DB to grab AS and country, and
>> onion code also from Arturo
>>
>>
>> Any guidance is appreciated
>>
>>
>> https://lists.torproject.org/pipermail/tor-commits/2012-December/051174.html
>>
>> get_circuit(self, circuit_id, default = UNDEFINED):
>> + """
>> + Provides a circuit presently available from tor.
>> +
>> + :param int circuit_id: circuit to be fetched
>> + :param object default: response if the query fails
>> +
>> + :returns: :class:`stem.events.CircuitEvent` for the given circuit
>> +
>> + :raises:
>> + * :class:`stem.ControllerError` if the call fails
>> + * ValueError if the circuit doesn't exist
>> +
>> + An exception is only raised if we weren't provided a default
>> response.
>> + """
>> +
>> + try:
>> + for circ in self.get_circuits():
>> + if circ.id == circuit_id:
>> + return circ
>> +
>> + raise ValueError("Tor presently does not have a circuit with the id
>> of '%s'" % circuit_id)
>> + except Exception, exc:
>> + if default: return default
>> + else: raise exc
>> +
>> def get_circuits(self):
>> """
>> Provides the list of circuits Tor is currently handling.
>>
>>
>>
>> On Jun 10, 2013, at 10:34 AM, Damian Johnson <atagar at torproject.org> wrote:
>>
>> Hi, Damian, thanks. I am happy to discuss it on tor-dev at . But I want to keep
>> off spam, which some of my questions at first may be, essentially Qs. But,
>> if you think they would be of interest to tor-dev, or others could help,
>> just let me know, and i will sign up for it.
>>
>>
>> They certainly are! If you're interested in tor and development then I
>> would definitely suggest being on that list. Including it for this
>> thread.
>>
>> I am trying to figure out how to pull in the nodes that are actually used in
>> my Tor circuits. They are the nodes reflected in the Network map function.
>>
>>
>> You want the get_circuits() method. As you mentioned the 'path'
>> attribute has the relays in your present circuits...
>>
>> https://stem.torproject.org/api/control.html#stem.control.Controller.get_circuits
>>
>> I have created a MySql DB of some of my Tor circuits and nodes which i am
>> analyzing. I grabbed 48 circuits with their 144 nodes and info (IP address,
>> nickname, country) manually from my laptop's Tor network map.
>>
>>
>> That certainly sounds painful. The circuit paths will provide the
>> relay fingerprints which you can use for get_network_status() to get
>> the address, nickname, ORPort, etc...
>>
>> https://stem.torproject.org/api/control.html#stem.control.Controller.get_network_status
>>
>> As for locales that would be done via get_info('ip-to-country/<address>')...
>>
>> https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt#l672
>>
>> ... and ultimately to AS and country.
>>
>>
>> AS will require the Maxmind AS database or something else. I know that
>> Onionoo includes the AS information so the options that come to mind
>> are either to (a) see how it does it or (b) query Onionoo for this
>> information.
>>
>> https://onionoo.torproject.org/
>>
>> And i have read much of the control-spec, don't know how much is out of date
>>
>>
>> The control-spec should be up to date. If there are any inaccuracies
>> then please let us know!
>>
>> Did you have any other questions? -Damian
>>
>> On Mon, Jun 10, 2013 at 4:44 AM, SARAH CORTES <sarah at lewis.is> wrote:
>>
>> Hi, Damian, thanks. I am happy to discuss it on tor-dev at . But I want to keep
>> off spam, which some of my questions at first may be, essentially Qs. But,
>> if you think they would be of interest to tor-dev, or others could help,
>> just let me know, and i will sign up for it.
>>
>> For example, I am trying to figure out how to pull in the nodes that are
>> actually used in my Tor circuits. They are the nodes reflected in the
>> Network map function. I have read your fine stem tutorials, it is so
>> impressive you have dome so much work and documentation on your own
>> initiative. It is certainly a huge help to me and otter researchers like me.
>>
>> I have created a MySql DB of some of my Tor circuits and nodes which i am
>> analyzing. I grabbed 48 circuits with their 144 nodes and info (IP address,
>> nickname, country) manually from my laptop's Tor network map. I am analyzing
>> their country, so I am seeking to map nickname or fingerprint of the node to
>> IP address and ultimately to AS and country. Ultimately, I am analyzing
>> jurisdictional arbitrage and the hostility factors of differ countries to
>> Tor traffic, and whether it is possible to incorporate country or AS in to
>> the Tor path algorithm.
>>
>> I can see the entry guard nicknames and fingerprints in my state file and
>> pick them up there, if necessary. Wish i could just edit the logs to display
>> all nodes, then figure out how to map the node fingerprint or nickname to
>> its IP address them AS and country. I understand there is a Tor atlas
>> function but have not read it carefully yet.
>>
>> I have read documentation on the contents of the consensus file, the
>> descriptors, geoip and state files, and played around with them a bit to
>> understand them. I grasp that a fingerprint is a hash of the node's public
>> key, and one or both of which seem to be the most reliable ID for a node.
>>
>> I can see from your documentation that variable path(nickname, fingerprint)
>> contains the data i want. Just need to be able to get that data easily. Not
>> sure if editing my torrc file is the way or what. If you have any
>> suggestions, they are much appreciated.
>>
>> And i have read much of the control-spec, don't know how much is out of date
>> https://gitweb.torproject.org/torspec.git/blob/HEAD:/control-spec.txt
>>
>> I have read this on modifying torrc, and played around with modifying torrc,
>> on an elementary basis:
>> https://www.torproject.org/docs/faq.html.en#torrc
>>
>> and some tickets on modifying torrc
>> https://trac.torproject.org/projects/tor/ticket/6147
>>
>> and what I believe is your excellent documentation on stem events;
>> https://stem.torproject.org/api/response.html#stem.response.events.BandwidthEvent
>>
>>
>>
>>
>>
>>
>>
>> On Jun 8, 2013, at 2:31 PM, Damian Johnson <atagar at torproject.org> wrote:
>>
>> Hi Sarah. Yup, I'd be more than happy to help if you have any stem
>> questions. Email would definitely be better since we look to keep
>> missing each other on irc. I'd appreciate it though if we discussed it
>> on the tor-dev@ email list...
>>
>> https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev
>>
>> On Sat, Jun 8, 2013 at 3:42 AM, SARAH CORTES <sarah at lewis.is> wrote:
>>
>> Hi Damian, I'm Sarah Cortes, a researcher. I tried you on irc on #tor-dev
>> but was unable to reach you. We met at the tor dev meeting which i attended
>> in March. I have some Qs for you regarding stem. Please let me know if you
>> are available, thanks
>>
>>
>>
More information about the tor-dev
mailing list