.net core 负载均衡取客户端真实IP

一个网关代码(.net core 3.1),部署到负载均衡器有故障,发现获取到的客户端IP都是内网IP了,负载均衡用的是阿里云的SLB 。

记录一下修改过程

在Strup.cs 中的 ConfigureServices 方法中加入如下代码:

1
2
3
4
5
6
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});

然后再在 Configure 方法中 使用这个中间件

1
app.UseForwardedHeaders();

然后获取IP就和以前一样了,即:Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString(); 

 

关于是否能防止伪造这块,测试了一下,不能。

我用postman给我自己的网关发包,加入了 X-Forwarded-For 头字段,并赋值为 testabc,然后网关打印出相关头字段,发现  X-Forwarded-For 成了  testabc ,IP还是正确的客户端IP。

然后为了看一下是如何工作的,我先取消了中间件的使用,然后重新加入  X-Forwarded-For 头字段 ,并赋值为 testabc,发现负载均衡转发过来后, X-Forwarded-For = testabc,客户端真实IP

也就是说,它把用户外部传入的值放在了最头部,为了查看究竟是否能伪造,所以追了一下.net core 的代码,然后发现代码如下:

 

 

由此可见,.net core 是从尾部往前读客户端IP的,因此不存在伪造。

posted @   LoveCoder  阅读(794)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示