[tor-dev] oppy - an Onion Proxy in Python

Nik nskinkel at iastate.edu
Tue Jan 20 00:15:06 UTC 2015

Hi tor-dev,

I care deeply about the ability for people to have anonymity online, and
I've always been really interested in exactly how Tor works.

So for a class project last semester I wrote oppy, an onion proxy in
100% Python.  I spent most of my winter break cleaning it up and writing
documentation, and today I'm releasing oppy as a free software project :)

code: https://github.com/nskinkel/oppy
docs: https://nskinkel.github.com/oppy

Here's a brief description of the project, with some questions I have
for tor-devs at the end.

@@@ WARNING @@@

*DO NOT* use oppy if you want anonymity (see warnings on the project
README and the documentation homepage). It's currently just a prototype
and is not meant for normal client usage.

oppy works like a regular Tor client (i.e. any application that can use
SOCKS 5 can use oppy), and it can even work with the Tor Browser Bundle
if you fiddle with the TorButton settings to use oppy instead of the
normal Tor process.  See: https://nskinkel.github.io/oppy/usage.html

There are a number of simplifications made, with the major ones
primarily centering around circuit management/build logic and how and
when network status documents are collected (see: simplifications.md in
the repo or https://nskinkel.github.io/oppy/simplifications.html).  So
oppy doesn't currently work *exactly* the same as a standard Tor OP
according to tor-spec.

oppy seems to get reasonable performance (for an OP at least). I haven't
done any serious performance tests so this is all anecdotal, but oppy
seems to work fast enough for normal usage (e.g. I can generally stream
videos without issues).

I hope anyone on this list who is interested will try it out and/or have
a look at the code! :)

I have a few questions for tor-devs:

1. Do you think this project is/could be interesting, useful, or
potentially beneficial as an addition to the world of Tor software?

2. If so, do you see any major use-cases for oppy? At this point it's
still really just a prototype, so if anyone has some really cool
use-cases for oppy I could try to design future modifications to support
them.  Some things I had considered so far:

    - a tool for research and/or rapidly prototyping new protocol
modifications (e.g. new kinds of handshakes, circuit management
behavior, or path selection)

    - a tool for testing/fuzzing Tor. With a few modifications, oppy
could pretty easily be turned into a somewhat-advanced fuzzer (e.g. it'd
be easy to do something like "After building C circuits and sending R
relay data cells on circuit X, send N number of malformed cells of type
Y to the middle node on circuit X").

    - a drop-in OP replacement for specialized applications. oppy is
still a pretty long way from this being a viable option, but maybe
someday people could use oppy as a regular Tor client for certain
use-cases (e.g. if someone wants to ship a full Python Tor stack for a
locked down, special-purpose application using Tor).

3. If yes to 1 or 2, would anyone here be interested in hacking on oppy
with me? :)

I had a *ton* of fun building oppy and learned a lot about Tor in the
process, and I'd love to continue working on it.

I'm currently thinking about what a project roadmap for oppy could look
like, but whether or not I continue hacking on oppy to make it a solid
piece of software (rather than just a prototype) or just leave it as is
as a reference depends on whether or not the Tor development community
sees any real uses or future potential for the project.

Thanks for reading!

All the best,

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.torproject.org/pipermail/tor-dev/attachments/20150119/8462c85b/attachment.sig>

More information about the tor-dev mailing list