Rssdp by Troy Willmot

<PackageReference Include="Rssdp" Version="4.0.2" />

 DiscoveredSsdpDevice

public sealed class DiscoveredSsdpDevice
Represents a discovered device, containing basic information about the device and the location of it's full device description document. Also provides convenience methods for retrieving the device description document.
public DateTimeOffset AsAt { get; set; }

Sets or returns the date and time this information was received.

public TimeSpan CacheLifetime { get; set; }

Sets or returns the length of time this information is valid for (from the AsAt time).

public Uri DescriptionLocation { get; set; }

Sets or returns a URL pointing to the device description document for this device.

public string NotificationType { get; set; }

Sets or returns the type of notification, being either a uuid, device type, service type or upnp:rootdevice.

public HttpHeaders ResponseHeaders { get; set; }

Returns the headers from the SSDP device response message

public string Usn { get; set; }

Sets or returns the universal service name (USN) of the device.

Retrieves the device description document specified by the DescriptionLocation property.

public Task<SsdpRootDevice> GetDeviceInfo(HttpClient downloadHttpClient)

Retrieves the device description document specified by the DescriptionLocation property using the provided HttpClient instance.

public bool IsExpired()

Returns true if this device information has expired, based on the current date/time, and the CacheLifetime & AsAt properties.