Flutter/Dart:扫描本地网络以获取连接设备的 IP 和主机名

时间:2021-06-04 10:23:57

标签: flutter dart networking

我正在使用 Flutter 开发移动应用程序,并想扫描本地网络以查找连接的设备。我找到了 ping_discover_network 包,它运行良好,但只能获取 IP 地址,但我还想显示设备的主机名。

我尝试了 dart:io 包中 InternetAddress 类的 reverse() 方法,但这只能让我返回 IP 地址。 示例:

InternetAddress(ip).reverse().then((value) => print(value));

是否有其他包或我可以使用的东西来扫描应用程序的本地网络并获取 IP 地址和主机名?

1 个答案:

答案 0 :(得分:0)

好的,我开始工作了,想分享我的解决方案。

我使用了 network_info_plus 包和 dart:io 包。

import 'dart:io';
import 'package:network_info_plus/network_info_plus.dart';
Future<void> scanNetwork() async {
await (NetworkInfo().getWifiIP()).then(
  (ip) async {
    final String subnet = ip!.substring(0, ip.lastIndexOf('.'));
    const port = 22;
    for (var i = 0; i < 256; i++) {
      String ip = '$subnet.$i';
      await Socket.connect(ip, port, timeout: Duration(milliseconds: 50))
          .then((socket) async {
        await InternetAddress(socket.address.address)
            .reverse()
            .then((value) {
          print(value.host);
          print(socket.address.address);
        }).catchError((error) {
          print(socket.address.address);
          print('Error: $error');
        });
        socket.destroy();
      }).catchError((error) => null);
    }
  },
);
print('Done');

}

我正在通过尝试连接到给定的 IP 和端口来“扫描”本地网络。如果可行,我就找到了我正在寻找的设备。为此,我还尝试使用“reverse()”方法获取主机名。

我已经在多个 iOS 和 Android 设备上对其进行了测试,它运行良好,没有任何错误,所以我认为这是一个合适的解决方案。

请随意提出更好的解决方案或修复方法,但请不要只是对我的答案投反对票。这根本没有帮助。

相关问题