用于将特定IP段列入白名单的正则表达式

时间:2013-11-12 18:04:57

标签: regex iis ip rewrite whitelist

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

我该怎么做这样的事情:

60.70.80.90/25

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

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

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

但我宁愿不必枚举所有这些地址。有人能够为此找出正则表达式吗?

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

编辑: 如果你有更好的想法将IP列入白名单,而不是我建议的那样,请随时提出建议。

2 个答案:

答案 0 :(得分:1)

<Limit GET POST HEAD>
  Order Deny,Allow
  Deny  from all
  Allow from 60.70.80.90/25
</Limit>

答案 1 :(得分:-1)

正则表达式完全是此任务的错误工具。正则表达式适用于文本操作;网络掩码数学是一种数学运算。使用正则表达式可以可能,但它非常难看,非常混乱,而且非常低效!

最好的办法是使用库进行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?然后将白名单匹配