[tor-dev] bananaphone obfsproxy module

David Stainton dstainton415 at gmail.com
Sun Nov 10 21:37:46 UTC 2013


George,

Thanks for the info!

This should approximate your suggestion:
https://github.com/david415/obfsproxy/tree/david-bananaphone-managed

Let me know your suggestions for improvement.
Either way I'll work on this more soon.


Onward!

David


On Sun, Nov 10, 2013 at 3:21 AM, George Kadianakis <desnacked at riseup.net> wrote:
> David Stainton <dstainton415 at gmail.com> writes:
>
>> Hi,
>>
>> Yeah... I should add a doc string to the BaseTransport __init__
>> explaining that it runs upon connect.
>>
>> OK yesterday I implemented transport class method called setup()...
>> The BananaphoneTransport overrides setup()... storing the markov model
>> in a class attribute.
>> I had to modify pyobfsproxy.py and run the class setup() method after
>> the external cli args are parsed.
>>
>> I made it work for external cli mode... by making pyobfsproxy.py run
>> the setup method for each transport after
>> args.validation_function(args) runs... because the setup method needs
>> some args to read the corpus file and build the markov model.
>>
>> What should I do to get arguments passed to obfsproxy when running in
>> managed mode?
>>
>
> Hm. Good question.
>
> You probably want to go to obfsproxy/managed/server.py and
> obfsproxy/managed/client.py and place a strategic
> run_transport_setup() hook. I would place it before the
> launch_transport_listener() call. You might also need to use
> obfsproxy/transports/get_transport_class() somewhere in there.
>
> Another nice thing would be if you could pass the pt_config struct in
> setup(), so that transports can use pt_config elements during
> initialization. As an example, see how obfs2 configures its
> shared-secret in its __init__ using getServerTransportOptions(). That
> could be done in its setup(), I think.
>
> Does this make sense? If you don't want to do this coding, I can do it
> at some point next week.
>
> Cheers!
>
> (
> And while I'm on it, let me tell you about the different ways that you
> can pass parameters to obfsproxy. I wanted to document this somewhere,
> and this thread seems like a good excuse :)
>
> - External mode:
>   You can pass global parameters to external mode transports by using
>   the register_external_mode_cli() and validate_external_mode_cli()
>   functions.
>
> - Managed mode:
>   - Global parameters:
>     These are parameters that are passed to obfsproxy on startup.
>
>     - Server:
>       On the server-side we can pass global parameters to obfsproxy by
>       using the TOR_PT_SERVER_TRANSPORT_OPTIONS environment
>       variable. Obfsproxy exposes those parameters using the
>       transport_config struct and
>       obfsproxy/common/transport_config.py:getServerTransportOptions .
>     - Client:
>       On the client-side we don't have a way to pass global parameters
>       to obfsproxy yet. If we ever need to, we can do it with
>       environment variables here too.
>
>   - Per-connection parameters:
>     These are parameters which are supposed to be different for each
>     connection. An example of such a parameter can be a shared-secret
>     used for a specific bridge connection.
>
>     - Server:
>       On the server-side we don't have a way to pass per-connection
>       parameters at the moment.
>     - Client:
>       On the client-side we pass per-connection parameters using the
>       SOCKS handshake as a covert channel. Transports can retrieve these
>       parameters using the handle_socks_args() method.
> )


More information about the tor-dev mailing list