private async void StartScan()
        {
            DisplayStatusMessage = false;
            IsScanRunning        = true;
            PreparingScan        = true;

            // Measure the time
            StartTime = DateTime.Now;
            stopwatch.Start();
            dispatcherTimer.Tick    += DispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
            dispatcherTimer.Start();
            EndTime = null;

            IPScanResult.Clear();
            HostsFound = 0;

            cancellationTokenSource = new CancellationTokenSource();

            IPAddress[] ipAddresses;

            try
            {
                // Create a list of all ip addresses
                ipAddresses = await IPScanRangeHelper.ConvertIPRangeToIPAddressesAsync(IPRange, cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            {
                IpScanner_UserHasCanceled(this, EventArgs.Empty);
                return;
            }

            IPAddressesToScan  = ipAddresses.Length;
            IPAddressesScanned = 0;

            PreparingScan = false;

            // Add the range to the history
            AddIPRangeToHistory(IPRange);

            IPScannerOptions ipScannerOptions = new IPScannerOptions
            {
                Threads           = SettingsManager.Current.IPScanner_Threads,
                Timeout           = SettingsManager.Current.IPScanner_Timeout,
                Buffer            = new byte[SettingsManager.Current.IPScanner_Buffer],
                Attempts          = SettingsManager.Current.IPScanner_Attempts,
                ResolveHostname   = SettingsManager.Current.IPScanner_ResolveHostname,
                ResolveMACAddress = SettingsManager.Current.IPScanner_ResolveMACAddress,
                ShowScanResultForAllIPAddresses = SettingsManager.Current.IPScanner_ShowScanResultForAllIPAddresses
            };

            IPScanner ipScanner = new IPScanner();

            ipScanner.HostFound       += IpScanner_HostFound;
            ipScanner.ScanComplete    += IpScanner_ScanComplete;
            ipScanner.ProgressChanged += IpScanner_ProgressChanged;
            ipScanner.UserHasCanceled += IpScanner_UserHasCanceled;

            ipScanner.ScanAsync(ipAddresses, ipScannerOptions, cancellationTokenSource.Token);
        }
Пример #2
0
        private void IpScanner_HostFound(object sender, IPScannerHostFoundArgs e)
        {
            IPScannerHostInfo ipScannerHostInfo = IPScannerHostInfo.Parse(e);

            Application.Current.Dispatcher.BeginInvoke(new Action(delegate()
            {
                IPScanResult.Add(ipScannerHostInfo);
            }));

            HostsFound++;
        }
Пример #3
0
 private void Scanner_IPScanned(IPScanResult result)
 {
     try
     {
         this.Invoke((MethodInvoker) delegate
         {
             Bitmap StatusIcon = (result.IsOnline) ? Properties.Resources.Online_Icon : Properties.Resources.Offline_Icon;
             resultGridView.Rows.Add(
                 StatusIcon,
                 result.Address.ToString(),
                 result.IsOnline,
                 result.Status.ToString()
                 );
         });
     }
     catch { }
 }
Пример #4
0
        private void IPScanProcess(object oipList)
        {
            try
            {
                DateTime begin = DateTime.Now;
                var scanList = new List<IPScanResult>();
                var exceptionIPList = new List<IPScanResult>();
                if (oipList != null && oipList is List<IPScan>)
                {
                    List<IPScan> ipList = oipList as List<IPScan>;
                    int ipCount = ipList.Count;
                    //int validCount = 0;
                    for (int i = 0; i < ipCount; i++)
                    {
                        DateTime dt1 = DateTime.Now;
                        ipList[i].StartIPScan();

                        IPScanResult r = new IPScanResult
                        {
                            IP = ipList[i].IP,
                            TTLResult = ipList[i].PingResult,
                            TCPResult = ipList[i].TCPPingResult,
                            TCPTime = ipList[i].TCPPingTimes,
                            TCPFaZhi = ipList[i].TCPFaZhiSet
                        };

                        scanList.Add(r);

                        HaveScanedIPTotal++;

                        if (OnIPScanProgress != null)
                        {
                            string scanResult = IPScan.RESULT_FAIL;

                            if ((ipList[i].TCPPingResult == IPScan.RESULT_SUCCESS || ipList[i].TCPPingResult == IPScan.RESULT_TIMEOUT)
                                && ipList[i].PingResult == IPScan.RESULT_SUCCESS)
                            {
                                scanResult = IPScan.RESULT_SUCCESS;
                                //validCount++;
                            }
                            //{0}-扫描结果: TCP Ping({1}ms) - {2};ICMP Ping - {3}。\r\n
                            //  "{0}-扫描IP: {1}, 第{2}个/共{3}个。  {4} 扫描结果: {5}。其中TCP Ping({6}ms) - {7};TTL Ping - {8}。\r\n";
                            string s = String.Format(MESSAGE_OUTPUT, dt1.ToString("yyyy-MM-dd HH:mm:ss"), ipList[i].IP,i + 1, ipCount,
                                DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),scanResult,
                                ipList[i].TCPPingTimes, ipList[i].TCPPingResult, ipList[i].PingResult);
                            OnIPScanProgress(i + 1, ipCount, s);
                        }
                    }
                }

                // 計算TCP 響應時間的平均值
                int tcpResponseTimeAvg = 0;
                int tcpResponseTimeTotal = 0;
                int tcpNormalCount = 0;
                foreach (var item in scanList)
                {
                    if (item.TCPResult == IPScan.RESULT_SUCCESS && item.TCPTime > 0)
                    {
                        tcpResponseTimeTotal += item.TCPTime;
                        tcpNormalCount++;
                    }
                }

                if (tcpResponseTimeTotal > 0 && tcpNormalCount > 0)
                {
                    tcpResponseTimeAvg = Convert.ToInt32(tcpResponseTimeTotal / tcpNormalCount);
                }

                // 判断TCP响应时间是否超过阀值,如果超过设为异常
                if (tcpResponseTimeAvg > 0)
                {
                    foreach (var item in scanList)
                    {
                        if (item.TCPResult == IPScan.RESULT_SUCCESS && item.TCPTime > 0)
                        {
                            if (AbsolutValue(item.TCPTime, tcpResponseTimeAvg) > item.TCPFaZhi)
                            {
                                item.TCPResult = IPScan.RESULT_FAIL;
                            }
                        }
                    }
                }

                foreach (var item in scanList)
                {
                    if (item.TCPResult == IPScan.RESULT_FAIL || item.TTLResult == IPScan.RESULT_FAIL)
                    {
                        exceptionIPList.Add(item);
                    }
                }

                string uploadResponse = CIDRSettingBiz.UploadIPScanResults(exceptionIPList);

                // 记录最后的IP地址,万一关机或意外,下次扫描从该IP继续,不要从头再开始
                try
                {
                    DataManager.Save(Constants.SEPARATE_NextScanStartIP, scanList[scanList.Count - 1].IP);
                }
                catch
                { }

                if (!String.IsNullOrEmpty(uploadResponse))
                {
                    OnIPScanProgress(scanList.Count, scanList.Count, uploadResponse + "\r\n");
                }
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message);
            }
        }
