Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > UDP packets to PC behind NAT

Reply
Thread Tools

UDP packets to PC behind NAT

 
 
Janto Dreijer
Guest
Posts: n/a
 
      09-15-2006
This is probably more of a networking question than a Python one, but
it would be nice to know if someone has done this with Python's socket
module. And besides one usually gets more information from c.l.py than
anywhere else

I have a server with a static "public" IP and a client behind a NAT. I
would like to send UDP packets from the server to the client. So what I
need to do is open up a "hole" in the NAT and let the server know the
target IP and port of the client where it can send its packets.

Now I have read somewhere that you can have TCP and UDP running on the
same port. Not sure if this is true. Would it be a reasonable solution
to initiate a TCP connection from the client to the server and somehow
(?) let the server figure out how the client is connecting? And then
send UDP to client over the same (IP, port)?

 
Reply With Quote
 
 
 
 
Christophe
Guest
Posts: n/a
 
      09-15-2006
Janto Dreijer a écrit :
> This is probably more of a networking question than a Python one, but
> it would be nice to know if someone has done this with Python's socket
> module. And besides one usually gets more information from c.l.py than
> anywhere else
>
> I have a server with a static "public" IP and a client behind a NAT. I
> would like to send UDP packets from the server to the client. So what I
> need to do is open up a "hole" in the NAT and let the server know the
> target IP and port of the client where it can send its packets.
>
> Now I have read somewhere that you can have TCP and UDP running on the
> same port. Not sure if this is true. Would it be a reasonable solution
> to initiate a TCP connection from the client to the server and somehow
> (?) let the server figure out how the client is connecting? And then
> send UDP to client over the same (IP, port)?


Initiate an UDP connection from the client to the server and have the
server send back the UDP packets to the address you get in the
"recvfrom" result.
 
Reply With Quote
 
 
 
 
Janto Dreijer
Guest
Posts: n/a
 
      09-15-2006
Awesome! I haven't tested it on the actual server but I think it works.
Thanks!
I prefer a TCP connection solution and will post one if it works.

server.py
========
from socket import *
print "listening"
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(("localhost", 1234)) # visibility to outside world
payload, addr = UDPSock.recvfrom(1024)
print "message from %s: %s" % (`addr`, payload)
UDPSock = socket(AF_INET, SOCK_DGRAM) # open UDP socket
result = UDPSock.sendto("your public address is %s" % `addr`, addr)

client.py
=====
from socket import *
UDPSock = socket(AF_INET, SOCK_DGRAM) # open UDP socket
result = UDPSock.sendto("what's my public address?", ("localhost",
1234))
payload, addr = UDPSock.recvfrom(1024)
print payload

results:
====
listening
message from ('127.0.0.1', 32787): what's my public address?

your public address is ('127.0.0.1', 32787)

 
Reply With Quote
 
Grant Edwards
Guest
Posts: n/a
 
      09-15-2006
On 2006-09-15, Christophe <> wrote:

> Initiate an UDP connection from the client to the server and
> have the server send back the UDP packets to the address you
> get in the "recvfrom" result.


There's no such thing as a "UDP connection", so I don't
understand what you're suggesting.

--
Grant Edwards grante Yow! By MEER biz doo
at SCHOIN...
visi.com
 
Reply With Quote
 
Grant Edwards
Guest
Posts: n/a
 
      09-15-2006
On 2006-09-15, Janto Dreijer <> wrote:

> I have a server with a static "public" IP and a client behind a NAT. I
> would like to send UDP packets from the server to the client. So what I
> need to do is open up a "hole" in the NAT and let the server know the
> target IP and port of the client where it can send its packets.
>
> Now I have read somewhere that you can have TCP and UDP running on the
> same port.


True.

> Not sure if this is true.


It is.

> Would it be a reasonable solution to initiate a TCP connection
> from the client to the server and somehow (?) let the server
> figure out how the client is connecting? And then send UDP to
> client over the same (IP, port)?


I doubt that will work unless the firewall has been
specifically designed to recognize that pattern of activity and
allow the incoming UDP packets. I don't think most firewall
have default rules that allow UDP packets to tunnel back along
a TCP connection.

--
Grant Edwards grante Yow! Clear the
at laundromat!! This
visi.com whirl-o-matic just had a
nuclear meltdown!!
 
Reply With Quote
 
Janto Dreijer
Guest
Posts: n/a
 
      09-15-2006
Oops. That second UDPSock = socket(...) in the server.py shouldn't be
there.

Janto Dreijer wrote:
> Awesome! I haven't tested it on the actual server but I think it works.
> Thanks!
> I prefer a TCP connection solution and will post one if it works.
>
> server.py
> ========
> from socket import *
> print "listening"
> UDPSock = socket(AF_INET, SOCK_DGRAM)
> UDPSock.bind(("localhost", 1234)) # visibility to outside world
> payload, addr = UDPSock.recvfrom(1024)
> print "message from %s: %s" % (`addr`, payload)
> UDPSock = socket(AF_INET, SOCK_DGRAM) # open UDP socket
> result = UDPSock.sendto("your public address is %s" % `addr`, addr)
>
> client.py
> =====
> from socket import *
> UDPSock = socket(AF_INET, SOCK_DGRAM) # open UDP socket
> result = UDPSock.sendto("what's my public address?", ("localhost",
> 1234))
> payload, addr = UDPSock.recvfrom(1024)
> print payload
>
> results:
> ====
> listening
> message from ('127.0.0.1', 32787): what's my public address?
>
> your public address is ('127.0.0.1', 32787)


 
Reply With Quote
 
