я с нетерпением жду, чтобы узнать, как программно найти адрес шлюза по умолчанию. я уже нашел адрес шлюза по умолчанию для Wifi-Manager (getDhcpInfo()), но я не нахожу его в режиме Ethernet. пожалуйста. Помогите мне~~
Как получить шлюз по умолчанию, используя Ethernet, а не Wi-Fi
Ответы (4)
Если вы хотите иметь два соединения одновременно, вы можете перейти к командной строке и проверить объявленные вами маршруты. Если у маршрута есть один шлюз по умолчанию, вы можете подключиться к этой конкретной сети. Если у него есть два шлюза по умолчанию, вы можете получить доступ к обеим сетям, которые являются случайными.
спасибо боуми
Я предполагаю, что это для Google-TV, может быть полезно, если вы добавите Google-TV в заголовок. Есть ли способ статически объявить шлюз на этом устройстве? Если есть, вы можете попробовать войти в свой маршрутизатор, найти шлюз по умолчанию, а затем напрямую указать шлюз в параметрах конфигурации вашего устройства.
Вот как можно найти 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();
}
getHostAddress
? Разве это не всегда должно быть действительным?
- person yydl; 09.06.2012
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;
}