Programlama

Python ile Ağ İzleme Aracı Renkli

Reklam

Bilgisayarınızda arka planda neler dönüyor? Hangi program ne kadar internet kullanıyor? CPU ve RAM’iniz ne durumda? Bunları tek bir ekranda, renkli ve düzenli bir arayüzde görmek ister misiniz?

Bu yazıda Python ile geliştirdiğim gelişmiş ağ izleme aracını tanıtacağım. Bu araç; anlık download/upload hızları, CPU ve RAM kullanımı, ağ bağlantıları ve ağ arayüzleri gibi tüm kritik bilgileri renkli, sabit ve konforlu bir terminal ekranında sunar. Üstelik tamamen ücretsiz ve açık kaynaklıdır.

Bu Araç Bir Öncekinden Nasıl Farklı?

Reklam

Daha önce paylaştığım basit ağ izleyiciden çok daha gelişmiş özellikler sunuyor:

  • Renkli arayüz: Yeşil normal, sarı uyarı, kırmızı kritik durumu gösterir
  • CPU ve RAM izleme: Blok grafiği ile görsel kullanım yüzdesi
  • Geri sayım sayacı: Sonraki güncellemeye kaç saniye kaldığını gösterir
  • Bağlantı sayısı: Her programın toplam kaç bağlantısı olduğunu gösterir
  • Hız rengi: İnternet hızı yükseldikçe renk sarıya ve kırmızıya döner
  • Sabit tek ekran: Ekran kaymaz, her şey yerli yerinde güncellenir
  • Q tuşu ile çıkış: Kolayca programdan çıkılabilir
  • Tam tarih ve saat: Başlıkta gün/ay/yıl ve saat bilgisi gösterilir

Ne İşe Yarar?

  • Güvenlik Denetimi: Bilgisayarınızda tanımadığınız bir program internete bağlanıyor mu? Hangi IP adresine gidiyor? Tüm bağlantıları anlık olarak görebilirsiniz.
  • Performans İzleme: CPU ve RAM kullanımını blok grafiği ile takip edebilir, sisteminizin ne kadar yüklendiğini görebilirsiniz.
  • İnternet Hızı Takibi: Anlık download ve upload hızlarını renkli göstergelerle takip edebilirsiniz. Hız yükseldikçe renk sarıya, çok yüksek olduğunda kırmızıya döner.
  • Ağ Sorunlarını Tespit: İnternet yavaşladığında hangi programın ağı doldurduğunu saniyeler içinde bulabilirsiniz.
  • Sistem Yönetimi: Sistem süreçlerinin hangi portları dinlediğini ve nereye bağlandığını görebilirsiniz.
  • Oyun Performansı: Oyun oynarken arka planda hangi uygulamanın ağ kullandığını tespit edip kapatabilirsiniz.

Ne Zaman Kullanılmalı?

  • İnternet yavaş geldiğinde: Hangi program ağı tıkıyor?
  • Bilgisayar yavaş çalışıyorsa: CPU veya RAM dolmuş mu?
  • Güvenlik şüphesi varsa: Bilinmeyen bir program bağlanıyor mu?
  • Oyun oynarken ping yüksekse: Arka planda ne var?
  • Büyük dosya indirirken hız düşükse: Başka neler bant genişliği kullanıyor?
  • Sistem yöneticisiyseniz: Tüm bağlantıları anlık olarak izlemek için

Renk Sistemi Nasıl Çalışır?

Araç, duruma göre otomatik renk atar:

  • Yeşil: Normal durum (düşük hız, düşük CPU/RAM, aktif bağlantı)
  • Sarı: Dikkat gerektiren durum (orta hız, yüksek CPU/RAM, bekleme)
  • Kırmızı: Kritik durum (çok yüksek hız veya kaynak kullanımı)
  • Mavi/Cyan: Başlık ve bölüm adları
  • Mor/Magenta: Bölüm etiketleri

CPU için renk eşikleri:

  • %0 – %50 arası → Yeşil (normal)
  • %50 – %80 arası → Sarı (dikkat)
  • %80 üzeri → Kırmızı (kritik)

RAM için renk eşikleri:

  • %0 – %70 arası → Yeşil (normal)
  • %70 – %90 arası → Sarı (dikkat)
  • %90 üzeri → Kırmızı (kritik)

