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;
}