Как получить шлюз по умолчанию, используя Ethernet, а не Wi-Fi

я с нетерпением жду, чтобы узнать, как программно найти адрес шлюза по умолчанию. я уже нашел адрес шлюза по умолчанию для Wifi-Manager (getDhcpInfo()), но я не нахожу его в режиме Ethernet. пожалуйста. Помогите мне~~


person ted    schedule 08.06.2012    source источник


Ответы (4)


Если вы хотите иметь два соединения одновременно, вы можете перейти к командной строке и проверить объявленные вами маршруты. Если у маршрута есть один шлюз по умолчанию, вы можете подключиться к этой конкретной сети. Если у него есть два шлюза по умолчанию, вы можете получить доступ к обеим сетям, которые являются случайными.

спасибо боуми

person bowmesh    schedule 08.06.2012

Я предполагаю, что это для Google-TV, может быть полезно, если вы добавите Google-TV в заголовок. Есть ли способ статически объявить шлюз на этом устройстве? Если есть, вы можете попробовать войти в свой маршрутизатор, найти шлюз по умолчанию, а затем напрямую указать шлюз в параметрах конфигурации вашего устройства.

person jfenwick    schedule 08.06.2012

Вот как можно найти IP-адрес в сети Ethernet для устройств Google TV:

private static final String IPADDRESS_PATTERN =
        "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";

public String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en =
                NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr =
                    intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                String ipAddress = inetAddress.getHostAddress().toString();
                if (!inetAddress.isLoopbackAddress()
                        && validate(ipAddress)) {

                    return ipAddress;
                }
            }
        }
    } catch (SocketException e) {
        // TODO(mjoshi): Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}


/**
 * Validate ip address with regular expression
 * 
 * @param ip ip address for validation
 * @return true valid ip address, false invalid ip address
 */
public boolean validate(final String ip) {
    Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
    Matcher  matcher = pattern.matcher(ip);
    return matcher.matches();
}
person Megha Joshi - GoogleTV DevRel    schedule 08.06.2012
comment
Интересный. Из любопытства, зачем нужно проверять строку, возвращаемую getHostAddress? Разве это не всегда должно быть действительным? - person yydl; 09.06.2012
comment
Ой. Тогда я полагаю, вы могли бы также использовать instanceof Inet4Address - person yydl; 12.06.2012

Это код, который мы используем в Able Remote. Обратите внимание, что мы проверяем, работает ли интерфейс (будет работать только с Android 2.3 и выше). Это необходимо, так как пользователи сообщали об устройствах, которые имели несколько IP-адресов, но только один активен одновременно:

public static String getLocalIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                if (intf.isUp()) {
                    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress()) {
                            if (inetAddress instanceof Inet4Address) { // only want ipv4 address
                                return inetAddress.getHostAddress().toString();
                            }
                        }
                    }
                }
            }
        } catch (Throwable e) {
            Log.e(LOG_TAG, "Failed to get the IP address", e);
        }

        return null;
    }
person Leon Nicholls    schedule 20.06.2012