0

实际上,我想将它用于我的 Apache 访问日志文件的事实是任意且无关紧要的,但它为这种情况提供了上下文。

我需要过滤掉与 Comcast IP 地址相关的记录。这是 Comcast 分配的动态 IP 地址范围的列表。我需要一个可以匹配所有这些的正则表达式,并且只匹配那些。与此同时,我会自己解决这个问题,但我认为 SO 上会有一些 RegEx 专家会喜欢这个问题。

4

2 回答 2

2

正则表达式解决方案是可能的,但非常麻烦,因为子网掩码不是 8 的倍数。您需要编写一个函数来处理列表并转换为正则表达式。

最好使用正则表达式来获取 IP 地址并根据 Comcast 的 IP 地址列表测试 IP 地址。简单的实现将是一个允许您搜索小于参数的最近数字的集合。

于 2012-06-28T13:57:24.737 回答
1

那是很多IP地址。

例如,24.0.0.0/12定义 IP 范围24.0.0.1- 24.15.255.255。要将这些数字范围与正则表达式匹配:

24:    24
0-15:  [0-9]|1[0-5]
0-255: [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

这使

(24)\.([0-9]|1[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])

这只是为了24.0.0.0/12, 293 去。

如果你真的想这样做,你应该编写一个小脚本来自动将每个 IP 范围转换为正则表达式。

另一种方法是匹配任何 IP 地址并将其提供给使用适当模块/框架/API 进行匹配的回调。

于 2012-06-28T14:04:55.660 回答