package org.openslx.taskmanager.tasks; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.openslx.taskmanager.api.AbstractTask; public class LocalAddressesList extends AbstractTask { private static final Logger LOG = LogManager.getLogger( LocalAddressesList.class ); private Output status = new Output(); @Override protected boolean initTask() { return true; } @Override protected boolean execute() { this.setStatusObject( status ); List list = new ArrayList<>(); try { for ( Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for ( Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress addr = enumIpAddr.nextElement(); Output.Entry entry = new Output.Entry(); entry.iface = intf.getName(); entry.ip = addr.getHostAddress().replaceFirst( "%\\d+$", "" ); if ( addr instanceof Inet4Address ) { entry.type = "ipv4"; } else if ( addr instanceof Inet6Address ) { entry.type = "ipv6"; } else { entry.type = addr.getClass().getSimpleName(); } list.add( entry ); } } } catch ( SocketException e ) { LOG.info( " (error retrieving network interface list)" ); this.status.error = "Error retrieving network interface list (" + e.getMessage() + ")"; return false; } this.status.addresses = list; return true; } /** * Output - contains additional status data of this task */ @SuppressWarnings( "unused" ) private static class Output { protected String error = null; protected List addresses = null; protected static class Entry { protected String ip = null; protected String iface = null; protected String type = null; } } }