You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用.NET判断请求是否绕过CDN?

.NET 检测访客是否绕过CDN或直接访问服务器IP

核心思路与可行方案


1. 利用CDN专属请求头判断

绝大多数CDN服务商在转发请求时,会在HTTP头中添加专属标识字段传递真实访客IP,此时请求的RemoteIpAddress会是CDN节点IP而非访客IP。常见的头字段包括:

  • X-Forwarded-For:通用转发头,多数CDN会填充
  • X-Real-IP:部分CDN使用的真实IP字段
  • 服务商专属头:比如Cloudflare的CF-Connecting-IP、阿里云CDN的Ali-Cdn-Real-IP

在.NET中可通过以下逻辑判断:

  • 如果请求存在上述CDN转发头,且RemoteIpAddress属于你所用CDN的IP段(可从CDN官方获取),说明请求通过CDN正常访问
  • 若没有这些转发头,或RemoteIpAddress不在你的CDN IP段内,大概率是访客绕过了CDN,或直接用服务器IP访问

2. 检查Host头判断直接IP访问

这是最直接的方法:用户直接用服务器IP访问时,HTTP请求的Host头值就是服务器IP;通过CDN正常访问时,Host头是你的域名。

在.NET中可直接校验:

public bool IsDirectIpAccess(HttpRequest request, string yourServerIp)
{
    return string.Equals(request.Host.Value, yourServerIp, StringComparison.OrdinalIgnoreCase);
}

返回true即表示访客直接用服务器IP访问。

3. 基于自有CDN IP段的比对

你提到无法获取所有CDN的IP,但可以获取自己正在使用的CDN服务商公布的官方IP段(比如Cloudflare、阿里云等都会公开节点IP范围)。将这些IP段存入配置后,在.NET中判断当前请求的RemoteIpAddress是否属于这些段:

  • 若属于,说明请求来自你的CDN节点,是正常访问
  • 若不属于,说明请求绕过了你的CDN(可能是直接访问服务器IP,或通过其他未授权CDN)

代码示例:获取真实访客IP

public string GetRealVisitorIp(HttpRequest request)
{
    // 优先读取CDN专属头,比如Cloudflare的CF-Connecting-IP
    var cfIp = request.Headers["CF-Connecting-IP"].FirstOrDefault();
    if (!string.IsNullOrEmpty(cfIp))
    {
        return cfIp.Trim();
    }

    // 读取通用转发头X-Forwarded-For(注意可能包含多个IP,取第一个)
    var forwardedFor = request.Headers["X-Forwarded-For"].FirstOrDefault();
    if (!string.IsNullOrEmpty(forwardedFor))
    {
        return forwardedFor.Split(',')[0].Trim();
    }

    // 读取X-Real-IP
    var realIp = request.Headers["X-Real-IP"].FirstOrDefault();
    if (!string.IsNullOrEmpty(realIp))
    {
        return realIp.Trim();
    }

    // 以上都没有,返回直接连接的IP(可能是访客IP或未识别的CDN节点IP)
    return request.HttpContext.Connection.RemoteIpAddress?.ToString() ?? string.Empty;
}

注意事项

  • 务必在CDN后台开启真实IP转发,否则无法获取访客真实IP
  • 对转发头要做信任校验:只信任来自你CDN IP段的请求中的转发头,防止恶意用户伪造X-Forwarded-For等头绕过检测

内容的提问来源于stack exchange,提问作者MiscellaneousUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:31:13