实际上,我想将它用于我的 Apache 访问日志文件的事实是任意且无关紧要的,但它为这种情况提供了上下文。
我需要过滤掉与 Comcast IP 地址相关的记录。这是 Comcast 分配的动态 IP 地址范围的列表。我需要一个可以匹配所有这些的正则表达式,并且只匹配那些。与此同时,我会自己解决这个问题,但我认为 SO 上会有一些 RegEx 专家会喜欢这个问题。
实际上,我想将它用于我的 Apache 访问日志文件的事实是任意且无关紧要的,但它为这种情况提供了上下文。
我需要过滤掉与 Comcast IP 地址相关的记录。这是 Comcast 分配的动态 IP 地址范围的列表。我需要一个可以匹配所有这些的正则表达式,并且只匹配那些。与此同时,我会自己解决这个问题,但我认为 SO 上会有一些 RegEx 专家会喜欢这个问题。
正则表达式解决方案是可能的,但非常麻烦,因为子网掩码不是 8 的倍数。您需要编写一个函数来处理列表并转换为正则表达式。
最好使用正则表达式来获取 IP 地址并根据 Comcast 的 IP 地址列表测试 IP 地址。简单的实现将是一个允许您搜索小于参数的最近数字的集合。
那是很多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 进行匹配的回调。