匹配X-Forwarded-For标头中的最后一个非私有IP地址

Rud*_*imo 2 regex varnish

我有以下难题.由于我们的服务器堆栈的布局方式: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}))
Run Code Online (Sandbox Code Playgroud)

这是我一直在测试的私有IP过滤器.

(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
Run Code Online (Sandbox Code Playgroud)

请注意,我使用的是正则表达式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
Run Code Online (Sandbox Code Playgroud)

此外,这是一个RegExr示例的链接.任何帮助将不胜感激.

alp*_*avo 5

使用此模式

.*\b(?!10|127)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
Run Code Online (Sandbox Code Playgroud)

演示