Python3监控IP丢包率

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
 
这里的代码是监控区域内的所有IP地址,故障数量达到某个值后就触发告警

import os
import time
import re
import subprocess
import threading
from queue import Queue


ip_queue = Queue()
abnormal_num = 0
call_num = 1
name = os.path.split('C:/Users/Administrator/Desktop/zone')[-1]    # 获取文件名用于告警通知是哪个zone的网络故障
with open('C:/Users/Administrator/Desktop/zone', 'r') as z_ip:
    for line in z_ip:
        z_file = line.strip()
        ip_queue.put(z_file)


def zone(name):
    while not ip_queue.empty():
        ip = ip_queue.get()
        status1 = subprocess.Popen('ping -n 5 {}'.format(ip), stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE, shell=True)
        res1 = str(status1.stdout.read(), encoding='gbk')
        regex1 = re.findall(r'\w*%\w*', res1)[0]  # 获取丢包率,百分比
        loss1 = int(re.findall(r'\d*', regex1)[0])     # 获取丢包率数字

        if loss1 >= 80:
            time.sleep(10)
            status2 = subprocess.Popen('ping -n 5 {}'.format(ip), stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                       stderr=subprocess.PIPE, shell=True)
            res2 = str(status2.stdout.read(), encoding='gbk')
            print(res2)                               # ping输出值
            regex2 = re.findall(r'\w*%\w*', res2)[0]  # 获取丢包率,百分比
            loss2 = int(re.findall(r'\d*', regex2)[0])     # 获取丢包率数字
            print('loss {}%'.format(loss2))

            if loss2 >= 80:
                global abnormal_num, call_num
                abnormal_num += 1
                down_time = time.strftime("%Y-%m-%d %H:%M:%S")
                print('down time: [{}]; zone: {}; ip: {}; abnormal num: {}'.format(down_time, name, ip, abnormal_num))
                if abnormal_num >= 3 and call_num == 1:   
                    call_num += 1  # 设置只触发一次告警
                    send_sms('down {}'.format(name))  # 这里就可以调用你编写的告警函数,我的代码未贴出来


if __name__ == '__main__':
    for t in range(10):
        z_th = threading.Thread(target=zone, args=(name,))
        z_th.start()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要统计丢包,您可以使用Python的socket模块来发送和接收数据包,并通过检查接收到的数据包来计算丢包。下面是一个简单的示例代码: ```python import socket def calculate_packet_loss_rate(server_ip, server_port, num_packets): # 创建UDP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置超时时间为1秒 sock.settimeout(1) # 发送和接收数据包 sent_packets = 0 received_packets = 0 for i in range(num_packets): # 发送数据包 sock.sendto(b'', (server_ip, server_port)) sent_packets += 1 try: # 等待接收数据包 data, addr = sock.recvfrom(1024) received_packets += 1 except socket.timeout: # 超时,数据包丢失 pass # 计算丢包 packet_loss_rate = (sent_packets - received_packets) / sent_packets * 100 # 关闭socket sock.close() return packet_loss_rate # 示例用法 server_ip = '127.0.0.1' # 服务器IP地址 server_port = 1234 # 服务器端口号 num_packets = 100 # 发送的数据包数量 packet_loss_rate = calculate_packet_loss_rate(server_ip, server_port, num_packets) print(f'Packet loss rate: {packet_loss_rate}%') ``` 以上代码使用UDP socket发送和接收数据包,通过计算发送和接收的数据包数量的差异来计算丢包。您可以将示例代码中的服务器IP地址、端口号和发送的数据包数量替换为实际的值来进行测试。请注意,这只是一个简单的示例,实际的网络环境可能会受到许多因素的影响,如网络延迟、拥塞等,可能会导致丢包的不准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值