【问题标题】:How can I make a regular expression for IP address with Subnetmask?如何使用子网掩码为 IP 地址创建正则表达式?
【发布时间】:2013-07-31 19:06:47
【问题描述】:

我有这样的 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 拒绝

【问题讨论】:

  • 您到底需要什么?如果列表只有 IP 地址,为什么要 IP 地址的正则表达式。也许您想要的是一个正则表达式来查找某些地址?在这种情况下,请填写您要过滤的规范的问题
  • 你让我想起了this challenge:p
  • 如果可用,我实际上建议使用更强大的东西,例如iptables 来拒绝对 IP/IP 范围的访问。使用 htaccess,请求仍然进来并由您的 Web 服务器(例如 Apache)处理 - 然后它们被阻止。使用 iptables,它们在真正进入任何应用程序之前就被阻止了。

标签: regex .htaccess http networking ip


【解决方案1】:

鉴于示例文本中的地址列表,这些表达式将通过使用交替匹配数字范围来匹配请求的范围。不幸的是,它们需要单独构建,因为正则表达式并不真正评估文本。要匹配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])$
  • 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])$

【讨论】:

  • 谢谢,它有很大帮助。我希望我可以在 SetEnvIf 中像这样使用deny from 180.210.216.0/22...
猜你喜欢
  • 2022-11-22
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2015-10-18
  • 2011-06-20
  • 2017-03-15
相关资源
最近更新 更多