【问题标题】:How to know ip address of the router from code in android?如何从android中的代码知道路由器的IP地址?
【发布时间】: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 中获取网关和子网掩码详细信息?以编程方式](stackoverflow.com/questions/5387036/…)
  • ipconfig 是一个 windows 命令。 linux命令是ifconfig,带有F。Android似乎也没有这个,而是使用netcfg
  • 当然,我的意思是ifconfignetcfg返回设备ip:(

标签: android wifi ip-address router


【解决方案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();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2011-08-05
      • 2011-05-07
      相关资源
      最近更新 更多