예제 #1
0
        public async Task ScanAllAsync()
        {
            _scannedHosts = 0;
            List <HostData> result = new List <HostData>();
            await Task.Run(() =>
            {
                lock (_lockObject)
                {
                    Parallel.ForEach(Hosts, _parallelOptions, host =>
                    {
                        if (!_isAborted)
                        {
                            host.Exists = HostChecker.CheckHost(host.Host);
                        }
                        else
                        {
                            host.Exists = false;
                        }

                        result.Add(host);
                        _scannedHosts++;
                        OnOneHostWasScanned?.Invoke(HostsCount, _scannedHosts, host);
                    });
                }
            });

            OnScanEnding?.Invoke(result.ToArray());
            _isAborted = false;
        }
예제 #2
0
        /// <summary>Create LAN scanner. Init all possible LAN hosts.</summary>
        public LANHostScanner()
        {
            string[] localIPs = HostChecker.GetLocalIPs();

            List <string> predicates = new List <string>();

            foreach (var ip in localIPs)
            {
                // ip: 192.168.1.3 (For example)
                // predicate   ^
                // predicates in the different LANs not same.
                predicates.Add(ip.Split('.')[2]);
            }

            List <HostData> toCheck = new List <HostData>();

            for (byte i = 0; i < byte.MaxValue; i++)
            {
                for (int j = 0; j < predicates.Count; j++)
                {
                    toCheck.Add(new HostData($"{LAN_IP_BASE}{predicates[j]}.{i}", false));
                }
            }


            Hosts = toCheck.ToArray();
        }