часто возникают вопросы по работе с сетью и сетевыми интерфейсами...
для LS адаптировать не стал..., куски на java
итераторы реализовал для 8-ой java (уж извиняйте), в коде оставил ссылки на оригиналы
для LS адаптировать не стал..., куски на java
итераторы реализовал для 8-ой java (уж извиняйте), в коде оставил ссылки на оригиналы
Java:
//https://docs.oracle.com/javase/tutorial/networking/nifs/listing.html
import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;
public class ListNets {
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets))
displayInterfaceInformation(netint);
}
static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
out.printf("Display name: %s\n", netint.getDisplayName());
out.printf("Name: %s\n", netint.getName());
Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
out.printf("InetAddress: %s\n", inetAddress);
}
out.printf("\n");
}
}
Java:
import org.apache.commons.net.util.SubnetUtils;
import java.net.*;
import java.util.*;
import static java.lang.System.out;
class SomeClass{
....
public static <T> T[] concatAll(T[] first, T[]... rest) {
//http://stackoverflow.com/questions/80476/how-can-i-concatenate-two-arrays-in-java
int totalLength = first.length;
for (T[] array : rest) {
totalLength += array.length;
}
T[] result = Arrays.copyOf(first, totalLength);
int offset = first.length;
for (T[] array : rest) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
public static String[] getRangeFromLocal(int ifNum) {
String[] res = null;
NetworkInterface liface;
try {
if (ifNum >= 0) {
liface = Collections.list(NetworkInterface.getNetworkInterfaces()).get(ifNum);
//displayInterfaceInformation(liface);
//res=new String[]{liface.getInterfaceAddresses().get(0).getAddress().getHostAddress()};
res = new SubnetUtils(liface.getInterfaceAddresses().get(0).getAddress().getHostAddress() + "/" + String.valueOf(liface.getInterfaceAddresses().get(0).getNetworkPrefixLength())).getInfo().getAllAddresses();
} else {
res = Collections.list(NetworkInterface.getNetworkInterfaces()).stream()
// networkInterface.getInterfaceAddresses().stream()
.filter(iface -> {
boolean ret = true;
try {
ret = !iface.isLoopback();
} catch (SocketException e) {
e.printStackTrace();
}
return ret;
})
.map(iface -> {
return new SubnetUtils(iface.getInterfaceAddresses().get(0).getAddress().getHostAddress() +
"/" + String.valueOf(iface.getInterfaceAddresses().get(0).getNetworkPrefixLength())).getInfo().getAllAddresses();
})
.reduce(new String[]{}, (s1, s2) -> {
return concatAll(s1, s2);
});
}
} catch (SocketException e) {
e.printStackTrace();
}
return res;
}
}