Janto Dreijer
Guest
Posts: n/a
 
      09-15-2006
Grant Edwards wrote:
> On 2006-09-15, Christophe <> wrote:
>
> > Initiate an UDP connection from the client to the server and
> > have the server send back the UDP packets to the address you
> > get in the "recvfrom" result.

>
> There's no such thing as a "UDP connection", so I don't
> understand what you're suggesting.


I think he means "connection" as in "associated ip/port". Which
actually does work, as I've posted.

 
Reply With Quote
 
Janto Dreijer
Guest
Posts: n/a
 
      09-15-2006
Grant Edwards wrote:
> On 2006-09-15, Janto Dreijer <> wrote:

....
> > Would it be a reasonable solution to initiate a TCP connection
> > from the client to the server and somehow (?) let the server
> > figure out how the client is connecting? And then send UDP to
> > client over the same (IP, port)?

>
> I doubt that will work unless the firewall has been
> specifically designed to recognize that pattern of activity and
> allow the incoming UDP packets. I don't think most firewall
> have default rules that allow UDP packets to tunnel back along
> a TCP connection.


Thanks for the info!

I think you may be right. I had to configure the local firewall to
allow all connections from the server. Which kinda defeats the purpose.
If you have control over the NAT why not just assign a dedicated port?

There might still be value in this approach, however. Even though I
have control over the NAT I have multiple clients that might need to
create these connections. I would need to map ports to be able to
handle simultaneous connections.

It's Friday afternoon over here, so I may be wrong...

 
Reply With Quote
 
Steve Holden
Guest
Posts: n/a
 
      09-15-2006
Janto Dreijer wrote:
> Grant Edwards wrote:
>
>>On 2006-09-15, Janto Dreijer <> wrote:

>
> ....
>
>>>Would it be a reasonable solution to initiate a TCP connection
>>>from the client to the server and somehow (?) let the server
>>>figure out how the client is connecting? And then send UDP to
>>>client over the same (IP, port)?

>>
>>I doubt that will work unless the firewall has been
>>specifically designed to recognize that pattern of activity and
>>allow the incoming UDP packets. I don't think most firewall
>>have default rules that allow UDP packets to tunnel back along
>>a TCP connection.

>
>
> Thanks for the info!
>
> I think you may be right. I had to configure the local firewall to
> allow all connections from the server. Which kinda defeats the purpose.
> If you have control over the NAT why not just assign a dedicated port?
>
> There might still be value in this approach, however. Even though I
> have control over the NAT I have multiple clients that might need to
> create these connections. I would need to map ports to be able to
> handle simultaneous connections.
>
> It's Friday afternoon over here, so I may be wrong...
>

Note that TCP and UDP port spaces are disjoint, so there's no way for
TCP and UDP to use "the same port" - they can, however, use the same
port number. Basically the TCP and UDP spaces have nothing to do with
each other.

Most dynamic NAT gateways will respond to an outgoing UDP datagram by
mapping the internal client's UDP port to a UDP port on the NAT
gateway's external interface, and setting a converse mapping that will
allow the server to respond, even though technically there isn't a
"connection". The NAT table entries will typically be timed out after a
short period of non-use.

regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://holdenweb.blogspot.com
Recent Ramblings http://del.icio.us/steve.holden

 
Reply With Quote
 
Janto Dreijer
Guest
Posts: n/a
 
      09-16-2006
Steve Holden wrote:
> Note that TCP and UDP port spaces are disjoint, so there's no way for
> TCP and UDP to use "the same port" - they can, however, use the same
> port number. Basically the TCP and UDP spaces have nothing to do with
> each other.
>
> Most dynamic NAT gateways will respond to an outgoing UDP datagram by
> mapping the internal client's UDP port to a UDP port on the NAT
> gateway's external interface, and setting a converse mapping that will
> allow the server to respond, even though technically there isn't a
> "connection". The NAT table entries will typically be timed out after a
> short period of non-use.


So are you saying one can't use TCP to punch a hole for UDP?

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Debug UDP Packets on Cisco 2948 with CatOS Michael Mueller Cisco 0 12-20-2006 12:54 PM
UDP Packets dropping asr Cisco 5 12-28-2005 05:05 PM
UDP Packets dropping asr Cisco 0 12-22-2005 09:50 PM
receive udp packets on windows xp Andrew Chin Java 3 12-08-2005 05:21 AM
What is win32sl.exe and why does my firewall keep detecting UDP packets to it? Steve Freides Computer Support 7 06-03-2004 12:36 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57