Click here to Skip to main content
Click here to Skip to main content
Go to top

STUN Client

, 20 Apr 2007
Rate this:
Please Sign up or sign in to vote.
STUN client C# implementation with sample application
Screenshot - stun.jpg

Introduction

STUN - Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NATs). In few words, it just helps you to map your local computer IP:port to public IP:port.

STUN working idea is pretty simple. The client just sends a UDP packet out to the STUN server and the server answers back with IP:port you connected. STUN does three tests to detect the NAT type.

In test I, the client sends a STUN Binding Request to a server, 
without any flags set in the CHANGE-REQUEST attribute, 
and without the RESPONSE-ADDRESS attribute. This causes the server 
to send the response back to the address and port that the request came from.
           
In test II, the client sends a Binding Request with both the 
"change IP" and "change port" flags from the CHANGE-REQUEST attribute set.  
              
In test III, the client sends a Binding Request with only the "change port" flag set.
                          
                                    +--------+
                                    |  Test  |
                                    |   I    |
                                    +--------+
                                         |
                                         |
                                         V
                                        /\              /\
                                     N /  \ Y          /  \ Y             +--------+
                      UDP     <-------/Resp\--------->/ IP \------------->|  Test  |
                      Blocked         \ ?  /          \Same/              |   II   |
                                       \  /            \? /               +--------+
                                        \/              \/                    |
                                                         | N                  |
                                                         |                    V
                                                         V                    /\
                                                     +--------+  Sym.      N /  \
                                                     |  Test  |  UDP    <---/Resp\
                                                     |   II   |  Firewall   \ ?  /
                                                     +--------+              \  /
                                                         |                    \/
                                                         V                     |Y
                              /\                         /\                    |
               Symmetric  N  /  \       +--------+   N  /  \                   V
                  NAT  <--- / IP \<-----|  Test  |<--- /Resp\               Open
                            \Same/      |   I    |     \ ?  /               Internet
                             \? /       +--------+      \  /
                              \/                         \/
                              |                           |Y
                              |                           |
                              |                           V
                              |                           Full
                              |                           Cone
                              V              /\
                          +--------+        /  \ Y
                          |  Test  |------>/Resp\---->Restricted
                          |   III  |       \ ?  /
                          +--------+        \  /
                                             \/
                                              |N
                                              |       Port
                                              +------>Restricted

/// <summary>
/// UDP is always blocked.
/// </summary>
UdpBlocked,

/// <summary>
/// No NAT, public IP, no firewall.
/// </summary>
OpenInternet,

/// <summary>
/// No NAT, public IP, but symmetric UDP firewall.
/// </summary>
SymmetricUdpFirewall,

/// <summary>
/// A full cone NAT is one where all requests from the same internal 
/// IP address and port are mapped to the same external IP address and port.
/// Furthermore, any external host can send a packet to the internal host, 
/// by sending a packet to the mapped external address.
/// </summary>
FullCone,

/// <summary>
/// A restricted cone NAT is one where all requests from the same
/// internal IP address and port are mapped to the same external IP address and port.
///  Unlike a full cone NAT, an external host (with IP address X) 
/// can send a packet to the internal host only if the internal host 
/// had previously sent a packet to IP address X.
/// </summary>
RestrictedCone,

/// <summary>
/// A port restricted cone NAT is like a restricted cone NAT, but the restriction 
/// includes port numbers. Specifically, an external host can send a packet, 
/// with source IP address X and source port P, to the internal host only if 
/// the internal host had previously sent a packet to IP address X and port P.
/// </summary>
PortRestrictedCone,

/// <summary>
/// A symmetric NAT is one where all requests 
/// from the same internal IP address and port, 
/// to a specific destination IP address and port, are mapped to the same external 
/// IP address and port.  If the same host sends a packet with the same source address 
/// and port, but to a different destination, a different mapping is used. 
/// Furthermore, only the external host that
/// receives a packet can send a UDP packet back to the internal host.
/// </summary>
Symmetric

Using the Code

