我试图阻止几个IP:
他们总是从154.10*.*.*
所以他们可能是154.101.*.*
或154.102.*.*
等
我正在尝试了解IP块
154.0.0.0/8
似乎过于宽泛。我想缩小到154.10 *
我该怎么做?
答案 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)