如何通过 C# 判断某个 IP 是否属于某IP段?

咨询区

  • Ricky

如果判断某一个IP (172.16.11.50) 是否落在某一个 IP 段内?比如这样的段:172.16.11.5 - 100,另外不知道 C# 中是否有现成的轮子可以做这件事 ?

回答区

  • BuddhiP

可以考虑使用 @jsakamoto 大佬写的工具包,这个工具包允许下面三种格式的 IP段。

  1. 192.168.0.0/24

  2. 192.168.0.0/255.255.255.0

  3. 192.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)
=   3647869646
  • Minoo 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  ,大家可以下载试用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度2012校招笔试题之全排列与组合

算法题目&#xff1a; 求一个全排列函数&#xff1a; 如p([1,2,3])输出&#xff1a;[123],[132],[213],[231],[321],[323]. 思路&#xff1a;采用字典序的排序的方法 代码实现&#xff1a; void swap(char *a,char *b) {char temp;temp*a;*a*b;*btemp; }void reverse(char *di…

欧洲的小国家究竟有多袖珍?

全世界只有3.14 % 的人关注了爆炸吧知识你走遍祖国的每个角落了吗&#xff1f;相信绝大多数人的回答是“NO”但是如果你生活在很小的国家里&#xff0c;也许一根烟&#xff0c;或者一顿午餐的时间&#xff0c;你就可以从这个国家的一端走到另一端。下面就一起看看世界上最小的国…

蚂蚁算法

