Skip to main content

Documentation at https://txtorcon.readthedocs.org

https://travis-ci.org/meejah/txtorcon.png?branch=master https://coveralls.io/repos/meejah/txtorcon/badge.png http://api.flattr.com/button/flattr-badge-large.png

quick start

For the impatient, there are two quick ways to install this:

$ pip install txtorcon

… or, if you checked out or downloaded the source:

$ python setup.py install

… or, better yet, use a virtualenv and the dev requirements:

$ virtualenv venv
$ ./venv/bin/pip install -e .[dev]

For OSX, we can install txtorcon with the help of easy_install:

$ easy_install txtorcon

To avoid installing, you can just add the base of the source to your PYTHONPATH:

$ export PYTHONPATH=`pwd`:$PYTHONPATH

Then, you will want to explore the examples. Try “python examples/stream_circuit_logger.py” for instance.

On Debian testing (jessie), or with wheezy-backports (big thanks to Lunar^ for all his packaging work) you can install easily:

$ apt-get install python-txtorcon

You may also like this asciinema demo for an overview.

Tor configuration

You’ll want to have the following options on in your torrc:

CookieAuthentication 1
CookieAuthFileGroupReadable 1

If you want to use unix sockets to speak to tor:

ControlSocketsGroupWritable 1
ControlSocket /var/run/tor/control

The defaults used by py:meth:txtorcon.build_local_tor_connection will find a Tor on 9051 or /var/run/tor/control

overview

txtorcon is a Twisted-based asynchronous Tor control protocol implementation. Twisted is an event-driven networking engine written in Python and Tor is an onion-routing network designed to improve people’s privacy and anonymity on the Internet.

The main abstraction of this library is txtorcon.TorControlProtocol which presents an asynchronous API to speak the Tor client protocol in Python. txtorcon also provides abstractions to track and get updates about Tor’s state (txtorcon.TorState) and current configuration (including writing it to Tor or disk) in txtorcon.TorConfig, along with helpers to asynchronously launch slave instances of Tor including Twisted endpoint support.

txtorcon runs all tests cleanly on:

  • Debian “squeeze”, “wheezy” and “jessie”

  • OS X 10.4 (naif)

  • OS X 10.8 (lukas lueg)

  • OS X 10.9 (kurt neufeld)

  • Fedora 18 (lukas lueg)

  • FreeBSD 10 (enrique fynn) (needed to install “lsof”)

  • RHEL6

  • Reports from other OSes appreciated.

If instead you want a synchronous (threaded) Python controller library, check out Stem at https://stem.torproject.org/

quick implementation overview

txtorcon provides a class to track Tor’s current state – such as details about routers, circuits and streams – called txtorcon.TorState and an abstraction to the configuration values via txtorcon.TorConfig which provides attribute-style accessors to Tor’s state (including making changes). txtorcon.TorState provides txtorcon.Router, txtorcon.Circuit and txtorcon.Stream objects which implement a listener interface so client code may receive updates (in real time) including Tor events.

txtorcon uses trial for unit-tests and has 100% test-coverage – which is not to say I’ve covered all the cases, but nearly all of the code is at least exercised somehow by the unit tests.

Tor itself is not required to be running for any of the tests. ohcount claims around 2000 lines of code for the core bit; around 4000 including tests. About 37% comments in the not-test code.

There are a few simple integration tests, based on Docker. More are always welcome!

dependencies / requirements

  • twisted: txtorcon should work with any

    Twisted 11.1.0 or newer. Twisted 15.4.0+ works with Python3, and so does txtorcon (if you find something broken on Py3 please file a bug).

  • GeoIP: optional provides location information for ip addresses; you will want to download GeoLite City from MaxMind or pay them for more accuracy. Or use tor-geoip, which makes this sort-of optional, in that we’ll query Tor for the IP if the GeoIP database doesn’t have an answer. It also does ASN lookups if you installed that MaxMind database.

  • python-ipaddr: optional. Google’s IP address manipulation code.

  • development: Sphinx if you want to build the documentation. In that case you’ll also need something called python-repoze.sphinx.autointerface (at least in Debian) to build the Interface-derived docs properly.

  • development: coverage to run the code-coverage metrics, and Tox

  • optional: GraphViz is used in the tests (and to generate state-machine diagrams, if you like) but those tests are skipped if “dot” isn’t in your path