Пример #5
0
        private async void StartScan()
        {
            DisplayStatusMessage = false;
            IsScanRunning        = true;
            PreparingScan        = true;

            // Measure the time
            StartTime = DateTime.Now;
            stopwatch.Start();
            dispatcherTimer.Tick    += DispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
            dispatcherTimer.Start();
            EndTime = null;

            IPScanResult.Clear();
            HostsFound = 0;

            // Change the tab title (not nice, but it works)
            Window window = Application.Current.Windows.OfType <Window>().FirstOrDefault(x => x.IsActive);

            if (window != null)
            {
                foreach (TabablzControl tabablzControl in VisualTreeHelper.FindVisualChildren <TabablzControl>(window))
                {
                    tabablzControl.Items.OfType <DragablzTabItem>().First(x => x.ID == _tabId).Header = IPRange;
                }
            }

            cancellationTokenSource = new CancellationTokenSource();

            IPAddress[] ipAddresses;

            try
            {
                // Create a list of all ip addresses
                ipAddresses = await IPScanRangeHelper.ConvertIPRangeToIPAddressesAsync(IPRange, cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            {
                IpScanner_UserHasCanceled(this, EventArgs.Empty);
                return;
            }

            IPAddressesToScan  = ipAddresses.Length;
            IPAddressesScanned = 0;

            PreparingScan = false;

            // Add the range to the history
            AddIPRangeToHistory(IPRange);

            IPScannerOptions ipScannerOptions = new IPScannerOptions
            {
                Threads           = SettingsManager.Current.IPScanner_Threads,
                Timeout           = SettingsManager.Current.IPScanner_Timeout,
                Buffer            = new byte[SettingsManager.Current.IPScanner_Buffer],
                Attempts          = SettingsManager.Current.IPScanner_Attempts,
                ResolveHostname   = SettingsManager.Current.IPScanner_ResolveHostname,
                ResolveMACAddress = SettingsManager.Current.IPScanner_ResolveMACAddress,
                ShowScanResultForAllIPAddresses = SettingsManager.Current.IPScanner_ShowScanResultForAllIPAddresses
            };

            IPScanner ipScanner = new IPScanner();

            ipScanner.HostFound       += IpScanner_HostFound;
            ipScanner.ScanComplete    += IpScanner_ScanComplete;
            ipScanner.ProgressChanged += IpScanner_ProgressChanged;
            ipScanner.UserHasCanceled += IpScanner_UserHasCanceled;

            ipScanner.ScanAsync(ipAddresses, ipScannerOptions, cancellationTokenSource.Token);
        }
        private async void StartScan()
        {
            DisplayStatusMessage = false;
            IsScanRunning        = true;
            PreparingScan        = true;

            // Measure the time
            StartTime = DateTime.Now;
            stopwatch.Start();
            dispatcherTimer.Tick    += DispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
            dispatcherTimer.Start();
            EndTime = null;

            IPScanResult.Clear();
            HostsFound = 0;

            // Change the tab title (not nice, but it works)
            Window window = Application.Current.Windows.OfType <Window>().FirstOrDefault(x => x.IsActive);

            if (window != null)
            {
                foreach (TabablzControl tabablzControl in VisualTreeHelper.FindVisualChildren <TabablzControl>(window))
                {
                    tabablzControl.Items.OfType <DragablzTabItem>().First(x => x.ID == _tabId).Header = IPRange;
                }
            }

            cancellationTokenSource = new CancellationTokenSource();

            string[] ipHostOrRanges = IPRange.Replace(" ", "").Split(';');

            // Resolve hostnames
            List <string> ipRanges = new List <string>();

            try
            {
                ipRanges = await IPScanRangeHelper.ResolveHostnamesInIPRangeAsync(ipHostOrRanges, cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            {
                IpScanner_UserHasCanceled(this, EventArgs.Empty);
                return;
            }
            catch (AggregateException exceptions) // DNS error (could not resolve hostname...)
            {
                IpScanner_DnsResolveFailed(this, exceptions);
                return;
            }

            IPAddress[] ipAddresses;

            try
            {
                // Create a list of all ip addresses
                ipAddresses = await IPScanRangeHelper.ConvertIPRangeToIPAddressesAsync(ipRanges.ToArray(), cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            {
                IpScanner_UserHasCanceled(this, EventArgs.Empty);
                return;
            }

            IPAddressesToScan  = ipAddresses.Length;
            IPAddressesScanned = 0;

            PreparingScan = false;

            // Add the range to the history
            AddIPRangeToHistory(IPRange);

            IPScannerOptions ipScannerOptions = new IPScannerOptions
            {
                Threads                         = SettingsManager.Current.IPScanner_Threads,
                ICMPTimeout                     = SettingsManager.Current.IPScanner_ICMPTimeout,
                ICMPBuffer                      = new byte[SettingsManager.Current.IPScanner_ICMPBuffer],
                ICMPAttempts                    = SettingsManager.Current.IPScanner_ICMPAttempts,
                ResolveHostname                 = SettingsManager.Current.IPScanner_ResolveHostname,
                UseCustomDNSServer              = SettingsManager.Current.IPScanner_UseCustomDNSServer,
                CustomDNSServer                 = SettingsManager.Current.IPScanner_CustomDNSServer.Select(x => x.Trim()).ToList(),
                DNSPort                         = SettingsManager.Current.IPScanner_DNSPort,
                DNSTransportType                = SettingsManager.Current.IPScanner_DNSTransportType,
                DNSRecursion                    = SettingsManager.Current.IPScanner_DNSRecursion,
                DNSUseResolverCache             = SettingsManager.Current.IPScanner_DNSUseResolverCache,
                DNSAttempts                     = SettingsManager.Current.IPScanner_DNSAttempts,
                DNSTimeout                      = SettingsManager.Current.IPScanner_DNSTimeout,
                ResolveMACAddress               = SettingsManager.Current.IPScanner_ResolveMACAddress,
                ShowScanResultForAllIPAddresses = SettingsManager.Current.IPScanner_ShowScanResultForAllIPAddresses
            };

            IPScanner ipScanner = new IPScanner();

            ipScanner.HostFound       += IpScanner_HostFound;
            ipScanner.ScanComplete    += IpScanner_ScanComplete;
            ipScanner.ProgressChanged += IpScanner_ProgressChanged;
            ipScanner.UserHasCanceled += IpScanner_UserHasCanceled;

            ipScanner.ScanAsync(ipAddresses, ipScannerOptions, cancellationTokenSource.Token);
        }