public class 蚂蚁算法 { /** * 有n个蚂蚁每秒速度在Lcm的杆子上爬行,蚂蚁到杆子端点就会掉下去,蚂蚁相遇,交错通过,只能各自反方向爬回去, * 对于每只蚂蚁我们知道它离杆子左端的距离是Xi,但是不知道它当时的朝向,请计算所有蚂蚁落下杆子所需要的最短时间和 * 最长时间 …

php 输出缓冲区清理

bool ob_end_flush ( void )这个函数将送出最顶层缓冲区的内容&#xff08;如果里边有内容的话&#xff09;&#xff0c;并关闭缓冲区。如果想进一步处理缓冲区中的内容&#xff0c;必须在 ob_end_flush()之前调用 ob_get_contents()&#xff0c;因为在调用 ob_end_flush()后缓…

企业文化和价值观

看标题&#xff0c;是个很大的范围&#xff0c;不过&#xff0c;在这里不打算详细展开的来说&#xff0c;简单说说吧。 价值观&#xff1a;客戶第一&#xff0c;協作&#xff0c;高效 A.客戶第一&#xff0c;客戶的利益優先&#xff0c;原因无需多解釋&#xff0c;没有客户&…

java ftp 判断目录存在_java判断ftp目录是否存在的方法

本文为大家分享了java判断ftp目录是否存在的方法&#xff0c;供大家参考&#xff0c;具体内容如下package com.soft4j.log4j;import java.io.IOException;import sun.net.ftp.FtpClient;public class FtpTest{static String middle_ftpServer "10.103.2.250";static…

让前端与后端异步起来

有时&#xff0c;后台处理批量数据&#xff0c;需要一定的时间&#xff0c;如果处理一部分往前台送一部分&#xff0c;用户体验要好一些&#xff0c;这样就用到这个知识点了。后台代码中下&#xff1a;[HttpGet("/getents")]public async IAsyncEnumerable<Entity…

六款小巧的HTTP Server[C语言] - 贵贵的博客 - 开发|架构|开源|共享

六款小巧的HTTP Server[C语言] - 贵贵的博客 - 开发|架构|开源|共享六款小巧的HTTP Server[C语言]keminar 发表于 2010-02-05 23:14:41. 发表在:开源软件1、micro_httpd - really small http server 特点&#xff1a; 支持安全的 .. 上级目录过滤 支持通用的MIME类型 …

那些年你追过的电影竟然登上顶刊封面! 盘点思路新奇的顶刊论文

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 募格课堂科研&#xff0c;是一项严肃且要求一丝不苟的研究工作。但你可曾想过&#xff0c;那些年自己追过的像葫芦娃、孙悟空等充满中国风元素的影视作品&#xff0c;竟然被科研人作为idea&#xff0c;不仅有理有据地研究还发了顶…

【Linux学习009】脚本编程之变量、条件测试和条件判断

一、Bash环境变量bash中变量有四种种类型&#xff1a;环境变量、本地变量&#xff08;局部变量&#xff09;、位置变量、特殊变量。1.环境变量环境变量作用范围最广&#xff0c;所有子bash进程都能够访问环境变量中的值&#xff0c;定义环境变量的方法是使用export关键字。举例…

特定视图呈现时发生的事件顺序

特定视图呈现时发生的事件顺序&#xff1a; 动作方法返回的ViewResult执行 ViewResult 使用ViewEngineCollection查找视图 ViewEngineCollection给每个注册的IViewEngine解析该视图的机会。顺序由集合中视图引擎的顺序决定 ViewResult使用ControllerContext&#xff0c;视图名称…

java 学习思路_Java的学习思路

1 开发环境Java SDK 下载和安装2 jvm 虚拟机运行原理3 编程基础 标识符命名规范4 Java数据类型5 运算符6 分支语句(if,switch)7 循环语句(for,while)8 函数的定义方法9 面向对象基础 面向对象与面向过程语言之间的区别10 面向对象基本思想(封装)11 类的定义方法12 对象和类的关…

22504!Windows 11 新预览版发布

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 22504。Windows 11 Insider Preview Build 22504 主要变化如下&#xff1a;1.为了进一步个性化 Windows 11 的文本输入体验&#xff0c;微软为触摸键盘带来了 13 个全新主题&#xff0c…

Nginx指南和配置详解

Nginx指南 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。更多的请见官方wiki&#xff1a; http://wiki.nginx.org/Ma…

ERROR (ClientException): Unexpected API Error

ERROR (ClientException): Unexpected API Error ERROR (ClientException): Unexpected API Errorposted on 2016-02-03 11:12 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5179253.html

静态路由(一)

路由器的角色&#xff1a; 路由器是一种专门用途的计算机&#xff0c;在所有数据网络的运作中都扮演着极为重要的角色。路由器主要负责连接各个网络&#xff0c;它的功能有&#xff1a; l 确定发送数据包的最佳路径 l 将数据包转发到目的地 &#xff08;路由器是多个 IP 网络…

火了!女教授把自己P成女娲,登上学术期刊封面

全世界只有3.14 % 的人关注了爆炸吧知识2020年4月&#xff0c;江苏师范大学化学与材料科学学院副院长石枫教授在 Chinese Journal of Chemistry 上发表了题为 Axially Chiral Aryl-Alkene-Indole Framework: A Nascent Member of the Atropisomeric Family and Its Catalytic A…

Binding在WPF中的使用

闲来无事&#xff0c;不想打DOTA&#xff0c;在这里小小研究下wpf中关于Binding的东西。 咯咯 在我们印象中&#xff0c;Binding的意思是“绑定”&#xff0c;这个“绑”大概取自于Bind这个单词吧&#xff0c;这么理解的话就是以音译英了&#xff0c;没什么实际意义。 Bind这个…

WPF 模仿IconPacks库写图标按钮

先上原链接&#xff0c;一个很不错的wpf图标库 : https://github.com/MahApps/MahApps.Metro.IconPacks提供了大量的图标可以用&#xff0c;如下图&#xff1a;&#xff08;部分截图&#xff09;简单分析了一下代码&#xff0c;并模仿它写一个图标类和简单的使用示例&#xff1…

java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧

做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开工欲善其事&#xff0c;必先利其器00 本文简介作为一名搞技术的程序猿或者是攻城狮&#xff0c;想必你应该是对下面这两个问题有所了解&#xff0c;说不定你在实际的工作或者面试就有…