2

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

linksys ルーターで UPnP が有効になっている

コードは実行されており、エラーや例外は発生していませんが、マッピングは行われていません。

ここに私がそれをテストする方法があります:

  1. 8080 などの内部ポートをリッスンするアプリケーションがあります。
  2. ルーターに手動でマッピング エントリを追加します。

    アプリケーション: HTTP 、外部ポート 8080 、内部ポート 8080、プロトコル: TCP 、内部 IP 、有効

  3. ブラウザで次の URL を要求します: http : // publicIP : externalport /

  4. アプリケーションは内部ポートでソケットを受信し、メッセージで応答します。

マッピング エントリを削除し、プログラムで追加してみます

  1. 同じ
  2. マッピングを実行するコードを実行します
  3. 同じ
  4. ブラウザに次のメッセージが表示されます。

    つなげられない

    Firefox が publicIP:externalPort でサーバーへの接続を確立できない

マッピングを実行する C# コードを検索しましたが、それらはすべて同じように見えます。マッピングが失敗するのはなぜですか? 前もって感謝します

4

1 に答える 1