In any case, on a Debian wheezy, squeeze or Ubuntu system, this should work:

apt-get install -y python-setuptools python-twisted python-ipaddr python-geoip graphviz tor
apt-get install -y python-sphinx python-repoze.sphinx.autointerface python-coverage # for development

Using pip this would be:

pip install Twisted ipaddr pygeoip
pip install GeoIP Sphinx repoze.sphinx.autointerface coverage  # for development

or:

pip install -r requirements.txt
pip install -r dev-requirements.txt

or for the bare minimum:

pip install Twisted  # will install zope.interface too

documentation

It is likely that you will need to read at least some of control-spec.txt from the torspec git repository so you know what’s being abstracted by this library.

Run “make doc” to build the Sphinx documentation locally, or rely on ReadTheDocs https://txtorcon.readthedocs.org which builds each tagged release and the latest master.

There is also a directory of examples/ scripts, which have inline documentation explaining their use.

contact information

For novelty value, the Web site (with built documentation and so forth) can be viewed via Tor at http://timaq4ygg2iegci7.onion although the code itself is hosted via git:

torsocks git clone git://timaq4ygg2iegci7.onion/txtorcon.git

or:

git clone git://github.com/meejah/txtorcon.git

You may contact me via meejah at meejah dot ca with GPG key 0xC2602803128069A7 or see meejah.asc in the repository. The fingerprint is 9D5A 2BD5 688E CB88 9DEB CD3F C260 2803 1280 69A7.

It is often possible to contact me as meejah in #tor-dev on OFTC but be patient for replies (I do look at scrollback, so putting “meejah: “ in front will alert my client).

More conventionally, you may get the code at GitHub and documentation via ReadTheDocs:

Please do use the GitHub issue-tracker to report bugs. Patches, pull-requests, comments and criticisms are all welcomed and appreciated.

Release files for txtorcon 0.14.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for txtorcon 0.14.2
File Size Uploaded
txtorcon-0.14.2.tar.gz 214.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for txtorcon 0.14.2
File Interpreter ABI Platform
txtorcon-0.14.2-py2-none-any.whl Python 2 none any Details

Total release size: 405.1 kB

Release files / txtorcon-0.14.2.tar.gz

Download URL txtorcon-0.14.2.tar.gz
Size 214.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f99819b1a71b8dea9e80317ec83c990b4ff608c98bc78a9fc1dc9991d349d13f
BLAKE2b-256 checksum
How to use checksums
69f957b6179ba15c111f4926284a16a4486bdc3648508feeb72a93d203eb9b3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / txtorcon-0.14.2-py2-none-any.whl

Download URL txtorcon-0.14.2-py2-none-any.whl
Size 190.2 kB
Tags Python 2
SHA-256 checksum
How to use checksums
fbc95c41e924b0e10156c46227eac2b4acf42a3b8d01f0ea3022897a10dc059a
BLAKE2b-256 checksum
How to use checksums
0fe00d84a7e0b26cf878fab505754ef202ab3e26f23f63b32022d42fe5206b4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

24.8.0

2 release files

23.5.0

2 release files

23.0.0

2 release files

22.0.0

2 release files

21.1.0

2 release files

19.1.0

2 release files

19.0.0

2 release files

18.1.0

2 release files

18.0.1

2 release files

18.0.0

2 release files

0.20.0

2 release files

0.19.3

2 release files

0.19.2

2 release files

0.19.1

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.15.1

2 release files

0.15.0

2 release files

This release

0.14.2 This release

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.11.0

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.2

1 release file

0.8.1

1 release file

0.8.0

1 release file

0.7

1 release file

0.6

1 release file

0.5

1 release file

0.4

1 release file

0.3

1 release file

0.2

1 release file

0.1

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page