├── Source ├── App.ico ├── app.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Plugin.cs ├── FormDescription.cs ├── Program.cs ├── FileFinder.cs ├── FormDescription.Designer.cs ├── FormAbout.cs ├── XmlResultExport.cs ├── HostSummary.cs ├── IgnoredPlugins.cs ├── Settings.cs ├── Result.cs ├── FormOptions.cs ├── FormOpen.cs ├── FormDescription.resx ├── FormAbout.designer.cs ├── FormOptions.resx ├── FormOpen.resx ├── FormOpen.Designer.cs ├── FormList.resx ├── NetworkScanViewer.csproj ├── Database.cs ├── FormOptions.Designer.cs ├── FormAbout.resx └── FormMain.resx ├── Documents ├── Help.pdf ├── Open.png ├── Sort.png ├── Filter.png ├── Search.png ├── History.pdf ├── Options.png ├── Options2.png ├── Help.md └── History.md ├── Dependencies ├── woanware │ └── Utility.dll ├── ManagedEsent │ ├── Pixie.dll │ ├── Esent.Interop.dll │ ├── ShiftReduceParser.dll │ ├── Microsoft.Practices.Unity.dll │ └── Microsoft.Practices.ObjectBuilder2.dll ├── dockpanelsuite │ ├── DockPanel.config │ ├── WeifenLuo.WinFormsUI.Docking.dll │ ├── releasenotes.txt │ └── license.txt └── ObjectListView │ ├── ObjectListView.dll │ └── Modified.txt ├── README.md └── .gitignore /Source/App.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Source/App.ico -------------------------------------------------------------------------------- /Documents/Help.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Help.pdf -------------------------------------------------------------------------------- /Documents/Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Open.png -------------------------------------------------------------------------------- /Documents/Sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Sort.png -------------------------------------------------------------------------------- /Documents/Filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Filter.png -------------------------------------------------------------------------------- /Documents/Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Search.png -------------------------------------------------------------------------------- /Documents/History.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/History.pdf -------------------------------------------------------------------------------- /Documents/Options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Options.png -------------------------------------------------------------------------------- /Documents/Options2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Documents/Options2.png -------------------------------------------------------------------------------- /Dependencies/woanware/Utility.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/woanware/Utility.dll -------------------------------------------------------------------------------- /Dependencies/ManagedEsent/Pixie.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/ManagedEsent/Pixie.dll -------------------------------------------------------------------------------- /Dependencies/ManagedEsent/Esent.Interop.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/ManagedEsent/Esent.Interop.dll -------------------------------------------------------------------------------- /Dependencies/dockpanelsuite/DockPanel.config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/dockpanelsuite/DockPanel.config -------------------------------------------------------------------------------- /Dependencies/ManagedEsent/ShiftReduceParser.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/ManagedEsent/ShiftReduceParser.dll -------------------------------------------------------------------------------- /Dependencies/ObjectListView/ObjectListView.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/ObjectListView/ObjectListView.dll -------------------------------------------------------------------------------- /Dependencies/ManagedEsent/Microsoft.Practices.Unity.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/ManagedEsent/Microsoft.Practices.Unity.dll -------------------------------------------------------------------------------- /Dependencies/dockpanelsuite/WeifenLuo.WinFormsUI.Docking.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/dockpanelsuite/WeifenLuo.WinFormsUI.Docking.dll -------------------------------------------------------------------------------- /Dependencies/ManagedEsent/Microsoft.Practices.ObjectBuilder2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woanware/NetworkScanViewer/HEAD/Dependencies/ManagedEsent/Microsoft.Practices.ObjectBuilder2.dll -------------------------------------------------------------------------------- /Source/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Source/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Source/Plugin.cs: -------------------------------------------------------------------------------- 1 | namespace woanware 2 | { 3 | /// 4 | /// 5 | /// 6 | public class Plugin 7 | { 8 | public string PluginId { get; set; } 9 | public string PluginName { get; set; } 10 | 11 | /// 12 | /// 13 | /// 14 | public Plugin() 15 | { 16 | PluginId = string.Empty; 17 | PluginName = string.Empty; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/FormDescription.cs: -------------------------------------------------------------------------------- 1 | using WeifenLuo.WinFormsUI.Docking; 2 | 3 | namespace woanware 4 | { 5 | /// 6 | /// 7 | /// 8 | public partial class FormDescription : DockContent 9 | { 10 | /// 11 | /// 12 | /// 13 | public FormDescription() 14 | { 15 | InitializeComponent(); 16 | } 17 | 18 | /// 19 | /// 20 | /// 21 | /// 22 | public void SetData(string data) 23 | { 24 | txtData.Text = data; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Dependencies/dockpanelsuite/releasenotes.txt: -------------------------------------------------------------------------------- 1 | November 26, 2013: 2.9.0 2 | 3 | 1. GitHub #81 - Add an event to the DockPanel that will be raised when the value of the AutoHideWindow's ActiveContent property changes. 4 | 5 | 2. GitHub #123 - Opt-in ShowAutoHideContentOnHover feature to require a tab to be clicked on to show autohide content vice the current behavior of showing on hover. 6 | 7 | 3. GitHub #128 - Fixed issues with the sample application: "Close All" should only close documents and disable "close all but this" when there are no documents. 8 | 9 | 4. GitHub #129 - Fixed ArgumentException with VS2005 theme. 10 | 11 | 5. GitHub #130 - Fixed NullReferenceException when setting DockPanel.CloseButton while the content is hidden. Fixed issue that prevented close button from being show when made visible programatically. 12 | 13 | 6. GitHub #138 - When showing a content, prefer to place it in the active pane, otherwise default to the first available 14 | -------------------------------------------------------------------------------- /Dependencies/dockpanelsuite/license.txt: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2007-2012 Weifen Luo (email: weifenluo@yahoo.com) and other contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /Source/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18010 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace woanware.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Source/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("NetworkScanViewer")] 9 | [assembly: AssemblyDescription("Application to process and view Nessus (v4/v5) and Nmap (v5/v6) results...")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("woanware")] 12 | [assembly: AssemblyProduct("NetworkScanViewer")] 13 | [assembly: AssemblyCopyright("Copyright © woanware 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("2a3c4699-0c9b-4f87-9df9-9b47fb7b914f")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Busild and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.2.3")] 36 | [assembly: AssemblyFileVersion("1.2.3")] 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NetworkScanViewer # 2 | 3 | ## Introduction ## 4 | 5 | NetworkScanViewer is a GUI application designed to help view the results of nessus and nmap scan results. 6 | 7 | The application loads the scan data from nessus and nmap XML, does some data cleansing, then displays the results on the results list. The list data can be sorted by clicking on the column headers, so it is easy to order and locate particular information. There is also the ability to filter on specific information like host, port, service etc so it is easy to drill down to specific information. 8 | 9 | The export functionality exports using the data shown in the results list, so if you change the sort order or filter the results, then it is reflected in the export. It is also possible to permanently exclude scripts that just generate noise by right clicking on the item and selecting "Ignore Plugin" from the context menu. Excluded scripts can be re-added at any time by using the Options window. 10 | 11 | **Note** 12 | 13 | To check whether the correct version of nessus export files is being used, open up the file in a text editor and look for the following in the file header, if it does not contain it then it is the wrong version: 14 | 15 | 16 | 17 | 18 | ## Features ## 19 | 20 | - Data cleansing 21 | - Export to CSV and XML 22 | - Sortable data columns 23 | - Data Filtering 24 | - Script excluding 25 | - Data paging to support large volumes of data 26 | - ESENT database to support large volumes of data 27 | 28 | ## Third party libraries ## 29 | 30 | - [dockpanelsuite](https://github.com/dockpanelsuite): Windows docking 31 | - [ManagedEsent](https://managedesent.codeplex.com/): Modified version of the library to utilise the Pixie components 32 | - [ObjectListView](http://objectlistview.sourceforge.net/cs/index.html) : Data viewing via lists 33 | - [Utility](http://www.woanware.co.uk) (woanware) : My helper library 34 | 35 | ## Requirements ## 36 | 37 | - Windows x64 38 | - Microsoft .NET Framework v4.5 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Build Folders (you can keep bin if you'd like, to store dlls and pdbs) 2 | [Bb]in/ 3 | [Oo]bj/ 4 | Documents 5 | 6 | # mstest test results 7 | TestResults 8 | 9 | ## Ignore Visual Studio temporary files, build results, and 10 | ## files generated by popular Visual Studio add-ons. 11 | 12 | # User-specific files 13 | *.suo 14 | *.user 15 | *.sln.docstates 16 | 17 | # Build results 18 | [Dd]ebug/ 19 | [Rr]elease/ 20 | x64/ 21 | *_i.c 22 | *_p.c 23 | *.ilk 24 | *.meta 25 | *.obj 26 | *.pch 27 | *.pdb 28 | *.pgc 29 | *.pgd 30 | *.rsp 31 | *.sbr 32 | *.tlb 33 | *.tli 34 | *.tlh 35 | *.tmp 36 | *.log 37 | *.vspscc 38 | *.vssscc 39 | .builds 40 | 41 | # Visual C++ cache files 42 | ipch/ 43 | *.aps 44 | *.ncb 45 | *.opensdf 46 | *.sdf 47 | 48 | # Visual Studio profiler 49 | *.psess 50 | *.vsp 51 | *.vspx 52 | 53 | # Guidance Automation Toolkit 54 | *.gpState 55 | 56 | # ReSharper is a .NET coding add-in 57 | _ReSharper* 58 | 59 | # NCrunch 60 | *.ncrunch* 61 | .*crunch*.local.xml 62 | 63 | # Installshield output folder 64 | [Ee]xpress 65 | 66 | # DocProject is a documentation generator add-in 67 | DocProject/buildhelp/ 68 | DocProject/Help/*.HxT 69 | DocProject/Help/*.HxC 70 | DocProject/Help/*.hhc 71 | DocProject/Help/*.hhk 72 | DocProject/Help/*.hhp 73 | DocProject/Help/Html2 74 | DocProject/Help/html 75 | 76 | # Click-Once directory 77 | publish 78 | 79 | # Publish Web Output 80 | *.Publish.xml 81 | 82 | # NuGet Packages Directory 83 | packages 84 | 85 | # Windows Azure Build Output 86 | csx 87 | *.build.csdef 88 | 89 | # Windows Store app package directory 90 | AppPackages/ 91 | 92 | # Others 93 | [Bb]in 94 | [Oo]bj 95 | sql 96 | TestResults 97 | [Tt]est[Rr]esult* 98 | *.Cache 99 | ClientBin 100 | [Ss]tyle[Cc]op.* 101 | ~$* 102 | *.dbmdl 103 | Generated_Code #added for RIA/Silverlight projects 104 | 105 | # Backup & report files from converting an old project file to a newer 106 | # Visual Studio version. Backup files are not needed, because we have git ;-) 107 | _UpgradeReport_Files/ 108 | Backup*/ 109 | UpgradeLog*.XML 110 | -------------------------------------------------------------------------------- /Source/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading; 6 | using System.Windows.Forms; 7 | 8 | namespace woanware 9 | { 10 | static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | [STAThread] 16 | static void Main() 17 | { 18 | AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Program.OnUnhandledException); 19 | Application.ThreadException += new ThreadExceptionEventHandler(Program.OnThreadException); 20 | 21 | Application.EnableVisualStyles(); 22 | Application.SetCompatibleTextRenderingDefault(false); 23 | Application.Run(new FormMain()); 24 | } 25 | 26 | #region Unhandled Exception Handlers 27 | /// 28 | /// 29 | /// 30 | /// 31 | /// 32 | public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) 33 | { 34 | Exception exception = (Exception)e.ExceptionObject; 35 | 36 | Misc.WriteToEventLog(Application.ProductName, "An unhandled exception has occurred: " + exception.ToString(), EventLogEntryType.Error); 37 | UserInterface.DisplayErrorMessageBox("An unhandled exception has occurred, check the event log for details"); 38 | } 39 | 40 | /// 41 | /// 42 | /// 43 | /// 44 | /// 45 | public static void OnThreadException(object sender, ThreadExceptionEventArgs e) 46 | { 47 | Exception exception = (Exception)e.Exception; 48 | 49 | Misc.WriteToEventLog(Application.ProductName, "An unhandled exception has occurred: " + Environment.NewLine + Environment.NewLine + exception.ToString(), EventLogEntryType.Error); 50 | UserInterface.DisplayErrorMessageBox("An unhandled exception has occurred, check the event log for details"); 51 | } 52 | #endregion 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Source/FileFinder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | 5 | namespace woanware 6 | { 7 | /// 8 | /// 9 | /// 10 | public class FileFinder 11 | { 12 | public event woanware.Events.DefaultEvent CompleteEvent; 13 | public event woanware.Events.MessageEvent UpdateEvent; 14 | 15 | /// 16 | /// 17 | /// 18 | public void Start(string path) 19 | { 20 | Task task = Task.Factory.StartNew(() => 21 | { 22 | try 23 | { 24 | DirSearch(path); 25 | } 26 | catch (Exception){} 27 | finally 28 | { 29 | this.OnComplete(); 30 | } 31 | 32 | }, TaskCreationOptions.LongRunning); 33 | } 34 | 35 | /// 36 | /// 37 | /// 38 | /// 39 | private void DirSearch(string directory) 40 | { 41 | try 42 | { 43 | // Process the list of files found in the directory. 44 | string[] fileEntries = System.IO.Directory.GetFiles(directory); 45 | foreach (string fileName in fileEntries) 46 | { 47 | FileInfo fileInfo = new FileInfo(fileName); 48 | 49 | this.OnUpdate(fileInfo.FullName); 50 | } 51 | 52 | // Recurse into subdirectories of this directory. 53 | string[] subdirEntries = System.IO.Directory.GetDirectories(directory); 54 | foreach (string subdir in subdirEntries) 55 | { 56 | DirSearch(subdir); 57 | } 58 | } 59 | catch (Exception) { } 60 | } 61 | 62 | /// 63 | /// 64 | /// 65 | /// 66 | private void OnUpdate(string path) 67 | { 68 | var handler = UpdateEvent; 69 | if (handler != null) 70 | { 71 | handler(path); 72 | } 73 | } 74 | 75 | /// 76 | /// 77 | /// 78 | private void OnComplete() 79 | { 80 | var handler = CompleteEvent; 81 | if (handler != null) 82 | { 83 | handler(); 84 | } 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /Source/FormDescription.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace woanware 2 | { 3 | partial class FormDescription 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.txtData = new System.Windows.Forms.RichTextBox(); 32 | this.SuspendLayout(); 33 | // 34 | // txtData 35 | // 36 | this.txtData.BackColor = System.Drawing.Color.White; 37 | this.txtData.Dock = System.Windows.Forms.DockStyle.Fill; 38 | this.txtData.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 39 | this.txtData.Location = new System.Drawing.Point(0, 0); 40 | this.txtData.Name = "txtData"; 41 | this.txtData.ReadOnly = true; 42 | this.txtData.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth; 43 | this.txtData.Size = new System.Drawing.Size(331, 302); 44 | this.txtData.TabIndex = 9; 45 | this.txtData.Text = ""; 46 | // 47 | // FormDescription 48 | // 49 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); 50 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 51 | this.ClientSize = new System.Drawing.Size(331, 302); 52 | this.Controls.Add(this.txtData); 53 | this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 54 | this.Name = "FormDescription"; 55 | this.Text = "Description"; 56 | this.ResumeLayout(false); 57 | 58 | } 59 | 60 | #endregion 61 | 62 | private System.Windows.Forms.RichTextBox txtData; 63 | } 64 | } -------------------------------------------------------------------------------- /Source/FormAbout.cs: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2011 Mark Woan (markwoan@gmail.com) 3 | 4 | This file is part of RegExtract. 5 | 6 | RegExtract is free software: you can redistribute it and/or modify it under the terms of the 7 | GNU General Public License as published by the Free Software Foundation, either version 3 of 8 | the License, or (at your option) any later version. 9 | 10 | RegExtract is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 11 | even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License along with RegExtract. If not, 15 | see http://www.gnu.org/licenses/. 16 | */ 17 | 18 | using System.Windows.Forms; 19 | using System.Drawing; 20 | 21 | namespace woanware 22 | { 23 | /// 24 | /// 25 | /// 26 | public partial class FormAbout : Form 27 | { 28 | /// 29 | /// 30 | /// 31 | public FormAbout() 32 | { 33 | InitializeComponent(); 34 | 35 | lblApp.Text = Application.ProductName; 36 | lblVer.Text = "v" + Application.ProductVersion; 37 | } 38 | 39 | /// 40 | /// 41 | /// 42 | /// 43 | /// 44 | private void linkEmail_LinkClicked(object sender, System.EventArgs e) 45 | { 46 | System.Diagnostics.Process process = new System.Diagnostics.Process(); 47 | process.StartInfo.RedirectStandardOutput = false; 48 | // process.StartInfo.FileName = "mailto:" + linkEmail.Text; 49 | process.StartInfo.UseShellExecute = true; 50 | process.Start(); 51 | } 52 | 53 | /// 54 | /// 55 | /// 56 | /// 57 | /// 58 | private void linkWeb_LinkClicked(object sender, System.EventArgs e) 59 | { 60 | System.Diagnostics.Process process = new System.Diagnostics.Process(); 61 | process.StartInfo.RedirectStandardOutput = false; 62 | // process.StartInfo.FileName = "http://" + linkEmail.Text; 63 | process.StartInfo.UseShellExecute = true; 64 | process.Start(); 65 | } 66 | 67 | /// 68 | /// 69 | /// 70 | /// 71 | /// 72 | private void btnClose_Click(object sender, System.EventArgs e) 73 | { 74 | this.DialogResult = DialogResult.OK; 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Source/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18010 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace woanware.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("woanware.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Source/XmlResultExport.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Xml.Serialization; 5 | 6 | namespace woanware 7 | { 8 | /// 9 | /// 10 | /// 11 | public class XmlResultExport 12 | { 13 | #region Properties 14 | public List Results { get; set; } 15 | #endregion 16 | 17 | #region Constructor 18 | /// 19 | /// 20 | /// 21 | public XmlResultExport() 22 | { 23 | Results = new List(); 24 | } 25 | #endregion 26 | 27 | #region Methods 28 | /// 29 | /// Serializes the class to the config file if any of the settings have changed. 30 | /// 31 | /// 32 | public string Save(string fileName) 33 | { 34 | try 35 | { 36 | XmlSerializer xmlSerializer = new XmlSerializer(typeof(XmlResultExport)); 37 | using (StreamWriter streamWriter = new StreamWriter(fileName, false)) 38 | { 39 | xmlSerializer.Serialize(streamWriter, this); 40 | return String.Empty; 41 | } 42 | } 43 | catch (FileNotFoundException fex) 44 | { 45 | return fex.Message; 46 | } 47 | catch (UnauthorizedAccessException auex) 48 | { 49 | return auex.Message; 50 | } 51 | catch (IOException ioEx) 52 | { 53 | return ioEx.Message; 54 | } 55 | catch (Exception ex) 56 | { 57 | return ex.Message; 58 | } 59 | } 60 | 61 | /// 62 | /// Deserializes the class from the config file. 63 | /// 64 | /// 65 | public string Load(string fileName) 66 | { 67 | try 68 | { 69 | XmlSerializer xmlSerializer = new XmlSerializer(typeof(XmlResultExport)); 70 | 71 | if (File.Exists(fileName) == false) 72 | { 73 | return "Cannot locate the XML file: " + fileName; 74 | } 75 | 76 | FileInfo fileInfo = new FileInfo(fileName); 77 | using (FileStream fileStream = fileInfo.OpenRead()) 78 | { 79 | XmlResultExport temp = (XmlResultExport)xmlSerializer.Deserialize(fileStream); 80 | Results = temp.Results; 81 | return String.Empty; 82 | } 83 | } 84 | catch (FileNotFoundException fex) 85 | { 86 | return fex.Message; 87 | } 88 | catch (UnauthorizedAccessException auex) 89 | { 90 | return auex.Message; 91 | } 92 | catch (IOException ioEx) 93 | { 94 | return ioEx.Message; 95 | } 96 | catch (Exception ex) 97 | { 98 | return ex.Message; 99 | } 100 | } 101 | #endregion 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Source/HostSummary.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System; 3 | 4 | namespace woanware 5 | { 6 | /// 7 | /// 8 | /// 9 | public class HostSummary 10 | { 11 | public string IpAddress { get; set; } 12 | public string NetBiosName { get; set; } 13 | public string DnsName { get; set; } 14 | public string MacAddress { get; set; } 15 | public string SystemType { get; set; } 16 | public string Os { get; set; } 17 | public string StartTime { get; set; } 18 | public string EndTime { get; set; } 19 | private List _ports = null; 20 | private int _numLow = 0; 21 | private int _numMed = 0; 22 | private int _numHigh = 0; 23 | private int _numCritical = 0; 24 | 25 | /// 26 | /// 27 | /// 28 | public HostSummary() 29 | { 30 | IpAddress = string.Empty; 31 | NetBiosName = string.Empty; 32 | DnsName = string.Empty; 33 | MacAddress = string.Empty; 34 | SystemType = string.Empty; 35 | Os = string.Empty; 36 | StartTime = string.Empty; 37 | EndTime = string.Empty; 38 | 39 | _ports = new List(); 40 | } 41 | 42 | /// 43 | /// 44 | /// 45 | /// 46 | public void AddPort(int port) 47 | { 48 | if (_ports.Contains(port) == false) 49 | { 50 | _ports.Add(port); 51 | } 52 | } 53 | 54 | /// 55 | /// 56 | /// 57 | /// 58 | public void AddIssue(string severity) 59 | { 60 | switch (severity.Trim()) 61 | { 62 | case "0": 63 | break; 64 | case "1": 65 | _numLow++; 66 | break; 67 | case "2": 68 | _numMed++; 69 | break; 70 | case "3": 71 | _numHigh++; 72 | break; 73 | case "4": 74 | _numCritical++; 75 | break; 76 | default: 77 | break; 78 | } 79 | } 80 | 81 | /// 82 | /// 83 | /// 84 | public int NumPorts 85 | { 86 | get 87 | { 88 | return _ports.Count; 89 | } 90 | set 91 | { 92 | 93 | } 94 | } 95 | 96 | /// 97 | /// 98 | /// 99 | public int NumLow 100 | { 101 | get 102 | { 103 | return _numLow; 104 | } 105 | set 106 | { 107 | 108 | } 109 | } 110 | 111 | /// 112 | /// 113 | /// 114 | public int NumMed 115 | { 116 | get 117 | { 118 | return _numMed; 119 | } 120 | set 121 | { 122 | 123 | } 124 | } 125 | 126 | /// 127 | /// 128 | /// 129 | public int NumHigh 130 | { 131 | get 132 | { 133 | return _numHigh; 134 | } 135 | set 136 | { 137 | 138 | } 139 | } 140 | 141 | /// 142 | /// 143 | /// 144 | public int NumCritical 145 | { 146 | get 147 | { 148 | return _numCritical; 149 | } 150 | set 151 | { 152 | 153 | } 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /Source/IgnoredPlugins.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Xml.Serialization; 3 | using System.IO; 4 | using System; 5 | using System.Windows.Forms; 6 | 7 | namespace woanware 8 | { 9 | /// 10 | /// 11 | /// 12 | public class IgnorePlugins 13 | { 14 | private List _plugins = new List(); 15 | private const string FILENAME = "IgnorePlugins.xml"; 16 | 17 | /// 18 | /// 19 | /// 20 | /// 21 | public string Load() 22 | { 23 | try 24 | { 25 | string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"woanware\" + Application.ProductName + @"\"); 26 | 27 | if (File.Exists(System.IO.Path.Combine(path, FILENAME)) == false) 28 | { 29 | return string.Empty; 30 | } 31 | 32 | XmlSerializer serializer = new XmlSerializer(typeof(IgnorePlugins)); 33 | if (File.Exists(System.IO.Path.Combine(path, FILENAME)) == false) 34 | { 35 | return ("Cannot locate Ignore Plugins file: " + System.IO.Path.Combine(path, FILENAME)); 36 | } 37 | 38 | FileInfo info = new FileInfo(System.IO.Path.Combine(path, FILENAME)); 39 | using (FileStream stream = info.OpenRead()) 40 | { 41 | IgnorePlugins plugins = (IgnorePlugins)serializer.Deserialize(stream); 42 | _plugins = plugins.Plugins; 43 | 44 | return string.Empty; 45 | } 46 | } 47 | catch (FileNotFoundException fileNotFoundEx) 48 | { 49 | return fileNotFoundEx.Message; 50 | } 51 | catch (UnauthorizedAccessException unauthAccessEx) 52 | { 53 | return unauthAccessEx.Message; 54 | } 55 | catch (IOException ioEx) 56 | { 57 | return ioEx.Message; 58 | } 59 | catch (Exception ex) 60 | { 61 | return ex.Message; 62 | } 63 | } 64 | 65 | /// 66 | /// 67 | /// 68 | /// 69 | public string Save() 70 | { 71 | try 72 | { 73 | string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"woanware\" + Application.ProductName + @"\"); 74 | if (System.IO.Directory.Exists(path) == false) 75 | { 76 | System.IO.Directory.CreateDirectory(path); 77 | } 78 | 79 | XmlSerializer serializer = new XmlSerializer(typeof(IgnorePlugins)); 80 | using (StreamWriter writer = new StreamWriter(System.IO.Path.Combine(path, FILENAME), false)) 81 | { 82 | serializer.Serialize((TextWriter)writer, this); 83 | return string.Empty; 84 | } 85 | } 86 | catch (FileNotFoundException fileNotFoundEx) 87 | { 88 | return fileNotFoundEx.Message; 89 | } 90 | catch (UnauthorizedAccessException unauthAccessEx) 91 | { 92 | return unauthAccessEx.Message; 93 | } 94 | catch (IOException ioEx) 95 | { 96 | return ioEx.Message; 97 | } 98 | catch (Exception ex) 99 | { 100 | return ex.Message; 101 | } 102 | } 103 | 104 | /// 105 | /// 106 | /// 107 | public List Plugins 108 | { 109 | get 110 | { 111 | return _plugins; 112 | } 113 | } 114 | } 115 | } -------------------------------------------------------------------------------- /Source/Settings.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Windows.Forms; 3 | using System.Xml.Serialization; 4 | using System.IO; 5 | using System; 6 | 7 | namespace woanware 8 | { 9 | /// 10 | /// 11 | /// 12 | public class Settings 13 | { 14 | public bool AlwaysOnTop { get; set; } 15 | public bool ColourSevereItems { get; set; } 16 | public bool RemoveNewLinesOnExport { get; set; } 17 | public bool MoveFocusToList { get; set; } 18 | public Point FormLocation { get; set; } 19 | public Size FormSize { get; set; } 20 | public FormWindowState FormState { get; set; } 21 | private const string FILENAME = "Settings.xml"; 22 | public int NumResultsPerPage = 5000; 23 | 24 | /// 25 | /// 26 | /// 27 | /// 28 | public string Load() 29 | { 30 | try 31 | { 32 | string path = GetPath(); 33 | 34 | if (File.Exists(path) == false) 35 | { 36 | return string.Empty; 37 | } 38 | 39 | XmlSerializer serializer = new XmlSerializer(typeof(Settings)); 40 | 41 | FileInfo info = new FileInfo(path); 42 | using (FileStream stream = info.OpenRead()) 43 | { 44 | Settings settings = (Settings)serializer.Deserialize(stream); 45 | FormLocation = settings.FormLocation; 46 | FormSize = settings.FormSize; 47 | FormState = settings.FormState; 48 | FormState = settings.FormState; 49 | ColourSevereItems = settings.ColourSevereItems; 50 | RemoveNewLinesOnExport = settings.RemoveNewLinesOnExport; 51 | AlwaysOnTop = settings.AlwaysOnTop; 52 | NumResultsPerPage = settings.NumResultsPerPage; 53 | MoveFocusToList = settings.MoveFocusToList; 54 | return string.Empty; 55 | } 56 | } 57 | catch (FileNotFoundException fileNotFoundEx) 58 | { 59 | return fileNotFoundEx.Message; 60 | } 61 | catch (UnauthorizedAccessException unauthAccessEx) 62 | { 63 | return unauthAccessEx.Message; 64 | } 65 | catch (IOException ioEx) 66 | { 67 | return ioEx.Message; 68 | } 69 | catch (Exception ex) 70 | { 71 | return ex.Message; 72 | } 73 | } 74 | 75 | /// 76 | /// 77 | /// 78 | /// 79 | public string Save() 80 | { 81 | try 82 | { 83 | if (System.IO.Directory.Exists(Misc.GetUserDataDirectory()) == false) 84 | { 85 | IO.CreateDirectory(Misc.GetUserDataDirectory()); 86 | } 87 | 88 | XmlSerializer serializer = new XmlSerializer(typeof(Settings)); 89 | using (StreamWriter writer = new StreamWriter(this.GetPath(), false)) 90 | { 91 | serializer.Serialize((TextWriter)writer, this); 92 | return string.Empty; 93 | } 94 | } 95 | catch (FileNotFoundException fileNotFoundEx) 96 | { 97 | return fileNotFoundEx.Message; 98 | } 99 | catch (UnauthorizedAccessException unauthAccessEx) 100 | { 101 | return unauthAccessEx.Message; 102 | } 103 | catch (IOException ioEx) 104 | { 105 | return ioEx.Message; 106 | } 107 | catch (Exception ex) 108 | { 109 | return ex.Message; 110 | } 111 | } 112 | 113 | /// 114 | /// 115 | /// 116 | /// 117 | private string GetPath() 118 | { 119 | return System.IO.Path.Combine(Misc.GetUserDataDirectory(), FILENAME); 120 | } 121 | 122 | /// 123 | /// 124 | /// 125 | public bool FileExists 126 | { 127 | get 128 | { 129 | return File.Exists(this.GetPath()); 130 | } 131 | } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /Source/Result.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace woanware 4 | { 5 | #region Enums 6 | /// 7 | /// 8 | /// 9 | public enum ResultType 10 | { 11 | Nessus = 0, 12 | Nmap = 1 13 | } 14 | #endregion 15 | 16 | /// 17 | /// 18 | /// 19 | public class Result 20 | { 21 | #region Generic Member Variables 22 | public string Type { get; set; } 23 | public int Id { get; set; } 24 | public string HostName { get; set; } 25 | public string IpAddress { get; set; } 26 | public string MacAddress { get; set; } 27 | public string Service { get; set; } 28 | public string Protocol { get; set; } 29 | public int Port { get; set; } 30 | public string Text { get; set; } 31 | #endregion 32 | 33 | #region Nessus Member Variables 34 | public string PluginId { get; set; } 35 | public string PluginName { get; set; } 36 | public string PluginFamily { get; set; } 37 | public string Severity { get; set; } 38 | public string Solution { get; set; } 39 | public string RiskFactor { get; set; } 40 | public string Description { get; set; } 41 | public string PluginPublicationDate { get; set; } 42 | public string VulnPublicationDate { get; set; } 43 | public string PatchPublicationDate { get; set; } 44 | public string Synopsis { get; set; } 45 | public string PluginOutput { get; set; } 46 | public string PluginVersion { get; set; } 47 | public string SeeAlso { get; set; } 48 | public string CvssBaseScore { get; set; } 49 | public string CvssVector { get; set; } 50 | public string CvssTemporalScore { get; set; } 51 | public string Cve { get; set; } 52 | public string Bid { get; set; } 53 | public string Xref { get; set; } 54 | 55 | public string ExploitabilityEase { get; set; } 56 | public string ExploitAvailable { get; set; } 57 | public string ExploitFrameworkCanvas { get; set; } 58 | public string ExploitFrameworkMetasploit { get; set; } 59 | public string ExploitFrameworkCore { get; set; } 60 | public string MetasploitName { get; set; } 61 | public string CanvasPackage { get; set; } 62 | 63 | #endregion 64 | 65 | #region Nmap Member Variables 66 | public string State { get; set; } 67 | public string Product { get; set; } 68 | public string Version { get; set; } 69 | public string ExtraInfo { get; set; } 70 | #endregion 71 | 72 | #region Constructor 73 | /// 74 | /// 75 | /// 76 | /// 77 | public Result() 78 | { 79 | Type = string.Empty; 80 | 81 | HostName = string.Empty; 82 | IpAddress = string.Empty; 83 | MacAddress = string.Empty; 84 | Service = string.Empty; 85 | Protocol = string.Empty; 86 | Port = 0; 87 | 88 | PluginId = string.Empty; 89 | PluginName = string.Empty; 90 | PluginFamily = string.Empty; 91 | Severity = string.Empty; 92 | Solution = string.Empty; 93 | RiskFactor = string.Empty; 94 | Description = string.Empty; 95 | PluginPublicationDate = string.Empty; 96 | VulnPublicationDate = string.Empty; 97 | PatchPublicationDate = string.Empty; 98 | Synopsis = string.Empty; 99 | PluginOutput = string.Empty; 100 | PluginVersion = string.Empty; 101 | SeeAlso = string.Empty; 102 | CvssBaseScore = string.Empty; 103 | CvssVector = string.Empty; 104 | CvssTemporalScore = string.Empty; 105 | Cve = string.Empty; 106 | Bid = string.Empty; 107 | Xref = string.Empty; 108 | ExploitabilityEase = string.Empty; 109 | ExploitAvailable = string.Empty; 110 | ExploitFrameworkCanvas = string.Empty; 111 | ExploitFrameworkMetasploit = string.Empty; 112 | ExploitFrameworkCore = string.Empty; 113 | MetasploitName= string.Empty; 114 | CanvasPackage= string.Empty; 115 | 116 | State = string.Empty; 117 | Product = string.Empty; 118 | Version = string.Empty; 119 | ExtraInfo = string.Empty; 120 | } 121 | #endregion 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /Source/FormOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | 10 | namespace woanware 11 | { 12 | /// 13 | /// 14 | /// 15 | public partial class FormOptions : Form 16 | { 17 | #region Member Variables 18 | public Settings Settings { get; private set; } 19 | public IgnorePlugins IgnorePlugins { get; private set; } 20 | public bool NeedsReload { get; private set; } 21 | #endregion 22 | 23 | #region Constructor 24 | /// 25 | /// 26 | /// 27 | /// 28 | /// 29 | public FormOptions(Settings settings, 30 | IgnorePlugins ignorePlugins) 31 | { 32 | InitializeComponent(); 33 | 34 | Settings = settings; 35 | IgnorePlugins = ignorePlugins; 36 | 37 | chkAlwaysOnTop.Checked = Settings.AlwaysOnTop; 38 | chkColourSevere.Checked = Settings.ColourSevereItems; 39 | chkRemoveNewLinesOnExport.Checked = Settings.RemoveNewLinesOnExport; 40 | chkMoveFocusToList.Checked = Settings.MoveFocusToList; 41 | 42 | UserInterface.LocateAndSelectComboBoxValue(Settings.NumResultsPerPage.ToString(), cboNumResultsPerPage); 43 | 44 | listPlugins.SetObjects(ignorePlugins.Plugins); 45 | 46 | if (ignorePlugins.Plugins.Count == 0) 47 | { 48 | btnRemovePlugin.Enabled = false; 49 | olvcPluginId.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize); 50 | olvcPluginName.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize); 51 | } 52 | else 53 | { 54 | listPlugins.SelectedObject = ignorePlugins.Plugins[0]; 55 | olvcPluginId.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize); 56 | olvcPluginName.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); 57 | } 58 | } 59 | #endregion 60 | 61 | #region Button Event Handlers 62 | /// 63 | /// 64 | /// 65 | /// 66 | /// 67 | private void btnRemovePlugin_Click(object sender, EventArgs e) 68 | { 69 | foreach (Plugin plugin in listPlugins.SelectedObjects) 70 | { 71 | listPlugins.RemoveObject(plugin); 72 | } 73 | 74 | this.NeedsReload = true; 75 | 76 | if (listPlugins.Items.Count == 0) 77 | { 78 | btnRemovePlugin.Enabled = false; 79 | } 80 | else 81 | { 82 | btnRemovePlugin.Enabled = true; 83 | } 84 | } 85 | 86 | /// 87 | /// 88 | /// 89 | /// 90 | /// 91 | private void btnOk_Click(object sender, EventArgs e) 92 | { 93 | Settings.ColourSevereItems = chkColourSevere.Checked; 94 | Settings.AlwaysOnTop = chkAlwaysOnTop.Checked; 95 | Settings.RemoveNewLinesOnExport = chkRemoveNewLinesOnExport.Checked; 96 | Settings.MoveFocusToList = chkMoveFocusToList.Checked; 97 | 98 | if (cboNumResultsPerPage.SelectedIndex == -1) 99 | { 100 | UserInterface.DisplayMessageBox(this, "The no. results per page value must be selected", MessageBoxIcon.Exclamation); 101 | return; 102 | } 103 | else 104 | { 105 | Settings.NumResultsPerPage = int.Parse(cboNumResultsPerPage.Items[cboNumResultsPerPage.SelectedIndex].ToString()); 106 | } 107 | 108 | IgnorePlugins = new IgnorePlugins(); 109 | foreach (Plugin plugin in listPlugins.Objects) 110 | { 111 | Plugin temp = new Plugin(); 112 | temp.PluginId = plugin.PluginId; 113 | temp.PluginName = plugin.PluginName; 114 | IgnorePlugins.Plugins.Add(temp); 115 | } 116 | 117 | this.DialogResult = DialogResult.OK; 118 | } 119 | 120 | /// 121 | /// 122 | /// 123 | /// 124 | /// 125 | private void btnCancel_Click(object sender, EventArgs e) 126 | { 127 | this.DialogResult = DialogResult.Cancel; 128 | } 129 | #endregion 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /Documents/Help.md: -------------------------------------------------------------------------------- 1 | # NetworkScanViewer # 2 | 3 | ## Introduction ## 4 | 5 | NetworkScanViewer is a GUI application designed to help view the results of nessus and nmap scan results. 6 | 7 | The application loads the scan data from nessus and nmap XML, does some data cleansing, then displays the results on the results list. The list data can be sorted by clicking on the column headers, so it is easy to order and locate particular information. There is also the ability to filter on specific information like host, port, service etc so it is easy to drill down to specific information. 8 | 9 | The export functionality exports using the data shown in the results list, so if you change the sort order or filter the results, then it is reflected in the export. It is also possible to permanently exclude scripts that just generate noise by right clicking on the item and selecting "Ignore Plugin" from the context menu. Excluded scripts can be re-added at any time by using the Options window. 10 | 11 | **Note** 12 | 13 | To check whether the correct version of nessus export files is being used, open up the file in a text editor and look for the following in the file header, if it does not contain it then it is the wrong version: 14 | 15 | 16 | 17 | 18 | **Features** 19 | 20 | - Data cleansing 21 | - Export to CSV and XML 22 | - Sortable data columns 23 | - Data Filtering 24 | - Script excluding 25 | - Data paging to support large volumes of data 26 | - ESENT database to support large volumes of data 27 | 28 | **Requirements** 29 | 30 | - Windows x64 31 | - Microsoft .NET Framework v4.5 32 | 33 | ## Usage ## 34 | 35 | **Importing** 36 | 37 | To import the nessus and nmap results, perform the following: 38 | 39 | - Select the File->Open menu item, the Open window will be displayed 40 | - Either type, copy and paste or use the folder browse dialog to select the top level/root directory that contains the nessus and nmap XML result files (Input Folder) 41 | - Next type, copy and paste or use the folder browse dialog to select the directory where you want the database etc to be stored 42 | - If you want a clear data base with no existing results then ensure that the Delete existing database option is checked. If the option is not used and the same or an overlapping data set is used, then you will end up with duplicate records. 43 | - Click the OK button, the application will then recurse through the directories and attempt to load any files with *.xml or *.nessus file extensions 44 | - As the files are processed, the progress will be output to the Log tab, it will display the file paths of any files that have been successfully parsed or files that have failed to be parsed. 45 | 46 | ![](Open.png) 47 | 48 | **Sorting** 49 | 50 | - To sort the data, simply double click the appropriate column header of the results list 51 | 52 | ![](Sort.png) 53 | 54 | **Filtering** 55 | 56 | There are two different ways to perform filtering within NetworkScanViewer: 57 | 58 | - Select the drop down list that you want to filter on e.g. Host, Port, Service etc and then choose the appropriate item from the drop down list 59 | - The filter drop down lists can be found both on the toolbar (Type, Host, Port, Service, free text service) and the Filters tab (Protocol, Plugin ID, Plugin Name, Plugin Family, Product, Version) 60 | 61 | - Right click on the result line, the result context menu will be displayed 62 | - Select the item you want to filter on by clicking the appropriate sub menu item 63 | 64 | To clear the filters either select the Filters->Clear Filters sub menu item on the result list context menu or change each drop down to the first item e.g. blank. Note that "Type" means either Nessus or Nmap result type 65 | 66 | ![](Filter.png) 67 | 68 | **Searching** 69 | 70 | NetworkScanViewer has the ability to perform free text searching via the Search textbox. It is possible to take string from the output window located on the right and use it to perform a search. 71 | 72 | ![](Search.png) 73 | 74 | **Exporting** 75 | 76 | NetworkScanViewer permits the export of result data in either CSV or XML format. The export functionality works on the data currently viewable in the results list, therefore set the appropriate sorting and filters: 77 | 78 | - Select the File->Save->Results->CSV or File->Save->Results->XML menu item, a Save File dialog will be displayed 79 | - Choose the output path/file 80 | - Click the Save button, the data will be exported to the chosen file 81 | 82 | It is also possible to export the Host Summary information as CSV: 83 | - Select the File->Save->Host Summary->CSV menu item. A Save File dialog will be displayed 84 | - Choose the output path/file 85 | - Click the Save button, the data will be exported to the chosen file 86 | 87 | **Ignore Plugins** 88 | 89 | Some nessus plugins just create noise, so you can remove them from the results and they will not be shown again, until allowed via the Options window. 90 | 91 | - Right click on the results list to display the context menu 92 | - Select the Ignore Plugin menu item, the results will be reloaded 93 | 94 | **Options** 95 | 96 | The options window allows a number of configuration settings to be set. 97 | 98 | - Colour severe items e.g. Risk > 1: This only applies to nessus results 99 | - Always on top: This ensures the application remains the top most window 100 | - No. Results Per Page: This is related to the paging implemented to cope with very large data sets 101 | - Remove new lines on export: This will remove new lines completely, when performing a CSV export 102 | 103 | ![](Options.png) 104 | 105 | The second tab (Ignored Plugins) allows the user to remove ignored plugins. To remove plugins select the item and click on the Remove button 106 | 107 | ![](Options2.png) -------------------------------------------------------------------------------- /Source/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /Source/FormOpen.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using System.IO; 4 | 5 | namespace woanware 6 | { 7 | /// 8 | /// 9 | /// 10 | public partial class FormOpen : Form 11 | { 12 | #region Constructor 13 | /// 14 | /// 15 | /// 16 | public FormOpen() 17 | { 18 | InitializeComponent(); 19 | } 20 | #endregion 21 | 22 | #region Button Event Handlers 23 | /// 24 | /// 25 | /// 26 | /// 27 | /// 28 | private void btnInputFolder_Click(object sender, EventArgs e) 29 | { 30 | folderBrowserDialog.Description = "Select the input folder..."; 31 | if (System.IO.Directory.Exists(txtInputFolder.Text) == true) 32 | { 33 | folderBrowserDialog.SelectedPath = txtInputFolder.Text; 34 | } 35 | 36 | if (folderBrowserDialog.ShowDialog(this) == DialogResult.Cancel) 37 | { 38 | return; 39 | } 40 | 41 | txtInputFolder.Text = folderBrowserDialog.SelectedPath; 42 | } 43 | 44 | /// 45 | /// 46 | /// 47 | /// 48 | /// 49 | private void btnOutputFolder_Click(object sender, EventArgs e) 50 | { 51 | folderBrowserDialog.Description = "Select the output folder..."; 52 | if (System.IO.Directory.Exists(txtOutputFolder.Text) == true) 53 | { 54 | folderBrowserDialog.SelectedPath = txtOutputFolder.Text; 55 | } 56 | 57 | if (folderBrowserDialog.ShowDialog(this) == DialogResult.Cancel) 58 | { 59 | return; 60 | } 61 | 62 | txtOutputFolder.Text = folderBrowserDialog.SelectedPath; 63 | } 64 | 65 | /// 66 | /// 67 | /// 68 | /// 69 | /// 70 | private void btnOk_Click(object sender, EventArgs e) 71 | { 72 | if (txtInputFolder.Text.Trim().Length == 0) 73 | { 74 | UserInterface.DisplayMessageBox(this, "The input directory must be selected", MessageBoxIcon.Exclamation); 75 | txtInputFolder.Select(); 76 | return; 77 | } 78 | 79 | if (System.IO.Directory.Exists(txtInputFolder.Text) == false) 80 | { 81 | UserInterface.DisplayMessageBox(this, "The input directory does not exist", MessageBoxIcon.Exclamation); 82 | txtInputFolder.Select(); 83 | return; 84 | } 85 | 86 | if (txtOutputFolder.Text.Trim().Length == 0) 87 | { 88 | UserInterface.DisplayMessageBox(this, "The output directory must be selected", MessageBoxIcon.Exclamation); 89 | txtOutputFolder.Select(); 90 | return; 91 | } 92 | 93 | if (System.IO.Directory.Exists(txtOutputFolder.Text) == false) 94 | { 95 | UserInterface.DisplayMessageBox(this, "The output directory does not exist", MessageBoxIcon.Exclamation); 96 | txtOutputFolder.Select(); 97 | return; 98 | } 99 | 100 | if (chkDeleteExistingDatabase.Checked == true) 101 | { 102 | if (System.IO.File.Exists(System.IO.Path.Combine(txtOutputFolder.Text, "data.edb")) == true) 103 | { 104 | string errors = string.Empty; 105 | string ret = IO.DeleteFiles(txtOutputFolder.Text, "*.log"); 106 | if (ret.Length > 0) 107 | { 108 | errors += ret + Environment.NewLine; 109 | } 110 | 111 | ret = IO.DeleteFiles(txtOutputFolder.Text, "*.jrs"); 112 | if (ret.Length > 0) 113 | { 114 | errors += ret + Environment.NewLine; 115 | } 116 | 117 | ret = IO.DeleteFiles(txtOutputFolder.Text, "*.edb"); 118 | if (ret.Length > 0) 119 | { 120 | errors += ret + Environment.NewLine; 121 | } 122 | 123 | ret = IO.DeleteFiles(txtOutputFolder.Text, "*.chk"); 124 | if (ret.Length > 0) 125 | { 126 | errors += ret + Environment.NewLine; 127 | } 128 | 129 | if (errors.Length > 0) 130 | { 131 | UserInterface.DisplayErrorMessageBox(this, "An error occurred whilst deleting the existing database: " + errors.Trim()); 132 | } 133 | } 134 | } 135 | 136 | this.DialogResult = DialogResult.OK; 137 | } 138 | 139 | /// 140 | /// 141 | /// 142 | /// 143 | /// 144 | private void btnCancel_Click(object sender, EventArgs e) 145 | { 146 | this.DialogResult = DialogResult.Cancel; 147 | } 148 | #endregion 149 | 150 | #region Properties 151 | /// 152 | /// 153 | /// 154 | public string InputFolder 155 | { 156 | get 157 | { 158 | return txtInputFolder.Text; 159 | } 160 | } 161 | 162 | /// 163 | /// 164 | /// 165 | public string OutputFolder 166 | { 167 | get 168 | { 169 | return txtOutputFolder.Text; 170 | } 171 | } 172 | #endregion 173 | } 174 | } 175 | -------------------------------------------------------------------------------- /Source/FormDescription.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /Documents/History.md: -------------------------------------------------------------------------------- 1 | # History # 2 | 3 | **v1.2.3** 4 | 5 | - Fixed IEnumerable casting 6 | 7 | **v1.2.2** 8 | 9 | - Fixed bug where the CSV output didn't work. Thanks MichaelW 10 | - Fixed IP address copy. Thanks MattP 11 | 12 | **v1.2.1** 13 | 14 | - Implemented docking windows using the dockpanelsuite library. This allows the main description window to be docked in various positions or as a floating window 15 | - Updated the window handlers to be in-line with current coding standards 16 | - Updated the multi-threading to use Tasks rather than delegates 17 | - Modified the parser to use a stream rather than load entire files in one go 18 | - Updated the Settings object to be in-line with current coding standards 19 | - Changed solution platform target to "Any CPU", which should be more flexible 20 | - Updated ObjectListView to v2.7.0 21 | - Modified to allow the copying of host names using the lists context menu 22 | - Added option to set focus to the results list after a filter item has changed. This option defaults to off and can be modified via the Options window 23 | 24 | **v1.2.0** 25 | 26 | - Recompiled all dependencies to be x64 27 | - Updated project to be x64 only 28 | - Updated ObjectListView from 2.4 to 2.6 29 | - Moved the NetworkScanParser code into the main project 30 | - Changed the FormsOptions listview to ObjectListView rather than standard .Net listview 31 | - Fixed bug in the IgnorePlugins modification where the wrong item was removed 32 | - Fixed bug when reloading items after option changes e.g. the reload used an old list of ignored plugins 33 | - Modified the list view properties so that grid lines are removed and alternative row colours are used 34 | - Modified the list view properties to allow the reordering of columns 35 | - Added hour glass during import 36 | - Fixed host summary to include open port count 37 | - Moved all documents to markdown 38 | 39 | **v1.1.2** 40 | 41 | - Fixed the Nessus summary parsing. Thanks AllanS 42 | 43 | **v1.1.1** 44 | 45 | - Fixed some Nessus parsing bugs 46 | 47 | **v1.1.0** 48 | 49 | - Rewrote the entire nmap and Nessus parsing using Linq to XML, which has resulted in a far better parsing engine. Thanks MattiM for alerting me to the parsing issues with nmap v6 50 | - Added System Type value parsing to the Nessus host summary parsing 51 | - Added “cvss_temporal_score” value parsing to the Nessus result parsing 52 | - Corrected “see_also” value parsing for the Nessus result parsing 53 | - Removed “ComponentFactory.Krypton.Toolkit” dependency by updating the About window which used the component 54 | 55 | **v1.0.12** 56 | 57 | - Modified to support the new Critical severity value 58 | - Updated the host summary CSV export to include the number of Critical issues 59 | 60 | **v1.0.11** 61 | 62 | - Added parsing and display of various Nessus exploitability fields (exploitability_ease, exploit_available, exploit_framework_canvas, exploit_framework_metasploit, exploit_framework_core, metasploit_name, canvas_package). Thanks StevenB 63 | - Added the ability to filter on “Exploit Available” 64 | 65 | **v1.0.10** 66 | 67 | - Added the ability to copy information from the Host Summary to the clipboard 68 | 69 | **v1.0.9** 70 | 71 | - Changed the list view settings to prevent it losing the currently selected issue, which was highly annoying! 72 | 73 | **v1.0.8** 74 | 75 | - Updated the CSV output to cope with \n characters better. Thanks Thomas Heinrich 76 | - Added option to remove new lines when performing a CSV export 77 | - Modified the delete existing database functionality since it could delete all your results if you create the DB in the same directory! 78 | 79 | **v1.0.7** 80 | 81 | - Added option to delete existing databases identified in the input directory. The reason for the change is that importing into a directory with an existing database could introduce duplicate records if the same data set or an over lapping data set is imported. Thanks MatthewP 82 | 83 | **v1.0.6** 84 | 85 | - Fixed the Severity filter combo, since the filtering didn’t work 86 | 87 | **v1.0.5** 88 | 89 | - Fixed the About box, since it was trying to launch the email address as a HTTP link. Thanks AidanC 90 | - Added Host Name column to the Results list view. Not sure why I hadn’t added it, as the data was already parsed. Thanks AidanC 91 | - Added Host Name filter combo box on the Filter tab, to allow filtering on Host Name. 92 | - Modified the Ignore Plugins functionality to use the current users data directory rather than the application directory, which requires admin permissions to read/write. Thanks AidanC 93 | - Added paging to the Results list view. The number of results per page can be configured via the Tools->Options window. The application defaults to 5000 results per page. 94 | - Added buffering to the CSV results export, so it should cope with any number of results. 95 | - Removed the XML export since it cannot support large volumes of data 96 | 97 | **v1.0.4** 98 | 99 | - Added the extra nmap fields for searching via the Search text box. So if an item has “Product: apache”, then you can search for “Product: apache” and all results with “apache” will be displayed 100 | - Modified the text search to be case insensitive 101 | - Fixed the menu event handlers for saving files. Thanks AllanS 102 | - Fixed the combo box event handler (Severity). Thanks AllanS 103 | - Fixed the Host Summary export. Thanks AllanS 104 | - Increased width of filter combo boxes. Thanks AllanS 105 | 106 | **v1.0.3** 107 | 108 | - Recoded to use an ESENT database for performance and stability reasons. The previous version held everything in memory which is fast but not scalable, particular with very large result sets. An example result set with the previous version took over 17 seconds to parse, query and display 4800 results, whereas the new version takes under 3 seconds! 109 | - Now displays the total number of results in the displayed result set in the status bar, once the load is complete 110 | - Readded the Host Summary tab which was missing functionality from NessusViewer. Thanks AllanS 111 | - Added the ability to export the Host Summaries as CSV 112 | 113 | **v1.0.2** 114 | 115 | - Added extra validation to cope with half output files 116 | - Removed extra erroneous output in the logging window 117 | 118 | **v1.0.1** 119 | 120 | - Added State column for displaying nmap port state 121 | - Added State filter drop down to allow filtering by nmap port state 122 | - Updated to use local user application settings folder to store settings, since if it was not run as Admin then an error would occur 123 | 124 | **v1.0.0** 125 | 126 | - Initial Release 127 | -------------------------------------------------------------------------------- /Dependencies/ObjectListView/Modified.txt: -------------------------------------------------------------------------------- 1 | /// 2 | /// Override the basic message pump for this control 3 | /// 4 | /// 5 | protected override void WndProc(ref Message m) { 6 | //System.Diagnostics.Debug.WriteLine(m.Msg); 7 | switch (m.Msg) { 8 | case 2: // WM_DESTROY 9 | if (!this.HandleDestroy(ref m)) 10 | base.WndProc(ref m); 11 | break; 12 | //case 0x14: // WM_ERASEBKGND 13 | // Can't do anything here since, when the control is double buffered, anything 14 | // done here is immediately over-drawn 15 | // break; 16 | case 0x0F: // WM_PAINT 17 | if (!this.HandlePaint(ref m)) 18 | base.WndProc(ref m); 19 | break; 20 | case 0x46: // WM_WINDOWPOSCHANGING 21 | if (!this.HandleWindowPosChanging(ref m)) 22 | base.WndProc(ref m); 23 | break; 24 | case 0x4E: // WM_NOTIFY 25 | if (!this.HandleNotify(ref m)) 26 | base.WndProc(ref m); 27 | break; 28 | case 0x0100: // WM_KEY_DOWN 29 | if (!this.HandleKeyDown(ref m)) 30 | base.WndProc(ref m); 31 | break; 32 | case 0x0102: // WM_CHAR 33 | if (!this.HandleChar(ref m)) 34 | base.WndProc(ref m); 35 | break; 36 | case 0x0200: // WM_MOUSEMOVE 37 | if (!this.HandleMouseMove(ref m)) 38 | base.WndProc(ref m); 39 | break; 40 | 41 | 42 | case 0x0201: // WM_LBUTTONDOWN 43 | Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16); 44 | var hit = this.HitTest(pos); 45 | switch (hit.Location) 46 | { 47 | case ListViewHitTestLocations.AboveClientArea: 48 | case ListViewHitTestLocations.BelowClientArea: 49 | case ListViewHitTestLocations.LeftOfClientArea: 50 | case ListViewHitTestLocations.RightOfClientArea: 51 | case ListViewHitTestLocations.None: 52 | return; 53 | } 54 | 55 | if (this.PossibleFinishCellEditing() && !this.HandleLButtonDown(ref m)) 56 | base.WndProc(ref m); 57 | 58 | break; 59 | case 0x202: // WM_LBUTTONUP 60 | Point pos1 = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16); 61 | var hit1 = this.HitTest(pos1); 62 | switch (hit1.Location) 63 | { 64 | case ListViewHitTestLocations.AboveClientArea: 65 | case ListViewHitTestLocations.BelowClientArea: 66 | case ListViewHitTestLocations.LeftOfClientArea: 67 | case ListViewHitTestLocations.RightOfClientArea: 68 | case ListViewHitTestLocations.None: 69 | return; 70 | } 71 | 72 | if (this.PossibleFinishCellEditing() && !this.HandleLButtonUp(ref m)) 73 | base.WndProc(ref m); 74 | break; 75 | case 0x0203: // WM_LBUTTONDBLCLK 76 | Point pos2 = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16); 77 | var hit2 = this.HitTest(pos2); 78 | switch (hit2.Location) 79 | { 80 | case ListViewHitTestLocations.AboveClientArea: 81 | case ListViewHitTestLocations.BelowClientArea: 82 | case ListViewHitTestLocations.LeftOfClientArea: 83 | case ListViewHitTestLocations.RightOfClientArea: 84 | case ListViewHitTestLocations.None: 85 | return; 86 | } 87 | 88 | if (this.PossibleFinishCellEditing() && !this.HandleLButtonDoubleClick(ref m)) 89 | base.WndProc(ref m); 90 | break; 91 | case 0x0204: // WM_RBUTTONDOWN 92 | Point pos3 = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16); 93 | var hit3 = this.HitTest(pos3); 94 | switch (hit3.Location) 95 | { 96 | case ListViewHitTestLocations.AboveClientArea: 97 | case ListViewHitTestLocations.BelowClientArea: 98 | case ListViewHitTestLocations.LeftOfClientArea: 99 | case ListViewHitTestLocations.RightOfClientArea: 100 | case ListViewHitTestLocations.None: 101 | return; 102 | } 103 | 104 | if (this.PossibleFinishCellEditing() && !this.HandleRButtonDown(ref m)) 105 | base.WndProc(ref m); 106 | break; 107 | case 0x0206: // WM_RBUTTONDBLCLK 108 | Point pos4 = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16); 109 | var hit4 = this.HitTest(pos4); 110 | switch (hit4.Location) 111 | { 112 | case ListViewHitTestLocations.AboveClientArea: 113 | case ListViewHitTestLocations.BelowClientArea: 114 | case ListViewHitTestLocations.LeftOfClientArea: 115 | case ListViewHitTestLocations.RightOfClientArea: 116 | case ListViewHitTestLocations.None: 117 | return; 118 | } 119 | 120 | if (this.PossibleFinishCellEditing() && !this.HandleRButtonDoubleClick(ref m)) 121 | base.WndProc(ref m); 122 | break; 123 | 124 | 125 | 126 | case 0x204E: // WM_REFLECT_NOTIFY 127 | if (!this.HandleReflectNotify(ref m)) 128 | base.WndProc(ref m); 129 | break; 130 | case 0x114: // WM_HSCROLL: 131 | case 0x115: // WM_VSCROLL: 132 | if (this.PossibleFinishCellEditing()) 133 | base.WndProc(ref m); 134 | break; 135 | case 0x20A: // WM_MOUSEWHEEL: 136 | case 0x20E: // WM_MOUSEHWHEEL: 137 | if (this.PossibleFinishCellEditing()) 138 | base.WndProc(ref m); 139 | break; 140 | case 0x7B: // WM_CONTEXTMENU 141 | if (!this.HandleContextMenu(ref m)) 142 | base.WndProc(ref m); 143 | break; 144 | default: 145 | base.WndProc(ref m); 146 | break; 147 | } 148 | } -------------------------------------------------------------------------------- /Source/FormAbout.designer.cs: -------------------------------------------------------------------------------- 1 | namespace woanware 2 | { 3 | partial class FormAbout 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAbout)); 32 | this.btnClose = new System.Windows.Forms.Button(); 33 | this.linkLabel1 = new System.Windows.Forms.LinkLabel(); 34 | this.linkLabel2 = new System.Windows.Forms.LinkLabel(); 35 | this.pictureBox2 = new System.Windows.Forms.PictureBox(); 36 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 37 | this.lblApp = new System.Windows.Forms.Label(); 38 | this.lblVer = new System.Windows.Forms.Label(); 39 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); 40 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 41 | this.SuspendLayout(); 42 | // 43 | // btnClose 44 | // 45 | this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; 46 | this.btnClose.Location = new System.Drawing.Point(374, 178); 47 | this.btnClose.Name = "btnClose"; 48 | this.btnClose.Size = new System.Drawing.Size(75, 23); 49 | this.btnClose.TabIndex = 11; 50 | this.btnClose.Text = "Close"; 51 | this.btnClose.UseVisualStyleBackColor = true; 52 | this.btnClose.Click += new System.EventHandler(this.btnClose_Click); 53 | // 54 | // linkLabel1 55 | // 56 | this.linkLabel1.AutoSize = true; 57 | this.linkLabel1.Location = new System.Drawing.Point(156, 126); 58 | this.linkLabel1.Name = "linkLabel1"; 59 | this.linkLabel1.Size = new System.Drawing.Size(123, 15); 60 | this.linkLabel1.TabIndex = 16; 61 | this.linkLabel1.TabStop = true; 62 | this.linkLabel1.Text = "www.woanware.co.uk"; 63 | // 64 | // linkLabel2 65 | // 66 | this.linkLabel2.AutoSize = true; 67 | this.linkLabel2.Location = new System.Drawing.Point(148, 149); 68 | this.linkLabel2.Name = "linkLabel2"; 69 | this.linkLabel2.Size = new System.Drawing.Size(131, 15); 70 | this.linkLabel2.TabIndex = 17; 71 | this.linkLabel2.TabStop = true; 72 | this.linkLabel2.Text = "markwoan@gmail.com"; 73 | // 74 | // pictureBox2 75 | // 76 | this.pictureBox2.BackColor = System.Drawing.Color.White; 77 | this.pictureBox2.Dock = System.Windows.Forms.DockStyle.Top; 78 | this.pictureBox2.Location = new System.Drawing.Point(0, 0); 79 | this.pictureBox2.Name = "pictureBox2"; 80 | this.pictureBox2.Size = new System.Drawing.Size(459, 104); 81 | this.pictureBox2.TabIndex = 22; 82 | this.pictureBox2.TabStop = false; 83 | // 84 | // pictureBox1 85 | // 86 | this.pictureBox1.BackColor = System.Drawing.Color.Transparent; 87 | this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); 88 | this.pictureBox1.Location = new System.Drawing.Point(9, 10); 89 | this.pictureBox1.Name = "pictureBox1"; 90 | this.pictureBox1.Size = new System.Drawing.Size(64, 64); 91 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; 92 | this.pictureBox1.TabIndex = 23; 93 | this.pictureBox1.TabStop = false; 94 | // 95 | // lblApp 96 | // 97 | this.lblApp.AutoSize = true; 98 | this.lblApp.BackColor = System.Drawing.Color.White; 99 | this.lblApp.Font = new System.Drawing.Font("Verdana", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 100 | this.lblApp.Location = new System.Drawing.Point(93, 35); 101 | this.lblApp.Name = "lblApp"; 102 | this.lblApp.Size = new System.Drawing.Size(286, 29); 103 | this.lblApp.TabIndex = 25; 104 | this.lblApp.Text = "NetworkScanViewer"; 105 | // 106 | // lblVer 107 | // 108 | this.lblVer.AutoSize = true; 109 | this.lblVer.BackColor = System.Drawing.Color.White; 110 | this.lblVer.Font = new System.Drawing.Font("Verdana", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 111 | this.lblVer.Location = new System.Drawing.Point(378, 46); 112 | this.lblVer.Name = "lblVer"; 113 | this.lblVer.Size = new System.Drawing.Size(54, 16); 114 | this.lblVer.TabIndex = 26; 115 | this.lblVer.Text = "v1.0.0"; 116 | // 117 | // FormAbout 118 | // 119 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); 120 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 121 | this.CancelButton = this.btnClose; 122 | this.ClientSize = new System.Drawing.Size(459, 210); 123 | this.Controls.Add(this.lblVer); 124 | this.Controls.Add(this.lblApp); 125 | this.Controls.Add(this.pictureBox1); 126 | this.Controls.Add(this.pictureBox2); 127 | this.Controls.Add(this.linkLabel2); 128 | this.Controls.Add(this.linkLabel1); 129 | this.Controls.Add(this.btnClose); 130 | this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 131 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 132 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 133 | this.MaximizeBox = false; 134 | this.MinimizeBox = false; 135 | this.Name = "FormAbout"; 136 | this.ShowInTaskbar = false; 137 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 138 | this.Text = "About NetworkScanViewer"; 139 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); 140 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 141 | this.ResumeLayout(false); 142 | this.PerformLayout(); 143 | 144 | } 145 | 146 | #endregion 147 | 148 | private System.Windows.Forms.Button btnClose; 149 | private System.Windows.Forms.LinkLabel linkLabel1; 150 | private System.Windows.Forms.LinkLabel linkLabel2; 151 | private System.Windows.Forms.PictureBox pictureBox2; 152 | private System.Windows.Forms.PictureBox pictureBox1; 153 | private System.Windows.Forms.Label lblApp; 154 | private System.Windows.Forms.Label lblVer; 155 | } 156 | } -------------------------------------------------------------------------------- /Source/FormOptions.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA 124 | AAAAAAAA////ALp8SgAaer4AbN32AO3EmwARPVUAZJjJALvf6QB1ZlcALWWCALC9sQDNoHUAQ4mqAPTb 125 | wgCUx/kAkLfRAJ16aACtZCsA3Or3AFXJ5AB3vucAI2WmAEmY3ADX2d0Ay45dAML2/QDYrosAQYXJAPDl 126 | 3gCkbk0AgdXuAK7T9gCr1d8AxOD8AEmYxQC2czgAWKXYAIvA5wB6ttUAWuH3ALHm9QBtyu0AwoJYAOXz 127 | /wBJiL0Ak3JjAIWx2wDRpoMAUaLiAEad0ABmn9MAVJrYAHfL5wB9blgAtdbdAEiMxwCx1ucAsmwuAKxy 128 | UAAoX4cAvHtTAGPf9wC3dkAAtNLwAHnT8ADKkmQAx4haAKzS7wDGjGEAY6PXANbo9wDOk18AXtz1AHa6 129 | 1wC0bjMA0KV+AODy/wDH9/0AsuP5ANaqiQBQm9oAeNDtAKhvTgDAgFUAvH9UAH3U7gCvZywAetbyAMSG 130 | WgCRyfkAXeL4AMuRYQDNk2MASY/HAFvf9QDIilsAyoxcAMyQXgB71PEAun1MAKhxTwDBhFgA2drdAM2S 131 | YQBLmdwA16yLAMT2/QCmbk0Ay45fAHnT7gDNkV8AW+L3APTawQDFhlsAzZ90AKduTQBf3PUAp29OAM2S 132 | XwDMkF8AzZNfAO3EnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 135 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 138 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 139 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 141 | AAAAAAAAAAAAAAY8LQAAAAAAAAAAAAAAAD0KD1ocFi5TdGwebAAAVAEBDU00AyNeEwEBAWwAACsBVwkn 142 | EBRfUlEYHQF2AABZAVdzNkoaPltBF2cBZQAAcgFXDBI5NU5JKGNpRzsAAEMBS0w6ATduTnVwWDERAABg 143 | AT8wJAEdCFZrBCpGBwAAYQFVZAIBHR0hH08mICIzABkBAQEBAQEBASkVQCxEOABiAQUFBQUFBQUFCyUv 144 | MgAAbwF6cXEODg4ODg4FAWYAAEgBenp6BQUFBQUFBQFFAAAAAQEBAQEBAQEBAQEBUAAAAABISHl3eGhd 145 | XG1CG2oAAAAAAAAAAAAAAAAAAAAAAPH/AADgAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAAAAIAA 146 | AACAAQAAgAEAAIABAADAAQAA4AEAAP//AAA= 147 | 148 | 149 | -------------------------------------------------------------------------------- /Source/FormOpen.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 125 | 126 | AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA 127 | AAAAAAAA////ANhZGACgoKAAiGlVAOqleQDQ0NAAgYGBALi4uADo6OgAampqAJCQkADc3NwArKysAPPz 128 | 8wB1dXUAxcXFAINwZADtr4YAmJiYAImJiQB0bWkA4uLiANbW1gC+vr4AsrKyAO3t7QDLy8sApaWlAG9v 129 | bwB5eXkAfX19AIWFhQCUlJQAnJycAN/f3wDZ2dkAcnJyANPT0wDIyMgAwsLCAI2NjQCvr68AqampAPHx 130 | 8QBsbGwAd3d3AM7OzgCHh4cAi4uLAMDAwAC6uroAkpKSALa2tgCWlpYAtLS0AKOjowCnp6cAcW1qAOzs 131 | 7ADp6ekA5+fnAGtrawDj4+MAbm5uAOHh4QDg4OAAc3NzAN7e3gDd3d0A29vbANra2gDY2NgA0tLSAIaG 132 | hgDR0dEAz8/PAIqKigDNzc0AzMzMAI6OjgCPj48AysrKAMnJyQCRkZEAx8fHAMPDwwCXl5cAwcHBAJub 133 | mwCdnZ0An5+fALm5uQChoaEAt7e3AKSkpACxsbEAsLCwAKqqqgCrq6sArq6uAK2trQAAAAAAAAAAAAAA 134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 135 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 136 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 137 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 138 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 139 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 140 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 141 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 142 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 143 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 144 | AAAAAAAAAAAAAAAAAAICAAAAAAAAAAoKCgoKCgQFBQQKCgoKCgoKKSkpKSkKEhIKKSkpKSkKCgoKCgoK 145 | OhERFQoKCgoKCgAAAAAAACUUFC0AAAAAAAAAA1lXNFBNIAcfHg8lQD4AKzxOUlMnJxAQVhAoWDIWPmQX 146 | NCE0CzFQMU0gMEpKJx0ZJDdlYysNOV84X1taIlJDXkVXE1c2CzRUUU0xTU1MLgBHVlwIXjUZYCoqYitl 147 | VgAAPz1BQkIjI0RFRQxGQgYAAC87REhJTydVJxsGRQkcAAAAP0YWFkFCQkIjVksmAAAAAEsOGhoaGho7 148 | OzssYQAAAAAAEFgYMzUZZCscXQAAAP5/AAAAAAAAAAAAAAAAAAD8PwAAgAEAAAAAAAAAAAAAAAAAAAAA 149 | AACAAQAAgAEAAIABAADAAwAAwAMAAOAHAAA= 150 | 151 | 152 | -------------------------------------------------------------------------------- /Source/FormOpen.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace woanware 2 | { 3 | partial class FormOpen 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormOpen)); 32 | this.txtInputFolder = new System.Windows.Forms.TextBox(); 33 | this.btnOk = new System.Windows.Forms.Button(); 34 | this.btnCancel = new System.Windows.Forms.Button(); 35 | this.btnInputFolder = new System.Windows.Forms.Button(); 36 | this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); 37 | this.lblInputFolder = new System.Windows.Forms.Label(); 38 | this.lblOutputFolder = new System.Windows.Forms.Label(); 39 | this.btnOutputFolder = new System.Windows.Forms.Button(); 40 | this.txtOutputFolder = new System.Windows.Forms.TextBox(); 41 | this.chkDeleteExistingDatabase = new System.Windows.Forms.CheckBox(); 42 | this.SuspendLayout(); 43 | // 44 | // txtInputFolder 45 | // 46 | this.txtInputFolder.Location = new System.Drawing.Point(91, 8); 47 | this.txtInputFolder.Name = "txtInputFolder"; 48 | this.txtInputFolder.Size = new System.Drawing.Size(317, 23); 49 | this.txtInputFolder.TabIndex = 1; 50 | // 51 | // btnOk 52 | // 53 | this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 54 | this.btnOk.Location = new System.Drawing.Point(282, 79); 55 | this.btnOk.Name = "btnOk"; 56 | this.btnOk.Size = new System.Drawing.Size(75, 23); 57 | this.btnOk.TabIndex = 6; 58 | this.btnOk.Text = "OK"; 59 | this.btnOk.UseVisualStyleBackColor = true; 60 | this.btnOk.Click += new System.EventHandler(this.btnOk_Click); 61 | // 62 | // btnCancel 63 | // 64 | this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 65 | this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 66 | this.btnCancel.Location = new System.Drawing.Point(361, 79); 67 | this.btnCancel.Name = "btnCancel"; 68 | this.btnCancel.Size = new System.Drawing.Size(75, 23); 69 | this.btnCancel.TabIndex = 7; 70 | this.btnCancel.Text = "Cancel"; 71 | this.btnCancel.UseVisualStyleBackColor = true; 72 | this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); 73 | // 74 | // btnInputFolder 75 | // 76 | this.btnInputFolder.Location = new System.Drawing.Point(412, 8); 77 | this.btnInputFolder.Name = "btnInputFolder"; 78 | this.btnInputFolder.Size = new System.Drawing.Size(23, 23); 79 | this.btnInputFolder.TabIndex = 2; 80 | this.btnInputFolder.Text = "..."; 81 | this.btnInputFolder.UseVisualStyleBackColor = true; 82 | this.btnInputFolder.Click += new System.EventHandler(this.btnInputFolder_Click); 83 | // 84 | // folderBrowserDialog 85 | // 86 | this.folderBrowserDialog.Description = "Select results directory"; 87 | // 88 | // lblInputFolder 89 | // 90 | this.lblInputFolder.AutoSize = true; 91 | this.lblInputFolder.Location = new System.Drawing.Point(15, 12); 92 | this.lblInputFolder.Name = "lblInputFolder"; 93 | this.lblInputFolder.Size = new System.Drawing.Size(71, 15); 94 | this.lblInputFolder.TabIndex = 0; 95 | this.lblInputFolder.Text = "Input Folder"; 96 | // 97 | // lblOutputFolder 98 | // 99 | this.lblOutputFolder.AutoSize = true; 100 | this.lblOutputFolder.Location = new System.Drawing.Point(6, 42); 101 | this.lblOutputFolder.Name = "lblOutputFolder"; 102 | this.lblOutputFolder.Size = new System.Drawing.Size(81, 15); 103 | this.lblOutputFolder.TabIndex = 3; 104 | this.lblOutputFolder.Text = "Output Folder"; 105 | // 106 | // btnOutputFolder 107 | // 108 | this.btnOutputFolder.Location = new System.Drawing.Point(412, 37); 109 | this.btnOutputFolder.Name = "btnOutputFolder"; 110 | this.btnOutputFolder.Size = new System.Drawing.Size(23, 23); 111 | this.btnOutputFolder.TabIndex = 5; 112 | this.btnOutputFolder.Text = "..."; 113 | this.btnOutputFolder.UseVisualStyleBackColor = true; 114 | this.btnOutputFolder.Click += new System.EventHandler(this.btnOutputFolder_Click); 115 | // 116 | // txtOutputFolder 117 | // 118 | this.txtOutputFolder.Location = new System.Drawing.Point(91, 38); 119 | this.txtOutputFolder.Name = "txtOutputFolder"; 120 | this.txtOutputFolder.Size = new System.Drawing.Size(317, 23); 121 | this.txtOutputFolder.TabIndex = 4; 122 | // 123 | // chkDeleteExistingDatabase 124 | // 125 | this.chkDeleteExistingDatabase.AutoSize = true; 126 | this.chkDeleteExistingDatabase.Location = new System.Drawing.Point(91, 67); 127 | this.chkDeleteExistingDatabase.Name = "chkDeleteExistingDatabase"; 128 | this.chkDeleteExistingDatabase.Size = new System.Drawing.Size(152, 19); 129 | this.chkDeleteExistingDatabase.TabIndex = 8; 130 | this.chkDeleteExistingDatabase.Text = "Delete existing database"; 131 | this.chkDeleteExistingDatabase.UseVisualStyleBackColor = true; 132 | // 133 | // FormOpen 134 | // 135 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); 136 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 137 | this.CancelButton = this.btnCancel; 138 | this.ClientSize = new System.Drawing.Size(444, 111); 139 | this.Controls.Add(this.chkDeleteExistingDatabase); 140 | this.Controls.Add(this.lblOutputFolder); 141 | this.Controls.Add(this.btnOutputFolder); 142 | this.Controls.Add(this.txtOutputFolder); 143 | this.Controls.Add(this.lblInputFolder); 144 | this.Controls.Add(this.btnInputFolder); 145 | this.Controls.Add(this.btnCancel); 146 | this.Controls.Add(this.btnOk); 147 | this.Controls.Add(this.txtInputFolder); 148 | this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 149 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 150 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 151 | this.MaximizeBox = false; 152 | this.MinimizeBox = false; 153 | this.Name = "FormOpen"; 154 | this.ShowInTaskbar = false; 155 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 156 | this.Text = "Open"; 157 | this.ResumeLayout(false); 158 | this.PerformLayout(); 159 | 160 | } 161 | 162 | #endregion 163 | 164 | private System.Windows.Forms.TextBox txtInputFolder; 165 | private System.Windows.Forms.Button btnOk; 166 | private System.Windows.Forms.Button btnCancel; 167 | private System.Windows.Forms.Button btnInputFolder; 168 | private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; 169 | private System.Windows.Forms.Label lblInputFolder; 170 | private System.Windows.Forms.Label lblOutputFolder; 171 | private System.Windows.Forms.Button btnOutputFolder; 172 | private System.Windows.Forms.TextBox txtOutputFolder; 173 | private System.Windows.Forms.CheckBox chkDeleteExistingDatabase; 174 | } 175 | } -------------------------------------------------------------------------------- /Source/FormList.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 125 | 126 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAO 127 | vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADJSURBVDhPpZCx 128 | CoMwFEX9jE6FfpmjQwfnzA5uruImiIKBDKU6urhLf6a1pRRu7+uob0jocCA5JIeXRAD+QpUhqDIEVW6Z 129 | 5/mseUGVVVWhaZqHc+4g+2maFkbe23PCTghFUaBtW4ncJTKO48LIRzu7E0KWZbDWous6iTwZuTDiHzDG 130 | /CbgRQzDIJEX1/6BNE1R1zXKsgSfs/JProz4B5IkQZ7n4CQrn3NkpGfEPxDH8crIjZOcZM9Iz4h/IARV 131 | hqDKEFQZgir9QfQFmJHux+p3kpYAAAAASUVORK5CYII= 132 | 133 | 134 | 135 | 136 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAO 137 | vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC0SURBVDhPpc+9 138 | CoMwGIVhL6NTofflJDg4ZnUOQpYsmRxcBIPiECQX0gvp2trxNNkcjqUfHV4IT37IVwD4K4qSKEqiKImi 139 | tRbDMLzWdb2w/WMUtdaYpgnjOD5DCF8fodi2LdJFzPMM7/07xnj6CEWlFJZlwbZtSGPkHuxcjmLTNPn7 140 | 6Psezrk9ra/sXI5iVVXoug5plN0Yc3o5R7Esy72u63sa5cb2j1GURFESRUkUJVH8PRQfC97vO0ASPtwA 141 | AAAASUVORK5CYII= 142 | 143 | 144 | 145 | 146 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAO 147 | vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC9SURBVDhPpc8h 148 | DoNAEIVhjrGKpMdDIDAIDHoNBgSboFAkKILYgIEb9CC1LcjpTBNM94lOKj7Bvy8hExHRX2DUgFEDRg0Y 149 | L+M4Gu/9a993/sQbGEVd16bv++e6riS+3y8wFkVhrLXnMAy0bRvN88w53AkYsyx7NE1D0zTRsizEp3AO 150 | dwLGJEniPM8P59zn73wK53AnYBRpmsZ8ytF1HbVtywnvYLzwKbeyLO9VVR3oXcCoAaMGjBowasD4O4re 151 | ZLvxwD8203IAAAAASUVORK5CYII= 152 | 153 | 154 | 155 | 156 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAAlwSFlzAAAO 157 | vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADZSURBVDhPpZAx 158 | CoNAEEVzDKtATmZpkcLa2t7eTrESFAlBsNBCe8llEhPCwuT/lM4UWVI80DfjY9eDiPyFKX0wpQ+mJG3b 159 | ni2/x5R5nr+rqlr53Pd9ME3TY1kWvOpdJUiWZQ6RFZEAJ7kjIGS/R5QgaZo6RC6IPLuuk3meBSfBSO8q 160 | QZIkcYi8mqb5fjiOo+AkGOldJUgcxw6RKyJbURQyDIPgOhjpXSVIFEUOkRqRIyNlWQqug5HeVYKEYegQ 161 | qfmMyAmRG/7Jtt8jSvhiSh9M6YMpfTDl78jhAysd7k/5hoMtAAAAAElFTkSuQmCC 162 | 163 | 164 | -------------------------------------------------------------------------------- /Source/NetworkScanViewer.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | x86 6 | 8.0.30703 7 | 2.0 8 | {8DF6265A-AE0E-402F-952F-3B44A298F95E} 9 | WinExe 10 | Properties 11 | woanware 12 | NetworkScanViewer 13 | v4.5 14 | 15 | 16 | 512 17 | publish\ 18 | true 19 | Disk 20 | false 21 | Foreground 22 | 7 23 | Days 24 | false 25 | false 26 | true 27 | 0 28 | 1.0.0.%2a 29 | false 30 | false 31 | true 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | false 38 | bin\Debug\ 39 | DEBUG;TRACE 40 | prompt 41 | 4 42 | false 43 | 44 | 45 | AnyCPU 46 | pdbonly 47 | true 48 | bin\Release\ 49 | TRACE 50 | prompt 51 | 4 52 | false 53 | 54 | 55 | App.ico 56 | 57 | 58 | 59 | False 60 | ..\Dependencies\ManagedEsent\Esent.Interop.dll 61 | 62 | 63 | False 64 | ..\Dependencies\ManagedEsent\Microsoft.Practices.ObjectBuilder2.dll 65 | 66 | 67 | False 68 | ..\Dependencies\ManagedEsent\Microsoft.Practices.Unity.dll 69 | 70 | 71 | 72 | False 73 | ..\Dependencies\ObjectListView\ObjectListView.dll 74 | 75 | 76 | False 77 | ..\Dependencies\ManagedEsent\Pixie.dll 78 | 79 | 80 | False 81 | ..\Dependencies\ManagedEsent\ShiftReduceParser.dll 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | False 96 | ..\Dependencies\woanware\Utility.dll 97 | 98 | 99 | False 100 | ..\Dependencies\dockpanelsuite\WeifenLuo.WinFormsUI.Docking.dll 101 | 102 | 103 | 104 | 105 | 106 | 107 | Form 108 | 109 | 110 | FormAbout.cs 111 | 112 | 113 | Form 114 | 115 | 116 | FormDescription.cs 117 | 118 | 119 | Form 120 | 121 | 122 | FormList.cs 123 | 124 | 125 | Form 126 | 127 | 128 | FormMain.cs 129 | 130 | 131 | Form 132 | 133 | 134 | FormOpen.cs 135 | 136 | 137 | Form 138 | 139 | 140 | FormOptions.cs 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | FormAbout.cs 153 | 154 | 155 | FormDescription.cs 156 | 157 | 158 | FormList.cs 159 | 160 | 161 | FormMain.cs 162 | 163 | 164 | FormOpen.cs 165 | 166 | 167 | FormOptions.cs 168 | 169 | 170 | ResXFileCodeGenerator 171 | Resources.Designer.cs 172 | Designer 173 | 174 | 175 | True 176 | Resources.resx 177 | True 178 | 179 | 180 | 181 | SettingsSingleFileGenerator 182 | Settings.Designer.cs 183 | 184 | 185 | True 186 | Settings.settings 187 | True 188 | 189 | 190 | 191 | 192 | False 193 | Microsoft .NET Framework 4 %28x86 and x64%29 194 | true 195 | 196 | 197 | False 198 | .NET Framework 3.5 SP1 Client Profile 199 | false 200 | 201 | 202 | False 203 | .NET Framework 3.5 SP1 204 | false 205 | 206 | 207 | False 208 | Windows Installer 3.1 209 | true 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | PreserveNewest 218 | 219 | 220 | 221 | 228 | -------------------------------------------------------------------------------- /Source/Database.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.IO; 6 | using System.Globalization; 7 | using Microsoft.Isam.Esent; 8 | 9 | namespace woanware 10 | { 11 | /// 12 | /// 13 | /// 14 | internal class Database 15 | { 16 | public string OutputPath {get;private set;} 17 | private Connection _connection = null; 18 | private Table _table = null; 19 | private Transaction _transaction = null; 20 | 21 | /// 22 | /// 23 | /// 24 | /// 25 | public Database(string outputPath) 26 | { 27 | OutputPath = outputPath; 28 | } 29 | 30 | ///// 31 | ///// 32 | ///// 33 | ///// 34 | ///// 35 | //public void Delete(string directory, string path) 36 | //{ 37 | // File.Delete(path); 38 | // File.Delete(System.IO.Path.Combine(directory, String.Format(CultureInfo.InvariantCulture, "{0}.chk", "edb"))); 39 | // foreach (string file in Directory.GetFiles(directory, String.Format(CultureInfo.InvariantCulture, "{0}*.log", "edb"))) 40 | // { 41 | // File.Delete(file); 42 | // } 43 | 44 | // foreach (string file in Directory.GetFiles(directory, String.Format(CultureInfo.InvariantCulture, "{0}*.jrs", "edb"))) 45 | // { 46 | // File.Delete(file); 47 | // } 48 | //} 49 | 50 | /// 51 | /// 52 | /// 53 | public string CreateDatabase() 54 | { 55 | try 56 | { 57 | if (File.Exists(OutputPath + @"\data.edb") == false) 58 | { 59 | _connection = Esent.CreateDatabase(OutputPath + @"\data.edb"); 60 | 61 | _table = _connection.CreateTable("Data"); 62 | 63 | _connection.UsingLazyTransaction(() => 64 | { 65 | _table.CreateColumn(new ColumnDefinition("Id", ColumnType.Int32)); // Filterable 66 | _table.CreateColumn(new ColumnDefinition("Type", ColumnType.Text)); // Filterable 67 | _table.CreateColumn(new ColumnDefinition("HostName", ColumnType.Text)); // Filterable 68 | _table.CreateColumn(new ColumnDefinition("IpAddress", ColumnType.Text)); // Filterable 69 | _table.CreateColumn(new ColumnDefinition("MacAddress", ColumnType.Text)); // Filterable 70 | _table.CreateColumn(new ColumnDefinition("Service", ColumnType.Text)); // Filterable 71 | _table.CreateColumn(new ColumnDefinition("Protocol", ColumnType.Text)); // Filterable 72 | _table.CreateColumn(new ColumnDefinition("Port", ColumnType.Text)); // Filterable 73 | _table.CreateColumn(new ColumnDefinition("Text", ColumnType.Text)); // Filterable 74 | _table.CreateColumn(new ColumnDefinition("PluginId", ColumnType.Text)); 75 | _table.CreateColumn(new ColumnDefinition("PluginName", ColumnType.Text)); 76 | _table.CreateColumn(new ColumnDefinition("PluginFamily", ColumnType.Text)); 77 | _table.CreateColumn(new ColumnDefinition("Severity", ColumnType.Text)); 78 | _table.CreateColumn(new ColumnDefinition("Solution", ColumnType.Text)); 79 | _table.CreateColumn(new ColumnDefinition("RiskFactor", ColumnType.Text)); 80 | _table.CreateColumn(new ColumnDefinition("Description", ColumnType.Text)); 81 | _table.CreateColumn(new ColumnDefinition("PluginPublicationDate", ColumnType.Text)); 82 | _table.CreateColumn(new ColumnDefinition("VulnPublicationDate", ColumnType.Text)); 83 | _table.CreateColumn(new ColumnDefinition("PatchPublicationDate", ColumnType.Text)); 84 | _table.CreateColumn(new ColumnDefinition("Synopsis", ColumnType.Text)); 85 | _table.CreateColumn(new ColumnDefinition("PluginOutput", ColumnType.Text)); 86 | _table.CreateColumn(new ColumnDefinition("PluginVersion", ColumnType.Text)); 87 | _table.CreateColumn(new ColumnDefinition("SeeAlso", ColumnType.Text)); 88 | _table.CreateColumn(new ColumnDefinition("CvssVector", ColumnType.Text)); 89 | _table.CreateColumn(new ColumnDefinition("CvssBaseScore", ColumnType.Text)); 90 | _table.CreateColumn(new ColumnDefinition("CvssTemporalScore", ColumnType.Text)); 91 | _table.CreateColumn(new ColumnDefinition("Cve", ColumnType.Text)); 92 | _table.CreateColumn(new ColumnDefinition("Bid", ColumnType.Text)); 93 | _table.CreateColumn(new ColumnDefinition("Xref", ColumnType.Text)); 94 | _table.CreateColumn(new ColumnDefinition("State", ColumnType.Text)); // Filterable 95 | _table.CreateColumn(new ColumnDefinition("Product", ColumnType.Text)); // Filterable 96 | _table.CreateColumn(new ColumnDefinition("Version", ColumnType.Text)); // Filterable 97 | _table.CreateColumn(new ColumnDefinition("ExtraInfo", ColumnType.Text)); 98 | _table.CreateColumn(new ColumnDefinition("ExploitabilityEase", ColumnType.Text)); 99 | _table.CreateColumn(new ColumnDefinition("ExploitAvailable", ColumnType.Text)); // Filterable 100 | _table.CreateColumn(new ColumnDefinition("ExploitFrameworkCanvas", ColumnType.Text)); 101 | _table.CreateColumn(new ColumnDefinition("ExploitFrameworkMetasploit", ColumnType.Text)); 102 | _table.CreateColumn(new ColumnDefinition("ExploitFrameworkCore", ColumnType.Text)); 103 | _table.CreateColumn(new ColumnDefinition("MetasploitName", ColumnType.Text)); 104 | _table.CreateColumn(new ColumnDefinition("CanvasPackage", ColumnType.Text)); 105 | }); 106 | 107 | _transaction = _connection.BeginTransaction(); 108 | } 109 | else 110 | { 111 | _connection = Esent.OpenDatabase(OutputPath + @"\data.edb"); 112 | _table = _connection.OpenTable("Data"); 113 | _transaction = _connection.BeginTransaction(); 114 | } 115 | 116 | return string.Empty; 117 | } 118 | catch (Exception ex) 119 | { 120 | return ex.Message; 121 | } 122 | } 123 | 124 | /// 125 | /// 126 | /// 127 | /// 128 | public string AddResult(Result result) 129 | { 130 | StringBuilder text = new StringBuilder(); 131 | if (result.Type.ToUpper() == "NMAP") 132 | { 133 | this.AddOutputLine(text, "Product", result.Product); 134 | this.AddOutputLine(text, "Version", result.Version); 135 | this.AddOutputLine(text, "Extra Info", result.ExtraInfo); 136 | this.AddOutputLine(text, "State", result.State); 137 | } 138 | else 139 | { 140 | this.AddOutputLine(text, "Description", result.Description); 141 | this.AddOutputLine(text, "Synopsis", result.Synopsis); 142 | this.AddOutputLine(text, "Plugin Version", result.PluginVersion); 143 | this.AddOutputLine(text, "Risk Factor", result.RiskFactor); 144 | this.AddOutputLine(text, "Vuln Publication Date", result.VulnPublicationDate); 145 | this.AddOutputLine(text, "Plugin Publication Date", result.PluginPublicationDate); 146 | this.AddOutputLine(text, "Patch Publication Date", result.PatchPublicationDate); 147 | this.AddOutputLine(text, "CVSS Vector", result.CvssVector); 148 | this.AddOutputLine(text, "CVSS Base Score", result.CvssBaseScore); 149 | this.AddOutputLine(text, "CVSS Temporal Score", result.CvssTemporalScore); 150 | this.AddOutputLine(text, "CVE", result.Cve); 151 | this.AddOutputLine(text, "BID", result.Bid); 152 | this.AddOutputLine(text, "XREF", result.Xref); 153 | this.AddOutputLine(text, "See Also", result.SeeAlso); 154 | this.AddOutputLine(text, "Plugin Output", result.PluginOutput); 155 | this.AddOutputLine(text, "Exploitability Ease", result.ExploitabilityEase); 156 | this.AddOutputLine(text, "Exploit Available", result.ExploitAvailable); 157 | this.AddOutputLine(text, "Exploit Framework (Canvas)", result.ExploitFrameworkCanvas); 158 | this.AddOutputLine(text, "Exploit Framework (Metasploit)", result.ExploitFrameworkMetasploit); 159 | this.AddOutputLine(text, "Exploit Framework (Core)", result.ExploitFrameworkCore); 160 | this.AddOutputLine(text, "Metasploit Name", result.MetasploitName); 161 | this.AddOutputLine(text, "Canvas Package", result.CanvasPackage); 162 | } 163 | 164 | try 165 | { 166 | _table.NewRecord() 167 | .SetColumn("Id", result.Id) 168 | .SetColumn("Type", result.Type) 169 | .SetColumn("HostName", result.HostName) 170 | .SetColumn("IpAddress", result.IpAddress) 171 | .SetColumn("MacAddress", result.MacAddress) 172 | .SetColumn("Service", result.Service) 173 | .SetColumn("Protocol", result.Protocol) 174 | .SetColumn("Port", result.Port) 175 | .SetColumn("PluginId", result.PluginId) 176 | .SetColumn("PluginName", result.PluginName) 177 | .SetColumn("PluginFamily", result.PluginFamily) 178 | .SetColumn("Severity", result.Severity) 179 | .SetColumn("Solution", result.Solution) 180 | .SetColumn("RiskFactor", result.RiskFactor) 181 | .SetColumn("Description", result.Description) 182 | .SetColumn("PluginPublicationDate", result.PluginPublicationDate) 183 | .SetColumn("VulnPublicationDate", result.VulnPublicationDate) 184 | .SetColumn("PatchPublicationDate", result.PatchPublicationDate) 185 | .SetColumn("Synopsis", result.Synopsis) 186 | .SetColumn("PluginOutput", result.PluginOutput) 187 | .SetColumn("PluginVersion", result.PluginVersion) 188 | .SetColumn("SeeAlso", result.SeeAlso) 189 | .SetColumn("CvssVector", result.CvssVector) 190 | .SetColumn("CvssBaseScore", result.CvssBaseScore) 191 | .SetColumn("CvssTemporalScore", result.CvssTemporalScore) 192 | .SetColumn("Cve", result.Cve) 193 | .SetColumn("Bid", result.Bid) 194 | .SetColumn("Xref", result.Xref) 195 | .SetColumn("State", result.State) 196 | .SetColumn("Product", result.Product) 197 | .SetColumn("Version", result.Version) 198 | .SetColumn("ExtraInfo", result.ExtraInfo) 199 | .SetColumn("ExploitabilityEase", result.ExploitabilityEase) 200 | .SetColumn("ExploitAvailable", result.ExploitAvailable) 201 | .SetColumn("ExploitFrameworkCanvas", result.ExploitFrameworkCanvas) 202 | .SetColumn("ExploitFrameworkMetasploit", result.ExploitFrameworkMetasploit) 203 | .SetColumn("ExploitFrameworkCore", result.ExploitFrameworkCore) 204 | .SetColumn("MetasploitName", result.MetasploitName) 205 | .SetColumn("CanvasPackage", result.CanvasPackage) 206 | .SetColumn("Text", text.ToString()) 207 | .Save(); 208 | 209 | return string.Empty; 210 | } 211 | catch (Exception ex) 212 | { 213 | return ex.Message; 214 | } 215 | } 216 | 217 | /// 218 | /// 219 | /// 220 | /// 221 | /// 222 | /// 223 | private void AddOutputLine(StringBuilder output, 224 | string name, 225 | string value) 226 | { 227 | if (value.Length > 0) 228 | { 229 | if (name == "Plugin Output") 230 | { 231 | output.AppendFormat("{0}:\r\n\r\n{1}" + Environment.NewLine + Environment.NewLine, name, value.Trim()); 232 | } 233 | else if (name == "Description") 234 | { 235 | output.AppendFormat("{0}: {1}" + Environment.NewLine + Environment.NewLine, name, value.Trim()); 236 | } 237 | else if (name == "Synopsis") 238 | { 239 | output.AppendFormat("{0}: {1}" + Environment.NewLine + Environment.NewLine, name, value.Trim()); 240 | } 241 | else 242 | { 243 | output.AppendFormat("{0}: {1}" + Environment.NewLine, name, value.Trim()); 244 | } 245 | } 246 | } 247 | 248 | /// 249 | /// 250 | /// 251 | /// 252 | public int GetTotalNumberRecords() 253 | { 254 | using (Connection connection = Esent.OpenDatabase(OutputPath + @"\data.edb")) 255 | using (Table table = connection.OpenTable("Data")) 256 | { 257 | return (from data in table select data).Count(); 258 | } 259 | } 260 | 261 | /// 262 | /// 263 | /// 264 | public void Commit() 265 | { 266 | _transaction.Commit(); 267 | _table.Dispose(); 268 | _connection.Dispose(); 269 | } 270 | } 271 | } 272 | -------------------------------------------------------------------------------- /Source/FormOptions.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace woanware 2 | { 3 | partial class FormOptions 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormOptions)); 32 | this.tabControl = new System.Windows.Forms.TabControl(); 33 | this.tabGeneral = new System.Windows.Forms.TabPage(); 34 | this.chkMoveFocusToList = new System.Windows.Forms.CheckBox(); 35 | this.chkRemoveNewLinesOnExport = new System.Windows.Forms.CheckBox(); 36 | this.lblNumResultsPerPage = new System.Windows.Forms.Label(); 37 | this.cboNumResultsPerPage = new System.Windows.Forms.ComboBox(); 38 | this.chkAlwaysOnTop = new System.Windows.Forms.CheckBox(); 39 | this.chkColourSevere = new System.Windows.Forms.CheckBox(); 40 | this.tabIgnoredPlugins = new System.Windows.Forms.TabPage(); 41 | this.listPlugins = new BrightIdeasSoftware.ObjectListView(); 42 | this.olvcPluginId = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); 43 | this.olvcPluginName = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn())); 44 | this.btnRemovePlugin = new System.Windows.Forms.Button(); 45 | this.btnCancel = new System.Windows.Forms.Button(); 46 | this.btnOk = new System.Windows.Forms.Button(); 47 | this.tabControl.SuspendLayout(); 48 | this.tabGeneral.SuspendLayout(); 49 | this.tabIgnoredPlugins.SuspendLayout(); 50 | ((System.ComponentModel.ISupportInitialize)(this.listPlugins)).BeginInit(); 51 | this.SuspendLayout(); 52 | // 53 | // tabControl 54 | // 55 | this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 56 | | System.Windows.Forms.AnchorStyles.Left) 57 | | System.Windows.Forms.AnchorStyles.Right))); 58 | this.tabControl.Controls.Add(this.tabGeneral); 59 | this.tabControl.Controls.Add(this.tabIgnoredPlugins); 60 | this.tabControl.Location = new System.Drawing.Point(8, 8); 61 | this.tabControl.Name = "tabControl"; 62 | this.tabControl.SelectedIndex = 0; 63 | this.tabControl.Size = new System.Drawing.Size(547, 330); 64 | this.tabControl.TabIndex = 0; 65 | // 66 | // tabGeneral 67 | // 68 | this.tabGeneral.Controls.Add(this.chkMoveFocusToList); 69 | this.tabGeneral.Controls.Add(this.chkRemoveNewLinesOnExport); 70 | this.tabGeneral.Controls.Add(this.lblNumResultsPerPage); 71 | this.tabGeneral.Controls.Add(this.cboNumResultsPerPage); 72 | this.tabGeneral.Controls.Add(this.chkAlwaysOnTop); 73 | this.tabGeneral.Controls.Add(this.chkColourSevere); 74 | this.tabGeneral.Location = new System.Drawing.Point(4, 24); 75 | this.tabGeneral.Name = "tabGeneral"; 76 | this.tabGeneral.Padding = new System.Windows.Forms.Padding(3); 77 | this.tabGeneral.Size = new System.Drawing.Size(539, 302); 78 | this.tabGeneral.TabIndex = 0; 79 | this.tabGeneral.Text = "General"; 80 | this.tabGeneral.UseVisualStyleBackColor = true; 81 | // 82 | // chkMoveFocusToList 83 | // 84 | this.chkMoveFocusToList.AutoSize = true; 85 | this.chkMoveFocusToList.Location = new System.Drawing.Point(4, 110); 86 | this.chkMoveFocusToList.Name = "chkMoveFocusToList"; 87 | this.chkMoveFocusToList.RightToLeft = System.Windows.Forms.RightToLeft.Yes; 88 | this.chkMoveFocusToList.Size = new System.Drawing.Size(216, 19); 89 | this.chkMoveFocusToList.TabIndex = 5; 90 | this.chkMoveFocusToList.Text = "Move focus to list after filter change"; 91 | this.chkMoveFocusToList.UseVisualStyleBackColor = true; 92 | // 93 | // chkRemoveNewLinesOnExport 94 | // 95 | this.chkRemoveNewLinesOnExport.AutoSize = true; 96 | this.chkRemoveNewLinesOnExport.Location = new System.Drawing.Point(46, 82); 97 | this.chkRemoveNewLinesOnExport.Name = "chkRemoveNewLinesOnExport"; 98 | this.chkRemoveNewLinesOnExport.RightToLeft = System.Windows.Forms.RightToLeft.Yes; 99 | this.chkRemoveNewLinesOnExport.Size = new System.Drawing.Size(174, 19); 100 | this.chkRemoveNewLinesOnExport.TabIndex = 4; 101 | this.chkRemoveNewLinesOnExport.Text = "Remove new lines on export"; 102 | this.chkRemoveNewLinesOnExport.UseVisualStyleBackColor = true; 103 | // 104 | // lblNumResultsPerPage 105 | // 106 | this.lblNumResultsPerPage.AutoSize = true; 107 | this.lblNumResultsPerPage.Location = new System.Drawing.Point(86, 57); 108 | this.lblNumResultsPerPage.Name = "lblNumResultsPerPage"; 109 | this.lblNumResultsPerPage.Size = new System.Drawing.Size(115, 15); 110 | this.lblNumResultsPerPage.TabIndex = 3; 111 | this.lblNumResultsPerPage.Text = "No. Results Per Page"; 112 | // 113 | // cboNumResultsPerPage 114 | // 115 | this.cboNumResultsPerPage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 116 | this.cboNumResultsPerPage.FormattingEnabled = true; 117 | this.cboNumResultsPerPage.Items.AddRange(new object[] { 118 | "1000", 119 | "2000", 120 | "3000", 121 | "4000", 122 | "5000", 123 | "10000", 124 | "20000"}); 125 | this.cboNumResultsPerPage.Location = new System.Drawing.Point(206, 53); 126 | this.cboNumResultsPerPage.Name = "cboNumResultsPerPage"; 127 | this.cboNumResultsPerPage.Size = new System.Drawing.Size(77, 23); 128 | this.cboNumResultsPerPage.TabIndex = 2; 129 | // 130 | // chkAlwaysOnTop 131 | // 132 | this.chkAlwaysOnTop.AutoSize = true; 133 | this.chkAlwaysOnTop.Location = new System.Drawing.Point(119, 29); 134 | this.chkAlwaysOnTop.Name = "chkAlwaysOnTop"; 135 | this.chkAlwaysOnTop.RightToLeft = System.Windows.Forms.RightToLeft.Yes; 136 | this.chkAlwaysOnTop.Size = new System.Drawing.Size(101, 19); 137 | this.chkAlwaysOnTop.TabIndex = 1; 138 | this.chkAlwaysOnTop.Text = "Always on top"; 139 | this.chkAlwaysOnTop.UseVisualStyleBackColor = true; 140 | // 141 | // chkColourSevere 142 | // 143 | this.chkColourSevere.AutoSize = true; 144 | this.chkColourSevere.Location = new System.Drawing.Point(21, 6); 145 | this.chkColourSevere.Name = "chkColourSevere"; 146 | this.chkColourSevere.RightToLeft = System.Windows.Forms.RightToLeft.Yes; 147 | this.chkColourSevere.Size = new System.Drawing.Size(199, 19); 148 | this.chkColourSevere.TabIndex = 0; 149 | this.chkColourSevere.Text = "Colour severe items e.g. Risk > 1"; 150 | this.chkColourSevere.UseVisualStyleBackColor = true; 151 | // 152 | // tabIgnoredPlugins 153 | // 154 | this.tabIgnoredPlugins.Controls.Add(this.listPlugins); 155 | this.tabIgnoredPlugins.Controls.Add(this.btnRemovePlugin); 156 | this.tabIgnoredPlugins.Location = new System.Drawing.Point(4, 24); 157 | this.tabIgnoredPlugins.Name = "tabIgnoredPlugins"; 158 | this.tabIgnoredPlugins.Padding = new System.Windows.Forms.Padding(3); 159 | this.tabIgnoredPlugins.Size = new System.Drawing.Size(539, 302); 160 | this.tabIgnoredPlugins.TabIndex = 1; 161 | this.tabIgnoredPlugins.Text = "Ignored Plugins"; 162 | this.tabIgnoredPlugins.UseVisualStyleBackColor = true; 163 | // 164 | // listPlugins 165 | // 166 | this.listPlugins.AllColumns.Add(this.olvcPluginId); 167 | this.listPlugins.AllColumns.Add(this.olvcPluginName); 168 | this.listPlugins.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 169 | | System.Windows.Forms.AnchorStyles.Left) 170 | | System.Windows.Forms.AnchorStyles.Right))); 171 | this.listPlugins.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 172 | this.olvcPluginId, 173 | this.olvcPluginName}); 174 | this.listPlugins.Location = new System.Drawing.Point(6, 6); 175 | this.listPlugins.Name = "listPlugins"; 176 | this.listPlugins.ShowGroups = false; 177 | this.listPlugins.Size = new System.Drawing.Size(526, 260); 178 | this.listPlugins.TabIndex = 2; 179 | this.listPlugins.UseCompatibleStateImageBehavior = false; 180 | this.listPlugins.View = System.Windows.Forms.View.Details; 181 | // 182 | // olvcPluginId 183 | // 184 | this.olvcPluginId.AspectName = "PluginId"; 185 | this.olvcPluginId.CellPadding = null; 186 | this.olvcPluginId.Text = "ID"; 187 | // 188 | // olvcPluginName 189 | // 190 | this.olvcPluginName.AspectName = "PluginName"; 191 | this.olvcPluginName.CellPadding = null; 192 | this.olvcPluginName.Text = "Name"; 193 | // 194 | // btnRemovePlugin 195 | // 196 | this.btnRemovePlugin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 197 | this.btnRemovePlugin.Location = new System.Drawing.Point(5, 271); 198 | this.btnRemovePlugin.Name = "btnRemovePlugin"; 199 | this.btnRemovePlugin.Size = new System.Drawing.Size(75, 23); 200 | this.btnRemovePlugin.TabIndex = 1; 201 | this.btnRemovePlugin.Text = "Remove"; 202 | this.btnRemovePlugin.UseVisualStyleBackColor = true; 203 | this.btnRemovePlugin.Click += new System.EventHandler(this.btnRemovePlugin_Click); 204 | // 205 | // btnCancel 206 | // 207 | this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 208 | this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 209 | this.btnCancel.Location = new System.Drawing.Point(478, 341); 210 | this.btnCancel.Name = "btnCancel"; 211 | this.btnCancel.Size = new System.Drawing.Size(75, 23); 212 | this.btnCancel.TabIndex = 2; 213 | this.btnCancel.Text = "Cancel"; 214 | this.btnCancel.UseVisualStyleBackColor = true; 215 | this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); 216 | // 217 | // btnOk 218 | // 219 | this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 220 | this.btnOk.Location = new System.Drawing.Point(399, 341); 221 | this.btnOk.Name = "btnOk"; 222 | this.btnOk.Size = new System.Drawing.Size(75, 23); 223 | this.btnOk.TabIndex = 1; 224 | this.btnOk.Text = "OK"; 225 | this.btnOk.UseVisualStyleBackColor = true; 226 | this.btnOk.Click += new System.EventHandler(this.btnOk_Click); 227 | // 228 | // FormOptions 229 | // 230 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); 231 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 232 | this.CancelButton = this.btnCancel; 233 | this.ClientSize = new System.Drawing.Size(562, 372); 234 | this.Controls.Add(this.btnCancel); 235 | this.Controls.Add(this.btnOk); 236 | this.Controls.Add(this.tabControl); 237 | this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 238 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 239 | this.MaximizeBox = false; 240 | this.MinimizeBox = false; 241 | this.MinimumSize = new System.Drawing.Size(578, 409); 242 | this.Name = "FormOptions"; 243 | this.ShowInTaskbar = false; 244 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 245 | this.Text = "Options"; 246 | this.tabControl.ResumeLayout(false); 247 | this.tabGeneral.ResumeLayout(false); 248 | this.tabGeneral.PerformLayout(); 249 | this.tabIgnoredPlugins.ResumeLayout(false); 250 | ((System.ComponentModel.ISupportInitialize)(this.listPlugins)).EndInit(); 251 | this.ResumeLayout(false); 252 | 253 | } 254 | 255 | #endregion 256 | 257 | private System.Windows.Forms.TabControl tabControl; 258 | private System.Windows.Forms.TabPage tabGeneral; 259 | private System.Windows.Forms.TabPage tabIgnoredPlugins; 260 | private System.Windows.Forms.CheckBox chkColourSevere; 261 | private System.Windows.Forms.CheckBox chkAlwaysOnTop; 262 | private System.Windows.Forms.Button btnCancel; 263 | private System.Windows.Forms.Button btnOk; 264 | private System.Windows.Forms.Button btnRemovePlugin; 265 | private System.Windows.Forms.Label lblNumResultsPerPage; 266 | private System.Windows.Forms.ComboBox cboNumResultsPerPage; 267 | private System.Windows.Forms.CheckBox chkRemoveNewLinesOnExport; 268 | private BrightIdeasSoftware.ObjectListView listPlugins; 269 | private BrightIdeasSoftware.OLVColumn olvcPluginId; 270 | private BrightIdeasSoftware.OLVColumn olvcPluginName; 271 | private System.Windows.Forms.CheckBox chkMoveFocusToList; 272 | } 273 | } -------------------------------------------------------------------------------- /Source/FormAbout.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | 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 198 | 199 | 200 | 201 | 202 | AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA 203 | AAAAAAAA////ANhZGACgoKAAiGlVAOqleQDQ0NAAgYGBALi4uADo6OgAampqAJCQkADc3NwArKysAPPz 204 | 8wB1dXUAxcXFAINwZADtr4YAmJiYAImJiQB0bWkA4uLiANbW1gC+vr4AsrKyAO3t7QDLy8sApaWlAG9v 205 | bwB5eXkAfX19AIWFhQCUlJQAnJycAN/f3wDZ2dkAcnJyANPT0wDIyMgAwsLCAI2NjQCvr68AqampAPHx 206 | 8QBsbGwAd3d3AM7OzgCHh4cAi4uLAMDAwAC6uroAkpKSALa2tgCWlpYAtLS0AKOjowCnp6cAcW1qAOzs 207 | 7ADp6ekA5+fnAGtrawDj4+MAbm5uAOHh4QDg4OAAc3NzAN7e3gDd3d0A29vbANra2gDY2NgA0tLSAIaG 208 | hgDR0dEAz8/PAIqKigDNzc0AzMzMAI6OjgCPj48AysrKAMnJyQCRkZEAx8fHAMPDwwCXl5cAwcHBAJub 209 | mwCdnZ0An5+fALm5uQChoaEAt7e3AKSkpACxsbEAsLCwAKqqqgCrq6sArq6uAK2trQAAAAAAAAAAAAAA 210 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 211 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 212 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 213 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 214 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 215 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 216 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 217 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 218 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 219 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 220 | AAAAAAAAAAAAAAAAAAICAAAAAAAAAAoKCgoKCgQFBQQKCgoKCgoKKSkpKSkKEhIKKSkpKSkKCgoKCgoK 221 | OhERFQoKCgoKCgAAAAAAACUUFC0AAAAAAAAAA1lXNFBNIAcfHg8lQD4AKzxOUlMnJxAQVhAoWDIWPmQX 222 | NCE0CzFQMU0gMEpKJx0ZJDdlYysNOV84X1taIlJDXkVXE1c2CzRUUU0xTU1MLgBHVlwIXjUZYCoqYitl 223 | VgAAPz1BQkIjI0RFRQxGQgYAAC87REhJTydVJxsGRQkcAAAAP0YWFkFCQkIjVksmAAAAAEsOGhoaGho7 224 | OzssYQAAAAAAEFgYMzUZZCscXQAAAP5/AAAAAAAAAAAAAAAAAAD8PwAAgAEAAAAAAAAAAAAAAAAAAAAA 225 | AACAAQAAgAEAAIABAADAAwAAwAMAAOAHAAA= 226 | 227 | 228 | -------------------------------------------------------------------------------- /Source/FormMain.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 132, 17 125 | 126 | 127 | 248, 17 128 | 129 | 130 | 131 | 132 | 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 270 | i/5fcd49zexupGYAAAAASUVORK5CYII= 271 | 272 | 273 | 274 | 346, 17 275 | 276 | 277 | 17, 56 278 | 279 | 280 | 646, 17 281 | 282 | 283 | 284 | AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA 285 | AAAAAAAA////ANhZGACgoKAAiGlVAOqleQDQ0NAAgYGBALi4uADo6OgAampqAJCQkADc3NwArKysAPPz 286 | 8wB1dXUAxcXFAINwZADtr4YAmJiYAImJiQB0bWkA4uLiANbW1gC+vr4AsrKyAO3t7QDLy8sApaWlAG9v 287 | bwB5eXkAfX19AIWFhQCUlJQAnJycAN/f3wDZ2dkAcnJyANPT0wDIyMgAwsLCAI2NjQCvr68AqampAPHx 288 | 8QBsbGwAd3d3AM7OzgCHh4cAi4uLAMDAwAC6uroAkpKSALa2tgCWlpYAtLS0AKOjowCnp6cAcW1qAOzs 289 | 7ADp6ekA5+fnAGtrawDj4+MAbm5uAOHh4QDg4OAAc3NzAN7e3gDd3d0A29vbANra2gDY2NgA0tLSAIaG 290 | hgDR0dEAz8/PAIqKigDNzc0AzMzMAI6OjgCPj48AysrKAMnJyQCRkZEAx8fHAMPDwwCXl5cAwcHBAJub 291 | mwCdnZ0An5+fALm5uQChoaEAt7e3AKSkpACxsbEAsLCwAKqqqgCrq6sArq6uAK2trQAAAAAAAAAAAAAA 292 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 293 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 294 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 295 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 296 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 297 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 298 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 299 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 300 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 301 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 302 | AAAAAAAAAAAAAAAAAAICAAAAAAAAAAoKCgoKCgQFBQQKCgoKCgoKKSkpKSkKEhIKKSkpKSkKCgoKCgoK 303 | OhERFQoKCgoKCgAAAAAAACUUFC0AAAAAAAAAA1lXNFBNIAcfHg8lQD4AKzxOUlMnJxAQVhAoWDIWPmQX 304 | NCE0CzFQMU0gMEpKJx0ZJDdlYysNOV84X1taIlJDXkVXE1c2CzRUUU0xTU1MLgBHVlwIXjUZYCoqYitl 305 | VgAAPz1BQkIjI0RFRQxGQgYAAC87REhJTydVJxsGRQkcAAAAP0YWFkFCQkIjVksmAAAAAEsOGhoaGho7 306 | OzssYQAAAAAAEFgYMzUZZCscXQAAAP5/AAAAAAAAAAAAAAAAAAD8PwAAgAEAAAAAAAAAAAAAAAAAAAAA 307 | AACAAQAAgAEAAIABAADAAwAAwAMAAOAHAAA= 308 | 309 | 310 | --------------------------------------------------------------------------------