精华内容
下载资源
问答
  • 是不是同一个网段是由子网掩码和Ip地址做二进制与操作来决定的 例1 比如192.168.1.1 子网掩码是255.255.255.0, 192.168.1.2 子网掩码是255.255.255.0 他们就是同一个网段的。他们都是192.168.1.0网段 但是如果一个...

    是不是同一个网段是由子网掩码和Ip地址做二进制与操作来决定的

    例1

    比如192.168.1.1 子网掩码是255.255.255.0,
    192.168.1.2 子网掩码是255.255.255.0 他们就是同一个网段的。他们都是192.168.1.0网段

    但是如果一个192.168.1.1 子网掩码是255.255.255.0,
    第二个是192.168.1.2 子网掩码是255.255.0.0,那么他们一个网段是192.168.1.0,一个网段是192.168.0.0

    例2

    192.168.1.1和192.168.2.1 的子网掩码都是255.255.252.0, 他们与子网掩码做与操作,得出来的网段,虽然IP地址不太一样,但是他们的网段却相同,这一般可以用于超过254台主机的分配上,比如:192.168.0.1 192.168.1.1 192.168.2.1 都用255.255.252.0来分配,他们得出的网段都是192.168.0.0,这样就有六百多台主机是在同一个网段了。

    额外的知识

    比如192.168.2.1/22 后面的22是指子网掩码的前22位都是1. 也是子网掩码和IP地址的另外一种写法、

    展开全文
  • 需求:给支付宝服务端异步通知加IP鉴权 支付宝商户技术给的...IP 分为4个大段,一个点为一个段,每个段转化为二进制占8位,4个段也就是 32位 例如:103.47.4.0/22 其中 0/22 22 表示 ip的掩码,意思就是:ip...

    需求:给支付宝服务端异步通知加IP鉴权

    支付宝商户技术给的网段地址:

    103.47.4.0/22
    103.52.196.0/22
    110.75.128.0/19

     .....

    具体这是啥意思呢?

    IP 分为4个大段,一个点为一个段,每个段转化为二进制占8位,4个段也就是 32位

    例如:103.47.4.0/22

    其中 0/22  

           22 表示 ip的掩码,意思就是:ip的前22位不动,一个段8位,22位就是在第三段,2*8 =16, 22-16 =6 所以截止到 第三段的前6位不动, 所以ip地址的 103.47.  保持不动  4 的二进制为 000001 00 前六位保持不动, 所以只有这几种结果 : 00000101  00000110   00000111  转化为 十进制分别为  5 ,6 ,7   

    即:103.47.4.0/22   也即 :103.47. [4-7] .0/24    (这里0/24是什么意思?please)

     

    鉴权代码如下:

     public static boolean isInRange(String ip, String cidr) {
            String[] ips = ip.split("\\.");
            int ipAddr = (Integer.parseInt(ips[0]) << 24)
                    | (Integer.parseInt(ips[1]) << 16)
                    | (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);
            int type = Integer.parseInt(cidr.replaceAll(".*/", ""));
            int mask = 0xFFFFFFFF << (32 - type);
            String cidrIp = cidr.replaceAll("/.*", "");
            String[] cidrIps = cidrIp.split("\\.");
            int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24)
                    | (Integer.parseInt(cidrIps[1]) << 16)
                    | (Integer.parseInt(cidrIps[2]) << 8)
                    | Integer.parseInt(cidrIps[3]);
     
            return (ipAddr & mask) == (cidrIpAddr & mask);
        }


    public static void main(String[] args) { 
            
            String  ip[] =     {"103.47.4.0/22",
                                "103.52.196.0/22",
                                "110.75.128.0/19"};
            
            for(int i = 0; i < ip.length; i++) {
                boolean flag = isInRange("103.47.5.1",ip[i]);
                System.out.println(flag);
                if(flag){
                    break;
                }

               System.out.println("无门");
            }
        }   

     

    马克。

    展开全文
  • 判断两个IP地址是否一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,具体实现如下,需要的朋友可以参考下
  • 判断两个IP地址是不是一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就同一子网,否则,不同一子网。

    要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。

    例如:假定选择了子网掩码255.255.254.0,现在分别将上述两个IP地址分别与掩码做与运算,如下图所示:

    211.95.165.24 11010011 01011111 10100101 00011000
    255.255.254.0 11111111 11111111 111111110 00000000

    与的结果是: 11010011 01011111 10100100 00000000

    211.95.164.78 11010011 01011111 10100100 01001110
    255.255.254.0 11111111 11111111 111111110 00000000

    与的结果是: 11010011 01011111 10100100 00000000

    可以看出,得到的结果(这个结果就是网络地址)都是一样的,因此可以判断这两个IP地址在同一个子网。

    例如:有一个C类地址为:192.9.200.13,按其IP地址类型,它的缺省子网掩码为:255.255.255.0,则它的网络号和主机号可按如下方法得到:
    第1步,将IP地址192.9.200.13转换为二进制11000000 00001001 11001000 00001101
    第2步,将子网掩码255.255.255.0转换为二进制11111111 11111111 11111111 00000000
    第3步,将以上两个二进制数逻辑进行与(AND)运算,得出的结果即为网络部分。“11000000 00001001 11001000 00001101”与“11111111 11111111 11111111 00000000”进行“与”运算后得到“11000000 00001001 11001000 00000000”,即“192.9.200.0”,这就是这个IP地址的网络号,或者称“网络地址”。
    第4步,将子网掩码的二进制值取反后,再与IP地址进行与(AND)运算,得到的结果即为主机部分。如将“00000000 00000000 00000000 11111111(子网掩码的取值)反”与“11000000 00001001 11001000 00001101”进行与运算后得到“00000000 00000000 00000000 00001101”,即“0.0.0.13”,这就是这个IP地址主机号(可简化为“13”)。

    主机位中有3位被划为“网络标识号”占用,因网络标识号应全为“1”,所以主机号对应的字节段为“11100000”。转换成十进制后为224,这就最终确定的子网掩码。如果是C类网,则子网掩码为255.255.255.224;如果是B类网,则子网掩码为255.255.224.0;如果是A类网,则子网掩码为255.224.0.0。

    实现方法一:

    package com.nynu;
    
    /**
     * @author ChenYanwei
     * @version 1.0
     */
    public class TestIp {
    
        public static boolean isInRange(String network, String mask) {
            String[] networkips = network.split("\\.");
            int ipAddr = (Integer.parseInt(networkips[0]) << 24)
                    | (Integer.parseInt(networkips[1]) << 16)
                    | (Integer.parseInt(networkips[2]) << 8)
                    | Integer.parseInt(networkips[3]);
            int type = Integer.parseInt(mask.replaceAll(".*/", ""));
            int mask1 = 0xFFFFFFFF << (32 - type);
            String maskIp = mask.replaceAll("/.*", "");
            String[] maskIps = maskIp.split("\\.");
            int cidrIpAddr = (Integer.parseInt(maskIps[0]) << 24)
                    | (Integer.parseInt(maskIps[1]) << 16)
                    | (Integer.parseInt(maskIps[2]) << 8)
                    | Integer.parseInt(maskIps[3]);
    
            return (ipAddr & mask1) == (cidrIpAddr & mask1);
        }
    
        public static void main(String[] args) {
            System.out.println(isInRange("10.153.48.127", "10.153.48.0/26"));
            System.out.println(isInRange("10.168.1.2", "10.168.0.224/23"));
            System.out.println(isInRange("192.168.0.1", "192.168.0.0/24"));
            System.out.println(isInRange("10.168.0.0", "10.168.0.0/32"));
        }
    }

    结果:

    false
    true
    true
    true
    

    实现方法二

    package com.nynu;
    
    /**
     * @author ChenYanwei
     * @version 1.1
     */
    public class TestIp1 {
    
        public static boolean ipIsInNet(String iparea, String ip) {
            if (iparea == null)
                throw new NullPointerException("IP段不能为空!");
            if (ip == null)
                throw new NullPointerException("IP不能为空!");
            iparea = iparea.trim();
            ip = ip.trim();
            final String REGX_IP = "((25[0-5]|2[0-4]//d|1//d{2}|[1-9]//d|//d)//.){3}(25[0-5]|2[0-4]//d|1//d{2}|[1-9]//d|//d)";
            final String REGX_IPB = REGX_IP + "//-" + REGX_IP;
            if (!iparea.matches(REGX_IPB) || !ip.matches(REGX_IP))
                return false;
            int idx = iparea.indexOf('-');
            String[] sips = iparea.substring(0, idx).split("//.");
            String[] sipe = iparea.substring(idx + 1).split("//.");
            String[] sipt = ip.split("//.");
            long ips = 0L, ipe = 0L, ipt = 0L;
            for (int i = 0; i < 4; ++i) {
                ips = ips << 8 | Integer.parseInt(sips[i]);
                ipe = ipe << 8 | Integer.parseInt(sipe[i]);
                ipt = ipt << 8 | Integer.parseInt(sipt[i]);
            }
            if (ips > ipe) {
                long t = ips;
                ips = ipe;
                ipe = t;
            }
            return ips <= ipt && ipt <= ipe;
        }
    
        public static void main(String[] args) {
            System.out.println(ipIsInNet("10.153.48.127", "10.153.48.0/26"));
            System.out.println(ipIsInNet("10.168.1.2", "10.168.0.224/23"));
            System.out.println(ipIsInNet("192.168.0.1", "192.168.0.0/24"));
            System.out.println(ipIsInNet("10.168.0.0", "10.168.0.0/32"));
        }
    }
    

    结果:

    false
    false
    false
    false
    
    展开全文
  • 大学学的计算机网络已经忘了一大半,今天接到一个需求,需要判断用户的请求ip是否办公网网段,如果是,那么就要做出相应的提示。 一开始我以为,办公网段就只需要截取前三位就行,比如:22.3.4.6 所在网段就是...

    大学学的计算机网络已经忘了一大半,今天接到一个需求,需要判断用户的请求ip是否在办公网网段,如果是,那么就要做出相应的提示。

    一开始我以为,办公网段就只需要截取前三位就行,比如:22.3.4.6 所在网段就是22.3.4就可以。

    可是安全管理员给我发的却不是这样。而是以下这样的。

    192.168.1.64/26

    192.168.0.0/23

    192.168.0.0/24

    192.168.0.0/32

    这些是什么意思呢?

    前面的192.168.1.64表示ip后面的26表示掩码,就是表示192.168.1.64的前26位不能动,ip分为四部分,每一辈分占8位,一共32位,也就是说32位中有26位是不能动的,前面的192.168.1占8*3=24位不能动。后面的64是0100 0000 前面已经有24位不能动了,所以后面还有2位不能动就是01不能动。所以网段就是192.168.1.64-192.168.1.127

    同理192.168.0.0/23就是前23位不能动,192.168不能动 8*2=16位  后面有7位不能动后面的0就是0000 0000其中前7位不能动,后一位随便是0或者1 所以网段是192.168.0-192.168.1

    192.168.0.0/24前24位不能动,192.168.0不能动 8*3=24位  后面有8位随便动 所以网段是192.168.0

    192.168.0.0/32是前32位都不能动所以网段是 192.168.0.0

     

    下面提供一下网上摘抄的java如何判断是否在某一个网段呢?

    package com.ip;
     
    public class IpTest {
        public static void main(String[] args) {
            System.out.println(isInRange("192.168.1.127", "192.168.1.64/26"));
            System.out.println(isInRange("192.168.1.2", "192.168.0.0/23"));
            System.out.println(isInRange("192.168.0.1", "192.168.0.0/24"));
            System.out.println(isInRange("192.168.0.0", "192.168.0.0/32"));
        }
        public static boolean isInRange(String ip, String cidr) {
            String[] ips = ip.split("\\.");
            int ipAddr = (Integer.parseInt(ips[0]) << 24)
                    | (Integer.parseInt(ips[1]) << 16)
                    | (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]);
            int type = Integer.parseInt(cidr.replaceAll(".*/", ""));
            int mask = 0xFFFFFFFF << (32 - type);
            String cidrIp = cidr.replaceAll("/.*", "");
            String[] cidrIps = cidrIp.split("\\.");
            int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24)
                    | (Integer.parseInt(cidrIps[1]) << 16)
                    | (Integer.parseInt(cidrIps[2]) << 8)
                    | Integer.parseInt(cidrIps[3]);
     
            return (ipAddr & mask) == (cidrIpAddr & mask);
        }
    }
    

     

    以此备注,以备下次不时之需。

    展开全文
  • 用C语言实现一个函数,判断两个IP是否一个网段。。。。。。。。。。。。。。
  • 判断两个IP地址是不是一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就同一子网,否则,不同一子网。 例:假定选择了子网掩码255.255.254.0,现在分别将上述两...
  • 其实方法也很简单,就是将两IP地址分别和各自的子网掩码做与运算,最后判断结果是否一样。 关键词:网络标识(运算结果) 另外主机标识的计算:用IP与取反的掩码做与运算。
  • 我们先来了解一下,判断两个ip地址是不是一个网段的方法。 要想判断两个ip地址是不是一个网段,只需将ip地址与子网掩码做与运算,如果得出的结果一样,则这两个ip地址是同一个子网当中。 例子: 第...
  • java判断ip是否一个网段

    千次阅读 2015-07-06 09:37:32
    判断两个IP大小及是否一个网段中 分类: java 总结 个人项目2013-09-02 12:46 3957人阅读 评论(2) 收藏 举报 java ip 网段 ip地址 功能点  判断某个IP地址是否合法判断两个IP地址是否一个...
  • ip地址分为A、B、C、D、E五大类,其中D和E不对民用组织开放,所以我们只能使用ABC三类,判断ip是否一个网段,首先得判断ip地址属于哪一类。 网络类别 最大网络数 IP地址范围 最大主机数 私有IP地址范围 ...
  • javascript功能的强大之处是我们大家有目共睹的,几天小编向大家介绍Javascript 判断IP是否同一网段,感兴趣的朋友可以参考一下
  • ip地址 and 子网掩码可以确定一个网络号ip:172.21.6.117子网掩码:255.255.255.0分别转化成二进制相与之后就是网络号。网络号相同的一个网段,只有同一个网段的才可以ping通...
  • 判断两个IP地址是否一个网段判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0~255.255.255.255,包括了mask地址。 IP地址划分 A类地址:1....
  • 判断两个IP地址是否一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,具体实现如下,需要的朋友可以参考下 1)基本思路: 要判断两个IP地址是否一个网段,将它们的IP地址分别与...
  • 我们肉眼直接通过IP地址就能判断出是否一个网段内,下面是介绍计算机怎么通过子网掩码判断两个主机IP是否一个网段内~ 想同一网段,必需做到网络标识相同,那网络标识怎么算呢?各类...
  • java判断某个ip是否在一个网段

    千次阅读 2018-12-12 16:28:35
    public class IpTest {  public static void main(String[] args) {  System.out.println(isInRange("192.168.1.127", "192.168.1.64/26"));... System.out.println(isInRange("...
  • 判断两个IP地址是不是一个网段

    千次阅读 2010-03-19 17:10:00
    判断两个IP地址是不是一个网段判断两个IP地址是不是一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就同一子网,否则,不同一子网。例:假定选择了子网...
  • 判断两个IP地址是否一个网段

    千次阅读 2013-09-02 21:56:45
    判断某个IP地址是否合法判断两个IP地址是否一个网段判断两个IP地址的大小关系 知识准备 IP协议子网掩码Java正则表达式 基本原理 IP地址范围 0.0.0.0~255.255.255.255,包括了mask地址...
  • 判断两个IP地址是不是一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就同一子网,否则,不同一子网。 例:假定选择了子网掩码255.255.254.0,现在分别将上述两...
  • 判断两个IP地址是否一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,如果网络号相同,就同一子网,否则,不同一子网。 2)具体实现: /** * [isEqualIPAddress 判断两个IP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,694
精华内容 12,277
关键字:

如何判断在一个网段