[BangPypers] UDP Hole Punching using python

Senthil Kumaran orsenthil at gmail.com
Sat Feb 26 03:39:11 CET 2011


On Sat, Feb 26, 2011 at 06:48:51AM +0530, kunal ghosh wrote:
> On Sat, Feb 26, 2011 at 6:37 AM, Senthil Kumaran <orsenthil at gmail.com>wrote:
> 
> > On Fri, Feb 25, 2011 at 08:42:31PM +0530, kunal ghosh wrote:
> > > step 1: holepunch , send UDP packet from receiver to sender
> > > from socket import *
> > > s = socket(AF_INET,SOCK_DGRAM)
> > > host = "<receiver ip>"
> > > port = <receiver port>
> > > s.bind((host,port))
> > > s.sendto("Message",("<sender ip>",<sender port>))
> > >
> > > here i get the following error
> > > *error: [Errno 22] Invalid argument*
> > > i dunno how to resolve this issue.
> >
> > Don't use the bind call in the UDP client.Make sure your ipaddress is
> > proper.Otherwise your code looks fine.
> >
> 
> I am using the bind call to make sure i use a specific source port to send
> the message.

Could you try that and the suggestion work?
BTW, there is "No Harm" in actually binding to a port while sending.

> Is there any other way that can be achieved ?

s.bind(("",55447) # Ask it to use any interface by using ""

So, I think your original problem was with some invalid values.

> How can the sender know which port was used to send the packet , after the
> packet was sent ?

After you do the sendto call, you can get the sender's socket
information port by

s.getsocketname()[1]


-- 
Senthil


More information about the BangPypers mailing list