Python

Skrip Python untuk Memantau Sambungan Rangkaian

Skrip Python untuk Memantau Sambungan Rangkaian
Keperluan untuk sentiasa menyambungkan peranti kita ke internet menjadi keperluan asas daripada hak istimewa tambahan.

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:

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 import
masa 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.

Trackpad dan Mouse Pointer pada skrin Windows AppyMouse untuk Tablet Windows
Pengguna tablet sering kehilangan penunjuk tetikus, terutama ketika mereka biasa menggunakan komputer riba. Telefon pintar dan tablet skrin sentuh dil...
Butang tetikus tengah tidak berfungsi pada Windows 10
The butang tetikus tengah membantu anda menelusuri halaman web dan skrin yang panjang dengan banyak data. Sekiranya ia berhenti, anda akan menggunakan...
Cara menukar butang tetikus Kiri & Kanan pada PC Windows 10
Sudah menjadi kebiasaan bahawa semua peranti tetikus komputer dirancang secara ergonomik untuk pengguna tangan kanan. Tetapi ada peranti tetikus yang ...