【发布时间】:2016-05-22 13:51:31
【问题描述】:
我有以下难题。由于我们的服务器堆栈的布局方式:ELB -> Varnish -> Apache,我需要 Varnish 从 X-Forwarded-For 标头中提取最右边的非私有 IP 地址(由 ELB 正确设置并且可以信任)。
我已经在使用以下正则表达式来获取字符串中的最后一个 IP 地址。我的问题是试图弄清楚如何过滤私有 IP 地址。
((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))(?!.*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))
这是我一直在测试的私有 IP 过滤器。
(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
请注意,我使用的是正则表达式 VMOD,它允许我访问反向引用。
看看下面的例子,它应该能说明我想要完成的事情:
92.58.12.100, 10.0.120.5 -> 92.58.12.100
172.24.10.15, 127.0.0.1, 95.58.12.100 -> 95.58.12.100
92.58.12.100 -> 92.58.12.100
另外,这是一个 link 到 RegExr 示例。任何帮助将不胜感激。
【问题讨论】: