Ejemplo n.º 1
0
 public void Registrer(string ip, FileSettingElement settings)
 {
     if (settings.RangeCheck)
     {
         string ipr = IP.Masked(ip, settings.MaskSize);
         if (ips.ContainsKey(ipr))
         {
             ips[ipr].Registrer(ip);
         }
         else
         {
             IP _ip = new IPrange(ip, settings.MaskSize, settings.Count, settings.UniqeIps)
             {
                 ruleName   = settings.RuleName,
                 sourceFile = settings.SourceFile
             };
             ips.Add(ipr, _ip);
         }
     }
     else
     {
         if (ips.ContainsKey(ip))
         {
             ips[ip].Registrer(ip);
         }
         else
         {
             IP _ip = new IPaddr(ip, settings.Count)
             {
                 ruleName   = settings.RuleName,
                 sourceFile = settings.SourceFile
             };
             ips.Add(ip, _ip);
         }
     }
 }
Ejemplo n.º 2
0
        private static void ReadFile(List <FileInfo> files, string sourceFile, FileSettingElement settings)
        {
            settings.SourceFile = sourceFile;
            string searchType = settings.DoSearch;
            bool   search     = !searchType.Equals("off");

            string[] searchTerms = (!search ? null : settings.SearchPattern.Split(new string[] { "\\n" }, StringSplitOptions.None));
            foreach (FileInfo file in files)
            {
                foreach (string line in File.ReadLines(file.FullName))
                {
                    bool matches = true;
                    if (line.StartsWith(settings.CommentStart) && settings.CommentStart != "")
                    {
                        continue;
                    }

                    if (search)
                    {
                        switch (searchType)
                        {
                        case "none":
                            foreach (var term in searchTerms)
                            {
                                if (line.Contains(term))
                                {
                                    matches = false;
                                    break;
                                }
                            }
                            break;

                        case "any":
                            matches = false;
                            foreach (var term in searchTerms)
                            {
                                if (line.Contains(term))
                                {
                                    matches = true;
                                    break;
                                }
                            }
                            break;

                        case "all":
                            foreach (var term in searchTerms)
                            {
                                if (!line.Contains(term))
                                {
                                    matches = false;
                                    break;
                                }
                            }
                            break;

                        default:
                            Logger.GetINSTANCE().LogError("invalid value of doSearch parameter in config, use 'off'/'none'/'any'/'all'");
                            break;
                        }
                    }
                    if (!matches)
                    {
                        continue;
                    }

                    try
                    {
                        string ip = line.Split(settings.Delim)[settings.IpIndex];
                        if (ip.Contains(':'))
                        {
                            ip = ip.Split(':')[0];
                        }
                        IPManager.GetInstance().Registrer(ip, settings);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        throw new IndexOutOfRangeException("Line was not split as expected, have you forgotten to specify the commentPattern");
                    }
                }
            }
        }
Ejemplo n.º 3
0
        //private static Dictionary<string, IPaddr> addrs = new Dictionary<string, IPaddr>();
        public static void ReadFolder(FileSettingElement settings)
        {
            if (!settings.Active)
            {
                Logger.GetINSTANCE().LogCustom("Skipping rule " + settings.RuleName + " due to the 'active' setting");
                Console.WriteLine("Skipping rule {0}", settings.RuleName);
                return;
            }
            if (string.IsNullOrWhiteSpace(settings.ReadPath))
            {
                throw new ArgumentException("Folder Path illegal", nameof(settings.ReadPath));
            }

            var directory = new DirectoryInfo(settings.ReadPath);

            FileInfo[] files = directory.GetFiles().OrderByDescending(sf => sf.Name).ToArray();

            if (Program.Debug())
            {
                if (files[0].Length == 0)
                {
                    Logger.GetINSTANCE().LogZero();
                }
                Logger.GetINSTANCE().LogFName(files[0].Name);
            }

            string sourceFile = files[0].Name;

            //Make sure a temporary location for the log-files to be copied to exists and that it is empty
            string logLoc = ConfigurationManager.AppSettings.Get("runLocation") + "tmplogs";

            if (Directory.Exists(logLoc))
            {
                foreach (var fName in Directory.GetFiles(logLoc))
                {
                    File.Delete(fName);
                }
            }
            else
            {
                Directory.CreateDirectory(logLoc);
            }

            //Coppy log-files to temporary location
            List <FileInfo> fileInfos = new List <FileInfo>();

            for (int i = 0; i < Math.Min(files.Length, settings.FileCount); i++)
            {
                fileInfos.Add(files[i].CopyTo(logLoc + "\\" + files[i].Name));
                if (Program.DebugFull())
                {
                    Logger.GetINSTANCE().LogCustom("Read file " + files[i].Name);
                }
            }

            ReadFile(fileInfos, sourceFile, settings);

            //Cleanup temporary files
            foreach (var fName in Directory.GetFiles(logLoc))
            {
                File.Delete(fName);
            }
            Directory.Delete(logLoc);
        }