使用Java中的regexp获取InetAddress列表

时间:2018-02-02 08:42:20

标签: java inetaddress

有没有办法使用正则表达式并获取IP地址列表?在我的例子中,系统中为每个设备接口定义了带数字的别名,我需要使用别名来获取列表。对于测试系统,所有别名都可以映射到同一设备,而在生产中则不同。

例如,我可以将traffic1,traffic2,traffic3等映射到eth0,eth1 ......等等。所有trafficX都可以在测试中映射到eth0。

有没有办法通过传递流量*或类似的东西来获取所有IP地址的列表?

1 个答案:

答案 0 :(得分:-1)

此方法读取/ etc / hosts并搜索模式:

private static InetAddress[] listIPs(String re) throws IOException {
    Pattern pat = Pattern.compile(re);
    try (InputStream stream = new FileInputStream("/etc/hosts");
            Reader reader = new InputStreamReader(stream, "UTF-8");
            BufferedReader in = new BufferedReader(reader)) {
        Set<InetAddress> result = new HashSet<>();
        String line = in.readLine();
        while (line != null) {
            String[] fields = line.split("\\s+");
            boolean found = false;
            for (int i = 1; !found && i < fields.length; ++i) {
                found = pat.matcher(fields[i]).matches();
            }
            if (found) {
                result.add(InetAddress.getByName(fields[0]));
            }
            line = in.readLine();
        }
        return result.toArray(new InetAddress[result.size()]);
    }
}    

在您的示例中,您可以传递"traffic[0-9]+"