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!"); }
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}"); } } } }