İnternet hızı için renk eşikleri:

  • 0 – 1 MB/s arası → Yeşil (normal)
  • 1 – 10 MB/s arası → Sarı (yüksek)
  • 10 MB/s üzeri → Kırmızı (çok yüksek)

Kurulum

Bu aracı kullanabilmek için sırasıyla şunları yapın:

  1. Python Kur
    • python.org adresinden Python 3.x indirin
    • Kurulum sırasında “Add Python to PATH” kutucuğunu işaretleyin
  2. Gerekli Paketleri Kur
    • CMD veya PowerShell’i yönetici olarak açın
    • Şu komutu çalıştırın:

python -m pip install psutil windows-curses

  1. Scripti Çalıştır
    • python deneme.py
    • Çıkmak için Q tuşuna basın

Not: Tüm sistem süreçlerini görmek için CMD veya PowerShell’i “Yönetici olarak çalıştır” ile açmanız önerilir.

Kodun Tamamı

Aşağıda aracın tam kaynak kodunu bulabilirsiniz. Bu kodu deneme.py adıyla kaydedin:

import psutil
import time
import curses
from datetime import datetime

def bytes_to_human(n):
    for unit in ['B', 'KB', 'MB', 'GB']:
        if n < 1024:
            return f"{n:.1f} {unit}"
        n /= 1024
    return f"{n:.1f} TB"

def get_network_processes():
    processes = {}
    for conn in psutil.net_connections(kind='all'):
        try:
            if conn.pid and conn.pid != 0:
                proc = psutil.Process(conn.pid)
                name = proc.name()
                status = conn.status if conn.status else "UDP"
                raddr = f"{conn.raddr.ip}:{conn.raddr.port}" if conn.raddr else "-"
                if name not in processes:
                    processes[name] = {
                        "pid": conn.pid,
                        "connections": []
                    }
                processes[name]["connections"].append({
                    "status": status,
                    "raddr": raddr
                })
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            pass
    return processes

def get_cpu_ram():
    cpu = psutil.cpu_percent(interval=None)
    ram = psutil.virtual_memory()
    return cpu, ram.percent, ram.used, ram.total

