在 Java 中使用正则表达式获取 InetAddress 列表
Get InetAddress list using regexp in Java
有没有办法使用正则表达式来获取 IP 地址列表?在我的例子中,系统中为每个设备接口定义了用数字定义的别名,我需要使用别名获取列表。对于测试系统,所有别名都可以映射到同一设备,而在生产中它会有所不同。
例如,我可以将 traffic1、traffic2、traffic3 等映射到生产中的 eth0、eth1 等。在测试中,所有 trafficX 都可以映射到 eth0。
有没有办法通过传递流量*或类似的东西来获取所有 IP 地址的列表?
此方法读取 /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]+"
例如。
有没有办法使用正则表达式来获取 IP 地址列表?在我的例子中,系统中为每个设备接口定义了用数字定义的别名,我需要使用别名获取列表。对于测试系统,所有别名都可以映射到同一设备,而在生产中它会有所不同。
例如,我可以将 traffic1、traffic2、traffic3 等映射到生产中的 eth0、eth1 等。在测试中,所有 trafficX 都可以映射到 eth0。
有没有办法通过传递流量*或类似的东西来获取所有 IP 地址的列表?
此方法读取 /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]+"
例如。