{% extends "_layout.html" %} {% block title %}Socks{% endblock %} {% block content %}

Socks and socks proxies

As it says on the FAQ:

While it would be technically feasible, many applications leak sensitive information that could identify you on the internet. I2P only filters connection data, but if the program you intend to run sends this information as content, I2P has no way to protect your anonymity. For example, some mail applications will send the IP address of the machine they are running on to a mail server. There is no way for I2P to filter this, thus using I2P to 'socksify' existing applications is possible, but extremely dangerous.

However, there is code in I2P that hasn't been used in many years, if it all. It apparently was written by "human". Nobody currently working on I2P has tested it.

And quoting from a 2005 email:

... there is a reason why human and others have both built and abandonded the SOCKS proxies. Forwarding arbitrary traffic is just plain unsafe, and it behooves us as developers of anonymity and security software to have the safety of our end users foremost in our minds. Hoping that we can simply strap an arbitrary client on top of I2P without auditing both its behavior and its exposed protocols for security and anonymity is naive. Pretty much *every* application and protocol violates anonymity, unless it was designed for it specifically, and even then, most of those do too. Thats the reality. End users are better served with systems designed for anonymity and security. Modifying existing systems to work in anonymous environments is no small feat, orders of magnitude more work that simply using the existing I2P APIs.

Still Interested? Here's brief and vague guide to the code:

Client Side

No GUI support in i2ptunnel - you must start it with the command line. Run the command line as follows - adjust the I2P variable as necessary.
#!/bin/sh
export I2P=~/i2p
java -cp $I2P/lib/i2ptunnel.jar:$I2P/lib/mstreaming.jar:$I2P/lib/streaming.jar:$I2P/lib/i2p.jar net.i2p.i2ptunnel.I2PTunnel -cli $*
Now type sockstunnel portnumber and you will have a client tunnel. Type close 1 to close the tunnel and quit to quit.

Server Side

There is code for the server side in i2p/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/socks. Or maybe that's the same as the client side. Maybe the actual proxy isn't implemented. In SOCKSServer.java it says:
        // FIXME: here we should read our config file, select an
        // outproxy, and instantiate the proper socket class that
        // handles the outproxy itself (SOCKS4a, SOCKS5, HTTP CONNECT...).
So maybe that's a hint.

See Also

The notes for Meeting 81 and Meeting 82 in March 2004.

If You Do Get Something Working

Please let us know. And please provide substantial warnings about the risks of socks proxies. {% endblock %}