package com.faforever.client.net; import org.bridj.Platform; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.invoke.MethodHandles; import java.net.InetAddress; import java.util.StringTokenizer; public final class GatewayUtil { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); private static final int GATEWAY_COLUMN = Platform.isWindows() ? 3 : 2; private GatewayUtil() { // Utility class } public static InetAddress findGateway() throws IOException { logger.debug("Trying to detect default gateway"); Process result; try { result = Runtime.getRuntime().exec("netstat -rn"); } catch (IOException e) { logger.debug("Could not execute netstat ({})", e.getMessage()); return null; } BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream())); String line; while ((line = output.readLine()) != null) { if (line.contains("0.0.0.0") || line.contains("::/0")) { StringTokenizer stringTokenizer = new StringTokenizer(line); for (int i = 1; i < GATEWAY_COLUMN; i++) { stringTokenizer.nextElement(); } InetAddress inetAddress = InetAddress.getByName(stringTokenizer.nextToken()); logger.debug("Detected default gateway: {}", inetAddress); return inetAddress; } } logger.debug("No default gateway configured"); return null; } }