咨询区

  • 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  ,大家可以下载试用。

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

  1. 判断一个IP区间(或IP)是否被另一个IP区间所包含

    以下方法实现判断一个IP是否被一个IP区间所包含 有一些静态方法可能引用了同名空间的自定义的类, 至于合并两个相临的IP段,可对其中的最大或最小IP+1 using System; using Sys ...

  2. python判断ip地址是否合法_python实现判断一个字符串是否是合法IP地址的示例

    一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:判断一个字符串是否是合法I ...

  3. vb.net 判断是否为ip 正则_PHP实现IP白名单

    有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...

  4. aspx 判断字符串是否为decimal_python实现判断一个字符串是否是合法IP地址

    一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python#encoding:utf-8 '''__Author__:沂水寒城功能:判断一个字符串是否是合法IP地址 ...

  5. golang中获取公网ip、查看内网ip、检测ip类型、校验ip区间、ip地址string和int转换、根据ip判断地区国家运营商等

    作者: 一蓑烟雨1989 所属专栏: Go从不放弃到实战 本文链接:https://blog.csdn.net/wangshubo1989/article/details/78066344 生命不止, ...

  6. PHP判断ip是否在指定IP段内(微信支付回调IP段验证)

    需求: 项目中需要判断发起微信支付回调的IP在不在微信商户出口IP中,以防止私钥泄露别人发起伪装过的假回调造成损失 1获取客户端IP /*** @explain 获取用户IP* @param int ...

  7. C++ 判断是否是格式正确的IP地址

    bool is_valid_ip(const char *ip) { int section = 0; //每一节的十进制值 int dot = 0; //几个点分隔符 char last ='.'; ...

  8. 如何判断一个字符串是否为合法的IP地址。

    如何判断一个字符串是否为合法的IP地址. import java.util.Scanner;public class MyTest {public static void main(String[] ...

  9. shell实例第9讲:判断用户输入的是否为IP地址

    #!/bin/bash #作者:魏波 #时间:2017.02.04function check_ip(){IP=$1VALID_CHECK=$(echo $IP|awk -F. '$1<=255 ...

  10. 判断自己的网络是不是公网IP

    登录http://www.ip138.com 网站看获取的IP地址 登录http://ip.qq.com 看获取的IP地址 登录万网http://www.net.cn/static/customerc ...

最新文章

  1. docker依赖的技术探索
  2. Kubernetes(7) Service Network (advanced)
  3. Web Dynpro公开课学习
  4. oracle 控制文件作用是什么,Oracle控制文件(controlfile)作用
  5. Mysql之乐观锁悲观锁:乐观锁检查数据状态 悲观锁更新时锁定数据
  6. python网络验证系统_python3+django2 开发易语言网络验证(下)
  7. 如何快速对接大量的精准客户呢?
  8. [转]测试的三重境界
  9. EWSA1.50.0.298栈溢出错误
  10. 重学前端学习笔记(一)--前端发展史以及学习痛点
  11. c语言打砖块小游戏,C语言动画(打砖块游戏)
  12. 机器学习 AI 谷歌ML Kit 与苹果Core ML
  13. hadoop性能优化(调优)
  14. 使用js获得26个英文字母
  15. matlab sheet名字,MATLAB得到excel多个非默认sheet名_怎样利用matlab去读取一个excel表中多个sheet的数据并导入一个sheet中?...
  16. 记录一起走过的那些日子
  17. Fine-grained Detection —— DCL
  18. PCM 单双声道转换
  19. 居然在循环时犯了大错,难怪差这么多
  20. 【备战】【B组】第十四届蓝桥杯python组

热门文章

  1. 简单动态规划问题分析
  2. postfix搭建及配置
  3. 2010年5月系统集成项目管理工程师上午试卷参考答案(讨论版)
  4. idea tomcat启动成功但是访问方面都是404_IDEA相关配置【集成Tomcatamp;项目部署】...
  5. MATLAB数值计算与符号运算
  6. context:annotation-config vs context:component-scan
  7. 深入理解null的原理
  8. 看出每个应用程序最高可用内存是多少
  9. 自定义smokeping告警(邮件+短信)
  10. [转载]Javascript异步编程的4种方法