public static List <IpLog> GetLoginsIPListForMulti(string htmlContent, string nick) { List <IpLog> ipLogList = new List <IpLog>(); htmlContent = htmlContent.Replace(" ", " "); Regex objRegEx = new Regex(@"(?<Date>\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2}):\s*(?<First>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Second>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Third>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Fourth>2[0-4]\d|25[0-5]|[01]?\d\d?)(?<UserName>.*?)<br\s>"); MatchCollection matches = objRegEx.Matches(htmlContent); //Regex Error = new Regex("<tr><td>input\\serror</td></tr>"); int count = 1; foreach (Match match in matches) { GroupCollection groups = match.Groups; IpLog ipLog = new IpLog(); ipLog.Id = count; ipLog.IpString = groups["First"].Value + "." + groups["Second"].Value + "." + groups["Third"].Value + "." + groups["Fourth"].Value; ipLog.IpAddress = IPAddress.Parse(ipLog.IpString); ipLog.Date = groups["Date"].Value.Trim(); if (!nick.Equals(groups["UserName"].Value.Trim())) { ipLog.Nick = groups["UserName"].Value.Trim() + " (" + nick + ")";//UserName } else { ipLog.Nick = groups["UserName"].Value.Trim();//UserName } ipLog.DateTime = ConvertToDatetimeIPLog(ipLog.Date); ipLogList.Add(ipLog); count++; } return(ipLogList); }
private void GenerateMultiReport() { if (_accountList == null || _accountList.Count == 0) { return; } List <IpLog> ipLogList = new List <IpLog>(); foreach (Account account in _accountList) { foreach (IpLog ipLog in account.IpLogList) { ipLogList.Add(ipLog); } } if (ipLogList.Count == 0) { webBrowser1.DocumentText = "No ip log was found!"; return; } string body = ""; int countLess60 = 0; int countLess300 = 0; int countLess1800 = 0; string header = ""; //header += "<font color=\"#ff0000\">Log in under 60 seconds apart</font><br />"; //header += "<font color=\"#ff8000\">Log in under 300 seconds apart</font><br />"; //header += "<font color=\"#0000ff\">Log in under 1800 seconds apart</font><br /><br />"; body += "<table>"; IpLog prevLog = null; bool notPrinted = true; bool newDay = false; //multiIpLogList.OrderBy(d => d.DateTime); var multiLoginsList = from log in ipLogList orderby log.DateTime ascending select log; foreach (IpLog log in multiLoginsList) { if (prevLog == null) { prevLog = log; } else { TimeSpan diff = log.DateTime - prevLog.DateTime; //if (diff.TotalHours < 24 && log.DateTime.Month > prevLog.DateTime.Month && log.DateTime.Day > prevLog.DateTime.Day) //{ // newDay = true; //} if (prevLog.IpString.Equals(log.IpString) && !prevLog.Nick.Equals(log.Nick)) { if (diff.TotalSeconds < 60) { countLess60++; if (notPrinted) { body += "<tr><td><font color=\"#ff0000\">" + prevLog.Date + "</font> </td><td><font color=\"#ff0000\">" + prevLog.IpString + "</font> </td><td><font color=\"#ff0000\">" + prevLog.Nick + "</font></td></tr>"; } if (newDay) { body += "<tr><td colspan=\"3\"><hr /></td></tr>"; } body += "<tr><td><font color=\"#ff0000\">" + log.Date + "</font> </td><td><font color=\"#ff0000\">" + log.IpString + "</font> </td><td><font color=\"#ff0000\">" + log.Nick + "</font></td></tr>"; notPrinted = false; } else if (diff.TotalSeconds < 300) { countLess300++; if (notPrinted) { body += "<tr><td><font color=\"#ff8000\">" + prevLog.Date + "</font> </td><td><font color=\"#ff8000\">" + prevLog.IpString + "</font> </td><td><font color=\"#ff8000\">" + prevLog.Nick + "</font></td></tr>"; } if (newDay) { body += "<tr><td colspan=\"3\"><hr /></td></tr>"; } body += "<tr><td><font color=\"#ff8000\">" + log.Date + "</font> </td><td><font color=\"#ff8000\">" + log.IpString + "</font> </td><td><font color=\"#ff8000\">" + log.Nick + "</font></td></tr>"; notPrinted = false; } else if (diff.TotalSeconds < 1800) { countLess1800++; if (notPrinted) { body += "<tr><td><font color=\"#0000ff\">" + prevLog.Date + "</font> </td><td><font color=\"#0000ff\">" + prevLog.IpString + "</font> </td><td><font color=\"#0000ff\">" + prevLog.Nick + "</font></td></tr>"; } if (newDay) { body += "<tr><td colspan=\"3\"><hr /></td></tr>"; } body += "<tr><td><font color=\"#0000ff\">" + log.Date + "</font> </td><td><font color=\"#0000ff\">" + log.IpString + "</font> </td><td><font color=\"#0000ff\">" + log.Nick + "</font></td></tr>"; notPrinted = false; } else { if (notPrinted) { body += "<tr><td>" + prevLog.Date + " </td><td>" + prevLog.IpString + " </td><td>" + prevLog.Nick + "</td></tr>"; } if (newDay) { body += "<tr><td colspan=\"3\"><hr /></td></tr>"; } notPrinted = true; //temp += "<tr><td>" + log.Date + " </td><td>" + log.IpString + " </td><td>" + log.Nick + "</td></tr>"; } } else { if (notPrinted) { body += "<tr><td>" + prevLog.Date + " </td><td>" + prevLog.IpString + " </td><td>" + prevLog.Nick + "</td></tr>"; } if (newDay) { body += "<tr><td colspan=\"3\"><hr /></td></tr>"; } notPrinted = true; } //temp += "<tr><td>" + log.Date + " </td><td>" + log.IpString + " </td><td>" + log.Nick + "</td></tr>"; prevLog = log; newDay = false; } } body += "</table>"; string report = "******** Results ********<br /><font color=\"#ff0000\"># of logins under 60 sec = " + countLess60 + "</font><br />"; report += "<font color=\"#ff8000\"># of logins under 300 sec = " + countLess300 + "</font><br />"; report += "<font color=\"#0000ff\"># of logins under 1800 sec = " + countLess1800 + "</font><br /><br />"; webBrowser1.DocumentText = header + report + body; }
static void ParseIpAddresses() { var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var Configuration = configBuilder.Build(); Console.WriteLine("Starting Parsing Ip Addresses"); Console.WriteLine("Reading DB Config"); var builder = new DbContextOptionsBuilder <AppDbContext>(); var connectionString = Configuration.GetConnectionString("DefaultConnection"); builder.UseSqlite(connectionString); var clearDbConfig = Configuration["deleteDb"]; var clearDb = false; bool.TryParse(clearDbConfig, out clearDb); using (var db = new AppDbContext(builder.Options)) { if (clearDb) { Console.WriteLine("Clearing IP Logs"); foreach (var ipLog in db.IpLogs) { db.IpLogs.Remove(ipLog); } db.SaveChanges(); } IQueryable <Server> Servers; if (ServerId == 0) { Servers = db.Servers; } else { Servers = db.Servers.Where(x => x.ServerId == ServerId); } foreach (var server in Servers) { Console.WriteLine("Processing: " + server.ServerSearchString); var lines = new string[0]; if (ReadAllLines == true) { lines = System.IO.File.ReadAllLines(server.LogFileLocation); } else { lines = System.IO.File.ReadLines(server.LogFileLocation).Reverse().Take(200).ToArray(); } foreach (var radioId in db.RadioIdLogs) { foreach (var line in lines) { if (line.Contains(radioId.RadioId) && line.Contains("Repeater Logging in with Radio ID")) { var strDate = line.Split(',')[0].Replace("INFO ", ""); var date = DateTime.MinValue; DateTime.TryParse(strDate, out date); var ipStartIndex = line.LastIndexOf(","); var ipEndIndex = line.LastIndexOf(":"); var ipAddress = line.Substring(ipStartIndex, ipEndIndex - ipStartIndex).Replace(",", "").Trim(); var existingLog = db.IpLogs.Where(x => x.RadioIdLogId == radioId.RadioIdLogId && x.IpAddress == ipAddress).FirstOrDefault(); if (existingLog == null) { Console.WriteLine("Adding IP Log for " + radioId.RadioId + " IP: " + ipAddress + " Date: " + date); var ipLog = new IpLog(); ipLog.RadioIdLogId = radioId.RadioIdLogId; ipLog.LogDateTime = date; ipLog.IpAddress = ipAddress; db.IpLogs.Add(ipLog); db.SaveChanges(); } else { Console.WriteLine("Updating Date for IP Log " + radioId.RadioId + " IP: " + ipAddress + " Date: " + date); existingLog.LogDateTime = date; db.SaveChanges(); } } } } db.SaveChanges(); } } }