예제 #1
0
        static void Main()
        {
            var hostConfigs = new HostConfiguration
            {
                UrlReservations = new UrlReservations()
                {
                    CreateAutomatically = true
                }
            };

            using (var nancyHost = new NancyHost(new Uri("http://localhost:80")))
            {
                nancyHost.Start();
                Console.WriteLine("listening on http://localhost:80");

                var endpoints = new List <LeasedEndpoint>();
                foreach (var nat in NatDiscovery.GetNats())
                {
                    var lease    = nat.CreatePublicEndpointAsync(ProtocolType.Tcp, 80).Result;
                    var endpoint = new LeasedEndpoint(lease);
                    endpoints.Add(endpoint);
                    Console.WriteLine($"listening on public address '{endpoint}'");
                }

                Console.WriteLine("Press enter to stop");
                Console.ReadKey();

                foreach (var endpoint in endpoints)
                {
                    endpoint.Dispose();
                }
            }

            Console.WriteLine("Stopped. Good bye!");
        }
예제 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Check your NAT(s)");

            Console.WriteLine();
            Console.WriteLine("Unicast addresses");
            foreach (var a in NatDiscovery.GetIPAddresses().OrderBy(a => a.AddressFamily))
            {
                Console.WriteLine($"  {a} is public {a.IsPublic()}");
            }


            Console.WriteLine();
            Console.WriteLine("Gateways");
            foreach (var g in NatDiscovery.GetGateways())
            {
                Console.WriteLine($"  {g}");

                bool q;
                var  pcp = new Makaretu.Nat.Pcp.Client(g);
                q = pcp.IsAvailableAsync().Result;
                Console.WriteLine($"    supports NAT-PCP {q} {pcp.UnavailableReason}");

                var pmp = new Makaretu.Nat.Pmp.Client(g);
                q = pmp.IsAvailableAsync().Result;
                Console.WriteLine($"    supports NAT-PMP {q} {pmp.UnavailableReason}");
            }

            var nats = NatDiscovery.GetNats().ToArray();

            Console.WriteLine();
            Console.WriteLine("Nats");
            foreach (var nat in nats)
            {
                Console.Write($"  {nat.RemoteEndPoint} ");
                try
                {
                    var name = Dns.GetHostEntry(nat.RemoteEndPoint.Address).HostName;
                    Console.Write(name);
                }
                catch { }
                Console.WriteLine();
            }

            foreach (var nat in nats)
            {
                Lease lease = null;
                try
                {
                    lease = nat.CreatePublicEndpointAsync(ProtocolType.Tcp, 8080).Result;
                    Console.WriteLine($"    Public endpoint {lease.PublicAddress}:{lease.PublicPort}");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"    Failed to create public endpoint. {e.Message}");
                }

                if (lease != null)
                {
                    try
                    {
                        nat.DeletePublicEndpointAsync(lease).Wait();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine($"    Failed to delete public endpoint. {e.Message}");
                    }
                }
            }
        }