Radarr/src/NzbDrone.Common/Extensions/IpAddressExtensions.cs

41 lines
1.0 KiB
C#

using System.Net;
using System.Net.Sockets;
namespace NzbDrone.Common.Extensions
{
public static class IPAddressExtensions
{
public static bool IsLocalAddress(this IPAddress ipAddress)
{
if (ipAddress.IsIPv6LinkLocal)
{
return true;
}
if (IPAddress.IsLoopback(ipAddress))
{
return true;
}
if (ipAddress.AddressFamily == AddressFamily.InterNetwork)
{
byte[] bytes = ipAddress.GetAddressBytes();
switch (bytes[0])
{
case 10:
case 127:
return true;
case 172:
return bytes[1] < 32 && bytes[1] >= 16;
case 192:
return bytes[1] == 168;
default:
return false;
}
}
return false;
}
}
}