osociety/network_tools

GitHub: osociety/network_tools

一个用Dart编写的跨平台网络工具库,提供主机发现、端口扫描和mDNS服务发现功能,可嵌入Flutter应用或Dart项目中使用。

Stars: 55 | Forks: 15

# 跨平台网络工具 [![pub package](https://img.shields.io/pub/v/network_tools.svg)](https://pub.dev/packages/network_tools) [![Dart](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2065748779123950.svg)](https://github.com/osociety/network_tools/actions/workflows/dart.yml) [![Code Coverage](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8b051ca889123951.svg)](https://osociety.github.io/network_tools) [![codecov](https://codecov.io/gh/osociety/network_tools/graph/badge.svg?token=J9G2472GQZ)](https://codecov.io/gh/osociety/network_tools) 支持的 Network Tools 1. Host Scanner 1. 搜索子网上的所有设备 2. 在 Linux、macOS 和 Windows 上获取设备的 MAC 地址。 3. 搜索开放了特定端口的设备。 2. Port Scanner 1. 单端口扫描 2. 范围扫描 3. 自定义扫描 部分功能: 1. Mdns Scanner ## Network Tools Flutter package 请查看 [network_tools_flutter](https://github.com/osociety/network_tools_flutter) package,以获取对不同平台功能的广泛支持。 ## 在应用中导入 package ``` import 'package:network_tools/network_tools.dart'; ``` ## 在 main 函数中配置 network tools ### 对于 dart native ``` Future main() async { await configureNetworkTools('build', enableDebugging: true); runApp(const MyApp()); } ``` ### 对于 flutter apps ``` Future main() async { WidgetsFlutterBinding.ensureInitialized(); // It's necessary to pass correct path to be able to use this library. final appDocDirectory = await getApplicationDocumentsDirectory(); await configureNetworkTools(appDocDirectory.path, enableDebugging: true); runApp(const MyApp()); } ``` ## 用法 ### 主机扫描器 ``` String address = '192.168.1.12'; // or You can also get address using network_info_plus package // final String? address = await (NetworkInfo().getWifiIP()); final String subnet = address.substring(0, address.lastIndexOf('.')); final stream = HostScannerService.instance.getAllPingableDevices(subnet, firstHostId: 1, lastHostId: 50, progressCallback: (progress) { print('Progress for host discovery : $progress'); }); stream.listen((host) { //Same host can be emitted multiple times //Use Set instead of List print('Found device: $host'); }, onDone: () { print('Scan completed'); }); // Don't forget to cancel the stream when not in use. ``` ### 端口扫描器 ``` //1. Range String target = '192.168.1.1'; PortScannerService.instance.scanPortsForSingleDevice(target, startPort: 1, endPort: 1024, progressCallback: (progress) { print('Progress for port discovery : $progress'); }).listen((ActiveHost event) { if (event.openPorts.isNotEmpty) { print('Found open ports : ${event.openPorts}'); } }, onDone: () { print('Scan completed'); }); //2. Single bool isOpen = (await PortScanner.isOpen(target, 80)) == null; //3. Custom PortScanner.customDiscover(target, portList: const [22, 80, 139]); ``` ### Mdns 扫描器 ``` for (final ActiveHost activeHost in await MdnsScannerService.instance.searchMdnsDevices()) { final MdnsInfo? mdnsInfo = await activeHost.mdnsInfo; print(''' Address: ${activeHost.address} Port: ${mdnsInfo!.mdnsPort} ServiceType: ${mdnsInfo.mdnsServiceType} MdnsName: ${mdnsInfo.getOnlyTheStartOfMdnsName()} '''); } ``` ### 运行示例 1. 运行 host scan : `dart example/host_scan.dart` 2. 运行 port scan : `dart example/port_scan.dart` 3. 运行 mdns scan : `dart example/mdns_scan.dart` ## 示例应用 [Vernet](https://github.com/git-elliot/vernet) 是基于此库构建的开源应用。 您可以查看其代码和实现,以了解此 package 更详细的使用案例。 ## 支持和捐赠 1. 通过成为本项目的 Stargazer 来支持本项目。 2. 请我喝杯咖啡。 | Librepay | |----------| || 3. 在 Ko-Fi 上支持我 [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/fs0c13ty) 灵感来源于 [ping_discover_network](https://github.com/andrey-ushakov/ping_discover_network)
标签:Dart, Flutter, ICMP Ping, Lansweeper, MAC地址, MDNS, NetScanner, TCP/IP, 子网扫描, 密码管理, 局域网, 开源库, 插件系统, 搜索引擎爬虫, 数据统计, 端口扫描, 网络安全, 网络工具库, 隐私保护