Günlüğe kaydetmesi, dış dünyaya veri göndermesi ve alması gereken uygulamalara ve cihazlara sahip olmak çok önemlidir. Bu nedenle, ağınızın ne zaman kapandığını izlemenize olanak tanıyan bir araca sahip olmak, bir grup günlük hatası göndermeden önce ağdaki sorunları gidermenize veya uygulamaları durdurmanıza yardımcı olabilir.
Bugünkü eğitimde, harici bir kaynağa ping istekleri göndererek internet bağlantınızı sürekli olarak izleyen basit bir ağ monitörü oluşturacağız. Oluşturacağımız script ayrıca internetin ne zaman kesildiğini ve kesinti süresinin ne kadar sürdüğünü de tutacaktır:
Proje gereksinimleri
Bu proje için sadece ihtiyacımız olacak:
- Python Programlama Temelleri
- Bilgisayar ağlarının temel anlayışı.
- Terminali Kullanırken Rahat Olun.
Proje Mantığı
Kodlama kısmına geçmeden önce, neyi başarmaya çalıştığımızı tartışalım ve anlayalım:
Ağ Yukarı ve Kapalı Kalma Süresi Nedir??
Ağın çalışma ve kesinti süresinden bahsettiğimizde, ağ bağlantısının tamamen kullanılamadığı ve bu nedenle ağımızın dışındaki cihazlarla iletişim kuramadığımız süreyi kastediyoruz. İnternet ne kadar uzun süre kullanılamıyorsa, kesinti süresi o kadar uzun olur.
Kesinti Süresi Nasıl Belirlenir
Artık internet kesinti süresinin ne olduğunu bildiğimize göre, "bunu nasıl belirleyebiliriz?" diye merak ediyor olabilirsiniz?”
Kodumuzu karmaşıklaştırmadan ping ile gidebiliriz. Ping, güvenilir bir sunucuya (belki Cloudflare veya Google DNS) sürekli olarak ping attığımız ve ardından yanıt beklediğimiz bir yöntemdir.
Sunucuya ping atarsak ve yanıt gelmezse, o belirli zamanı not alır ve bir ping alana kadar ping işlemine devam ederiz ve saati not alırız.
Saat farkına sahip olarak, internetin ne zaman ve ne kadar süreyle kapalı olduğunu not edebiliriz.
Tek bir sunucuya ping atarken de dikkatli olmalıyız çünkü ping yanlışlıkla DDoS saldırısı olarak algılanabilir, bu da IP adresimizin bloke olmasına neden olabilir ve bu da olumsuz sonuçlar doğurabilir.
İşte bu kavramı açıklayan bir akış şeması:
Konuşma ucuz; Şimdi bu mantığın nasıl uygulanacağını gösteren koda geçelim:
Şimdi Bana Kodu Göster
Her zamanki gibi Python'da gerekli kitaplıkları içe aktararak başlıyoruz. Ardından, mevcut çalışma dizininde bir günlük dosyası oluşturuyoruz.
İlk fonksiyonda harici bir IP adresine istek göndermek için soket kitaplığını kullanıyoruz. Bu örnek için, çok yüksek bir çalışma süresine sahip olan Cloudflare genel DNS adresini kullanıyoruz. Bağlantı noktasını da geçiyoruz ve bu bir DNS sunucusu olduğu için 53 numaralı bağlantı noktasını kullanın.
Ardından, günlük dosyası dizinine erişimimiz olduğunu doğrularız ve erişimimiz yoksa çıkarız.
Bir sonraki adım, ağ bağlantısının kapalı olduğu süreyi hesaplamaktır. Son olarak, aşağıdaki kodda gösterildiği gibi tüm işlevselliği bir döngüye sarıyoruz.
ithalat soketiithalat zamanı
tarih saatini içe aktar
işletim sistemini içe aktar
ithalat sistemi
LOG_FNAME = "ağ.kayıt"
DOSYA = işletim sistemi.yol.katılmak.getcwd(), LOG_FNAME)
def send_ping_request(host="1.1.1.1", bağlantı noktası=53, zaman aşımı=3):
Deneyin:
priz.setdefaulttimeout(zaman aşımı)
s = soket.soket (soket.AF_INET, yuva.SOCK_STREAM)
s.bağlan ((ana bilgisayar, bağlantı noktası))
hata olarak OSError dışında:
dönüş Yanlış
Başka:
s.kapat()
dönüş True
def write_permission_check():
Deneyin:
dosya olarak open(FILE, "a") ile:
geçmek
hata olarak OSError dışında:
print("Günlük dosyası oluşturulamadı")
sistem.çıkış()
en sonunda:
geçmek
def hesapla_zaman(başlat, durdur):
time_difference = dur - başla
saniye = float(str(time_difference).toplam_saniye()))
dönüş str(tarih saat.zamandelta(saniye=saniye)).Bölünmüş(".")[0]
def mon_net_connection(ping_freq=2):
monitor_start_time = tarihsaat.tarih saat.şimdi()
motd = "Ağ bağlantısı izleme şu saatte başladı: " + str(monitor_start_time).Bölünmüş(".")[0] + " " + str(ping_freq) + " saniye içinde ping isteği gönderme"
yazdır(motd)
dosya olarak open(FILE, "a") ile:
dosya.yaz("\n")
dosya.yaz(motd + "\n")
Doğru iken:
send_ping_request() ise:
zaman.uyku(ping_freq)
Başka:
down_time = tarihsaat.tarih saat.şimdi()
fail_msg = "Ağ Bağlantısı şurada kullanılamıyor: " + str(down_time).Bölünmüş(".")[0]
yazdır(başarısız_msg)
dosya olarak open(FILE, "a") ile:
dosya.write(fail_msg + "\n")
ben = 0
send_ping_request() değilken:
zaman.uyku(1)
ben += 1
eğer ben >= 3600:
ben = 0
şimdi = tarihsaat.tarih saat.şimdi()
continous_message = "Ağ Kullanılamazlığı Kalıcı: " + str(şimdi).Bölünmüş(".")[0]
yazdır(sürekli_mesaj)
dosya olarak open(FILE, "a") ile:
dosya.write(sürekli_mesaj + "\n")
up_time = tarihsaat.tarih saat.şimdi()
uptime_message = "Ağ Bağlantısı Geri Yüklendi: " + str(up_time).Bölünmüş(".")[0]
down_time = hesapla_zaman(down_time, up_time)
_m = "Ağ Bağlantısı " + down_time için kullanılamadı
print(uptime_message)
yazdır(_m)
dosya olarak open(FILE, "a") ile:
dosya.write(uptime_message + "\n")
dosya.yaz(_m + "\n")
mon_net_connection()
Bu betiği çalıştırırsanız, aşağıda gösterilene benzer bir çıktı alırsınız:
Sonuç
Yukarıdaki betiği kullanarak, ağ bağlantısının ne zaman kesildiğini izleyebilir ve kullanılabilir olana kadar sürekli olarak günlüğe kaydedebiliriz. Bu basit komut dosyası iyileştirmelere açıktır. Kodu ihtiyaçlarınıza uyacak şekilde ayarlamaktan ve genişletmekten çekinmeyin.