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;
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();
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
Try this:
$ busybox ip route show
It worked fine in my tablet with Terminal Emulator!
To get the IP address, try getInetAddress();