前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >asp dotnet core 从 Frp 获取用户真实 IP 地址

asp dotnet core 从 Frp 获取用户真实 IP 地址

作者头像
林德熙
发布2022-08-04 18:13:12
1.8K0
发布2022-08-04 18:13:12
举报
文章被收录于专栏:林德熙的博客林德熙的博客

我在本地开一个服务,然后通过 Frp 让小伙伴可以在外网访问我的 API 连接,但是直接通过 RemoteIp 拿到的是本地的地址。本文告诉小伙伴如何通过 Frp 可以拿到用户的真实 IP 地址

我写过dotnet core 通过 frp 发布自己的网站可以在本地运行自己的服务,然后在外网访问到

但是因为是通过本地的 frp 发给用户,也就是本地是 frp 访问,如使用下面代码获取用户的 IP 地址拿到的是本地的地址

代码语言:javascript
复制
_accessor.HttpContext.Connection.RemoteIpAddress.ToString()

上面代码的 _accessor 是注入的,需要在 Startup 的 ConfigureServices 添加下面代码

代码语言:javascript
复制
            services.AddHttpContextAccessor();
            services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();

然后在构造注入

代码语言:javascript
复制
public SomeController(IHttpContextAccessor accessor)
{
    _accessor = accessor;
}

private IHttpContextAccessor _accessor;

详细请看 Edi wang 大神的博客Get Client IP Address in ASP.NET Core 2.x - Edi.Wang 虽然是英文的,但是你可以微信问他

如果使用 frp 的拿到的字符串都是 127.0.0.1 本地的地址,因为就是本地的 frp 访问连接

在 frp 会在访问的时候在 HTTP 添加 X-Forwarded-For 里面是用户的真实 IP 当然这里也可能是代理的地址,所以修改一下代码,通过下面代码可以从 frp 拿到用户的真实地址

代码语言:javascript
复制
        private static bool TryGetUserIpFromFrp(HttpRequest httpContextRequest, out StringValues ip)
        {
            return httpContextRequest.Headers.TryGetValue("X-Forwarded-For", out ip);
        }

下面是使用方法

代码语言:javascript
复制
            if (TryGetUserIpFromFrp(HttpContext.Request, out var ip))
            {
                str.Append("用户Ip=");
                str.Append(ip);
                str.Append(" ");
            }

Get Client IP Address in ASP.NET Core 2.x - Edi.Wang

dotnet core 通过 frp 发布自己的网站

使用 Frp 为你的 Web 服务添加 https 支持 方式是获取不到用户 IP 地址

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档