package com.netifera.platform.util;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.Enumeration;
import com.netifera.platform.util.addresses.inet.IPv4Address;
@Deprecated // not used: remove from codebase?
public class InterfaceUtility {
private static final int IPV4_ONLY = 1;
public static NetworkInterface defaultInterface() {
return defaultInterface(0);
}
public static NetworkInterface defaultInet4Interface() {
return defaultInterface(IPV4_ONLY);
}
private static NetworkInterface defaultInterface(int flags) {
Enumeration<NetworkInterface> ifs;
try {
ifs = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
Enumeration<InetAddress> ads;
for(NetworkInterface netif : Collections.list(ifs)) {
ads = netif.getInetAddresses();
for(InetAddress addr : Collections.list(ads)) {
if(!addr.isLoopbackAddress()) {
if((flags == IPV4_ONLY) && ((addr instanceof Inet4Address) == false)) {
continue;
}
return netif;
}
}
}
return null;
}
public static IPv4Address defaultInet4Address() {
NetworkInterface netif = defaultInet4Interface();
if(netif == null) {
return null;
}
Enumeration<InetAddress> ads = netif.getInetAddresses();
for(InetAddress addr : Collections.list(ads)) {
if(addr instanceof Inet4Address) {
return new IPv4Address( addr.getAddress() );
}
}
return null;
}
public static IPv4Address getIPv4SourceAddressFor(IPv4Address dst) {
IPv4Address src;
try {
// KLUDGE (sean) to lookup ip source address without parsing routing table.
InetAddress address = InetAddress.getByAddress(dst.toBytes());
DatagramSocket s = new DatagramSocket(0);
s.connect(address, 1);
Inet4Address ia = (Inet4Address)s.getLocalAddress();
try {
s.close();
} catch (Exception e) {
}
if (ia == null)
return null;
src = new IPv4Address(ia.getAddress());
} catch (UnknownHostException e) {
return null;
} catch (SocketException e) {
return null;
}
return src;
}
}