佛山乐从网站建设,自媒体平台收益排行榜,做搜狗手机网站快速,国产做网站咨询区 Ricky#xff1a;如果判断某一个IP (172.16.11.50) 是否落在某一个 IP 段内#xff1f;比如这样的段#xff1a;172.16.11.5 - 100#xff0c;另外不知道 C# 中是否有现成的轮子可以做这件事 ?回答区 BuddhiP#xff1a;可以考虑使用 jsakamoto 大佬写的工具包如果判断某一个IP (172.16.11.50) 是否落在某一个 IP 段内比如这样的段172.16.11.5 - 100另外不知道 C# 中是否有现成的轮子可以做这件事 ?回答区 BuddhiP可以考虑使用 jsakamoto 大佬写的工具包这个工具包允许下面三种格式的 IP段。192.168.0.0/24192.168.0.0/255.255.255.0192.168.0.0-192.168.0.255然后使用 Contains 方法判断指定的 IP 是否在其中这个工具包支持 IP4 和 IP6 github地址https://github.com/jsakamoto/ipaddressrange参考如下代码using NetTools;
...
// rangeA.Begin is 192.168.0.0, and rangeA.End is 192.168.0.255.
var rangeA  IPAddressRange.Parse(192.168.0.0/255.255.255.0);
rangeA.Contains(IPAddress.Parse(192.168.0.34)); // is True.
rangeA.Contains(IPAddress.Parse(192.168.10.1)); // is False.
rangeA.ToCidrString(); // is 192.168.0.0/24// rangeB.Begin is 192.168.0.10, and rangeB.End is 192.168.10.20.
var rangeB1  IPAddressRange.Parse(192.168.0.10 - 192.168.10.20);
rangeB1.Contains(IPAddress.Parse(192.168.3.45)); // is True.
rangeB1.Contains(IPAddress.Parse(192.168.0.9)); // is False.// Support shortcut range description. 
// (192.168.10.10-20 means range of begin:192.168.10.10 to end:192.168.10.20.)
var rangeB2  IPAddressRange.Parse(192.168.10.10-20);// Support CIDR expression and IPv6.
var rangeC  IPAddressRange.Parse(fe80::/10); 
rangeC.Contains(IPAddress.Parse(fe80::d503:4ee:3882:c586%3)); // is True.
rangeC.Contains(IPAddress.Parse(::1)); // is False.maxshuty最好的办法就是将 Address 转成 Integer然后再比较 int 的范围至于怎么将 IP 转成 Integer参考链接http://www.aboutmyip.com/AboutMyXApp/IP2Integer.jsp通过这个类可以将 IP 转成 4 个 byte 字节比如你提供的 ip地址就可以转成如下。First Octet:    217
Second Octet:   110
Third Octet:    18
Fourth Octet:   206接下来计算 . 中的 decimal 值再套用下面的公式。(first octet * 256³)  (second octet * 256²)  (third octet * 256)  (fourth octet)(first octet * 16777216)  (second octet * 65536)  (third octet * 256)  (fourth octet)(217 * 16777216)  (110 * 65536)  (18 * 256)  (206)3647869646Minoo Moradi我有一个小技巧可以先算出开始IP 和 结束IP然后将里面的 . 字符全部抹掉后转成一个 long 值再比较指定的 long 值是否在指定的 start - end 区间内, 参考如下代码var givenIp  Convert.ToInt64(clientIp.Replace(., ));
var startIp  Convert.ToInt64(startRange.Replace(., ));
var endIp  Convert.ToInt64(endRange.Replace(., ));if (givenIp ! startIp  givenIp ! endIp  (givenIp  startIp || givenIp  endIp))
{Console.WriteLine(your ip does not allow to access!);
}点评区 三位大佬总结的特别好而且还发现了一个现成的轮子nuget地址https://www.nuget.org/packages/IPAddressRange  大家可以下载试用。