osociety/network_tools
GitHub: osociety/network_tools
一个用Dart编写的跨平台网络工具库,提供主机发现、端口扫描和mDNS服务发现功能,可嵌入Flutter应用或Dart项目中使用。
Stars: 55 | Forks: 15
# 跨平台网络工具
[](https://pub.dev/packages/network_tools) [](https://github.com/osociety/network_tools/actions/workflows/dart.yml) [](https://osociety.github.io/network_tools) [](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 上支持我
[](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, 子网扫描, 密码管理, 局域网, 开源库, 插件系统, 搜索引擎爬虫, 数据统计, 端口扫描, 网络安全, 网络工具库, 隐私保护