首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配X转发-For报头中的最后一个非私有IP地址

匹配X转发-For报头中的最后一个非私有IP地址
EN

Stack Overflow用户
提问于 2016-02-11 16:48:27
回答 2查看 1.8K关注 0票数 3

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

我已经使用下面的正则表达式来获取字符串中的最后一个IP地址。我的问题是如何过滤私有IP地址。

代码语言:javascript
运行
复制
((\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过滤器。

代码语言:javascript
运行
复制
(^127\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)

请注意,我使用的是正则表达式VMOD,它允许我访问回引用。

请查看下面的示例,该示例将说明我正在努力完成的任务:

代码语言:javascript
运行
复制
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

另外,下面是一个链接到一个RegExr示例。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-11 17:05:56

使用此模式

代码语言:javascript
运行
复制
.*\b(?!10|127)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

演示

票数 5
EN

Stack Overflow用户

发布于 2018-08-17 06:57:19

alpha bravo的应答点指向正确的方向,但缺少了对私有IP地址空间的正确解析(例如,它在要排除的前缀后面缺少一个点,它将匹配以10开头的任意地址,包括101.*,这不是)。

IPv4私有地址空间是:

代码语言:javascript
运行
复制
10.0.0.0 to 10.255.255.255
172.16.0.0 to 172.31.255.255
192.168.0.0 to 192.168.255.255

修改alpha bravo的答案以包含这些地址(以及以127.*开头的特殊地址)将产生以下正则表达式:

代码语言:javascript
运行
复制
.*\b(?!127\.|10\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.|192\.168\.)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35345232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档