mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Filter invalid IPs on external interface matching (#11766)
This commit is contained in:
parent
ef985896e2
commit
2eece01acc
@ -58,6 +58,11 @@ public static class NetworkConstants
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly IPNetwork IPv4RFC1918PrivateClassC = new IPNetwork(IPAddress.Parse("192.168.0.0"), 16);
|
public static readonly IPNetwork IPv4RFC1918PrivateClassC = new IPNetwork(IPAddress.Parse("192.168.0.0"), 16);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// IPv4 Link-Local as defined in RFC 3927.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly IPNetwork IPv4RFC3927LinkLocal = new IPNetwork(IPAddress.Parse("169.254.0.0"), 16);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// IPv6 loopback as defined in RFC 4291.
|
/// IPv6 loopback as defined in RFC 4291.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -903,6 +903,17 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get if the IPAddress is Link-local.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="address">The IP Address.</param>
|
||||||
|
/// <returns>Bool indicates if the address is link-local.</returns>
|
||||||
|
public bool IsLinkLocalAddress(IPAddress address)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(address);
|
||||||
|
return NetworkConstants.IPv4RFC3927LinkLocal.Contains(address) || address.IsIPv6LinkLocal;
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public bool IsInLocalNetwork(IPAddress address)
|
public bool IsInLocalNetwork(IPAddress address)
|
||||||
{
|
{
|
||||||
@ -1084,7 +1095,11 @@ public class NetworkManager : INetworkManager, IDisposable
|
|||||||
private bool MatchesExternalInterface(IPAddress source, out string result)
|
private bool MatchesExternalInterface(IPAddress source, out string result)
|
||||||
{
|
{
|
||||||
// Get the first external interface address that isn't a loopback.
|
// Get the first external interface address that isn't a loopback.
|
||||||
var extResult = _interfaces.Where(p => !IsInLocalNetwork(p.Address)).OrderBy(x => x.Index).ToArray();
|
var extResult = _interfaces
|
||||||
|
.Where(p => !IsInLocalNetwork(p.Address))
|
||||||
|
.Where(p => p.Address.AddressFamily.Equals(source.AddressFamily))
|
||||||
|
.Where(p => !IsLinkLocalAddress(p.Address))
|
||||||
|
.OrderBy(x => x.Index).ToArray();
|
||||||
|
|
||||||
// No external interface found
|
// No external interface found
|
||||||
if (extResult.Length == 0)
|
if (extResult.Length == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user