为了区分内部用户和外部用户,我在 scriplet 标记中使用了 java 正则表达式,代码如下:
String ipAddress = request.getHeader("iv-remote-address");
String internalIPs =
"166.41.8.X" + "|" +"12.16.X.X" + "|" +"12.22.X.X" + "|" +"132.23.X.X" + "|";
Pattern p = Pattern.compile("^(?:"+internalIPs.replaceAll("X", "(?:\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])")+")$");
Matcher m = p.matcher(ipAddress);
if (m.matches())
{
//print internal IP
} else{
//print external IP
}
如果输入为 166.41.8.2,则 IP 地址被正确识别为内部 IP 如果输入为 12.16.2.1 或 12.22.12.3,则 IP 地址未被正确识别为内部 IP。我想这与匹配模式与 2 个“X”有关。任何人都可以识别模式匹配的问题吗?或者可以推荐一种匹配 IP 地址模式的最佳方法?