SetNet.Upnp 1.2.0

dotnet add package SetNet.Upnp --version 1.2.0
                    
NuGet\Install-Package SetNet.Upnp -Version 1.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SetNet.Upnp" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SetNet.Upnp" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="SetNet.Upnp" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SetNet.Upnp --version 1.2.0
                    
#r "nuget: SetNet.Upnp, 1.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SetNet.Upnp@1.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SetNet.Upnp&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=SetNet.Upnp&version=1.2.0
                    
Install as a Cake Tool

<p align="center"> <img src="https://raw.githubusercontent.com/Povstalez/SetNet/master/assets/icon.png" alt="SetNet" width="96"> </p>

SetNet.Upnp

UPnP IGD port mapping for SetNet: make a player-hosted server reachable without touching the router.

Most home routers support UPnP IGD — a LAN protocol that lets an application ask the router to forward a port. SetNet.Upnp discovers the gateway via SSDP and drives its WAN service: read the external IP, add a TCP/UDP port mapping, remove it on shutdown. No wire types, no server component — it's a pure client-side utility you run on whichever machine listens for connections.

Install

dotnet add package SetNet
dotnet add package SetNet.Upnp

Usage

One call for a SetNet server — map every port the configuration listens on:

var device = await config.MapServerPortsAsync(description: "MyGame host");
if (device == null)
    Console.WriteLine("No UPnP gateway — ask the player to forward the port manually.");
else
    Console.WriteLine($"Reachable at {await device.GetExternalIpAsync()}:{config.Port}");

// on shutdown:
await device.DeletePortMappingAsync(UpnpProtocol.Tcp, config.Port);

Manual control:

UpnpDevice? gw = await UpnpPortMapper.DiscoverAsync();
if (gw != null)
{
    IPAddress external = await gw.GetExternalIpAsync();
    await gw.AddPortMappingAsync(UpnpProtocol.Udp, externalPort: 40001, internalPort: 40001,
                                 description: "MyGame voice", leaseSeconds: 3600);
    // ... later
    await gw.DeletePortMappingAsync(UpnpProtocol.Udp, 40001);
}

API

Member Purpose
UpnpPortMapper.DiscoverAsync(timeoutMs = 3000) SSDP-discover the gateway; null when none answers
UpnpPortMapper.FromLocationAsync(Uri location) drive a gateway with a known description URL (fixed setups, tests)
device.GetExternalIpAsync() the router's WAN IP
device.AddPortMappingAsync(protocol, externalPort, internalPort, description, leaseSeconds = 0) forward a port to this machine
device.DeletePortMappingAsync(protocol, externalPort) remove a mapping
device.LocalAddress / ControlUrl / ServiceType discovery results
config.MapServerPortsAsync(description, leaseSeconds = 0) map the TCP/UDP ports a SetNet Configuration listens on

Notes

  • No reserved wire types — this package never touches the SetNet connection; it talks HTTP/SOAP to the router on the LAN.
  • UPnP can be off. Many routers ship with UPnP disabled (and some networks disable it deliberately). Always handle the null result — fall back to SetNet.NatPunch or SetNet.Relay.
  • Leases. leaseSeconds: 0 requests a permanent mapping; a few IGDv2 routers cap or refuse that — pass an explicit lease and refresh it if you target those. Delete mappings on shutdown either way.
  • Supported services: WANIPConnection:1/:2 and WANPPPConnection:1.
  • Security note: UPnP mappings expose the mapped port to the whole internet — gate the exposed server with SetNet.Auth/SetNet.RateLimit like any public endpoint.

Documentation & source

License

MIT

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.1

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 140 8/5/2026