Răsfoiți Sursa

Update simple console version

Bruce Wayne 5 ani în urmă
părinte
comite
a6051161ac

+ 2 - 2
NatTypeTester-Console/NatTypeTester_Console.csproj

@@ -1,8 +1,8 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
 
   <PropertyGroup>
   <PropertyGroup>
     <OutputType>Exe</OutputType>
     <OutputType>Exe</OutputType>
-    <TargetFramework>netcoreapp3.0</TargetFramework>
+    <TargetFrameworks>net472;net48;netcoreapp3.1</TargetFrameworks>
     <RootNamespace>NatTypeTester_Console</RootNamespace>
     <RootNamespace>NatTypeTester_Console</RootNamespace>
   </PropertyGroup>
   </PropertyGroup>
 
 

+ 20 - 5
NatTypeTester-Console/Program.cs

@@ -1,15 +1,21 @@
 using STUN.Utils;
 using STUN.Utils;
 using System;
 using System;
+using System.Net;
+using System.Threading.Tasks;
 
 
 namespace NatTypeTester_Console
 namespace NatTypeTester_Console
 {
 {
     internal static class Program
     internal static class Program
     {
     {
-        private static void Main(string[] args)
+        /// <summary>
+        /// stun.qq.com 3478 0.0.0.0:0
+        /// </summary>
+        private static async Task Main(string[] args)
         {
         {
             var server = @"stun.qq.com";
             var server = @"stun.qq.com";
             ushort port = 3478;
             ushort port = 3478;
-            if (args.Length > 0)
+            IPEndPoint local = null;
+            if (args.Length > 0 && (Uri.CheckHostName(args[0]) == UriHostNameType.Dns || IPAddress.TryParse(args[0], out _)))
             {
             {
                 server = args[0];
                 server = args[0];
             }
             }
@@ -17,9 +23,18 @@ namespace NatTypeTester_Console
             {
             {
                 ushort.TryParse(args[1], out port);
                 ushort.TryParse(args[1], out port);
             }
             }
-            var res = NetUtils.NatTypeTestCore(NetUtils.DefaultLocalEnd, server, port);
-            var natType = res.Item1;
-            Console.WriteLine(string.IsNullOrWhiteSpace(natType) ? @"Error" : natType);
+            if (args.Length > 2)
+            {
+                local = NetUtils.ParseEndpoint(args[2]);
+            }
+
+            var res = await NetUtils.NatBehaviorDiscovery(server, port, local);
+            Console.WriteLine($@"Other address is {res.OtherEndPoint}");
+            Console.WriteLine($@"Binding test: {res.BindingTestResult}");
+            Console.WriteLine($@"Local address: {res.LocalEndPoint}");
+            Console.WriteLine($@"Mapped address: {res.PublicEndPoint}");
+            Console.WriteLine($@"Nat mapping behavior: {res.MappingBehavior}");
+            Console.WriteLine($@"Nat filtering behavior: {res.FilteringBehavior}");
         }
         }
     }
     }
 }
 }

+ 8 - 2
STUN/Utils/NetUtils.cs

@@ -69,6 +69,12 @@ namespace STUN.Utils
             }
             }
         }
         }
 
 
+        public static async Task<StunResult5389> NatBehaviorDiscovery(string server, ushort port, IPEndPoint local)
+        {
+            using var client = new StunClient5389UDP(server, port, local);
+            return (StunResult5389)await client.QueryAsync();
+        }
+
         public static (byte[], IPEndPoint, IPAddress) UdpReceive(this UdpClient client, byte[] bytes, IPEndPoint remote, EndPoint receive)
         public static (byte[], IPEndPoint, IPAddress) UdpReceive(this UdpClient client, byte[] bytes, IPEndPoint remote, EndPoint receive)
         {
         {
             var localEndPoint = (IPEndPoint)client.Client.LocalEndPoint;
             var localEndPoint = (IPEndPoint)client.Client.LocalEndPoint;
@@ -106,10 +112,10 @@ namespace STUN.Utils
 
 
             var local = ipPacketInformation.Address;
             var local = ipPacketInformation.Address;
 
 
-            Debug.WriteLine($@"{(IPEndPoint) receive} => {local} {length} 字节");
+            Debug.WriteLine($@"{(IPEndPoint)receive} => {local} {length} 字节");
 
 
             return (res.Take(length).ToArray(),
             return (res.Take(length).ToArray(),
-                    (IPEndPoint) receive
+                    (IPEndPoint)receive
                     , local);
                     , local);
         }
         }
     }
     }

+ 4 - 4
UnitTest/UnitTest.cs

@@ -85,7 +85,7 @@ namespace UnitTest
         [TestMethod]
         [TestMethod]
         public async Task BindingTest()
         public async Task BindingTest()
         {
         {
-            var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
+            using var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
             var result = await client.BindingTestAsync();
             var result = await client.BindingTestAsync();
 
 
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
@@ -100,7 +100,7 @@ namespace UnitTest
         [TestMethod]
         [TestMethod]
         public async Task MappingBehaviorTest()
         public async Task MappingBehaviorTest()
         {
         {
-            var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
+            using var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
             var result = await client.MappingBehaviorTestAsync();
             var result = await client.MappingBehaviorTestAsync();
 
 
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
@@ -119,7 +119,7 @@ namespace UnitTest
         [TestMethod]
         [TestMethod]
         public async Task FilteringBehaviorTest()
         public async Task FilteringBehaviorTest()
         {
         {
-            var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
+            using var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
             var result = await client.FilteringBehaviorTestAsync();
             var result = await client.FilteringBehaviorTestAsync();
 
 
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
@@ -137,7 +137,7 @@ namespace UnitTest
         [TestMethod]
         [TestMethod]
         public async Task CombiningTest()
         public async Task CombiningTest()
         {
         {
-            var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
+            using var client = new StunClient5389UDP(@"stun.syncthing.net", 3478, new IPEndPoint(IPAddress.Any, 0));
             var result = (StunResult5389)await client.QueryAsync();
             var result = (StunResult5389)await client.QueryAsync();
 
 
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
             Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);