我能否获取连接到的wifi接入点的IP地址?

4

你好,我是一名新手安卓程序员。我的目标是连接到一个接入点并发送一些命令。在通过wifi连接到它之后,是否可以编程方式获取它的IP地址,以便我可以与它建立http连接?

到目前为止,我知道我们可以获取设备IP地址,但不确定是否可以获取接入点的IP地址。请帮忙解答。谢谢。


1
可能是无线接入点是否有IP地址?的重复问题。 - kabuko
从那个重复的问题中并不清楚你所问的是否有意义。 - user207421
@kabuko 我所提到的访问点已被分配了IP地址。我可以ping和连接到它。我的问题是是否有可能从Android应用程序中获取此IP。此外,重复的帖子没有回答这个问题。 - user2597333
3个回答

3
public static String getApIpAddr(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
    byte[] ipAddress = convert2Bytes(dhcpInfo.serverAddress);
    try {
        String apIpAddr = InetAddress.getByAddress(ipAddress).getHostAddress();
        return apIpAddr;
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return null;
}

private static byte[] convert2Bytes(int hostAddress) {
    byte[] addressBytes = { (byte)(0xff & hostAddress),
            (byte)(0xff & (hostAddress >> 8)),
            (byte)(0xff & (hostAddress >> 16)),
            (byte)(0xff & (hostAddress >> 24)) };
    return addressBytes;
}

0
我正在使用这个来获取IP地址。
try {
           for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) 
               {
                    NetworkInterface intf = en.nextElement();       
                    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();) 
                      {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress())
                         { 
                         //My IP address
                               String Ip= inetAddress.getHostAddress().toString();

                         }   
                       }
                  }

            }
     catch (SocketException e) 
     { 
       Log.e("Error occurred  ", e.toString());
      }

3
这段代码非常完美,但我认为它可能无法用于WiFi。 - user2568702
谢谢Gaurav。以上代码在连接到WiFi时返回IPv6地址。因此,我无法检查这是否是正确的地址。我还尝试包括if (!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address)),但我仍然没有获得任何IPv4地址。我连接的AP确实有一个IPv4地址,并且我可以从子网内Ping通它。但这并未返回相同的地址。 - user2597333

0

我猜你指的是设备连接的接入点的外部(公共)IP地址。 如果是这样,确实有一种简单的方法可以获取设备所连接的接入点的公共IP地址。只需在Web服务器上设置一个脚本,该脚本将回显连接到它的任何客户端的IP地址(类似于www.whatismyip.com)。 然后,您的设备只需要向脚本发送GET请求,就会返回设备连接的接入点的外部IP。


谢谢,但不幸的是,我将无法访问任何其他Web服务器。这需要是一个独立的Android应用程序,仅与它连接到的接入点进行交互。此外,通过接入点的IP,我指的是由DHCP代理分配给它的IP,可以使用该IP对AP进行ping测试。 - user2597333

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接