2011-05-10 40 views

Respuesta

0

No hay una manera fácil de hacer esto. Tendrá que llamar a los comandos del sistema local y analizar el resultado, o leer los archivos de configuración o el registro. No hay una plataforma independiente de la que sea consciente para hacer que esto funcione; tendrá que codificar Linux, Mac y Windows si desea ejecutarlos en todos ellos.

Ver How can I determine the IP of my router/gateway in Java?

que cubre la puerta de entrada, y se podía utilizar ifconfig o ipconfig también para conseguir esto. Para obtener información de DNS, deberá llamar a un comando del sistema diferente, como ipconfig en Windows o parse /etc/resolv.conf en Linux o mac.

0

Actualmente no existe una interfaz estándar en Java para obtener la puerta de enlace predeterminada o las direcciones del servidor DNS. Necesitarás un comando de shell.

0

My way es:

try(DatagramSocket s=new DatagramSocket()) 
{ 
    s.connect(InetAddress.getByAddress(new byte[]{1,1,1,1}), 0); 
    return NetworkInterface.getByInetAddress(s.getLocalAddress()).getHardwareAddress(); 
} 

debido al uso de datagramas (UDP), que no se conecta en cualquier lugar, por lo que el número de puerto puede ser la dirección de sentido y remota (1.1.1.1) no necesita ser alcanzable, justo Enrutable.

+0

esto no siempre devolverá la puerta de enlace predeterminada, eso está completamente inventado. El enrutamiento de paquetes se determina a través de múltiples factores, uno de ellos es la dirección de destino. Si su puerta de enlace predeterminada no puede aceptar/enrutar su dirección de destino, su paquete se entregará a través de otra ruta, que puede ser o no la peor de todas las rutas disponibles; Dependiendo de las métricas del adaptador de red, también puede ser la segunda mejor ruta o algo intermedio. Por favor, no escriba software con suposiciones, eso empeora la situación de todo el negocio. – specializt

+0

Esto es bastante ingenioso. Sin embargo, depende de la dirección de destino; podría ser mejor usar una [dirección real que está disponible en Internet] (http://serverfault.com/q/132805/92104) para asegurarse de que al menos está obteniendo * a * una ruta válida, incluso si no es la ruta predeterminada. –

+0

Si tiene un DNS que funcione, puede usar un nombre de host en lugar de una dirección aquí; 'a.root-servers.net' está garantizado para existir siempre, y es poco probable que esté en su red local. –

1


En Windows con la ayuda de ipconfig:

import java.awt.Desktop; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URI; 

public final class Router { 

    private static final String DEFAULT_GATEWAY = "Default Gateway"; 

    private Router() { 
    } 

    public static void main(String[] args) { 
     if (Desktop.isDesktopSupported()) { 
      try { 
       Process process = Runtime.getRuntime().exec("ipconfig"); 

       try (BufferedReader bufferedReader = new BufferedReader(
         new InputStreamReader(process.getInputStream()))) { 

        String line; 
        while ((line = bufferedReader.readLine()) != null) { 
         if (line.trim().startsWith(DEFAULT_GATEWAY)) { 
          String ipAddress = line.substring(line.indexOf(":") + 1).trim(), 
            routerURL = String.format("http://%s", ipAddress); 

          // opening router setup in browser 
          Desktop.getDesktop().browse(new URI(routerURL)); 
         } 

         System.out.println(line); 
        } 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Aquí estoy recibiendo la dirección IP de la pasarela por defecto de mi router, y abrirlo en un navegador para ver la página de configuración de mi router.

Cuestiones relacionadas