Como pegar o ip de uma maquina pelo o java

Estou com um projeto e preciso pegar o ip da maquina, mas só consigo o local host (“127.0.0.1”), e eu preciso do ipv4 pelo menos. E se souberem alguma forma de identificar uma porta disponível automaticamente, seria de grande ajuda.

Pra desktop acredito que isso aqui resolva:

try {  
   System.out.println(InetAddress.getLocalHost().getHostAddress());
} catch (Exception e) {
    throw new Exception(e);
}

Esse método verifica se uma determinada porta está disponível.

public static final int PORTA_MINIMA = 1;
public static final int PORTA_MAXIMA = 65535;

public static boolean portaDisponivel(int port) {
    if (port < PORTA_MINIMA || port > PORTA_MAXIMA) {
        throw new IllegalArgumentException("Porta inválida: " + port);
    }

    try (ServerSocket serverSocket = new ServerSocket(port);
         DatagramSocket datagramSocket = new DatagramSocket(port)) {
        return true; // se chegou até aqui, então a porta está disponível
    } catch (IOException e) {
        return false; // se entrou aqui, então a porta não está disponível
    }
}

Esse método retorna uma porta disponível:

public static int encontrarUmaPortaDisponivel() {
    try (ServerSocket socket = new ServerSocket(0)) { // ao especificar porta 0, o ServerSocket vai "ouvir" em qualquer porta livre
        return socket.getLocalPort(); // ao retornar o socket é fechado devidamente por causa do try-with-resources.
    } catch (IOException e) {
        System.out.println("Não foi possível obter uma porta disponível: " + e.getMessage());
        return -1;
    }
}