[Twisted-Python] Punching a firewall with (or without) Twisted - the plot thickens

Stefan Reich wertiges.produkt at googlemail.com
Thu Jun 17 14:53:00 EDT 2010


lasizoillo wrote:
> I don't know if this is Deluge's method, but sounds interesting:
> http://samy.pl/natpin/?port=80
>   
Hm. That's another kind of hack, and it didn't work for me.
> If you don't want see deluge code, maybe you want use a sniffer.
> Wireshark is great for these things ;-)
> http://www.wireshark.org/
>   
Wireshark! What a nice tool that wasn't on my radar before. Thanks for 
this, it really helped.

Using Wireshark, I found out that both Bittorrent and Deluge talk to the 
gateway via UPNP for opening the port. It all works over HTTP, so it's 
really easy to see what's going on.

These are the steps:

1. Find out the gateway IP (192.168.0.1 or some such)

2. GET http://{gateway}/desc.xml. This makes the gateway print some 
information about itself (make & model and so on). Not sure why this is 
needed. Maybe the protocol is different for different gateways. Or to 
make sure that there is a gateway at all. Or maybe there is some detail 
information in there that is needed for the next steps.

3. Also sent to the gateway: POST /upnp/control3 with some XML/SOAP data 
containing a command called AddPortMapping.

It looks really easy, like you could reprogram this in a few lines, with 
a SOAP library, or even just manual XML. There's also a command called 
DeletePortMapping for proper cleanup.

And it seems like Twisted may actually not even be involved in Deluge's 
port opening code.

Ah. I'm really quite satisfied. I heard that there are tricks to open 
firewalls (Skype's been doing this for ages), but I didn't know that 
there is such an elegant solution.

Cheers and thanks for the hints,
Stefan



More information about the Twisted-Python mailing list