Quiero buscar la puerta de enlace predeterminada para la máquina local usando java. Sé cómo obtenerlo ejecutando dos o comandos de shell, pero ¿hay alguna otra forma de recuperarlo? También es necesario buscar dns primario y secundario ip.Obtener la puerta de enlace predeterminada en java
Respuesta
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.
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.
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.
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.
- 1. Cómo obtener la puerta de enlace predeterminada en Mac OSX
- 2. ¿Cómo puedo determinar la puerta de enlace predeterminada en iPhone?
- 3. Puerta de enlace predeterminada en C en Linux
- 4. Interfaz de red de búsqueda de Java para la puerta de enlace predeterminada
- 5. Biblioteca de puerta de enlace de pago Java
- 6. ¿Cómo puedo determinar la IP de mi enrutador/puerta de enlace en Java?
- 7. ¿Cómo obtener la dirección de la puerta de enlace WIFI en el iPhone?
- 8. Obtener la dirección IP de la puerta de enlace en android
- 9. ¿Qué es una puerta de enlace SMS
- 10. ¿Cómo crear una puerta de enlace SMS?
- 11. "Hg a Hg (puerta de enlace) a SVN" en comparación con "Git a Git (puerta de enlace) a SVN"
- 12. Play2-mini y Akka2 para la puerta de enlace HTTP
- 13. Repositorio o patrón de puerta de enlace en Ruby
- 14. primavera Integración de puerta de enlace sin argumentos
- 15. Obteniendo la puerta de enlace para usar para una IP determinada en ANSI C
- 16. hgweb.cgi arroja un 502 (puerta de enlace defectuosa) al pulsar
- 17. Android como puerta de enlace SIP a GSM
- 18. ¿Cómo integrar la puerta de enlace de pagos de CCavenue en mi sitio web?
- 19. Sistemas de tarjetas de crédito basadas en tokens frente a la puerta de enlace tradicional
- 20. PHP falla la conexión de socket con la puerta de enlace de notificaciones de Apple
- 21. Obtener la dirección IP de la computadora en un proyecto de Android usando Java
- 22. usando la puerta de enlace de pago y la conformidad PCI
- 23. Creación de una puerta de enlace de pago en línea completa como Paypal
- 24. Obtener fuente predeterminada del sistema
- 25. Creación de un botón de pago ahora básico para la puerta de enlace de sagepay
- 26. Envío de SMS a través de la puerta de enlace gratuita
- 27. VBS - Obtener impresora predeterminada
- 28. ¿Cuál es la puerta de enlace de pago más simple posible para implementar? (usando Django)
- 29. eMail a través de la puerta de enlace SMS se envía, pero no se recibe
- 30. ¿Cuál es una buena alternativa de código abierto para Kannel para la puerta de enlace SMS?
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
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. –
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. –