private async void Check() { DisplayStatusMessage = false; IsCheckRunning = true; // Measure time StartTime = DateTime.Now; stopwatch.Start(); dispatcherTimer.Tick += DispatcherTimer_Tick; dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); dispatcherTimer.Start(); EndTime = null; Headers = null; HeadersCount = 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 = WebsiteUri; } } try { HTTPHeadersOptions options = new HTTPHeadersOptions() { Timeout = SettingsManager.Current.HTTPHeaders_Timeout }; WebHeaderCollection headers = await HTTPHeaders.GetHeadersAsync(new Uri(WebsiteUri), options); Headers = headers.ToString(); HeadersCount = headers.Count; } catch (Exception ex) { StatusMessage = ex.Message; DisplayStatusMessage = true; } AddWebsiteUriToHistory(WebsiteUri); // Stop timer and stopwatch stopwatch.Stop(); dispatcherTimer.Stop(); Duration = stopwatch.Elapsed; EndTime = DateTime.Now; stopwatch.Reset(); IsCheckRunning = false; }
private void StartLookup() { DisplayStatusMessage = false; StatusMessage = string.Empty; IsLookupRunning = 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; // Reset the latest results LookupResult.Clear(); // 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 = Host; } } AddHostToHistory(Host); DNSLookupOptions dnsLookupOptions = new DNSLookupOptions(); if (SettingsManager.Current.DNSLookup_UseCustomDNSServer) { dnsLookupOptions.UseCustomDNSServer = SettingsManager.Current.DNSLookup_UseCustomDNSServer; dnsLookupOptions.CustomDNSServers = SettingsManager.Current.DNSLookup_CustomDNSServer.Select(x => x.Trim()).ToList(); dnsLookupOptions.Port = SettingsManager.Current.DNSLookup_Port; } dnsLookupOptions.AddDNSSuffix = SettingsManager.Current.DNSLookup_AddDNSSuffix; if (SettingsManager.Current.DNSLookup_UseCustomDNSSuffix) { dnsLookupOptions.UseCustomDNSSuffix = true; dnsLookupOptions.CustomDNSSuffix = SettingsManager.Current.DNSLookup_CustomDNSSuffix.TrimStart('.'); } dnsLookupOptions.Class = SettingsManager.Current.DNSLookup_Class; dnsLookupOptions.Type = Type; dnsLookupOptions.Recursion = SettingsManager.Current.DNSLookup_Recursion; dnsLookupOptions.UseResolverCache = SettingsManager.Current.DNSLookup_UseResolverCache; dnsLookupOptions.TransportType = SettingsManager.Current.DNSLookup_TransportType; dnsLookupOptions.Attempts = SettingsManager.Current.DNSLookup_Attempts; dnsLookupOptions.Timeout = SettingsManager.Current.DNSLookup_Timeout; dnsLookupOptions.ResolveCNAME = SettingsManager.Current.DNSLookup_ResolveCNAME; DNSLookup DNSLookup = new DNSLookup(); DNSLookup.RecordReceived += DNSLookup_RecordReceived; DNSLookup.LookupError += DNSLookup_LookupError; DNSLookup.LookupComplete += DNSLookup_LookupComplete;; DNSLookup.LookupAsync(Host.Split(';').Select(x => x.Trim()).ToList(), dnsLookupOptions); }
private async void Work() { DisplayStatusMessage = false; IsWorking = true; // Measure time StartTime = DateTime.Now; stopwatch.Start(); dispatcherTimer.Tick += DispatcherTimer_Tick; dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); dispatcherTimer.Start(); EndTime = null; QueryResult.Clear(); Responses = 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 = Host; } } // Try to parse the string into an IP-Address IPAddress.TryParse(Host, out IPAddress ipAddress); try { // Try to resolve the hostname if (ipAddress == null) { IPHostEntry ipHostEntrys = await Dns.GetHostEntryAsync(Host); foreach (IPAddress ipAddr in ipHostEntrys.AddressList) { if (ipAddr.AddressFamily == AddressFamily.InterNetwork && SettingsManager.Current.SNMP_ResolveHostnamePreferIPv4) { ipAddress = ipAddr; continue; } else if (ipAddr.AddressFamily == AddressFamily.InterNetworkV6 && !SettingsManager.Current.SNMP_ResolveHostnamePreferIPv4) { ipAddress = ipAddr; continue; } } // Fallback --> If we could not resolve our prefered ip protocol for the hostname if (ipAddress == null) { foreach (IPAddress ipAddr in ipHostEntrys.AddressList) { ipAddress = ipAddr; continue; } } } } catch (SocketException) // This will catch DNS resolve errors { Finished(); StatusMessage = string.Format(LocalizationManager.GetStringByKey("String_CouldNotResolveHostnameFor"), Host); DisplayStatusMessage = true; return; } // SNMP... SNMPOptions snmpOptions = new SNMPOptions() { Port = SettingsManager.Current.SNMP_Port, Timeout = SettingsManager.Current.SNMP_Timeout }; SNMP snmp = new SNMP(); snmp.Received += Snmp_Received; snmp.Timeout += Snmp_Timeout; snmp.Error += Snmp_Error; snmp.UserHasCanceled += Snmp_UserHasCanceled; snmp.Complete += Snmp_Complete; switch (Mode) { case SNMPMode.Get: if (Version != SNMPVersion.v3) { snmp.Getv1v2cAsync(Version, ipAddress, Community, OID, snmpOptions); } else { snmp.Getv3Async(ipAddress, OID, Security, Username, AuthenticationProvider, Auth, PrivacyProvider, Priv, snmpOptions); } break; case SNMPMode.Walk: if (Version != SNMPVersion.v3) { snmp.Walkv1v2cAsync(Version, ipAddress, Community, OID, SettingsManager.Current.SNMP_WalkMode, snmpOptions); } else { snmp.Walkv3Async(ipAddress, OID, Security, Username, AuthenticationProvider, Auth, PrivacyProvider, Priv, SettingsManager.Current.SNMP_WalkMode, snmpOptions); } break; case SNMPMode.Set: if (Version != SNMPVersion.v3) { snmp.Setv1v2cAsync(Version, ipAddress, Community, OID, Data, snmpOptions); } else { snmp.Setv3Async(ipAddress, OID, Security, Username, AuthenticationProvider, Auth, PrivacyProvider, Priv, Data, snmpOptions); } break; } // Add to history... AddHostToHistory(Host); AddOIDToHistory(OID); }
private async void StartPing() { DisplayStatusMessage = false; IsPingRunning = 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; // Reset the latest results PingResult.Clear(); PingsTransmitted = 0; PingsReceived = 0; PingsLost = 0; AverageTime = 0; MinimumTime = 0; MaximumTime = 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 <DragablzPingTabItem>().First(x => x.ID == _tabId).Header = Host; } } // Try to parse the string into an IP-Address IPAddress.TryParse(Host, out IPAddress ipAddress); try { // Try to resolve the hostname if (ipAddress == null) { IPHostEntry ipHostEntrys = await Dns.GetHostEntryAsync(Host); foreach (IPAddress ip in ipHostEntrys.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork && SettingsManager.Current.Ping_ResolveHostnamePreferIPv4) { ipAddress = ip; continue; } else if (ip.AddressFamily == AddressFamily.InterNetworkV6 && !SettingsManager.Current.Ping_ResolveHostnamePreferIPv4) { ipAddress = ip; continue; } } // Fallback --> If we could not resolve our prefered ip protocol for the hostname if (ipAddress == null) { foreach (IPAddress ip in ipHostEntrys.AddressList) { ipAddress = ip; continue; } } } } catch (SocketException) // This will catch DNS resolve errors { if (CancelPing) { UserHasCanceled(); } else { PingFinished(); } StatusMessage = string.Format(LocalizationManager.GetStringByKey("String_CouldNotResolveHostnameFor"), Host); DisplayStatusMessage = true; return; } // Add the hostname or ip address to the history AddHostToHistory(Host); cancellationTokenSource = new CancellationTokenSource(); PingOptions pingOptions = new PingOptions() { Attempts = SettingsManager.Current.Ping_Attempts, Timeout = SettingsManager.Current.Ping_Timeout, Buffer = new byte[SettingsManager.Current.Ping_Buffer], TTL = SettingsManager.Current.Ping_TTL, DontFragment = SettingsManager.Current.Ping_DontFragment, WaitTime = SettingsManager.Current.Ping_WaitTime, ExceptionCancelCount = SettingsManager.Current.Ping_ExceptionCancelCount }; Ping ping = new Ping(); ping.PingReceived += Ping_PingReceived; ping.PingCompleted += Ping_PingCompleted; ping.PingException += Ping_PingException; ping.UserHasCanceled += Ping_UserHasCanceled; ping.SendAsync(ipAddress, pingOptions, cancellationTokenSource.Token); }
private async void StartScan() { DisplayStatusMessage = false; StatusMessage = string.Empty; 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; PortScanResult.Clear(); PortsOpen = 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 = Host; } } cancellationTokenSource = new CancellationTokenSource(); string[] hosts = Host.Split(';'); List <Tuple <IPAddress, string> > hostData = new List <Tuple <IPAddress, string> >(); for (int i = 0; i < hosts.Length; i++) { string host = hosts[i].Trim(); string hostname = string.Empty; IPAddress.TryParse(host, out IPAddress ipAddress); try { // Resolve DNS // Try to resolve the hostname if (ipAddress == null) { IPHostEntry ipHostEntry = await Dns.GetHostEntryAsync(host); foreach (IPAddress ip in ipHostEntry.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork && SettingsManager.Current.PortScanner_ResolveHostnamePreferIPv4) { ipAddress = ip; continue; } else if (ip.AddressFamily == AddressFamily.InterNetworkV6 && !SettingsManager.Current.PortScanner_ResolveHostnamePreferIPv4) { ipAddress = ip; continue; } } // Fallback --> If we could not resolve our prefered ip protocol if (ipAddress == null) { foreach (IPAddress ip in ipHostEntry.AddressList) { ipAddress = ip; continue; } } hostname = host; } else { try { IPHostEntry ipHostEntry = await Dns.GetHostEntryAsync(ipAddress); hostname = ipHostEntry.HostName; } catch { } } } catch (SocketException) // This will catch DNS resolve errors { if (!string.IsNullOrEmpty(StatusMessage)) { StatusMessage += Environment.NewLine; } StatusMessage += string.Format(LocalizationManager.GetStringByKey("String_CouldNotResolveHostnameFor"), host); DisplayStatusMessage = true; continue; } hostData.Add(Tuple.Create(ipAddress, hostname)); } if (hostData.Count == 0) { StatusMessage += Environment.NewLine + LocalizationManager.GetStringByKey("String_NothingToDoCheckYourInput"); DisplayStatusMessage = true; ScanFinished(); return; } int[] ports = await PortRangeHelper.ConvertPortRangeToIntArrayAsync(Port); try { PortsToScan = ports.Length * hostData.Count; PortsScanned = 0; PreparingScan = false; AddHostToHistory(Host); AddPortToHistory(Port); PortScannerOptions portScannerOptions = new PortScannerOptions { Threads = SettingsManager.Current.PortScanner_Threads, ShowClosed = SettingsManager.Current.PortScanner_ShowClosed, Timeout = SettingsManager.Current.PortScanner_Timeout }; PortScanner portScanner = new PortScanner(); portScanner.PortScanned += PortScanner_PortScanned; portScanner.ScanComplete += PortScanner_ScanComplete; portScanner.ProgressChanged += PortScanner_ProgressChanged; portScanner.UserHasCanceled += PortScanner_UserHasCanceled; portScanner.ScanAsync(hostData, ports, portScannerOptions, cancellationTokenSource.Token); } catch (Exception ex) // This will catch any exception { StatusMessage = ex.Message; DisplayStatusMessage = true; ScanFinished(); } }
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 StartTrace() { DisplayStatusMessage = false; IsTraceRunning = 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; TraceResult.Clear(); Hops = 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 = Host; } } cancellationTokenSource = new CancellationTokenSource(); // Try to parse the string into an IP-Address IPAddress.TryParse(Host, out IPAddress ipAddress); try { // Try to resolve the hostname if (ipAddress == null) { IPHostEntry ipHostEntrys = await Dns.GetHostEntryAsync(Host); foreach (IPAddress ip in ipHostEntrys.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork && SettingsManager.Current.Traceroute_ResolveHostnamePreferIPv4) { ipAddress = ip; continue; } else if (ip.AddressFamily == AddressFamily.InterNetworkV6 && !SettingsManager.Current.Traceroute_ResolveHostnamePreferIPv4) { ipAddress = ip; continue; } } // Fallback --> If we could not resolve our prefered ip protocol if (ipAddress == null) { foreach (IPAddress ip in ipHostEntrys.AddressList) { ipAddress = ip; continue; } } } TracerouteOptions tracerouteOptions = new TracerouteOptions { Timeout = SettingsManager.Current.Traceroute_Timeout, Buffer = SettingsManager.Current.Traceroute_Buffer, MaximumHops = SettingsManager.Current.Traceroute_MaximumHops, DontFragement = true, ResolveHostname = SettingsManager.Current.Traceroute_ResolveHostname }; Traceroute traceroute = new Traceroute(); traceroute.HopReceived += Traceroute_HopReceived; traceroute.TraceComplete += Traceroute_TraceComplete; traceroute.MaximumHopsReached += Traceroute_MaximumHopsReached; traceroute.UserHasCanceled += Traceroute_UserHasCanceled; traceroute.TraceAsync(ipAddress, tracerouteOptions, cancellationTokenSource.Token); // Add the host to history AddHostToHistory(Host); } catch (SocketException) // This will catch DNS resolve errors { TracerouteFinished(); StatusMessage = string.Format(LocalizationManager.GetStringByKey("String_CouldNotResolveHostnameFor"), Host); DisplayStatusMessage = true; } catch (Exception ex) // This will catch any exception { TracerouteFinished(); StatusMessage = ex.Message; DisplayStatusMessage = true; } }
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); }