예제 #1
0
        static string ReadLastLine(string path)
        {
            //using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None))
            //{
            //    byte b;
            //    fs.Position = fs.Length;
            //    while (fs.Position > 0)
            //    {
            //        fs.Position--;
            //        b = (byte)fs.ReadByte();
            //        if (b == '\n')
            //        {
            //            break;
            //        }
            //        fs.Position--;
            //    }
            //    byte[] bytes = new byte[fs.Length - fs.Position];
            //    fs.Read(bytes, 0, bytes.Length);
            //    fs.Flush();
            //    //fs.BaseStream.Flush();
            //    return System.Text.Encoding.UTF8.GetString(bytes);
            //}

            if (BackgroundWatcher.IsFileClosed(path, true))
            {
                using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read))
                {
                    byte b;
                    fs.Position = fs.Length;
                    while (fs.Position > 0)
                    {
                        fs.Position--;
                        b = (byte)fs.ReadByte();
                        if (b == '\n')
                        {
                            break;
                        }
                        fs.Position--;
                    }
                    byte[] bytes = new byte[fs.Length - fs.Position];
                    fs.Read(bytes, 0, bytes.Length);
                    //fs.Flush();
                    //fs.BaseStream.Flush();
                    fs.Close();
                    return(System.Text.Encoding.UTF8.GetString(bytes));
                }
            }
            return("");
            //fs.Close();
        }
예제 #2
0
        private bool isLastRecordAdded()
        {
            string record = BackgroundWatcher.ReadLastLine(logfile.fileName);

            if (record != "" && record != filteredRecords.FilteredRecordsList.Last().logString)
            {
                if (OneRecord.IsRecordCanBeCreated(record))
                {
                    OneRecord _record = new OneRecord(record);
                    filteredRecords.deleteFirstRecord();
                    filteredRecords.AddRecord(_record);
                    return(true);
                }
                return(false);
            }
            else
            {
                return(false);
            }
        }
예제 #3
0
        public static BackgroundWatcher MakeBackgroundWatcher(LogFile logFile, NotifyIcon notifyIcon1, MailAddress mail = null)
        {
            BackgroundWatcher bgw = new BackgroundWatcher(logFile, notifyIcon1, mail);

            return(bgw);
        }
예제 #4
0
        private void WatcherChanged(object sender, FileSystemEventArgs e)
        {
            //Console.WriteLine("Type of changes: {0};  Changed: {1}", e.ChangeType, e.Name);
            //MessageBox.Show(String.Format("Type of changes: {0};  Changed: {1}", e.ChangeType, e.Name));
            //isHackDetacted = false;

            DangerousHTTPRequests dr = new DangerousHTTPRequests();
            int DangerousIpSize      = dangerousRequests.DangerousIp.Count();

            //if (dangerousRequests.DangerousIp.Any())
            //{
            //    DangerousIpSize = dangerousRequests.DangerousIp.Count();
            //}
            //string s = ReadLastLine(logfile.fileName);
            //MessageBox.Show(String.Format("Добавлено: {0}", s));
            if (isLastRecordAdded())
            {
                //MessageBox.Show(String.Format("Добавлено: {0} --- {1}", filteredRecords.FilteredRecordsList.Last().logString,filteredRecords.FilteredRecordsList.First().logString));
                dr = filteredRecords.AttackDetector();

                if (dr.DangerousIp.Any())
                {
                    foreach (KeyValuePair <string, float> keyValue in dr.DangerousIp)
                    {
                        bool isHackerDetected = false;
                        if (keyValue.Value == 100)
                        {
                            if (mailAddress != null)
                            {
                                SendEmail(keyValue.Key);
                                BackgroundWatcher.makeNotify(notifyIcon1, String.Format("ip: {0} взламывает ваш ресурс прямо сейчас! Мы отправили уведомление на вашу почту!", keyValue.Key));
                            }
                            else
                            {
                                BackgroundWatcher.makeNotify(notifyIcon1, String.Format("ip: {0} взламывает ваш ресурс прямо сейчас!", keyValue.Key));
                            }
                            isHackerDetected = true;
                        }
                        if (!dangerousRequests.DangerousIp.ContainsKey(keyValue.Key))
                        {
                            if (!isHackerDetected)
                            {
                                BackgroundWatcher.makeNotify(notifyIcon1, "Попытка возможного взлома обнаружена");
                            }
                            dangerousRequests.DangerousIp[keyValue.Key] = keyValue.Value;
                            addDangerousIp?.Invoke();   // 2.Вызов события
                            //writeToAnalisisTextBox();
                        }
                        else
                        {
                            float value = 0;
                            dangerousRequests.DangerousIp.TryGetValue(keyValue.Key, out value);
                            if (keyValue.Value > value)
                            {
                                if (!isHackerDetected)
                                {
                                    BackgroundWatcher.makeNotify(notifyIcon1, "Попытка возможного взлома обнаружена с большей вероятностью");
                                }
                                dangerousRequests.DangerousIp[keyValue.Key] = keyValue.Value;
                                addDangerousIp?.Invoke();   // 2.Вызов события
                            }
                        }
                    }
                }

                //if (dangerousRequests.DangerousIp.Count() > DangerousIpSize)
                //{

                //    BackgroundWatcher.makeNotify(notifyIcon1, "Попытка возможного взлома обнаружена");
                //    //DangerousIpSize = dangerousRequests.DangerousIp.Count();
                //    //DangerousIpSize = dangerousRequests.DangerousIp.Count();
                //    //if (!isAnyDangerousIpDetected)
                //    //{

                //    //    isAnyDangerousIpDetected = true;
                //    //}

                //    //isHackDetacted = true;

                //    //foreach(KeyValuePair<string,float> keyValue in dangerousRequests.DangerousIp)
                //    //    WriteDangerousRequest_InBackgroundMode_ToWindow(keyValue);
                //    //dangerousRequests.DangerousIp.Clear();

                //    }
                //}

                //foreach (KeyValuePair<string, float> keyValue in dangerousRequests.DangerousIp)
                //{
                //    //if (isDangerousIPFound(keyValue))
                //    //{

                //    //}
                //}
            }
        }
