当前位置: 首页 > 知识库问答 >
问题:

Android获取热点提供设备的IP地址

邹涵畅
2023-03-14

我目前正在使用

public static String getLocalIPAddress(WifiManager wm){
    return Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
}

获取执行设备的IP地址。如果该设备连接到一个“公共”wlan网络,并且该设备连接到一个wifi网络,该网络由另一个Android设备通过hotspot托管,则该功能正常。如果设备未连接到任何wifi网络,则返回“0.0.0.0”(正确)。但如果设备通过提供热点来承载wifi网络,methode仍然返回“0.0.0.0”。我如何在“自己的wifi网络”中获取热点提供设备的真实IP地址?

thx

共有3个答案

卞成荫
2023-03-14

虽然这是一个老问题,但这可能会帮助一些人。只要打开热点,它就会返回设备的ip地址。

private String getIpAddress() {
    String ip = "";
    try {
        Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
                .getNetworkInterfaces();
        while (enumNetworkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = enumNetworkInterfaces
                    .nextElement();
            Enumeration<InetAddress> enumInetAddress = networkInterface
                    .getInetAddresses();
            while (enumInetAddress.hasMoreElements()) {
                InetAddress inetAddress = enumInetAddress.nextElement();

                if (inetAddress.isSiteLocalAddress()) {
                    ip += "SiteLocalAddress: "
                            + inetAddress.getHostAddress() + "\n";
                }
            }
        }

    } catch (SocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        ip += "Something Wrong! " + e.toString() + "\n";
    }
    return ip;
}
濮阳唯
2023-03-14

我测试了几个不同的设备,看起来热点提供设备的网络上总是有IP192.168.43.1。有人能检查/确认这个假设吗?

周正真
2023-03-14

你几乎是对的,hotspot的默认IP地址是192.168.43.1(如果设备制造商没有改变的话)

你可以查看Android框架(AOSP)的源代码。

/框架/基础/服务/java/com/android/服务器/连接/Tethering.java/框架/base/wifi/java/android/net/wifi/WifiStateMachine.java

在系绳中。JAVA

private static final String USB_NEAR_IFACE_ADDR      = "192.168.42.129";
private static final int USB_PREFIX_LENGTH        = 24;

// USB is  192.168.42.1 and 255.255.255.0
// Wifi is 192.168.43.1 and 255.255.255.0
// BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
// with 255.255.255.0

private String[] mDhcpRange;
private static final String[] DHCP_DEFAULT_RANGE = {
    "192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
    "192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
    "192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
    "192.168.48.2", "192.168.48.254",
};

还有,在Wifistate机器中。JAVA

private boolean startTethering(ArrayList<String> available) {                                 

    boolean wifiAvailable = false;                                                            

    checkAndSetConnectivityInstance();                                                        

    String[] wifiRegexs = mCm.getTetherableWifiRegexs();                                      

    for (String intf : available) {                                                           
        for (String regex : wifiRegexs) {                                                     
            if (intf.matches(regex)) {                                                        

                InterfaceConfiguration ifcg = null;                                           
                try {                                                                         
                    ifcg = mNwService.getInterfaceConfig(intf);                               
                    if (ifcg != null) {                                                       
                        /* IP/netmask: 192.168.43.1/255.255.255.0 */                          
                        ifcg.setLinkAddress(new LinkAddress(                                  
                                NetworkUtils.numericToInetAddress("192.168.43.1"), 24));      
                        ifcg.setInterfaceUp();                                                

                        mNwService.setInterfaceConfig(intf, ifcg);                            
                    }                                                                         
                } catch (Exception e) {                                                       
                    loge("Error configuring interface " + intf + ", :" + e);                  
                    return false;                                                             
                }                                                                             

                if(mCm.tether(intf) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {           
                    loge("Error tethering on " + intf);                                       
                    return false;                                                             
                }                                                                             
                mTetherInterfaceName = intf;                                                  
                return true;                                                                  
            }                                                                                 
        }                                                                                     
    }                                                                                         
    // We found no interfaces to tether                                                       
    return false;                                                                             
}   

因此,默认值为192.168.43.1

 类似资料:
  • 问题内容: 我需要在Swift中获取iOS设备的IP地址。这不是其他有关此问题的重复!如果没有wifi IP地址,我只需要获取WiFiIP地址-我需要处理它。关于堆栈溢出有一些问题,但是只有返回IP地址的函数。: 在这里,我得到2个值-来自移动互联网的地址(我认为)和需要的WiFi地址。还有其他方法可以获取仅WiFi IP地址吗? 问题答案: 根据多个SO线程(例如,iOS网络接口名称的确切含义是

  • 本文向大家介绍Android获取热点主机ip和连接热点手机ip的代码,包括了Android获取热点主机ip和连接热点手机ip的代码的使用技巧和注意事项,需要的朋友参考一下 其中定义WIFI AP的几个状态 对应于WifiMangaer.java中对这几个状态的定义。 获取WIFI热点的状态: 判断Wifi热点是否可用: 当然在应用中要添加访问WIFI设备的权限: 获取热点主机ip地址的代码: 总结

  • 我使用以下代码读取连接的设备ip地址如何获取通过手机连接的设备数量,但我得到的列表是错误的,即列表显示了连接到热点但当前已断开连接的早期设备。有没有其他方法可以更新列表。或者如何刷新/proc/net/arp文件以获取最新列表 也阅读这是有关arp在linux上,但不找到出路。

  • 本文向大家介绍Android 获取IP地址的实现方法,包括了Android 获取IP地址的实现方法的使用技巧和注意事项,需要的朋友参考一下 Android 获取IP地址 最近做项目,有一个需求是Android设备获取当前IP的功能,经过一番查询资料解决了,记录下实现方法。 1.使用WIFI 首先设置用户权限 其次,代码如下 2.使用GPRS 首先,设置用户上网权限 <uses-permission

  • 问题内容: 我正在我的android设备上测试adMob,并在获取说明文件之后,尝试获取执行adRequest的设备ID。但是,我无法在logCat中找到设备ID!我做错了什么? 编辑:这不是重复的,其他帖子中的那些方法对我不起作用。 问题答案: final TelephonyManager tm =(TelephonyManager)getBaseContext().getSystemServi

  • 我想检索连接到智能手机WiFi热点的所有设备的IP地址。在Android 10及以下版本中,我能够通过执行以下代码获得此列表: 然而,在Android 11中,IP命令似乎不再有效(https://developer.android.com/training/articles/user-data-ids#mac-11岁以上) 在Android11中,有没有其他方法可以获取已连接客户端的IP地址?