Hoşgeldin Misafir

Ağ Trafiğini İzlemek C#

xS0N3R

23 Ağu 2020
5,424 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
16674602.png

Bugün yıllardır merak ettiğim bir konuyu daha doğrusu kodu yapay zeka yardımı sayesinde çözdüm. Sonuçları sizinle paylaşmak istedim. Başlıktan da anlaşılacağı üzere kodlar bilgisayarınızda arka planda çalışan ağ trafiğini izleyip konsola yazıyor. Yararlı olur mu bilmiyorum belki geliştirip firewall filan kodlarsınız... Kodlarımız NuGet paketi olarak SharpPcap kütüphanesinden destek alıyor.

Üst Kütüphaneler

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharpPcap;
using SharpPcap.LibPcap;
using System.Threading.Tasks;

Device_OnPacketArrival diye bir başlığımız var. Tam kodu şu şekilde;
C#:
 private static void Device_OnPacketArrival(object sender, PacketCapture e)
 {
     // Yakalanan paketi al
     var rawPacket = e.GetPacket();
     var packet = PacketDotNet.Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data);

     // Zaman damgası ve paket uzunluğunu yazdır
     Console.WriteLine($"{rawPacket.Timeval.Date} - Paket uzunluğu: {rawPacket.Data.Length} bayt");

     // IP paketini analiz et (örnek)
     var ipPacket = packet.Extract<PacketDotNet.IPPacket>();
     if (ipPacket != null)
     {
         Console.WriteLine($"Kaynak IP: {ipPacket.SourceAddress} -> Hedef IP: {ipPacket.DestinationAddress}");
     }
 }

Şimdi yukarıdaki başlığı işlemeye geldi sıra... Burada ise ağ arayüzlerini listeleyip arayüzler içerisinde ki trafikleri görmenizi sağlıyor.

C#:
// Mevcut ağ arayüzlerini listele
var devices = CaptureDeviceList.Instance;

if (devices.Count == 0)
{
    Console.WriteLine("Hiçbir ağ arayüzü bulunamadı! Npcap/WinPcap kurulu olduğundan emin ol.");
    return;
}

// Arayüzleri yazdır
for (int i = 0; i < devices.Count; i++)
{
    Console.WriteLine($"{i + 1}: {devices[i].Name}");
    Console.WriteLine($"\tAçıklama: {devices[i].Description}");
}

// Kullanıcıdan arayüz seçmesini iste
Console.Write("\nİzlemek istediğin arayüz numarasını gir (1-{0}): ", devices.Count);
int deviceIndex = int.Parse(Console.ReadLine()) - 1;

// Seçilen cihazı al
ICaptureDevice device = devices[deviceIndex];

// Paket yakalama olayını tanımla
device.OnPacketArrival += new PacketArrivalEventHandler(Device_OnPacketArrival);

// Cihazı aç (promiscuous modda, 1000 ms timeout)
device.Open(DeviceModes.Promiscuous, 1000);

Console.WriteLine("Ağ trafiği izleniyor... Çıkmak için Ctrl+C kullan.");

// Yakalamayı başlat
device.StartCapture();

// Programın kapanmasını engelle
Console.ReadLine();

// Yakalamayı durdur ve cihazı kapat
device.StopCapture();
device.Close();

[ SONUÇ ]
f0kn9bs.PNG