web-dev-qa-db-ja.com

Androidデバイスを提供するホットスポットのIPアドレスを取得

私は現在使用しています

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

実行中のデバイスのIPアドレスを取得します。デバイスが他のAndroidデバイスがホットスポットを介してホストされているWi-Fiネットワークに接続されているだけでなく、デバイスが「共通の」WLANネットワークに接続されている場合、これは正常に機能します。 Wi-Fiネットワークに接続されていません "0.0.0.0"が返されます(正しい)しかし、デバイスがホットスポットを提供してWi-Fiネットワークをホストしている場合、methodeはまだ "0.0.0.0"を返します。 「独自のWi-Fiネットワーク内の」デバイスを提供するホットスポットのアドレス

tHX&敬具

16
user2224350

あなたはほぼ正しい、ホットスポットのデフォルトのIPアドレスは192.168.43.1(デバイスメーカーが変更されなかった場合。)

Android framework(AOSP)のソースコードを確認できます。

/frameworks/base/services/Java/com/Android/server/connectivity/Tethering.Java/frameworks/base/wifi/Java/Android/net/wifi/WifiStateMachine.Java

Tethering.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",
};

また、WifiStateMachine.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

25
Seongeun So

少数の異なるデバイスをテストしましたが、デバイスを提供するホットスポットには常にIP 192.168.43.1そのネットワーク上。誰かがこの仮定を確認/確認できますか?

12
user2224350

ホットスポットはおそらくDHCPサーバーとして機能します。そう、

Wi-Fiホットスポットに接続した後にIPアドレス(サーバー)を取得するには、リモート(クライアント)からメソッドを呼び出します

intToInetAddress(wifiManager.getDhcpInfo().serverAddress);// get hotspot ip

それから

public InetAddress intToInetAddress(int hostAddress) 
{
    byte[] addressBytes = {(byte) (0xff & hostAddress),
            (byte) (0xff & (hostAddress >> 8)),
            (byte) (0xff & (hostAddress >> 16)),
            (byte) (0xff & (hostAddress >> 24))};

    try 
    {
        return InetAddress.getByAddress(addressBytes);
    } 
    catch (UnknownHostException e) 
    {
        throw new AssertionError();
    }
}

接続されたホットスポットのIPアドレスを返します。はい、ホットスポットのほとんどのデフォルトIPアドレスは 192.168.43.1 です

5
Pratik Tank

これは古い質問ですが、これは誰かを助けるかもしれません。これにより、ホットスポットをオンにしている限り、デバイスの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;
}
2
Mehedi Hasan

また、いくつかのデバイスをチェックしました。すべてのデバイスは192.168.43.1という同じIPを持っていますが、このアドレスを試すことができますが、Android pieで192.168.43.68になります

0
Siva Krishna

termuxを開いて実行する

pkg install net-tools
ifconfig -a | grep 192.168.43.

あなたはこれを取得します:

        inet 192.168.43.248  netmask 255.255.255.0  broadcast 192.168.43.255
0
Ray Foss