匹配 X-Forwarded-For header 中的最后 non-private 个 IP 地址
Matching last non-private IP address in an X-Forwarded-For header
我有以下难题。由于我们服务器堆栈的布局方式:ELB -> Varnish -> Apache
,我需要 Varnish 从 X-Forwarded-For
header 中提取最右边的 non-private 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 示例。任何帮助将不胜感激。
使用这个模式
.*\b(?!10|127)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
alpha bravo 的答案指向正确的方向,但缺少对私有 IP 地址的正确解析 space(例如,它在要排除的前缀之后缺少一个点,它将匹配任何以开头的地址其中 10 个为私有,包括 101...* 而不是).
IPv4 私有地址 space 是:
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.* 开头的特殊地址)产生以下正则表达式:
.*\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}
我有以下难题。由于我们服务器堆栈的布局方式:ELB -> Varnish -> Apache
,我需要 Varnish 从 X-Forwarded-For
header 中提取最右边的 non-private 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 示例。任何帮助将不胜感激。
使用这个模式
.*\b(?!10|127)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
alpha bravo 的答案指向正确的方向,但缺少对私有 IP 地址的正确解析 space(例如,它在要排除的前缀之后缺少一个点,它将匹配任何以开头的地址其中 10 个为私有,包括 101...* 而不是).
IPv4 私有地址 space 是:
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.* 开头的特殊地址)产生以下正则表达式:
.*\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}