如何从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 当然,我的意思是ifconfignetcfg返回设备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地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在android中获取连接的wifi路由器的IP地址?

关于公共IP地址(公网ip):您需要知道的

如何在公司知道自己家路由器的外网IP地址

如何给路由器指定IP地址!

怎么设置自动获取IP地址

我如何知道我的 phpmyadmin(xampp) for android app 的大学 IP 地址