Friday, November 22, 2024

[Python] Check ICMP và gửi thông báo Telegram

-

Để tạo một ứng dụng kiểm tra ICMP trên Ubuntu và CentOS và gửi thông báo Telegram khi có kết quả 0 liên tiếp trong 3 lần và kết quả từ 0 chuyển qua 1, cùng với việc gửi lại thông báo nếu kết quả vẫn là 0 trong vòng 10 phút, bạn có thể làm như sau:

1. Cài đặt các gói cần thiết:

  • Trên Ubuntu:
sudo apt-get update
sudo apt-get install python3 python3-pip
sudo pip3 install python-telegram-bot
  • Trên CentOS:
sudo yum update
sudo yum install python3 python3-pip
sudo pip3 install python-telegram-bot

2. Tạo script kiểm tra ICMP và gửi thông báo Telegram:

import subprocess
import time
import requests
import json

# Các biến cấu hình
CHAT_ID = 'your_chat_id'
BOT_TOKEN = 'your_bot_token'
TARGET_HOST = 'your_target_host'
TARGET_PORT = 80
CHECK_INTERVAL = 60 # Kiểm tra sau mỗi 60 giây
RETRY_INTERVAL = 600 # Thử lại sau mỗi 10 phút

# Các biến lưu trữ
consecutive_zeros = 0
last_result = None
last_notified = None

# Hàm gửi thông báo Telegram
def send_telegram_message(msg):
    url = 'https://api.telegram.org/bot' + BOT_TOKEN + '/sendMessage'
    data = {'chat_id': CHAT_ID, 'text': msg}
    r = requests.post(url, data=data)

# Vòng lặp chính
while True:
    # Kiểm tra ICMP
    result = subprocess.call(['ping', '-c', '1', '-W', '1', TARGET_HOST])
    if result == 0:
        consecutive_zeros = 0
        if last_result == 0:
            last_result = 1
            send_telegram_message('Target host is up again')
    else:
        consecutive_zeros += 1
        if consecutive_zeros == 3 and last_result == 0:
            send_telegram_message('Target host is down')
            last_notified = time.time()
        elif consecutive_zeros > 3 and last_notified is not None and time.time() - last_notified >= RETRY_INTERVAL:
            send_telegram_message('Target host is still down')
            last_notified = time.time()
        last_result = 0
    time.sleep(CHECK_INTERVAL)

Script trên là một ứng dụng đơn giản để kiểm tra ICMP của một host và gửi thông báo đến người dùng thông qua Telegram nếu host không trả lời ICMP trong một thời gian nhất định. Dưới đây là chi tiết về cách hoạt động của script:

  • Các biến cấu hình:

Ở đầu script, chúng ta khai báo một số biến cấu hình như CHAT_ID, BOT_TOKEN, TARGET_HOST, TARGET_PORT, CHECK_INTERVAL, RETRY_INTERVAL để cấu hình bot Telegram, host target cần kiểm tra, các khoảng thời gian kiểm tra và thử lại sau khi host không phản hồi ICMP.

  • Các biến lưu trữ:

Ở đầu vòng lặp chính, chúng ta khởi tạo các biến lưu trữ như consecutive_zeros, last_result và last_notified. consecutive_zeros là số lượng kết quả ICMP liên tiếp bằng 0, last_result là kết quả ICMP cuối cùng được kiểm tra và last_notified là thời điểm cuối cùng mà thông báo đã được gửi đến người dùng.

  • Hàm gửi thông báo Telegram:

Chúng ta định nghĩa hàm send_telegram_message để gửi thông báo đến người dùng thông qua API của Telegram. Hàm này sử dụng thư viện requests để gửi một yêu cầu HTTP POST đến API của Telegram với chat_id và text của thông báo.

  • Vòng lặp chính:

Trong vòng lặp chính, chúng ta sử dụng lệnh subprocess để kiểm tra ICMP của host target. Nếu kết quả ICMP là 0, nghĩa là host target phản hồi ICMP, chúng ta đặt giá trị của consecutive_zeros là 0. Nếu last_result cũng là 0, tức là trạng thái của host target đã thay đổi từ không phản hồi ICMP sang phản hồi ICMP, chúng ta gửi thông báo đến người dùng thông qua hàm send_telegram_message.

Nếu kết quả ICMP khác 0, nghĩa là host target không phản hồi ICMP, chúng ta tăng giá trị của consecutive_zeros lên 1. Nếu consecutive_zeros đạt đến 3 và last_result cũng là 0, tức là host target không phản hồi ICMP trong 3 lần kiểm tra liên tiếp, chúng ta gửi thông báo đến người dùng thông qua hàm send_telegram_message và đặt giá trị của last_notified là thời điểm hiện tại. Nếu consecutive_zeros lớn hơn 3 và last_notified khác None và thời gian hiện tại trừ last_notified lớn hơn hoặc bằng RETRY_INTERVAL, chúng ta gửi

3. Chạy script trên nền tảng Ubuntu hoặc CentOS:

python3 icmp_checker.py

Lưu ý: Để sử dụng ứng dụng này, bạn cần có một bot Telegram và chat_id của người nhận để nhận thông báo. Bạn có thể tạo một bot Telegram mới và lấy chat_id bằng cách nhắn tin cho bot và sử dụng API Telegram để lấy chat_id của cuộc trò chuyện với bot.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories