C# 检查IP地址是否存在于范围内

C# 检查IP地址是否存在于范围内,c#,asp.net-mvc,asp.net-web-api,ip,C#,Asp.net Mvc,Asp.net Web Api,Ip,我想创建扩展方法,即检查发送的IP地址 指定至少一个将从中发出请求的IP地址。来自其他IP的所有请求 地址被拒绝。访问权限可授予: 单个IP地址(例如192.168.0.2) 多个IP地址,用空格分隔(例如192.168.0.2 10.0.0.2) CIDR表示法中的子网(例如192.168.0.0/24) 在中的文本字段中输入IP列表或至少一个IP地址(或IP范围) 相应章节 下面是正在使用但不起作用的代码 public static bool IsIpAddressAllowed(thi

我想创建扩展方法,即检查发送的IP地址

指定至少一个将从中发出请求的IP地址。来自其他IP的所有请求 地址被拒绝。访问权限可授予:

  • 单个IP地址(例如192.168.0.2)

  • 多个IP地址,用空格分隔(例如192.168.0.2 10.0.0.2)

  • CIDR表示法中的子网(例如192.168.0.0/24)
在中的文本字段中输入IP列表或至少一个IP地址(或IP范围) 相应章节

下面是正在使用但不起作用的代码

public static bool IsIpAddressAllowed(this string clientAddress, string allowedIpRange)
    {
        return IsInRange(clientAddress, allowedIpRange, allowedIpRange); ;
    }




 public static bool IsInRange(string startIpAddr, string endIpAddr, string address)
    {
        long ipStart = BitConverter.ToInt32(IPAddress.Parse(startIpAddr).GetAddressBytes().Reverse().ToArray(), 0);

        long ipEnd = BitConverter.ToInt32(IPAddress.Parse(endIpAddr).GetAddressBytes().Reverse().ToArray(), 0);

        long ip = BitConverter.ToInt32(IPAddress.Parse(address).GetAddressBytes().Reverse().ToArray(), 0);

        return ip >= ipStart && ip <= ipEnd; //edited
    }
public static bool IsIpAddressAllowed(此字符串为clientAddress,字符串为allowedIpRange)
{
返回IsInRange(客户地址,allowedIpRange,allowedIpRange);
}
公共静态bool IsInRange(字符串startIpAddr、字符串endIpAddr、字符串地址)
{
long ipStart=BitConverter.ToInt32(IPAddress.Parse(startIpAddr.GetAddressBytes().Reverse().ToArray(),0);
long ipEnd=BitConverter.ToInt32(IPAddress.Parse(endIpAddr.GetAddressBytes().Reverse().ToArray(),0);
长ip=BitConverter.ToInt32(IPAddress.Parse(address.GetAddressBytes().Reverse().ToArray(),0);

返回IP > = IPStand & IP将不会在Web.CONFIG中使用配置比编码更容易和更灵活。也许检查和相关的帖子。如果您的环境允许,您也可以考虑通过防火墙规则阻止,而不是让不必要的流量繁忙您的网站。但我想要的方法。为什么你把<代码>nge
作为第二个参数
endIpAddr
进入你的函数?即使这个函数按预期工作,它不是总是在调用时返回
true
吗?或者这只是为了调试吗?编辑:在我看来,在这段示例代码中,所有参数都混在一起了。我测试了你的代码,方法
是InRange
工作的对我来说,我不知道“CIDR表示法中的子网”,但这在这里似乎不是很有用。