问题描述
如何从代码中找到路由器(网关地址)的IP地址?
WifiInfo.getIpAddress() - 返回设备的IP地址.
在shell命令中"ipconfig"不返回任何值.
这是我的解决方案,但请告诉我是否有更好的方法来做这件事:
WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE); DhcpInfo info = manager.getDhcpInfo(); info.gateway;
推荐答案
嘿,这可能会帮助您: dhcpinfo
final WifiManager manager = (WifiManager) super.getSystemService(WIFI_SERVICE); final DhcpInfo dhcp = manager.getDhcpInfo(); final String address = Formatter.formatIpAddress(dhcp.gateway);
将以下行添加到androidmanifest.xml以访问WiFi功能:
<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();
其他推荐答案
我认为你正在做的方式是最好的(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
其他推荐答案
试用:
$ busybox ip route show
用终端仿真器在我的平板电脑中工作很好!
问题描述
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); } }
其他推荐答案
Try this:
$ busybox ip route show
It worked fine in my tablet with Terminal Emulator!