Click here to Skip to main content
15,886,258 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
i need to perform port forwarding in a desktop application written in C#.
i used this code :

C#
using System;
using System.Threading;
using NATUPNPLib;

namespace iSpyApplication
{
    public static class NATControl
    {
        public static UPnPNAT NAT = new UPnPNAT();
        private static IStaticPortMappingCollection _mappings;

        public static IStaticPortMappingCollection Mappings
        {
            get
            {
               if (_mappings==null)
               {

                   try
                   {
                       if (NAT.NATEventManager != null)
                        _mappings = NAT.StaticPortMappingCollection;
                   }
                   catch
                   {
                   }
               }

               return _mappings;
            }
         }

        public static bool SetPorts(int wanPort, int lanPort)
        {
           bool b = false;
           int i = 3;
           while (Mappings == null && i > 0)
           {
               Thread.Sleep(2000);
               i--;
           }

           if (Mappings != null)
           {
               try
               {
                   Mappings.Remove(wanPort, "TCP");
               }
               catch (Exception ex)
               {
                   // do something
               }
               try
               {
                   Mappings.Add(wanPort, "TCP", lanPort, internalIP, true, "iSpy");
                   b = true;
               }
               catch (Exception ex)
               {
                   // do something
               }
           }

           return b;

        } // method

  } // class    

} // namespace


UPnP is enabled in my linksys router

the code is running and not giving any errors or exceptions, however, mapping is simply not happening.

here is how i am testing it:


1. i have an application that listens to an internal port e.g. 8080.

2. i manually add a mapping entry to my router:
application : HTTP , external port 8080 , internal port 8080, protocol: TCP , internal IP , enabled

3. i request the following URL in my browser:
http : // publicIP : externalport /
4. the application receives a socket on the internal port and replies with a message.

i manually remove the mapping entry from the router and try to add it programmatically:

1. the same
2. i run a code that performs mapping
3. the same
4. browser displays the following message :

Unable to connect

Firefox can't establish a connection to the server a publicIP:externalPort

i have searched for C# code that performs mapping, and they all look the same. Why would mapping fail ?
Thanks in advance
Posted
Updated 19-Nov-12 10:47am
v3
Comments
Christian Graus 19-Nov-12 16:47pm    
you're using a third party library, so your code is not really doing the work. That makes it hard to comment
nina4ever 20-Nov-12 13:29pm    
thanks for your reply. i downloaded a sample project from here:
http://www.codeproject.com/Articles/110338/UpnpStat-List-and-Modify-Port-Mappings-on-your-UPn ...
the code is very similar to mine. i ran it, no errors occurred, but it had no effect neither!

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



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900