You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何获取局域网设备及名称?扫描指定设备IP方案咨询

解决方案:Flutter局域网设备快速扫描与识别

一、适用的Flutter包

  • network_tools_flutter:专注局域网设备扫描,支持快速端口探测、活跃设备发现,还能获取设备主机名,适配你筛选特定名称设备的需求。
  • ping_discover_network:基于ICMP ping实现的扫描工具,能快速定位局域网内活跃设备,速度远快于逐个请求Web接口。
  • flutter_mdns_plugin:针对支持MDNS协议的设备(多数智能设备会广播自身服务),可直接发现目标设备,无需全网段扫描。

二、快速扫描实现思路

1. 获取本地局域网网段

先通过network_info_plus包获取当前设备的WiFi IP,计算出需要扫描的网段范围:

import 'package:network_info_plus/network_info_plus.dart';

Future<String> getLocalSubnet() async {
  final networkInfo = NetworkInfo();
  final localIp = await networkInfo.getWifiIP();
  if (localIp == null) return '';
  // 提取网段前缀,例如192.168.1.100 → 192.168.1.
  return localIp.substring(0, localIp.lastIndexOf('.') + 1);
}

2. 批量扫描+主机名筛选

用network_tools_flutter批量扫描网段内设备,通过主机名筛选目标设备:

import 'package:network_tools_flutter/network_tools_flutter.dart';

void scanTargetDevices(String subnet) async {
  // 并发扫描网段内1-254的IP
  await Future.wait(List.generate(254, (index) async {
    final hostIp = '$subnet${index + 1}';
    try {
      final host = await HostScanner.ping(hostIp, timeout: const Duration(milliseconds: 400));
      if (host.isReachable) {
        final hostname = await host.reverseDNSLookup();
        if (hostname != null && hostname.contains('你的特定设备名称')) {
          print('找到目标设备:IP=$hostIp,主机名=$hostname');
        }
      }
    } catch (_) {}
  }));
}

3. 提速优化技巧

  • 缩短ping超时时间(建议300-500ms),跳过响应缓慢的设备;
  • 采用并发扫描替代串行扫描,大幅压缩总耗时;
  • 先通过ping筛选活跃设备,再对活跃设备请求Web接口做二次验证,避免全量请求。

三、MDNS快速发现方案(推荐给支持MDNS的设备)

如果目标设备支持MDNS协议,直接用flutter_mdns_plugin发现特定服务的设备,无需扫网段:

import 'package:flutter_mdns_plugin/flutter_mdns_plugin.dart';

void discoverMDNSTargets() async {
  final mdns = FlutterMdnsPlugin();
  // 替换为你的设备对应的服务类型,比如_http._tcp、_mqtt._tcp
  await mdns.startDiscovery('_http._tcp');
  
  mdns.onDiscovery.listen((serviceInfo) {
    if (serviceInfo.name.contains('你的特定设备名称')) {
      print('找到目标设备:IP=${serviceInfo.addresses.first},名称=${serviceInfo.name}');
    }
  });
  
  // 扫描5秒后停止
  await Future.delayed(const Duration(seconds: 5));
  await mdns.stopDiscovery();
}

内容的提问来源于stack exchange,提问作者Naymon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:20:27