9
votes

Obtenez une passerelle par défaut dans Java

Je veux récupérer la passerelle par défaut pour la machine locale à l'aide de Java. Je sais comment l'obtenir en exécutant des commandes DOS ou Shell, mais y a-t-il une autre façon de chercher? Également besoin d'aller chercher une adresse IP DNS primaire et secondaire.


0 commentaires

5 Réponses :


0
votes

Il n'y a pas de moyen facile de le faire. Vous devrez appeler des commandes système locales et analyser la sortie, ou lire des fichiers de configuration ou le registre. Il n'y a pas de manière indépendante de la plate-forme que je conscience de faire ce travail - vous devrez coder pour Linux, Mac et Windows si vous souhaitez les exécuter sur chacun d'eux.

voir Comment puis-je déterminer L'IP de mon routeur / passerelle en Java?

qui couvre la passerelle et vous pouvez également utiliser ifconfig ou ipconfig aussi pour l'obtenir. Pour les informations DNS, vous devrez appeler une commande système différente telle que ipconfig sous Windows ou parse /etc/resolv.conf sur Linux ou Mac.


0 commentaires

0
votes

Il n'y a actuellement aucune interface standard en Java pour obtenir la passerelle par défaut ou les adresses de serveur DNS. Vous aurez besoin d'une commande shell.


0 commentaires

4
votes

My Way est: XXX

à cause de l'utilisation de datagramme (UDP), il ne se connecte nulle part où le numéro de port peut être sans signification et une adresse distante (1.1.1.1) ne doit pas nécessairement être accessible, juste routable.


3 commentaires

Cela ne retournera pas toujours la passerelle par défaut, c'est complètement composé. Le routage de paquets est déterminé via plusieurs facteurs, l'un d'entre eux est l'adresse de destination. Si votre passerelle par défaut ne peut pas accepter / acheminer votre adresse de destination, votre paquet sera livré via un autre itinéraire, ce qui peut ou non être le pire de toutes les voies disponibles; En fonction de vos métriques de l'adaptateur réseau, il peut également s'agir du deuxième meilleur itinéraire ou de quelque chose entre les deux. S'il vous plaît n'écrivez pas de logiciels avec des hypothèses, qui rend toute la situation des affaires pire.


Ceci est assez ingénieux. Cela dépend de l'adresse de destination, cependant; Il peut être préférable d'utiliser un Adresse réelle qui existe sur Internet pour vous assurer que vous obtenez au moins Un itinéraire valide , même si ce n'est pas la voie par défaut.


Si vous travaillez DNS, vous pouvez utiliser un nom d'hôte au lieu d'une adresse ici; A.ROOT-SERVERS.NET est garanti pour toujours exister et il est peu probable qu'il soit dans votre réseau local.



1
votes


Sous Windows à l'aide de ipconfig code>:

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();
            }
        }
    }
}


0 commentaires

-2
votes

Je ne suis pas sûr que cela fonctionne sur chaque système, mais au moins ici, j'ai trouvé ceci:

Info:
Canonical Host Name: PCK4D-PC.speedport.ip
Host Name: PCK4D-PC
Default Gateway Leftover: speedport.ip

Default Gateway Addresses:
speedport.ip/192.168.2.1
speedport.ip/fe80:0:0:0:0:0:0:1%12


1 commentaires

Cela n'a pas fonctionné pour moi malheureusement. Je me donne juste localhost. Je pense que je vais juste faire gethostaddress . Obtenez le premier 3 octère et supposez que xxx.xxx.xxx.1 ou xxx.xxx.xxx.254 est la passerelle.