Merhaba arkadaşlar
Ben Kruvazör
Bugün sizlerle C# Kullanarak bir klasöre giren dosyaları dinleyebilmeyi ve o dosya hakkında bilgi edinmeyi göstereceğim.
bunu yaparken FileSystemWatcher Sınıfını kullanacağız.
Peki bununla neler yapabilirim?
Belirtilen dizinde meydana gelen değişiklikleri (yeni dosya oluşturma, dosya silme, dosya değiştirme, dizin oluşturma, dizin silme vb.) dinleyebilir,
Bu olayları dinleyen bir uygulamanın, dosya sistemi değişikliklerine yanıt vermesini sağlar. Örneğin, bir dosya oluşturulduğunda veya silindiğinde belirli bir işlemi başlatma işlemini tetikleyebilirsiniz.
C# ile klasör veri girişlerini izleme konusunda biraz bilgi sahibi olduğumuza göre artık örneğe geçebiliriz.
Senaryo:
Bir şirketin muhasebe personeli internetten Cengiz Kurtoğlu şarkıları indirirken aynı zamanda sitenin zararlı yazılım ve reklam içermesinden kaynaklı olarak şarkıların yanında bir de zararlı bir exe dosyası indiriyor. Sonrasında zararlı exe dosyasını execute ederek zararlı yazılımı amacına ulaştırıyor.
bu olay karşısında şaşkına dönen gariban IT personeli de antivirüse ya da başka bir ürüne para vermek istememektedir. çünkü ITciler genelde anadolu kurnazıdır.
IT personeli visual studioyu açar ve kafasından şunları geçirir:
(Yazacağım program cengiz kurtoğlu sevdalısı muhasebecinin indirme klasörüne giren verileri sürekli dinlemeli ve belirli bir dosya uzantısına ait olan dosyaları virustotal gibi bir platformda taratmalı sonrasında çıkan sonuca göre kullanıcıya uyarı vermeli.)
Detay:
Ben Kruvazör
Bugün sizlerle C# Kullanarak bir klasöre giren dosyaları dinleyebilmeyi ve o dosya hakkında bilgi edinmeyi göstereceğim.
bunu yaparken FileSystemWatcher Sınıfını kullanacağız.
Peki bununla neler yapabilirim?
Belirtilen dizinde meydana gelen değişiklikleri (yeni dosya oluşturma, dosya silme, dosya değiştirme, dizin oluşturma, dizin silme vb.) dinleyebilir,
Bu olayları dinleyen bir uygulamanın, dosya sistemi değişikliklerine yanıt vermesini sağlar. Örneğin, bir dosya oluşturulduğunda veya silindiğinde belirli bir işlemi başlatma işlemini tetikleyebilirsiniz.
C# ile klasör veri girişlerini izleme konusunda biraz bilgi sahibi olduğumuza göre artık örneğe geçebiliriz.
Senaryo:
Bir şirketin muhasebe personeli internetten Cengiz Kurtoğlu şarkıları indirirken aynı zamanda sitenin zararlı yazılım ve reklam içermesinden kaynaklı olarak şarkıların yanında bir de zararlı bir exe dosyası indiriyor. Sonrasında zararlı exe dosyasını execute ederek zararlı yazılımı amacına ulaştırıyor.
bu olay karşısında şaşkına dönen gariban IT personeli de antivirüse ya da başka bir ürüne para vermek istememektedir. çünkü ITciler genelde anadolu kurnazıdır.
IT personeli visual studioyu açar ve kafasından şunları geçirir:
(Yazacağım program cengiz kurtoğlu sevdalısı muhasebecinin indirme klasörüne giren verileri sürekli dinlemeli ve belirli bir dosya uzantısına ait olan dosyaları virustotal gibi bir platformda taratmalı sonrasında çıkan sonuca göre kullanıcıya uyarı vermeli.)
Detay:
VirusTotal ücretli üyeliklerinde bile tarama limiti koyar.
Aynı zamanda taranacak dosya VirusTotal'in limitlerinin üstündeyse tarama işlemi yapmaz.
Aynı zamanda taranacak dosya VirusTotal'in limitlerinin üstündeyse tarama işlemi yapmaz.
Yani kısaca anadolu kurnazı IT personeli hedefine yaklaştı ancak hedefi vuramadı.
Haydi şimdi bu kodun belli bir kısmını gerçeğe dökelim.
Form için 1 adet listbox yeterli.
Global alanımıza gelelim ve kodlarımızı ekleyelim
Haydi şimdi bu kodun belli bir kısmını gerçeğe dökelim.
Form için 1 adet listbox yeterli.
Global alanımıza gelelim ve kodlarımızı ekleyelim
C#:
// İndirilen dosyaların izlendiği klasör yolu
private string indirilenlerKlasoru = @"C:\Users\cengizkurtoglusevenmuhasebeci\Downloads"; //buraya downloads klasörünüzün path'i gelecek
// FileSystemWatcher nesnesi
private FileSystemWatcher watcher;
// İşlenmiş dosyaların takibini yapmak için HashSet
private HashSet<string> processedFiles = new HashSet<string>(); //list de kullanabilirsiniz pek kritik değil bu şekilde başka bir koleksiyon yapısı gördünüz :D
Form scope içine gelelim ve ekleyelim
C#:
private void Form1_Load(object sender, EventArgs e)
{
// İndirilenler klasörünü dinlemek için FileSystemWatcher oluştur
watcher = new FileSystemWatcher();
watcher.Path = indirilenlerKlasoru;
// Yeni bir dosya eklendiğinde trigger olacak event
watcher.Created += DosyaOlusturuldu;
// Değiştirilen bir dosya olduğundatrigger olacak event
watcher.Changed += DosyaDegistirildi;
// Dosya silindiğinde trigger olacak event
watcher.Deleted += DosyaSilindi;
// Dinlemeyi başlat
watcher.EnableRaisingEvents = true;
}
Şimdi de fonksiyonlarımızı yazalım
C#:
private void DosyaOlusturuldu(object sender, FileSystemEventArgs e)
{
// Dosya varsa ve daha önce işlenmemişse
if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
{
// UI thread üzerinde ListBox'a ekleme yap
Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
}
}
private void DosyaDegistirildi(object sender, FileSystemEventArgs e)
{
// Dosya varsa ve daha önce işlenmemişse
if (File.Exists(e.FullPath) && processedFiles.Add(e.FullPath))
{
// UI thread üzerinde ListBox'a ekleme yap
Invoke(new Action(() => ListboxaEkle(e.Name, DosyaBoyutuGetir(e.FullPath), File.GetCreationTime(e.FullPath))));
}
}
private void DosyaSilindi(object sender, FileSystemEventArgs e)
{
// Silinen dosyayı işlenmiş dosyalar listesinden kaldır
processedFiles.Remove(e.FullPath);
// Dosya silindiğinde ListBox'u güncelle
Invoke(new Action(() => ListboxuGuncelle()));
}
private long DosyaBoyutuGetir(string dosyaYolu)
{
// Dosya boyutunu byte cinsinden al
FileInfo fileInfo = new FileInfo(dosyaYolu);
return fileInfo.Length;
}
private string FormatDosyaBoyutu(long dosyaBoyutuBytes)
{
const long kb = 1024;
const long mb = kb * 1024;
const long gb = mb * 1024;
const long tb = gb * 1024;
string formatString = "{0} {1}";
if (dosyaBoyutuBytes < kb)
{
return string.Format(formatString, dosyaBoyutuBytes, "Bytes");
}
else if (dosyaBoyutuBytes < mb)
{
return string.Format(formatString, dosyaBoyutuBytes / kb, "KB");
}
else if (dosyaBoyutuBytes < gb)
{
return string.Format(formatString, dosyaBoyutuBytes / mb, "MB");
}
else if (dosyaBoyutuBytes < tb)
{
return string.Format(formatString, dosyaBoyutuBytes / gb, "GB");
}
else
{
return string.Format(formatString, dosyaBoyutuBytes / tb, "TB");
}
}
private void ListboxaEkle(string dosyaAdi, long dosyaBoyutuBytes, DateTime olusturulmaTarihi)
{
// ListBox'a yeni dosyayı, boyutu ve oluşturulma tarihini ekle
string dosyaBilgisi = $"{dosyaAdi} - {FormatDosyaBoyutu(dosyaBoyutuBytes)} - {olusturulmaTarihi.ToString("dd.MM.yyyy HH:mm:ss")}";
listBoxDosyalar.Items.Add(dosyaBilgisi);
listBoxDosyalar.Items.Add("-----------------------------------------------------------------------------------------------------------------");
}
private void ListboxuGuncelle()
{
// ListBox içeriğini temizle
listBoxDosyalar.Items.Clear();
}
VirusTotal apisine veri yollama ve çıktı alma kısmı da size araştırma olsun
IT personeli yine üzgün.
Burada oluşan .tmp uzantılı dosyanın ne olduğunu bilenler fikirlerini yorumlarda paylaşabilir.
Yoksa muhasebeci yine mi bir zararlı yazılım indirdi???
okuduğunuz için teşekkürler.
IT personeli yine üzgün.
Burada oluşan .tmp uzantılı dosyanın ne olduğunu bilenler fikirlerini yorumlarda paylaşabilir.
Yoksa muhasebeci yine mi bir zararlı yazılım indirdi???
okuduğunuz için teşekkürler.