diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index 65f30fb04..1bda009a6 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -9,6 +9,7 @@
+
diff --git a/src/NzbDrone.Common/Readarr.Common.csproj b/src/NzbDrone.Common/Readarr.Common.csproj
index 61e70b85f..6da812f55 100644
--- a/src/NzbDrone.Common/Readarr.Common.csproj
+++ b/src/NzbDrone.Common/Readarr.Common.csproj
@@ -6,6 +6,7 @@
+
diff --git a/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs b/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs
index 067149904..2beeb16f9 100644
--- a/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs
+++ b/src/NzbDrone.Core.Test/Http/HttpProxySettingsProviderFixture.cs
@@ -12,7 +12,7 @@ namespace NzbDrone.Core.Test.Http
{
private HttpProxySettings GetProxySettings()
{
- return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com", true, null, null);
+ return new HttpProxySettings(ProxyType.Socks5, "localhost", 8080, "*.httpbin.org,google.com,172.16.0.0/12", true, null, null);
}
[Test]
@@ -23,6 +23,7 @@ namespace NzbDrone.Core.Test.Http
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://eu.httpbin.org/get")).Should().BeTrue();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://google.com/get")).Should().BeTrue();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://localhost:8654/get")).Should().BeTrue();
+ Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.21.0.1:8989/api/v3/indexer/schema")).Should().BeTrue();
}
[Test]
@@ -31,6 +32,7 @@ namespace NzbDrone.Core.Test.Http
var settings = GetProxySettings();
Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://bing.com/get")).Should().BeFalse();
+ Subject.ShouldProxyBeBypassed(settings, new HttpUri("http://172.3.0.1:8989/api/v3/indexer/schema")).Should().BeFalse();
}
}
}
diff --git a/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs b/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs
index a56bcf2e6..24b5aa67f 100644
--- a/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs
+++ b/src/NzbDrone.Core/Http/HttpProxySettingsProvider.cs
@@ -1,5 +1,7 @@
using System;
+using System.Linq;
using System.Net;
+using NetTools;
using NzbDrone.Common.Http;
using NzbDrone.Common.Http.Proxy;
using NzbDrone.Core.Configuration;
@@ -52,7 +54,15 @@ namespace NzbDrone.Core.Http
//We are utilizing the WebProxy implementation here to save us having to re-implement it. This way we use Microsofts implementation
var proxy = new WebProxy(proxySettings.Host + ":" + proxySettings.Port, proxySettings.BypassLocalAddress, proxySettings.BypassListAsArray);
- return proxy.IsBypassed((Uri)url);
+ return proxy.IsBypassed((Uri)url) || IsBypassedByIpAddressRange(proxySettings.BypassListAsArray, url.Host);
+ }
+
+ private static bool IsBypassedByIpAddressRange(string[] bypassList, string host)
+ {
+ return bypassList.Any(bypass =>
+ IPAddressRange.TryParse(bypass, out var ipAddressRange) &&
+ IPAddress.TryParse(host, out var ipAddress) &&
+ ipAddressRange.Contains(ipAddress));
}
}
}