def draw(stdscr):
    curses.start_color()
    curses.use_default_colors()
    curses.init_pair(1, curses.COLOR_CYAN, -1)      # Baslik
    curses.init_pair(2, curses.COLOR_GREEN, -1)     # Aktif / iyi
    curses.init_pair(3, curses.COLOR_YELLOW, -1)    # Uyari
    curses.init_pair(4, curses.COLOR_RED, -1)       # Kritik
    curses.init_pair(5, curses.COLOR_WHITE, -1)     # Normal
    curses.init_pair(6, curses.COLOR_MAGENTA, -1)   # Vurgu
    curses.curs_set(0)
    stdscr.nodelay(True)

    sure = 10
    geri_sayim = sure

    net1 = psutil.net_io_counters()
    son_guncelleme = time.time()

    while True:
        simdi = time.time()
        geri_sayim = sure - int(simdi - son_guncelleme)

        if simdi - son_guncelleme >= sure:
            net2 = psutil.net_io_counters()
            download = (net2.bytes_recv - net1.bytes_recv) // sure
            upload   = (net2.bytes_sent - net1.bytes_sent) // sure
            net1 = net2
            son_guncelleme = simdi
        else:
            net2 = psutil.net_io_counters()
            download = (net2.bytes_recv - net1.bytes_recv) // max(1, int(simdi - son_guncelleme))
            upload   = (net2.bytes_sent - net1.bytes_sent) // max(1, int(simdi - son_guncelleme))

        cpu, ram_yuzde, ram_used, ram_total = get_cpu_ram()

        stdscr.erase()
        h, w = stdscr.getmaxyx()
        row = 0

        def yaz(metin, renk=5, bold=False):
            nonlocal row
            if row >= h - 1:
                return
            attr = curses.color_pair(renk)
            if bold:
                attr |= curses.A_BOLD
            try:
                stdscr.addstr(row, 0, metin[:w-1], attr)
            except:
                pass
            row += 1

        def cizgi(karakter="="):
            yaz(karakter * min(w-1, 78), 1, bold=True)

        # Baslik
        cizgi("=")
        baslik = f"  AG IZLEYICI  |  {datetime.now().strftime('%d.%m.%Y  %H:%M:%S')}  |  Guncelleme: {geri_sayim}s"
        yaz(baslik, 1, bold=True)
        cizgi("=")

        # Download / Upload
        yaz("")
        yaz("  [ HIZLAR ]", 6, bold=True)
        cizgi("-")

        dl_renk = 2 if download < 1024*1024 else (3 if download < 10*1024*1024 else 4)
        ul_renk = 2 if upload < 1024*1024 else (3 if upload < 10*1024*1024 else 4)

        yaz(f"  Download Hizi    :  {bytes_to_human(download)}/s", dl_renk, bold=True)
        yaz(f"  Upload Hizi      :  {bytes_to_human(upload)}/s", ul_renk, bold=True)
        yaz(f"  Toplam Alinan    :  {bytes_to_human(net2.bytes_recv)}", 5)
        yaz(f"  Toplam Gonderilen:  {bytes_to_human(net2.bytes_sent)}", 5)
        yaz(f"  Paket Alinan     :  {net2.packets_recv:,}", 5)
        yaz(f"  Paket Gonderilen :  {net2.packets_sent:,}", 5)

        # CPU / RAM
        yaz("")
        yaz("  [ SISTEM ]", 6, bold=True)
        cizgi("-")

        cpu_renk = 2 if cpu < 50 else (3 if cpu < 80 else 4)
        ram_renk = 2 if ram_yuzde < 70 else (3 if ram_yuzde < 90 else 4)

        cpu_bar = int(cpu / 5)
        ram_bar = int(ram_yuzde / 5)
        yaz(f"  CPU Kullanimi    :  {'█' * cpu_bar}{'░' * (20 - cpu_bar)}  {cpu:.1f}%", cpu_renk)
        yaz(f"  RAM Kullanimi    :  {'█' * ram_bar}{'░' * (20 - ram_bar)}  {ram_yuzde:.1f}%  ({bytes_to_human(ram_used)} / {bytes_to_human(ram_total)})", ram_renk)

        # Programlar
        yaz("")
        yaz("  [ AG BAGLANTILARI ]", 6, bold=True)
        cizgi("-")
        baslik_satir = f"  {'PROGRAM':<28} {'PID':<8} {'BAGLANTI':<8} {'DURUM':<14} {'UZAK ADRES'}"
        yaz(baslik_satir, 1, bold=True)
        cizgi("-")

        processes = get_network_processes()
        for name, data in sorted(processes.items()):
            pid = data["pid"]
            conns = data["connections"]
            conn_sayi = len(conns)
            for i, conn in enumerate(conns[:3]):
                status = conn["status"]
                raddr = conn["raddr"]
                if status == "ESTABLISHED":
                    renk = 2
                elif status == "LISTEN":
                    renk = 3
                else:
                    renk = 5
                if i == 0:
                    satir = f"  {name:<28} {pid:<8} {conn_sayi:<8} {status:<14} {raddr}"
                else:
                    satir = f"  {'':28} {'':8} {'':8} {status:<14} {raddr}"
                yaz(satir, renk)

        # Ag Arayuzleri
        yaz("")
        yaz("  [ NETWORK ARAYUZLERI ]", 6, bold=True)
        cizgi("-")
        yaz(f"  {'ARAYUZ':<25} {'IP ADRESI':<20} {'HIZ':<15} {'DURUM'}", 1, bold=True)
        cizgi("-")

        for iface, stats in psutil.net_if_stats().items():
            addrs = psutil.net_if_addrs().get(iface, [])
            ip = next((a.address for a in addrs if a.family == 2), "-")
            durum = "AKTIF" if stats.isup else "KAPALI"
            renk = 2 if stats.isup else 4
            yaz(f"  {iface:<25} {ip:<20} {str(stats.speed)+' Mbps':<15} {durum}", renk)

        # Alt bilgi
        yaz("")
        cizgi("=")
        yaz("  Cikmak icin: Q  |  10 saniyede bir guncellenir", 3)
        cizgi("=")

        stdscr.refresh()
        time.sleep(1)

        key = stdscr.getch()
        if key in [ord('q'), ord('Q')]:
            break

def main():
    try:
        curses.wrapper(draw)
    except KeyboardInterrupt:
        pass
    print("\nAG Izleyici kapatildi.")

