Advertisement
vovanhik_24

Task 2.3

Apr 8th, 2025 (edited)
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.01 KB | None | 0 0
  1. using System;
  2. using Microsoft.ML;
  3. using Microsoft.ML.Data;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6.  
  7. namespace DDoSDetection
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             var mlContext = new MLContext();
  14.  
  15.             var trainingData = new List<TrafficData>
  16.             {
  17.                 new TrafficData { PacketCount = 50, DataRate = 10, UniquePorts = 2 },
  18.                 new TrafficData { PacketCount = 55, DataRate = 12, UniquePorts = 2 },
  19.                 new TrafficData { PacketCount = 5000, DataRate = 900, UniquePorts = 50 },
  20.                 new TrafficData { PacketCount = 48, DataRate = 9, UniquePorts = 1 },
  21.                 new TrafficData { PacketCount = 6000, DataRate = 1100, UniquePorts = 80 },
  22.             };
  23.  
  24.             var data = mlContext.Data.LoadFromEnumerable(trainingData);
  25.  
  26.             var pipeline = mlContext.Transforms
  27.                 .Concatenate("Features", nameof(TrafficData.PacketCount), nameof(TrafficData.DataRate), nameof(TrafficData.UniquePorts))
  28.                 .Append(mlContext.Clustering.Trainers.KMeans(featureColumnName: "Features", numberOfClusters: 2));
  29.  
  30.             var model = pipeline.Fit(data);
  31.  
  32.             var predictor = mlContext.Model.CreatePredictionEngine<TrafficData, TrafficPrediction>(model);
  33.  
  34.             var incomingTraffic = new List<TrafficData>
  35.             {
  36.                 new TrafficData { PacketCount = 60, DataRate = 11, UniquePorts = 2 },
  37.                 new TrafficData { PacketCount = 7000, DataRate = 1200, UniquePorts = 100 },
  38.                 new TrafficData { PacketCount = 45, DataRate = 8, UniquePorts = 1 },
  39.             };
  40.  
  41.             Console.WriteLine("Анализ входящего трафика:");
  42.             foreach (var packet in incomingTraffic)
  43.             {
  44.                 var prediction = predictor.Predict(packet);
  45.  
  46.                 if (prediction.ClusterId == 2)
  47.                 {
  48.                     Console.ForegroundColor = ConsoleColor.Red;
  49.                     Console.WriteLine($"[!] Подозрительный трафик обнаружен! Пакеты: {packet.PacketCount}, Скорость: {packet.DataRate}, Порты: {packet.UniquePorts}");
  50.                 }
  51.                 else
  52.                 {
  53.                     Console.ForegroundColor = ConsoleColor.Green;
  54.                     Console.WriteLine($"[OK] Нормальный трафик. Пакеты: {packet.PacketCount}, Скорость: {packet.DataRate}, Порты: {packet.UniquePorts}");
  55.                 }
  56.             }
  57.  
  58.             Console.ResetColor();
  59.         }
  60.  
  61.         public class TrafficData
  62.         {
  63.             public float PacketCount { get; set; }
  64.             public float DataRate { get; set; }
  65.             public float UniquePorts { get; set; }
  66.         }
  67.  
  68.         public class TrafficPrediction
  69.         {
  70.             [ColumnName("PredictedLabel")]
  71.             public uint ClusterId { get; set; }
  72.             public float[] Distance { get; set; }
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement