regex - 匹配 X-Forwarded-For header 中的最后一个非私有(private) IP 地址

标签 regex varnish

我有以下难题。由于我们服务器堆栈的布局方式:ELB -> Varnish -> Apache ,我需要 Varnish 从 X-Forwarded-For 中提取最右边的非私有(private) IP 地址header(由ELB合理设置,可信)。

我已经在使用以下正则表达式来获取字符串中的最后一个 IP 地址。我的问题一直在试图弄清楚如何过滤私有(private) 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}))

这是我一直在测试的私有(private) 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 示例。任何帮助将不胜感激。

最佳答案

使用这个模式

.*\b(?!10|127)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

Demo

关于regex - 匹配 X-Forwarded-For header 中的最后一个非私有(private) IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35345232/

相关文章:

http - 使用代理缓存昂贵的传出 HTTP 请求?

javascript - 为什么/.../创建的 javascript RegExp 可以工作,但通过 "new RegExp"创建的 JavaScript RegExp 却不能?

python - 选择特定文本

javascript - 正则表达式匹配相同类型的字符

.net - 电子邮件的正则表达式不接受超过一个点或撇号

Varnish 缓存第一次命中

注销后Django无法删除csrftoken

php - 正则表达式 8 个字符

configuration - 使用 Varnish 配置多个站点

WordPress nginx 预览帖子是 404 未找到,但旧帖子正在工作