java Mask Ip地址

时间:2014-07-07 01:49:34

标签: java regex string mask

我想编写一个java程序来掩盖输入字符串中的特定ip地址

例如

String input = "AAA192.10.*BBB10.92.*" 

要求:要屏蔽的IP地址为10.*,因此它应该屏蔽以10.开头的所有IP地址

因此输出应为AAA192.10.*BBBYYYYYYY(用10.92.*替换Y的每个字符

我需要匹配正则表达式10.*以匹配以10.开头的所有IP地址

1 个答案:

答案 0 :(得分:0)

不要使用正则表达式进行IP。你几乎总是弄错了。即使你有可能做到正确,也是在如此小的角落里,使整个练习毫无意义。

例如,屏蔽192.168.128.0/15的正则表达式是什么?请记住,使用此模式,192.168.120.35和192.168.129.35位于不同的网络中。

/ 14,/ 13,/ 12等会变得更糟。

虽然他们将“网络匹配器”实现为PostgreSQL功能,但OpenNMS上的人们做了类似于你正在做的事情。它必须重写几次才能脱离它的正则表达根源并进入现代世界。它造成的问题多于修复过的问题。

由于您已经可以使用Java,因此请使用Java网络类。它们比你可以拼凑的任何正则表达式解决方案更强大。例如,您可以查看如何确定两个地址是否在同一网络中。

public static boolean sameNetwork(InetAddress ip1, InetAddress ip2, String mask) 
throws Exception {

    byte[] a1 = ip1.getAddress();
    byte[] a2 = ip2.getAddress();
    byte[] m = InetAddress.getByName(mask).getAddress();

    for (int i = 0; i < a1.length; i++)
        if ((a1[i] & m[i]) != (a2[i] & m[i]))
            return false;

    return true;

}

(ÓscarLópez的信用)这个片段

任何与正则表达式相同的尝试都会变得更大,更不可能是正确的。