On Jun 17, 2010, at 9:37 AM, Stefan Reich wrote:

I'm not sure about Deluge, but <http://divmod.org/trac/wiki/DivmodVertex> does some NAT hole-punching.  It does it via sending UDP packets though, not by communicating directly with your router.

Yeah, I found that too... it looks quite interesting, but as you say, it 
is UDP-based. I know that there is a working TCP-solution. As I said, 
Deluge does it, and for example, the original Bittorrent client does it too.

For what it's worth, Vertex includes an *implementation* of TCP, on top of UDP instead of IP.  You can run any Twisted stream-based protocol with Vertex, you don't need to send UDP datagrams around.

(In fact, Vertex _only_ provides a stream-based transport; the UDP part is an implementation detail.  If possible, vertex will try to use TCP first, and could be modified to use a techniques such as the ones described in <http://www.brynosaurus.com/pub/net/p2pnat/> section 4 to speak real TCP instead.)