Merge branch 'release/2.2'
This commit is contained in:
commit
7f348c4e0f
|
|
@ -36,4 +36,5 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Label="Package Versions: Pinned" />
|
<PropertyGroup Label="Package Versions: Pinned" />
|
||||||
<Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
|
<Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
|
||||||
|
<PropertyGroup Label="Package Versions: Pinned" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -349,6 +349,14 @@ namespace Microsoft.AspNetCore.HttpOverrides
|
||||||
|
|
||||||
private bool CheckKnownAddress(IPAddress address)
|
private bool CheckKnownAddress(IPAddress address)
|
||||||
{
|
{
|
||||||
|
if (address.IsIPv4MappedToIPv6)
|
||||||
|
{
|
||||||
|
var ipv4Address = address.MapToIPv4();
|
||||||
|
if (CheckKnownAddress(ipv4Address))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (_options.KnownProxies.Contains(address))
|
if (_options.KnownProxies.Contains(address))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -822,5 +822,48 @@ namespace Microsoft.AspNetCore.HttpOverrides
|
||||||
Assert.Equal("localhost", context.Request.Host.ToString());
|
Assert.Equal("localhost", context.Request.Host.ToString());
|
||||||
Assert.Equal("Protocol", context.Request.Scheme);
|
Assert.Equal("Protocol", context.Request.Scheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("22.33.44.55,::ffff:127.0.0.1", "", "", "22.33.44.55")]
|
||||||
|
[InlineData("22.33.44.55,::ffff:172.123.142.121", "172.123.142.121", "", "22.33.44.55")]
|
||||||
|
[InlineData("22.33.44.55,::ffff:172.123.142.121", "::ffff:172.123.142.121", "", "22.33.44.55")]
|
||||||
|
[InlineData("22.33.44.55,::ffff:172.123.142.121,172.32.24.23", "", "172.0.0.0/8", "22.33.44.55")]
|
||||||
|
[InlineData("2a00:1450:4009:802::200e,2a02:26f0:2d:183::356e,::ffff:172.123.142.121,172.32.24.23", "", "172.0.0.0/8,2a02:26f0:2d:183::1/64", "2a00:1450:4009:802::200e")]
|
||||||
|
[InlineData("22.33.44.55,2a02:26f0:2d:183::356e,::ffff:127.0.0.1", "2a02:26f0:2d:183::356e", "", "22.33.44.55")]
|
||||||
|
public async Task XForwardForIPv4ToIPv6Mapping(string forHeader, string knownProxies, string knownNetworks, string expectedRemoteIp)
|
||||||
|
{
|
||||||
|
var options = new ForwardedHeadersOptions
|
||||||
|
{
|
||||||
|
ForwardedHeaders = ForwardedHeaders.XForwardedFor,
|
||||||
|
ForwardLimit = null,
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var knownProxy in knownProxies.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries))
|
||||||
|
{
|
||||||
|
var proxy = IPAddress.Parse(knownProxy);
|
||||||
|
options.KnownProxies.Add(proxy);
|
||||||
|
}
|
||||||
|
foreach (var knownNetwork in knownNetworks.Split(new string[] { "," }, options:StringSplitOptions.RemoveEmptyEntries))
|
||||||
|
{
|
||||||
|
var knownNetworkParts = knownNetwork.Split('/');
|
||||||
|
var networkIp = IPAddress.Parse(knownNetworkParts[0]);
|
||||||
|
var prefixLength = int.Parse(knownNetworkParts[1]);
|
||||||
|
options.KnownNetworks.Add(new IPNetwork(networkIp, prefixLength));
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder = new WebHostBuilder()
|
||||||
|
.Configure(app =>
|
||||||
|
{
|
||||||
|
app.UseForwardedHeaders(options);
|
||||||
|
});
|
||||||
|
var server = new TestServer(builder);
|
||||||
|
|
||||||
|
var context = await server.SendAsync(c =>
|
||||||
|
{
|
||||||
|
c.Request.Headers["X-Forwarded-For"] = forHeader;
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.Equal(expectedRemoteIp, context.Connection.RemoteIpAddress.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue