Поддержка изоляции нескольких сетевых интерфейсов зависит от ОС, поэтому в Java нет встроенной поддержки.
Простой способ найти ваш «основной» IP-адрес - это подключиться к общедоступному серверу и проверить «клиентский адрес», используемый для подключения:
Socket socket= new Socket();
SocketAddress endpoint= new InetSocketAddress("www.google.com", 80);
socket.connect(endpoint);
InetAddress localAddress = socket.getLocalAddress();
socket.close();
System.out.println(localAddress.getHostAddress());
NetworkInterface ni = NetworkInterface.getByInetAddress(localAddress);
byte[] mac = ni.getHardwareAddress();
StringBuilder s=new StringBuilder();
if (mac != null){
for(int j=0; j < mac.length; j++) {
String part = String.format("%02X%s", mac[j], (j < mac.length - (1)) ? "" : "");
s.append(part);
}
System.out.println("MAC:" + s.toString());
}
else{
System.out.println("Address doesn't exist or is not accessible.");
}
Помимо этого, вы можете обратиться к низкоуровневым библиотекам на основе JNI для обработки низкоуровневых сетевых протоколов или даже для поиска таблиц маршрутизации. Вам может быть интересно что-то вроде http://jnetpcap.com/.
НТН