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); }
private void IpScanner_HostFound(object sender, IPScannerHostFoundArgs e) { IPScannerHostInfo ipScannerHostInfo = IPScannerHostInfo.Parse(e); Application.Current.Dispatcher.BeginInvoke(new Action(delegate() { IPScanResult.Add(ipScannerHostInfo); })); HostsFound++; }
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 { } }
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); } }
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); }