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ı?
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:
- Python Kur
- python.org adresinden Python 3.x indirin
- Kurulum sırasında “Add Python to PATH” kutucuğunu işaretleyin
- 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
- 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
- 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
- windows-curses neden gerekli?
- Python’un standart curses kütüphanesi Windows’ta çalışmaz
- windows-curses bu sorunu çözen özel bir pakettir
- 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
- 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.
Yorumlar