How to know ip address of the router from code in android?

16,688

Solution 1

Hey this might help you: DHCPInfo

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

Add following rows to AndroidManifest.xml in order to access wifi functionalities:

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

As the formatIpAddress is deprecated now you can use below code

byte[] myIPAddress = BigInteger.valueOf(manager.getIpAddress()).toByteArray();
ArrayUtils.reverse(myIPAddress);
InetAddress myInetIP = InetAddress.getByAddress(myIPAddress);
String myIP = myInetIP.getHostAddress();

Solution 2

I think the way you're doing it is the best (AFAIK), here's some example code from a Cordova plugin that does it the same way:

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

Share:
16,688
HotIceCream
Author by

HotIceCream

Updated on June 22, 2022

Comments

  • HotIceCream
    HotIceCream almost 2 years

    How can you find the IP address of the router (gateway address) from code?

    WifiInfo.getIpAddress() - returns IP address of device.

    In a shell command "ipconfig" does not return any value.

    Here is my solution, but please let me know if there is a better way to do this:

    WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
    DhcpInfo info = manager.getDhcpInfo();
    info.gateway;
    
  • ravz
    ravz over 9 years
    What if I have given Static IP & disabled DHCP, in that case I am getting 0.0.0.0 for (dhcp.serverAddress).
  • Lizz
    Lizz over 9 years
    busybox is only available on rooted Androids
  • Jk Jensen
    Jk Jensen almost 7 years
    Formatter.formatIpAddress() has been deprecated.