傻瓜的IP地址

时间:2014-09-19 02:08:03

标签: ip

我试图阻止几个IP:

他们总是从154.10*.*.*

开始

所以他们可能是154.101.*.*154.102.*.*

我正在尝试了解IP块

154.0.0.0/8似乎过于宽泛。我想缩小到154.10 *

我该怎么做?

1 个答案:

答案 0 :(得分: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)

答案很长

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

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

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

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

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

154.100.0.0 - 154.109.255.255

二进制表示为:

     154      100        0        0
10011010 01100100 00000000 00000000

     154      109      255      255
10011010 01101101 11111111 11111111

所以现在把重点放在比特匹配它们的范围的二进制(如果两个字节相同,则输出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

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

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

/12 is 11111111 11110000 00000000 00000000 or 255.240.0.0

现在要找出这个掩码的起始位置,你会将 AND 放在一起(如果两个位都是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

要确定范围的结束,您将反转子网并将 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

所以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

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

10011010 01100100 00000000 00000000 154.100.0.0/14

现在继续......

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

我们有另外一个14位的匹配,所以让我们来看看

10011010 01101000 00000000 00000000 154.104.0.0/14

最后......

10011010 01101100 00000000 00000000 154.108.0.0
10011010 01101101 00000000 00000000 154.109.0.0
^^^^^^^^ ^^^^^^^    <- 15 bits match

这次我们有15个匹配位:

10011010 01101100 00000000 00000000 154.108.0.0/15

所以我们将范围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)