scan method
Implementation
Future<List<ScanResult>> scan() async {
final results = <ScanResult>[];
final hosts = hostRange.getHosts();
if (debug) {
debugPrint('Scanning ${hosts.length} hosts with ${ports.length} ports each');
debugPrint('First ip: ${hosts.first}, Last ip: ${hosts.last}');
debugPrint('----------------------------------------');
}
final cpus = maxJobs ?? (Platform.numberOfProcessors * 2);
final pool = IsolatePool(cpus);
await pool.start();
final futures = <Future<ScanResult>>[];
for (final host in hosts) {
for (final port in ports) {
futures.add(pool.scheduleJob<ScanResult>(ScanJob(host, port, timeout)));
}
}
// Wait for all futures to complete and collect results
for (final future in futures) {
final result = await future;
results.add(result);
if (debug) {
debugPrint('[${DateTime.now()}] scan result: ${result.toString()}');
}
}
pool.stop();
return results;
}