Получить шлюз по умолчанию в Java - PullRequest
7 голосов
/ 10 мая 2011

Я хочу получить шлюз по умолчанию для локальной машины, используя Java. Я знаю, как получить его, выполнив команды dos или shell, но есть ли другой способ получить? Также необходимо извлечь первичный и вторичный днс ip.

Ответы [ 5 ]

2 голосов
/ 19 ноября 2014

Мой путь - это:

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

Из-за использования дейтаграммы (UDP) он никуда не подключается, поэтому номер порта может быть бессмысленным, а удаленный адрес (1.1.1.1) не должен быть доступен, просто маршрутизируемый.

1 голос
/ 29 октября 2015

В Windows с помощью 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();
            }
        }
    }
}

Здесь я получаю IP-адрес шлюза по умолчанию для моего маршрутизатора и открываю его в браузере, чтобы увидеть страницу настройки моего маршрутизатора.

0 голосов
/ 15 февраля 2019

Я не уверен, работает ли он на каждой системе, но, по крайней мере, здесь я нашел это:

import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main
{
    public static void main(String[] args)
    {
        try
        {
            //Variables to find out the Default Gateway IP(s)
            String canonicalHostName = InetAddress.getLocalHost().getCanonicalHostName();
            String hostName = InetAddress.getLocalHost().getHostName();

            //"subtract" the hostName from the canonicalHostName, +1 due to the "." in there
            String defaultGatewayLeftover = canonicalHostName.substring(hostName.length() + 1);

            //Info printouts
            System.out.println("Info:\nCanonical Host Name: " + canonicalHostName + "\nHost Name: " + hostName + "\nDefault Gateway Leftover: " + defaultGatewayLeftover + "\n");
            System.out.println("Default Gateway Addresses:\n" + printAddresses(InetAddress.getAllByName(defaultGatewayLeftover)));
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
    }
    //simple combined string out the address array
    private static String printAddresses(InetAddress[] allByName)
    {
        if (allByName.length == 0)
        {
            return "";
        } else
        {
            String str = "";
            int i = 0;
            while (i < allByName.length - 1)
            {
                str += allByName[i] + "\n";
                i++;
            }
            return str + allByName[i];
        }
    }
}

Для меня это дает:

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
0 голосов
/ 10 мая 2011

В настоящее время в Java нет стандартного интерфейса для получения шлюза по умолчанию или адресов DNS-серверов. Вам понадобится команда оболочки.

0 голосов
/ 10 мая 2011

Нет простого способа сделать это. Вам придется вызывать локальные системные команды и анализировать выходные данные или читать файлы конфигурации или реестр. Я не знаю, какой платформо-независимый способ заставить это работать - вам придется писать код для linux, mac и windows, если вы хотите работать на всех из них.

См. Как определить IP-адрес моего маршрутизатора / шлюза в Java?

Это относится к шлюзу, и вы можете использовать ifconfig или ipconfig, чтобы получить это. Для получения информации о DNS вам потребуется вызвать другую системную команду, такую ​​как ipconfig в Windows или разобрать /etc/resolv.conf в Linux или mac.

...