Memiliki aplikasi dan peranti yang perlu log, menghantar, dan menerima data ke dunia luar sangat penting. Oleh itu, mempunyai alat yang membolehkan anda memantau ketika rangkaian anda jatuh dapat membantu anda menyelesaikan masalah rangkaian atau menghentikan aplikasi sebelum mengirim banyak kesalahan log.
Dalam tutorial hari ini, kami akan membina monitor rangkaian mudah yang terus memantau kesambungan internet anda dengan menghantar permintaan ping ke sumber luaran. Skrip yang akan kita buat juga akan menyimpan catatan ketika internet tergendala dan tempoh waktu henti:
Keperluan Projek
Untuk projek ini, kami hanya memerlukan:
- Asas Pengaturcaraan Python
- Pemahaman asas rangkaian komputer.
- Selesa menggunakan terminal.
Logik Projek
Sebelum kita menyelami bahagian pengekodan, mari kita bincangkan dan memahami apa yang ingin kita capai:
Apa itu Rangkaian Naik dan Waktu Henti?
Apabila kita berbicara tentang rangkaian dan waktu henti, kita bermaksud tempoh di mana sambungan rangkaian tidak tersedia sepenuhnya, dan oleh itu, kita tidak dapat berkomunikasi dengan peranti di luar rangkaian kita. Semakin lama internet tidak tersedia, semakin lama waktu henti.
Cara Menentukan Waktu Henti
Sekarang kita tahu apa itu waktu henti internet, anda mungkin bertanya-tanya, "bagaimana kita menentukannya?"
Tanpa merumitkan kod kita, kita boleh menggunakan ping. Ping adalah kaedah di mana kita terus melakukan ping pelayan yang boleh dipercayai-mungkin Cloudflare atau Google DNS-dan kemudian menunggu tindak balas.
Sekiranya kita melakukan ping pelayan dan tidak ada tindak balas, kita perhatikan waktu tertentu dan terus melakukan ping sehingga kita menerima ping dan perhatikan waktu.
Dengan perbezaan masa, kita dapat mengetahui bila internet tergendala dan berapa lama.
Kita juga harus berhati-hati ketika melakukan ping pada satu server kerana kita boleh melakukan kesalahan ping sebagai serangan DDoS, yang mungkin menyebabkan alamat IP kita tersekat, yang akan menghasilkan hasil negatif.
Berikut adalah carta alir yang menerangkan konsep ini:
Ceramah murah; mari kita selami kod yang menunjukkan cara melaksanakan logik ini:
Sekarang Tunjukkan Kod Saya
Seperti biasa, di Python, kita mulakan dengan mengimport perpustakaan yang diperlukan. Seterusnya, kami membuat fail log di direktori kerja semasa.
Kami menggunakan pustaka soket untuk mengirim permintaan ke alamat IP luaran pada fungsi pertama. Untuk contoh ini, kami menggunakan alamat DNS awam Cloudflare, yang mempunyai waktu operasi yang sangat tinggi. Kami juga melewati port, dan kerana ia adalah pelayan DNS, gunakan port 53.
Kami kemudian mengesahkan bahawa kami mempunyai akses ke direktori fail log dan berhenti jika kami tidak mempunyai akses.
Langkah seterusnya adalah mengira waktu sambungan rangkaian terputus. Akhirnya, kami membungkus keseluruhan fungsi dalam satu gelung, seperti yang ditunjukkan dalam kod di bawah.
soket importmasa import
masa data import
import os
import sys
LOG_FNAME = "rangkaian.log "
FILE = os.jalan.sertai (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", port = 53, timeout = 3):
cuba:
soket.setdefaulttimeout (tamat masa)
s = soket.soket (soket.AF_INET, soket.SOCK_STREAM)
s.sambung ((host, port))
kecuali OSError sebagai ralat:
kembali Palsu
lain:
s.tutup ()
kembali Benar
def write_permission_check ():
cuba:
dengan terbuka (FILE, "a") sebagai fail:
lulus
kecuali OSError sebagai ralat:
cetak ("Pembuatan fail log gagal")
sys.keluar ()
akhirnya:
lulus
def calcul_time (mula, berhenti):
time_difference = berhenti - mula
saat = terapung (str (time_difference).jumlah_seconds ()))
kembali str (datetime.timedelta (saat = saat)).berpecah (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = masa masa.masa tarikh.sekarang ()
motd = "Pemantauan sambungan rangkaian bermula pada:" + str (monitor_start_time).berpecah (".") [0] +" Menghantar permintaan ping dalam "+ str (ping_freq) +" saat "
cetak (motd)
dengan terbuka (FILE, "a") sebagai fail:
fail.tulis ("\ n")
fail.tulis (motd + "\ n")
Walaupun Betul:
jika menghantar_ping_request ():
masa.tidur (ping_freq)
lain:
down_time = masa masa.masa tarikh.sekarang ()
fail_msg = "Sambungan Rangkaian Tidak tersedia di:" + str (down_time).berpecah (".") [0]
cetak (fail_msg)
dengan terbuka (FILE, "a") sebagai fail:
fail.tulis (fail_msg + "\ n")
i = 0
sementara tidak menghantar_ping_request ():
masa.tidur (1)
i + = 1
jika saya> = 3600:
i = 0
sekarang = masa.masa tarikh.sekarang ()
continous_message = "Ketidaksediaan Rangkaian Berterusan di:" + str (sekarang).berpecah (".") [0]
cetak (mesej berterusan)
dengan terbuka (FILE, "a") sebagai fail:
fail.tulis (mesej_terusan + "\ n")
up_time = masa masa.masa tarikh.sekarang ()
uptime_message = "Kesambungan Rangkaian Dipulihkan pada:" + str (up_time).berpecah (".") [0]
down_time = hitung_waktu (down_time, up_time)
_m = "Sambungan Rangkaian Tidak Tersedia untuk" + down_time
cetak (uptime_message)
cetak (_m)
dengan terbuka (FILE, "a") sebagai fail:
fail.tulis (uptime_message + "\ n")
fail.tulis (_m + "\ n")
mon_net_connection ()
Sekiranya anda menjalankan skrip ini, anda akan mendapat output yang serupa dengan yang ditunjukkan di bawah:
Kesimpulannya
Dengan menggunakan skrip di atas, kita dapat memantau saat sambungan rangkaian terputus dan terus mencatatnya sehingga tersedia. Skrip ringkas ini terbuka untuk penambahbaikan. Jangan ragu untuk menyesuaikan kod tersebut agar sesuai dengan keperluan anda dan memperluasnya.