傻瓜的IP地址

sam*_*mol 1 ip

我试图阻止几个IP:

他们总是从 154.10*.*.*

因此,他们可能会154.101.*.*154.102.*.*

我想了解IP块

154.0.0.0/8似乎太宽泛了.我想缩小到154.10*

我该怎么办呢?

Jas*_*nCG 5

快速回答

使用子网计算器(如http://www.subnet-calculator.com/http://jodies.de/ipcalc)将其分解为三个子网

154.100.0.0/14 (154.100.0.0 - 154.103.255.255)
154.104.0.0/14 (154.104.0.0 - 154.107.255.255)
154.108.0.0/15 (154.108.0.0 - 154.109.255.255)
Run Code Online (Sandbox Code Playgroud)

答案很长

CIDR斜杠表示法表示子网掩码中的1的数量.出于路由的目的,子网掩码是N个1,紧接着是M个0,其中N + M = 32.

/1 is  10000000 00000000 00000000 00000000 or 128.0.0.0
/8 is  11111111 00000000 00000000 00000000 or 255.0.0.0
/16 is 11111111 11111111 00000000 00000000 or 255.255.0.0
/24 is 11111111 11111111 11111111 00000000 or 255.255.255.0
/32 is 11111111 11111111 11111111 11111111 or 255.255.255.255
Run Code Online (Sandbox Code Playgroud)

(注意我将每个八位字节分组为8个字节,因此术语" 八位字节 ")

请注意,对于CIDR表示法,您不能在0之后使用1.可能有应用程序允许这样的子网掩码(防火墙中的某些ACL会这样做),但至少就路由而言,这是不允许的,据我所知.

子网位与IP地址位匹配.如果子网位为0,则允许该位位置的IP地址中的任何内容(它是该位的通配符).

回到你的问题,如果我们有,154.10*.*.*那么我们正在寻找这个范围内的IP:

154.100.0.0 - 154.109.255.255
Run Code Online (Sandbox Code Playgroud)

二进制表示为:

     154      100        0        0
10011010 01100100 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

     154      109      255      255
10011010 01101101 11111111 11111111
Run Code Online (Sandbox Code Playgroud)

所以现在重点关注比特匹配它们的范围的二进制(如果两个字节相同,则输出1;如果它们不同,则输出0;基本上是反转XOR,也称为XNOR)

BINARY                                      DECIMAL

     10011010 01100100 00000000 00000000         154.100.  0.  0
XNOR 10011010 01101101 11111111 11111111    XNOR 154.109.255.255
----------------------------------------    --------------------
     11111111 11110110 00000000 00000000         255.246.  0.  0
Run Code Online (Sandbox Code Playgroud)

但是这里存在一个问题:这不是标准的CIDR子网.正如我上面提到的,大多数系统/应用程序都不接受这个,并且它不能转换为斜杠表示法.如果您正在编写自己的应用程序,那么您当然可以支持这种类型的值来过滤复杂的IP地址块.如果您的系统/应用程序支持255.246.0.0,那么您就完成了!

如果你想获得最接近的标准CIDR子网,只需计算从左边开始的1位数,直到你达到零,并截断其余部分:

/12 is 11111111 11110000 00000000 00000000 or 255.240.0.0
Run Code Online (Sandbox Code Playgroud)

现在要找出这个掩码将从哪里开始,你将它们它们在一起(如果两个位都是1输出1,否则输出0):

    10011010 01100100 00000000 00000000        154.100.0.0
AND 11111111 11110000 00000000 00000000    AND 255.240.0.0
---------------------------------------    -------------------
    10011010 01100000 00000000 00000000        154. 96.0.0
Run Code Online (Sandbox Code Playgroud)

为了确定范围的结束,你会反转子网和OR在一起(如果任一IP位或子网位是1,输出1):

   10011010 01100100 00000000 00000000       154.100.  0.  0
OR 00000000 00001111 11111111 11111111    OR   0. 15.255.255
--------------------------------------    ------------------
   10011010 01101111 11111111 11111111       154.111.255.255
Run Code Online (Sandbox Code Playgroud)

因此154.96.0.0/12是最接近标准CIDR子网,将覆盖你的要求的范围内.不幸的是,它还涵盖了你想要的目标之外的一些范围(154.96.0.0 - 154.111.255.255)

如果你绝对必须将其锁定,只154.100.0.0 - 154.109.255.255需要创建多个子网块.

你想要的是构建一系列子网来匹配其间的每个值:

10011010 01100100 00000000 00000000 154.100.0.0
10011010 01100101 00000000 00000000 154.101.0.0
10011010 01100110 00000000 00000000 154.102.0.0
10011010 01100111 00000000 00000000 154.103.0.0
^^^^^^^^ ^^^^^^     <- 14 bits match
Run Code Online (Sandbox Code Playgroud)

每次匹配前14位以上,所以我们可以将其分解为

10011010 01100100 00000000 00000000 154.100.0.0/14
Run Code Online (Sandbox Code Playgroud)

现在继续......

10011010 01101000 00000000 00000000 154.104.0.0
10011010 01101001 00000000 00000000 154.105.0.0
10011010 01101010 00000000 00000000 154.106.0.0
10011010 01101011 00000000 00000000 154.107.0.0
^^^^^^^^ ^^^^^^     <- 14 bits match
Run Code Online (Sandbox Code Playgroud)

我们有另外一个14位的匹配,所以我们得到它

10011010 01101000 00000000 00000000 154.104.0.0/14
Run Code Online (Sandbox Code Playgroud)

最后......

10011010 01101100 00000000 00000000 154.108.0.0
10011010 01101101 00000000 00000000 154.109.0.0
^^^^^^^^ ^^^^^^^    <- 15 bits match
Run Code Online (Sandbox Code Playgroud)

这次我们有15个匹配位:

10011010 01101100 00000000 00000000 154.108.0.0/15
Run Code Online (Sandbox Code Playgroud)

所以我们将范围154.100.0.0 - 154.109.255.255分成三个有效的子网:

154.100.0.0/14 (154.100.0.0 - 154.103.255.255)
154.104.0.0/14 (154.104.0.0 - 154.107.255.255)
154.108.0.0/15 (154.108.0.0 - 154,109.255.255)
Run Code Online (Sandbox Code Playgroud)