if __name__ == "__main__":
    main()

Kodun Açıklaması

  • bytes_to_human() fonksiyonu
    • Ham byte değerini okunabilir formata çevirir
    • Örnek: 1048576 → 1.0 MB, 1073741824 → 1.0 GB
  • get_network_processes() fonksiyonu
    • Sistemdeki tüm ağ bağlantılarını tarar
    • Her program için bağlantı sayısını, durumu ve uzak adresi toplar
    • Erişim hatalarını sessizce geçer
  • get_cpu_ram() fonksiyonu
    • Anlık CPU kullanım yüzdesini okur
    • RAM kullanımını yüzde ve MB/GB olarak döndürür
  • draw() fonksiyonu
    • curses kütüphanesi ile renkli terminal arayüzünü yönetir
    • Geri sayım ile 10 saniyede bir ağ verilerini ölçer
    • Ekran boyutuna göre otomatik uyum sağlar
    • CPU ve RAM için blok grafiği çizer
  • main() fonksiyonu
    • Programı başlatır
    • Q tuşu veya Ctrl+C ile düzgün şekilde kapatır

Bağlantı Durumları Ne Anlama Gelir?

  • ESTABLISHED – Program şu an aktif olarak bir sunucuya bağlı (Yeşil)
  • LISTEN – Program bağlantı bekliyor, sunucu modunda (Sarı)
  • TIME_WAIT – Bağlantı kapanıyor, temizleniyor
  • CLOSE_WAIT – Karşı taraf bağlantıyı kapattı
  • NONE – UDP bağlantısı, bağlantısız protokol
  • SYN_SENT – Bağlantı kurmaya çalışıyor

Sık Karşılaşılan Sorular

  1. Bazı programlar neden görünmüyor?
    • Yönetici yetkisi olmadan çalıştırırsanız sistem süreçleri gizlenebilir
    • Çözüm: CMD veya PowerShell’i “Yönetici olarak çalıştır” ile açın
  2. windows-curses neden gerekli?
    • Python’un standart curses kütüphanesi Windows’ta çalışmaz
    • windows-curses bu sorunu çözen özel bir pakettir
  3. Ekran neden 10 saniyede bir güncelleniyor?
    • 10 saniyelik ölçüm daha doğru ortalama hız hesabı yapar
    • 1 saniye çok kısa olduğu için anlık sapmalar yanıltıcı olabilir
  4. CPU değeri neden 0.0% gösteriyor?
    • psutil ilk çağrıda her zaman 0 döndürür
    • Birkaç saniye sonra gerçek değer görünür

Geliştirme Fikirleri

  • Belirli bir programa göre filtreleme eklenebilir
  • Şüpheli IP adresleri otomatik işaretlenebilir
  • Günlük log dosyasına kayıt eklenebilir
  • Belirli bir hız eşiği aşıldığında sesli uyarı verilebilir
  • Disk okuma/yazma hızı da eklenebilir
  • Grafik arayüz (GUI) ile daha görsel hale getirilebilir
  • Ağ geçmişi grafiği çizilebilir

Sonuç

Bu gelişmiş ağ izleme aracı, Python’un psutil ve curses kütüphanelerinin gücünü birleştirerek profesyonel bir sistem izleme deneyimi sunar. Renkli arayüzü, CPU/RAM grafiği ve anlık ağ bağlantı bilgileri ile bilgisayarınızın tüm ağ faaliyetlerini tek bakışta görebilirsiniz.

Güvenlik, performans veya merak için olsun, bu araç bilgisayarınızın dijital nabzını tutmanızı sağlar. Kodu indirin, çalıştırın ve sisteminizin arka planda neler yaptığını keşfedin.

Reklam
Bu yazı faydalı oldu mu?
Yazar

Kutay Utku

Denediğim, kurduğum ve öğrendiğim teknolojileri sade bir dille anlatıyorum. Sorularını yorumlarda bekliyorum.

Tüm yazıları (659)

Yorumlar

Henüz yorum yapılmamış Düşüncelerini paylaşan ilk kişi sen ol.

Yorum yaz

E-posta adresin yayınlanmaz. Zorunlu alanlar * ile işaretlidir.

Kod paylaşırken <code> etiketini kullanabilirsin.0

Yorumun onaylandıktan sonra yayınlanır.