ANDROID 获取网络上的所有 IP 地址

Posted

技术标签:

【中文标题】ANDROID 获取网络上的所有 IP 地址【英文标题】:ANDROID get all ip addresses on network 【发布时间】:2016-11-02 09:09:19 【问题描述】:

我想查找我网络上的所有 IP 地址。

例如,我有一个按钮和一个列表视图的活动。

当我点击按钮时,我会在我的网络上获取所有 IP 地址并放入一个列表视图中。

对不起我的英语 =)

【问题讨论】:

您可以从 wifi 获取子网掩码,并 ping 子网上所有可能的 IP 地址。 请给我一个例子好吗? 不,对不起,我不会让你代替你工作。如果你不知道如何做一些具体的事情,比如谁来获得 wfom wifi 的子网掩码,你应该先用谷歌搜索,然后 - 如果你没有找到结果,问一个问题 【参考方案1】:

试试这个:

private static class NetworkSniffTask extends AsyncTask<Void, Void, Void> 
    private static final String TAG = "NetworkSniffTask";
    private WeakReference<Context> mContextRef;

    private NetworkSniffTask(Context context) 
        mContextRef = new WeakReference<>(context);
    

    @Override
    protected Void doInBackground(Void... voids) 
        Log.e(TAG, "Let's sniff the network");
        try 
            Context context = mContextRef.get();
            if (context != null) 
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo connectionInfo = wm.getConnectionInfo();
                int ipAddress = connectionInfo.getIpAddress();
                String ipString = Formatter.formatIpAddress(ipAddress);
                Log.e(TAG, "activeNetwork: " + String.valueOf(activeNetwork));
                Log.e(TAG, "ipString: " + String.valueOf(ipString));
                String prefix = ipString.substring(0, ipString.lastIndexOf(".") + 1);
                Log.e(TAG, "prefix: " + prefix);
                for (int i = 0; i < 255; i++) 
                    String testIp = prefix + String.valueOf(i);
                    InetAddress name = InetAddress.getByName(testIp);
                    String hostName = name.getCanonicalHostName();
                    if (name.isReachable(1000))
                        Log.e(TAG, "Host:" + hostName);
                
            
         catch (Throwable t) 
            Log.e(TAG, "Well that's not good.", t);
        
        return null;
    

【讨论】:

嗨,我发现'isReachable' 命令有时会返回 false,即使我的地址还活着,你能解决这个问题吗? 您是否检查了两种网络类型? Wifi 和 SimCard @famfamfam 嗨。网络类型是 Wifi,我使用模拟器然后 ping 我的地址为“192.158.100.1”的子网,服务器是“192.168.100.35”,有时 isReachable 对此服务器返回 false

以上是关于ANDROID 获取网络上的所有 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?

电脑提示“ip地址与网络上的其他系统有冲突”

android 获取IP地址

android 获取IP地址

android 获取IP地址

设备在Android中连接到WiFi时如何获取蜂窝网络的IP地址