如何从android中的代码知道路由器的IP地址?
Posted
技术标签:
【中文标题】如何从android中的代码知道路由器的IP地址?【英文标题】:How to know ip address of the router from code in android? 【发布时间】:2012-02-20 14:08:26 【问题描述】:如何从代码中找到路由器的IP地址(网关地址)?
WifiInfo.getIpAddress()
- 返回设备的 IP 地址。
在 shell 命令中 "ipconfig" 不返回任何值。
这是我的解决方案,但如果有更好的方法,请告诉我:
WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
DhcpInfo info = manager.getDhcpInfo();
info.gateway;
【问题讨论】:
通常情况下,“路由器”的 IP 地址不是您知道的。它也不是很明确,你的意思是你的默认网关吗? 是的,我想要网关。在 ubuntu 中我找到它: route -n [如何在 android 中获取网关和子网掩码详细信息?以编程方式](***.com/questions/5387036/…)ipconfig
是一个 windows 命令。 linux命令是ifconfig
,带有F。Android似乎也没有这个,而是使用netcfg
当然,我的意思是ifconfig
。 netcfg
返回设备ip:(
【参考方案1】:
嘿,这可能对你有帮助: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();
【讨论】:
如果我给定静态 IP 并禁用 DHCP 怎么办,在这种情况下,我得到 0.0.0.0 的 (dhcp.serverAddress)。 Formatter.formatIpAddress() has been deprecated.【参考方案2】:我认为你的做法是最好的 (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
【讨论】:
【参考方案3】:试试这个:
$ busybox ip route show
使用终端模拟器在我的平板电脑上运行良好!
【讨论】:
busybox 仅适用于有根的 Android 设备【参考方案4】:要获取 IP 地址,请尝试getInetAddress();
【讨论】:
以上是关于如何从android中的代码知道路由器的IP地址?的主要内容,如果未能解决你的问题,请参考以下文章