как узнать ip адрес роутера из кода в андроиде? - PullRequest
5 голосов
/ 27 января 2012

Как узнать IP-адрес маршрутизатора (адрес шлюза) из кода?

WifiInfo.getIpAddress() - возвращает IP-адрес устройства.

В команде оболочки "ipconfig" не возвращает никакого значения.

Вот мое решение, но, пожалуйста, дайте мне знать, если есть лучший способ сделать это:

WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
DhcpInfo info = manager.getDhcpInfo();
info.gateway;

Ответы [ 4 ]

13 голосов
/ 23 мая 2013

Эй, это может вам помочь: DHCPInfo

final WifiManager manager = (WifiManager) super.getSystemService(WIFI_SERVICE);
final DhcpInfo dhcp = manager.getDhcpInfo();
final String address = Formatter.formatIpAddress(dhcp.gateway);

Добавьте следующие строки в AndroidManifest.xml для доступа к функциям Wi-Fi:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

КакformatIpAddress устарел, теперь вы можете использовать следующий код

byte[] myIPAddress = BigInteger.valueOf(manager.getIpAddress()).toByteArray();
ArrayUtils.reverse(myIPAddress);
InetAddress myInetIP = InetAddress.getByAddress(myIPAddress);
String myIP = myInetIP.getHostAddress();
1 голос
/ 16 февраля 2018

Я думаю, что вы делаете это лучше всего (AFAIK), вот пример кода из плагина Cordova, который делает это так же:

public class GetRouterIPAddress extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        try {
            String ip = getRouterIPAddress();
            if (ip.equals("0.0.0.0")) {
                callbackContext.error("No valid IP address");
                return false;
            }
            callbackContext.success(ip);
            return true;
        } catch(Exception e) {
            callbackContext.error("Error while retrieving the IP address. " + e.getMessage());
            return false;
        }
    }

    private String formatIP(int ip) {
        return String.format(
            "%d.%d.%d.%d",
            (ip & 0xff),
            (ip >> 8 & 0xff),
            (ip >> 16 & 0xff),
            (ip >> 24 & 0xff)
        );
    }

    private String getRouterIPAddress() {
        WifiManager wifiManager = (WifiManager) cordova.getActivity().getSystemService(Context.WIFI_SERVICE);
        DhcpInfo dhcp = wifiManager.getDhcpInfo();
        int ip = dhcp.gateway;
        return formatIP(ip);
    }
}

https://github.com/vallieres/cordova-plugin-get-router-ip-address/blob/master/src/android/GetRouterIPAddress.java

0 голосов
/ 25 октября 2013

Попробуйте:

$ busybox ip route show

На моем планшете с Terminal Emulator все работало нормально!

0 голосов
/ 20 августа 2013

Чтобы получить IP-адрес, попробуйте getInetAddress();

...