i need to perform port forwarding in a desktop application written in C#.
i used this code :

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:

Manually :

  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.
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!

Why would mapping fail ?
Thanks in advance

Edited 3 Years Ago by Nina 4 Ever

You have an exception block with an empty catch, put something in there. Check to see if Mappings is null.

This article has been dead for over six months. Start a new discussion instead.