Наличието на приложения и устройства, които трябва да регистрират, изпращат и получават данни към външния свят, е от решаващо значение. По този начин наличието на инструмент, който ви позволява да наблюдавате кога мрежата ви спира, може да ви помогне да отстраните мрежата или да спрете приложенията, преди да изпратите куп грешки в регистрационния файл.
В днешния урок ще изградим прост мрежов монитор, който непрекъснато наблюдава вашата интернет свързаност, като изпраща заявки за пинг на външен ресурс. Скриптът, който ще създадем, също така ще държи дневници, когато интернет не работи и продължителността на престоя:
Изисквания към проекта
За този проект ще ни трябват само:
- Основи на програмирането на Python
- Основни познания за компютърните мрежи.
- Бъдете удобни, използвайки терминала.
Логика на проекта
Преди да се потопим в кодиращата част, нека обсъдим и разберем какво се опитваме да постигнем:
Какво представлява мрежата нагоре и престой?
Когато говорим за работа в мрежа и престой, имаме предвид периода, в който мрежовата връзка е напълно недостъпна и по този начин не можем да комуникираме с устройства извън нашата мрежа. Колкото по-дълго интернет не е достъпен, толкова по-дълъг е престойът.
Как да определим престой
Сега, след като знаем какво е престой в интернет, може би се чудите: „как да го определим?”
Без да усложняваме нашия код, можем да използваме ping. Ping е метод, при който непрекъснато изпитваме надежден сървър - може би Cloudflare или Google DNS - и след това изчакваме отговор.
Ако пинг на сървъра и няма отговор, ние отбелязваме точното време и продължаваме да пинг, докато не получим пинг и отбелязваме часа.
Като имаме разлика във времето, можем да отбележим кога интернет е спрял и за колко време.
Също така трябва да бъдем внимателни, когато пингираме един сървър, защото може да имаме фалшиво грешен пинг като DDoS атака, което може да доведе до блокиране на IP адреса ни, което да доведе до отрицателни резултати.
Ето диаграма, обясняваща тази концепция:
Разговорите са евтини; нека сега да се потопим в кода, показващ как да приложим тази логика:
Сега ми покажете кода
Както обикновено, в Python започваме с импортиране на необходимите библиотеки. След това създаваме регистрационен файл в текущата работна директория.
Използваме библиотеката на сокети, за да изпратим заявка до външен IP адрес в първата функция. За този пример използваме публичен DNS адрес на Cloudflare, който има много високо време на работа. Предаваме и порта и тъй като това е DNS сървър, използвайте порт 53.
След това проверяваме дали имаме достъп до директорията на регистрационния файл и се отказваме, ако нямаме достъп.
Следващата стъпка е да се изчисли времето, когато мрежовата връзка е прекъсната. И накрая, обвиваме цялата функционалност в цикъл, както е показано в кода по-долу.
внос сокетвреме за импортиране
импортиране на дата и час
внос os
импортиране на sys
LOG_FNAME = "мрежа.регистрация "
ФАЙЛ = os.път.присъединяване (os.getcwd (), LOG_FNAME)
def send_ping_request (хост = "1.1.1.1 ", порт = 53, изчакване = 3):
опитвам:
гнездо.setdefaulttimeout (изчакване)
s = гнездо.гнездо (гнездо.AF_INET, гнездо.SOCK_STREAM)
с.свързване ((хост, порт))
с изключение на OSError като грешка:
връщане False
друго:
с.близо()
връщане Вярно
def write_permission_check ():
опитвам:
с отворен (ФАЙЛ, "а") като файл:
мине
с изключение на OSError като грешка:
print ("Създаването на регистрационен файл не бе успешно")
sys.изход ()
накрая:
мине
def calcu_time (старт, стоп):
разлика във времето = спиране - стартиране
секунди = плувка (str (разлика във времето.общо_секунди ()))
return str (datetime.timedelta (секунди = секунди)).разделен (".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = дата и час.Време за среща.сега()
motd = "Мониторингът на мрежовата връзка е стартиран в:" + str (monitor_start_time).разделен (".") [0] +" Изпращане на заявка за пинг след "+ str (ping_freq) +" секунди "
печат (motd)
с отворен (ФАЙЛ, "а") като файл:
файл.запис ("\ n")
файл.запис (motd + "\ n")
докато е вярно:
ако send_ping_request ():
време.сън (ping_freq)
друго:
down_time = дата и час.Време за среща.сега()
fail_msg = "Мрежовата връзка не е налична при:" + str (down_time).разделен (".") [0]
печат (fail_msg)
с отворен (ФАЙЛ, "а") като файл:
файл.запис (fail_msg + "\ n")
i = 0
докато не е send_ping_request ():
време.сън (1)
i + = 1
ако i> = 3600:
i = 0
сега = дата и час.Време за среща.сега()
continous_message = "Недостъпността на мрежата постоянна при:" + str (сега).разделен (".") [0]
печат (непрекъснато_съобщение)
с отворен (ФАЙЛ, "а") като файл:
файл.запис (непрекъснато_съобщение + "\ n")
up_time = дата и час.Време за среща.сега()
uptime_message = "Мрежовата свързаност възстановена при:" + str (up_time).разделен (".") [0]
време на престой = изчисли време
_m = "Мрежовата връзка не беше достъпна за" + време за престой
печат (uptime_message)
печат (_m)
с отворен (ФАЙЛ, "а") като файл:
файл.запис (uptime_message + "\ n")
файл.запис (_m + "\ n")
mon_net_connection ()
Ако стартирате този скрипт, ще получите изход, подобен на показания по-долу:
Заключение
Използвайки горния скрипт, можем да наблюдаваме кога се губи мрежовата връзка и непрекъснато да я регистрираме, докато не стане налична. Този прост скрипт е отворен за подобрения. Чувствайте се свободни да коригирате кода според вашите нужди и да го разширите.