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
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.
Hi, Damian, thanks. I am happy to discuss it on tor-dev@. 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@xxxxxxxx> wrote:
Hi, Damian, thanks. I am happy to discuss it on tor-dev@. 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@xxxxxxxxxxxxxx> 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@xxxxxxxx> 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
|