3

我有这样的IP地址列表:

180.183.0.0/16
180.210.216.0/22
180.214.192.0/19
182.52.0.0/15
...(400 多个)

如何使用子网掩码为 IP 地址创建正则表达式?

为什么我想得到这个。

我有一个带有负载均衡器的网站(我无法更改服务器中的任何配置),我的客户想要拒绝来自特定国家/地区的访问。我像这样使用 .htaccess 。

SetEnvIf X-Forwarded-For "59\.(5[6-9]|6[0-1])\.[0-9]+\." 拒绝IP
命令允许,拒绝
允许所有人
从 env=denyIP 拒绝
4

1 回答 1

4

给定示例文本中的地址列表,这些表达式将通过使用交替匹配数字范围来匹配请求的范围。不幸的是,它们需要单独构建,因为正则表达式并不真正评估文本。要匹配 a 182.52or182.53字符串,您将使用包含所需子字符串的正则表达式,它看起来像182.5[23].

  • 180.183.0.0/16 的范围为 180.183.0.1 - 180.183.255.254
    • ^180\.183\.(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$ 在此处输入图像描述
  • 180.210.216.0/22 的范围为 180.183.0.1 - 180.183.3.254
    • ^180\.210\.[0-3]\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$ 在此处输入图像描述
  • 180.214.192.0/19 的范围为 180.183.0.1 - 180.183.31.254
    • ^180\.214\.(?:[0-9]|[12][0-9]|3[01])\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$ 在此处输入图像描述
  • 182.52.0.0/15 的范围为 182.52.0.1 - 182.53.255.254
    • ^182\.5[23]\.(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(?:[1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-4])$ 在此处输入图像描述
于 2013-07-31T12:44:58.490 回答