// Create new socket for STUN client.
Socket socket = new Socket
    (AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
socket.Bind(new IPEndPoint(IPAddress.Any,0));

// Query STUN server
STUN_Result result = STUN_Client.Query("stunserver.org",3478,socket);
if(result.NetType != STUN_NetType.UdpBlocked){
    // UDP blocked or !!!! bad STUN server
}
else{
    IPEndPoint publicEP = result.PublicEndPoint;
    // Do your stuff
}

History

  • 20.04.2007 - Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Ivar Lumi

Estonia Estonia
No Biography provided

Comments and Discussions

 
GeneralRe: How i connect to remote machine using Stun PinmemberIvar Lumi26-Aug-10 20:16 
AnswerRe: How i connect to remote machine using Stun Pinmembercwienands8-Oct-10 5:23 
GeneralRe: How i connect to remote machine using Stun PinmemberIvar Lumi9-Oct-10 3:25 
QuestionISP internet connection failes after runing the client Pinmemberzugan27-May-09 7:33 
AnswerRe: ISP internet connection failes after runing the client PinmemberIvar Lumi27-May-09 8:58 
GeneralWCF interop STUN Pinmemberngocdonghack200119-Mar-09 4:10 
GeneralRe: WCF interop STUN PinmemberIvar Lumi19-Mar-09 4:29 
GeneralRe: WCF interop STUN Pinmemberngocdonghack200119-Mar-09 15:00 
GeneralRe: WCF interop STUN PinmemberIvar Lumi19-Mar-09 20:36 
GeneralRe: WCF interop STUN Pinmemberngocdonghack200120-Mar-09 5:46 
GeneralRe: WCF interop STUN PinmvpUwe Keim17-Apr-10 7:47 
GeneralRe: WCF interop STUN Pinmembercwienands8-Oct-10 5:26 
QuestionCan someone post Windows XP executable of STUN Client? Pinmembersomi123426-Nov-08 10:52 
Generaldifferent results on different servers Pinmemberprince prince16-Jul-08 13:52 
GeneralRe: different results on different servers PinmemberIvar Lumi17-Jul-08 6:45 
GeneralRe: different results on different servers Pinmemberprince prince21-Jul-08 3:46 
GeneralRe: different results on different servers PinmemberIvar Lumi21-Jul-08 7:31 
GeneralSTUN client on WM5 Pinmemberprince prince27-Jun-08 0:25 
GeneralRe: STUN client on WM5 PinmemberIvar Lumi27-Jun-08 4:14 
GeneralAny server help create tunnel between 2 peer behind NAT Pinmemberhoanglinh94668-Jun-08 23:32 
GeneralFirewall is not blocking UDP but Stun Client demo program shows UDP is blocked PinmemberSrein5-Jun-08 13:47 
GeneralRe: Firewall is not blocking UDP but Stun Client demo program shows UDP is blocked PinmemberIvar Lumi5-Jun-08 19:34 
GeneralI want to make a file transfer program !! Help me Pinmemberhoanglinh94664-Jun-08 21:30 
GeneralRe: I want to make a file transfer program !! Help me PinmemberIvar Lumi5-Jun-08 4:47 
QuestionCan it make port mapping with STUN ? PinmemberBigbermusa30-May-08 4:21 
AnswerRe: Can it make port mapping with STUN ? PinmemberIvar Lumi30-May-08 5:24 
GeneralRe: Can it make port mapping with STUN ? PinmemberBigbermusa30-May-08 6:13 
GeneralRe: Can it make port mapping with STUN ? PinmemberIvar Lumi30-May-08 7:14 
GeneralRe: Can it make port mapping with STUN ? PinmemberBigbermusa30-May-08 7:29 
GeneralRe: Can it make port mapping with STUN ? PinmemberIvar Lumi30-May-08 7:39 
GeneralRe: Can it make port mapping with STUN ? PinmemberBigbermusa30-May-08 8:09 
GeneralRe: Can it make port mapping with STUN ? PinmemberIvar Lumi30-May-08 9:12 
GeneralRe: Can it make port mapping with STUN ? PinmemberBigbermusa30-May-08 10:00 
GeneralRe: Can it make port mapping with STUN ? PinmemberIvar Lumi30-May-08 10:05 
GeneralRe: Can it make port mapping with STUN ? PinmemberBigbermusa30-May-08 10:29 
GeneralRe: Can it make port mapping with STUN ? PinmemberIvar Lumi30-May-08 19:38 
GeneralRe: Can it make port mapping with STUN ? PinmemberBigbermusa30-May-08 19:46 
GeneralSTUN - Small typo PinmemberMigounette23-May-08 23:26 
GeneralRe: STUN - Small typo PinmemberIvar Lumi26-May-08 2:17 
QuestionHow to combine with RTC API [modified] Pinmemberjan de vries16-Feb-08 7:33 
AnswerRe: How to combine with RTC API PinmemberIvar Lumi17-Feb-08 4:58 
Generalcannot run net.sln Pinmemberhafidz13-Feb-08 20:11 
GeneralRe: cannot run net.sln PinmemberIvar Lumi13-Feb-08 20:22 
GeneralRe: cannot open net.sln Pinmemberhafidz13-Feb-08 20:29 
GeneralRe: cannot open net.sln PinmemberIvar Lumi13-Feb-08 21:00 
Generaludp problem on WAN Pinmembermelfice8219-Nov-07 20:30 
GeneralRe: udp problem on WAN PinmemberIvar Lumi19-Nov-07 22:34 
Generalstill udp problem on WAN Pinmembermelfice8220-Nov-07 14:22 
Questionhelp!turn client and server PinmemberHappyWindy29-Oct-07 17:01 
AnswerRe: help!turn client and server PinmemberIvar Lumi29-Oct-07 20:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140916.1 | Last Updated 20 Apr 2007
Article Copyright 2007 by Ivar Lumi
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid