2

我需要一个我无法弄清楚的正则表达式:

我该如何接受这样的事情:

60.70.80.90/25

并将其转换为匹配该范围内 IP 的正则表达式?

该 IP 地址只是一个虚拟地址;实际IP范围不同。有没有办法将其转换为正则表达式,而无需枚举该范围内的每个地址?例如,我知道我可以这样做:

60\.70\.80\.91|...

但我宁愿不必列举所有这些地址。任何人都能够为此找出一个正则表达式?

这将在 IIS 重写规则中用于将特定 IP 列入白名单,并拒绝对所有其他 IP 的访问。

编辑:如果您对将 IP 列入白名单的想法比我建议的更好,请随时提出相应的建议。

4

2 回答 2

1
<Limit GET POST HEAD>
  Order Deny,Allow
  Deny  from all
  Allow from 60.70.80.90/25
</Limit>
于 2013-11-12T20:28:14.307 回答
0

正则表达式对于这项任务来说是完全错误的工具。正则表达式适用于文本操作;网络掩码数学是一种数学运算。可以使用正则表达式来做到这一点,但它非常难看、非常混乱并且非常低效!

最好的办法是使用用于 IP 和网络操作的库,例如用于 Perl的Net::CIDR 。如果由于某种原因您不能使用一个,请自己进行操作:

  1. 将点分十进制格式转换为等效的数字:

    60.70.80.90/25 -> 1011241050/4294967168
    
  2. 将要匹配的 IP 转换为其数字形式:

    1.2.3.4 -> 16909030
    
  3. 以及针对网络掩码的目标 IP:

    16909030 & 4294967168 = 16908928
    
  4. 以及针对他的网络掩码的白名单 IP:

    1011241050 & 4294967168 = 1011240960
    
  5. 如果结果匹配,则为匹配:

    16908928 == 1011240960?然后白名单匹配

于 2013-11-12T18:15:43.633 回答