예제 #5
0
        private void BackgroundModeActive_Click(object sender, EventArgs e)
        {
            if (BackgroundModeActive.Text == "Активировать")
            {
                DialogResult logWatcherOnDialogResult = MessageBox.Show(String.Format("Вы действительно хотите активировать фоновый режим, анализирующий файл \"{0}\"?", logFile.onlyFileName), "Вы уверены?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (logWatcherOnDialogResult == DialogResult.Yes)
                {
                    MailAddress Email = Form2.getEmail();

                    backgroundWatcher = LogFile.MakeBackgroundWatcher(logFile, notifyIcon1, Email);
                    backgroundWatcher.LogWatcherON();
                    backgroundWatcher.addDangerousIp += DisplayDangerousRequests;
                    logFile.isBackgroundWatcherON     = true;

                    BackgroundModeActive.Text = "Деактивировать";

                    SearchButton.Enabled = false;
                    searchAllFileOrNotGroupBox.Enabled = false;
                    DateCheckbox.Enabled       = false;
                    FileNameCheckbox.Enabled   = false;
                    resultTypeCheckbox.Enabled = false;
                    ipCheckbox.Enabled         = false;
                    ChoseFileGroupbox.Enabled  = false;

                    FileInfoRadioButton.Checked = false;
                    FileInfoRadioButton.Enabled = false;

                    AnalysisTextBox.Enabled        = true;
                    AnalysisTextBox.Text           = "";
                    SecurityAnalysisButton.Enabled = false;

                    HackingStatiscticsRadiobutton.Enabled = true;
                    HackingStatiscticsRadiobutton.Checked = true;
                    AnalysisTextBox.Text  = "Фоновый режим активирован. Чтобы выйти - нажмите \"Деактивировать\"\n";
                    AnalysisTextBox.Text += "Угроз не обнаружено, но мы продолжаем работать в этом направлении.";
                    this.WindowState      = FormWindowState.Minimized;

                    //WindowState = FormWindowState.Minimized;
                    notifyIcon1.Icon    = SystemIcons.Application;
                    notifyIcon1.Visible = true;
                    BackgroundWatcher.makeNotify(notifyIcon1, "log VnVlyzer переведен в фоновый режим");
                    //Form1_Deactivate(sender, e);
                }

                else
                {
                    return;
                }
            }
            else
            {
                DialogResult logWatcherOnDialogResult = MessageBox.Show(String.Format("Вы действительно хотите деактивировать фоновый режим, анализирующий файл \"{0}\"?", logFile.onlyFileName), "Вы уверены?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (logWatcherOnDialogResult == DialogResult.Yes)
                {
                    backgroundWatcher.LogWatcherOFF();
                    BackgroundModeActive.Text          = "Активировать";
                    logFile.isBackgroundWatcherON      = false;
                    SearchButton.Enabled               = true;
                    searchAllFileOrNotGroupBox.Enabled = true;
                    DateCheckbox.Enabled               = true;
                    FileNameCheckbox.Enabled           = true;
                    resultTypeCheckbox.Enabled         = true;
                    ipCheckbox.Enabled                    = true;
                    ChoseFileGroupbox.Enabled             = true;
                    HackingStatiscticsRadiobutton.Enabled = false;
                    HackingStatiscticsRadiobutton.Checked = false;

                    //richTextBox1.Text = "";
                    AnalysisTextBox.Text = "";

                    BackgroundWatcher.makeNotify(notifyIcon1, "log VnVlyzer переведен в обычный режим");
                    notifyIcon1.Visible = false;
                }
                else
                {
                    return;
                }
            }
        }