如何通过 C# 判断某个 IP 是否属于某IP段?
咨询区
Ricky:
如果判断某一个IP (172.16.11.50) 是否落在某一个 IP 段内?比如这样的段:172.16.11.5 - 100
,另外不知道 C# 中是否有现成的轮子可以做这件事 ?
回答区
BuddhiP:
可以考虑使用 @jsakamoto
大佬写的工具包,这个工具包允许下面三种格式的 IP段。
192.168.0.0/24
192.168.0.0/255.255.255.0
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 ,大家可以下载试用。
如何通过 C# 判断某个 IP 是否属于某IP段?相关推荐
- 判断一个IP区间(或IP)是否被另一个IP区间所包含
以下方法实现判断一个IP是否被一个IP区间所包含 有一些静态方法可能引用了同名空间的自定义的类, 至于合并两个相临的IP段,可对其中的最大或最小IP+1 using System; using Sys ...
- python判断ip地址是否合法_python实现判断一个字符串是否是合法IP地址的示例
一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:判断一个字符串是否是合法I ...
- vb.net 判断是否为ip 正则_PHP实现IP白名单
有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...
- aspx 判断字符串是否为decimal_python实现判断一个字符串是否是合法IP地址
一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python#encoding:utf-8 '''__Author__:沂水寒城功能:判断一个字符串是否是合法IP地址 ...
- golang中获取公网ip、查看内网ip、检测ip类型、校验ip区间、ip地址string和int转换、根据ip判断地区国家运营商等
作者: 一蓑烟雨1989 所属专栏: Go从不放弃到实战 本文链接:https://blog.csdn.net/wangshubo1989/article/details/78066344 生命不止, ...
- PHP判断ip是否在指定IP段内(微信支付回调IP段验证)
需求: 项目中需要判断发起微信支付回调的IP在不在微信商户出口IP中,以防止私钥泄露别人发起伪装过的假回调造成损失 1获取客户端IP /*** @explain 获取用户IP* @param int ...
- C++ 判断是否是格式正确的IP地址
bool is_valid_ip(const char *ip) { int section = 0; //每一节的十进制值 int dot = 0; //几个点分隔符 char last ='.'; ...
- 如何判断一个字符串是否为合法的IP地址。
如何判断一个字符串是否为合法的IP地址. import java.util.Scanner;public class MyTest {public static void main(String[] ...
- shell实例第9讲:判断用户输入的是否为IP地址
#!/bin/bash #作者:魏波 #时间:2017.02.04function check_ip(){IP=$1VALID_CHECK=$(echo $IP|awk -F. '$1<=255 ...
- 判断自己的网络是不是公网IP
登录http://www.ip138.com 网站看获取的IP地址 登录http://ip.qq.com 看获取的IP地址 登录万网http://www.net.cn/static/customerc ...
最新文章
- docker依赖的技术探索
- Kubernetes(7) Service Network (advanced)
- Web Dynpro公开课学习
- oracle 控制文件作用是什么,Oracle控制文件(controlfile)作用
- Mysql之乐观锁悲观锁:乐观锁检查数据状态 悲观锁更新时锁定数据
- python网络验证系统_python3+django2 开发易语言网络验证(下)
- 如何快速对接大量的精准客户呢?
- [转]测试的三重境界
- EWSA1.50.0.298栈溢出错误
- 重学前端学习笔记(一)--前端发展史以及学习痛点
- c语言打砖块小游戏,C语言动画(打砖块游戏)
- 机器学习 AI 谷歌ML Kit 与苹果Core ML
- hadoop性能优化(调优)
- 使用js获得26个英文字母
- matlab sheet名字,MATLAB得到excel多个非默认sheet名_怎样利用matlab去读取一个excel表中多个sheet的数据并导入一个sheet中?...
- 记录一起走过的那些日子
- Fine-grained Detection —— DCL
- PCM 单双声道转换
- 居然在循环时犯了大错,难怪差这么多
- 【备战】【B组】第十四届蓝桥杯python组
热门文章
- 简单动态规划问题分析
- postfix搭建及配置
- 2010年5月系统集成项目管理工程师上午试卷参考答案(讨论版)
- idea tomcat启动成功但是访问方面都是404_IDEA相关配置【集成Tomcatamp;项目部署】...
- MATLAB数值计算与符号运算
- context:annotation-config vs context:component-scan
- 深入理解null的原理
- 看出每个应用程序最高可用内存是多少
- 自定义smokeping告警(邮件+短信)
- [转载]Javascript异步编程的4种方法