Example #1
0
        /// <summary>
        /// Create scanner
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="source"></param>
        /// <param name="target"></param>
        /// <param name="portProbe"></param>
        /// <param name="maxProbeCount"></param>
        /// <param name="minProbePercent"></param>
        /// <param name="timeout"></param>
        /// <param name="ct"></param>
        public PortScanner(ILogger logger, IEnumerable <IPEndPoint> source,
                           Action <IPEndPoint> target, IPortProbe portProbe, int?maxProbeCount,
                           int?minProbePercent, TimeSpan?timeout, CancellationToken ct)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _source = source?.GetEnumerator() ??
                      throw new ArgumentNullException(nameof(source));
            _target = target ?? throw new ArgumentNullException(nameof(target));

            _maxProbeCount = maxProbeCount ?? kDefaultMaxProbeCount;
            _minProbeCount = (int)(_maxProbeCount *
                                   ((minProbePercent ?? kDefaultMinProbePercent) / 100.0));
            _timeout   = timeout ?? kDefaultProbeTimeout;
            _portProbe = portProbe ?? new NullPortProbe();
            _requeued  = new ConcurrentQueue <IPEndPoint>();
            _rand      = new Random();

            _probePool = LinqEx
                         .Repeat(i => new ConnectProbe(this, i), _maxProbeCount)
                         .ToList();

            _cts = new CancellationTokenSource();
            ct.Register(_cts.Cancel);
            _completion = new TaskCompletionSource <bool>();
            _active     = _maxProbeCount;
            foreach (var probe in _probePool)
            {
                probe.Start();
            }
        }
 /// <summary>
 /// Create scanner
 /// </summary>
 /// <param name="source"></param>
 /// <param name="target"></param>
 /// <param name="portProbe"></param>
 /// <param name="maxProbeCount"></param>
 /// <param name="minProbePercent"></param>
 /// <param name="timeout"></param>
 /// <param name="ct"></param>
 public async Task ScanAsync(IEnumerable <IPEndPoint> source,
                             Action <IPEndPoint> target, IPortProbe portProbe, int?maxProbeCount,
                             int?minProbePercent, TimeSpan?timeout, CancellationToken ct)
 {
     using (var scanner = new PortScanner(_logger, source, (s, p) => target(p), portProbe,
                                          maxProbeCount, minProbePercent, timeout, ct)) {
         await scanner.Completion;
     }
 }
Example #3
0
 /// <summary>
 /// Create scanner
 /// </summary>
 /// <param name="services"></param>
 /// <param name="source"></param>
 /// <param name="target"></param>
 /// <param name="portProbe"></param>
 /// <param name="ct"></param>
 public static Task ScanAsync(this IScanServices services, IEnumerable <IPEndPoint> source,
                              Action <IPEndPoint> target, IPortProbe portProbe, CancellationToken ct) =>
 services.ScanAsync(source, target, portProbe, 5000, null, null, ct);
Example #4
0
        /// <summary>
        /// Scan range of addresses and return the ones that are open
        /// </summary>
        /// <param name="services"></param>
        /// <param name="range"></param>
        /// <param name="probe"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        public static async Task <IEnumerable <IPEndPoint> > ScanAsync(this IScanServices services,
                                                                       IEnumerable <IPEndPoint> range, IPortProbe probe, CancellationToken ct)
        {
            var result = new List <IPEndPoint>();

            await ScanAsync(services, range, ep => result.Add(ep), probe, ct);

            return(result);
        }
Example #5
0
 /// <summary>
 /// Create scanner
 /// </summary>
 /// <param name="logger"></param>
 /// <param name="source"></param>
 /// <param name="target"></param>
 /// <param name="portProbe"></param>
 /// <param name="ct"></param>
 public PortScanner(ILogger logger, IEnumerable <IPEndPoint> source,
                    Action <IPEndPoint> target, IPortProbe portProbe, CancellationToken ct) :
     this(logger, source, target, portProbe, null, null, null, ct)
 {
 }