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

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]+\." denyIP
order allow,deny
allow from all
deny from env=denyIP

你确切需要什么?如果列表中只有IP地址,为什么要使用IP地址的正则表达式?也许你想要一个用于查找特定地址的正则表达式?在这种情况下,请在问题中加入你想要过滤的地址的规格说明。 - cgledezma
你让我想起了这个挑战 :p - HamZa
如果可以的话,我建议使用更强大的工具,比如iptables来拒绝IP/IP范围的访问。使用htaccess时,请求仍然会进入并由您的Web服务器(例如Apache)处理 - 然后它们被阻止。而使用iptables,则在它们实际到达任何应用程序之前就被阻止了。 - newfurniturey
1个回答

4
给定样本文本中的地址列表,这些表达式将使用交替匹配数字范围来匹配请求的范围。不幸的是,它们需要单独构建,因为正则表达式并不真正评估文本。要匹配182.52182.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])$ enter image description here
  • 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])$ enter image description here
  • 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])$ enter image description here
  • 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])$ enter image description here

谢谢,它非常有帮助。我希望我可以在SetEnvIf中像这样使用deny from 180.210.216.0/22 - ayumi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接