如何检测网络断流丢包问题?网络卡顿排查方法分享

下面是一个用于检测网络断流和丢包的脚本,使用Python编写,基于ping命令进行网络连通性测试:

ping网络断流丢包检测

#!/usr/bin/env python3
"""
网络断流丢包检测工具
功能:
1. 持续ping目标地址
2. 检测连续丢包(断流)
3. 统计实时丢包率
4. 记录断流事件和时间戳
"""
import os
import sys
import time
import subprocess
import platform
from datetime import datetime
# 配置参数
TARGET = "8.8.8.8"       # 默认检测地址 (Google DNS)
INTERVAL = 1             # ping间隔(秒)
CONTINUOUS_LIMIT = 3     # 连续丢包次数阈值(视为断流)
LOG_FILE = "network_monitor.log"  # 日志文件路径
def ping_host(host):
    """执行ping命令并返回结果"""
    param = "-n 1" if platform.system().lower() == "windows" else "-c 1"
    command = ["ping", param, "-w", "1000", host]
    try:
        response = subprocess.run(command,
                                  stdout=subprocess.PIPE,
                                  stderr=subprocess.PIPE,
                                  text=True)
        return response.returncode == 0
    except Exception:
        return False
def main():
    # 初始化计数器
    total_count = 0
    success_count = 0
    continuous_fail = 0
    outage_start = None
    print(f"开始网络监控,目标: {TARGET},按Ctrl+C停止...")
    print(f"{'时间':<20} | {'状态':<8} | {'连续丢包':<10} | {'丢包率':<8} | 事件")
    try:
        while True:
            total_count += 1
            timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            # 执行ping测试
            if ping_host(TARGET):
                status = "成功"
                success_count += 1
                # 断流恢复检测
                if continuous_fail >= CONTINUOUS_LIMIT:
                    outage_duration = round(time.time() - outage_start, 1)
                    event = f"⚠️ 网络恢复! 断流时长: {outage_duration}秒"
                    print(f"33[32m{timestamp:<20} | {status:<8} | {continuous_fail:<10} | "
                          f"{calc_loss_rate(total_count, success_count):<8} | {event}33[0m")
                    log_event(timestamp, event)
                continuous_fail = 0
                outage_start = None
            else:
                status = "失败"
                # 断流开始检测
                if continuous_fail == 0:
                    outage_start = time.time()
                continuous_fail += 1
                # 达到断流阈值
                if continuous_fail == CONTINUOUS_LIMIT:
                    event = "🔴 检测到网络断流!"
                    print(f"33[31m{timestamp:<20} | {status:<8} | {continuous_fail:<10} | "
                          f"{calc_loss_rate(total_count, success_count):<8} | {event}33[0m")
                    log_event(timestamp, event)
            # 实时显示状态
            if continuous_fail < CONTINUOUS_LIMIT:
                print(f"{timestamp:<20} | {status:<8} | {continuous_fail:<10} | "
                      f"{calc_loss_rate(total_count, success_count):<8} |", end='r')
            time.sleep(INTERVAL)
    except KeyboardInterrupt:
        print("nn监控已停止")
        print(f"最终统计: 总次数: {total_count}, 成功: {success_count}, "
              f"丢包率: {calc_loss_rate(total_count, success_count)}%")
def calc_loss_rate(total, success):
    """计算丢包率"""
    return round((total - success) / total * 100, 1) if total > 0 else 0
def log_event(timestamp, event):
    """记录事件到日志文件"""
    with open(LOG_FILE, "a") as f:
        f.write(f"[{timestamp}] {event}n")
if __name__ == "__main__":
    # 支持命令行参数: ping_monitor.py [目标] [间隔]
    if len(sys.argv) > 1:
        TARGET = sys.argv[1]
    if len(sys.argv) > 2:
        INTERVAL = float(sys.argv[2])
    main()

功能说明:

  1. 基本检测

    • 每秒ping一次目标地址(默认8.8.8.8)
    • 实时显示网络状态
    • 计算实时丢包率
  2. 断流检测

    ping网络断流丢包检测

    • 连续3次(可配置)ping失败判定为网络断流
    • 断流事件用红色高亮显示
    • 恢复连接时显示断流持续时间
  3. 统计功能

    • 实时计算丢包率(失败次数/总次数)
    • 结束时显示最终统计
    • 所有断流事件记录到日志文件
  4. 日志记录

    ping网络断流丢包检测

    • 所有断流事件和恢复事件记录到network_monitor.log
    • 包含精确的时间戳

使用方法:

# 基本用法
python ping_monitor.py
# 自定义检测目标
python ping_monitor.py www.baidu.com
# 自定义检测间隔(秒)
python ping_monitor.py 192.168.1.1 0.5

输出示例:

2023-11-15 14:30:25 | 成功    | 0          | 0.0      | 
2023-11-15 14:30:26 | 失败    | 1          | 0.0      | 
2023-11-15 14:30:27 | 失败    | 2          | 0.0      | 
2023-11-15 14:30:28 | 失败    | 3          | 0.0      | 🔴 检测到网络断流!
2023-11-15 14:30:31 | 成功    | 0          | 0.0      | ⚠️ 网络恢复! 断流时长: 3.0秒

技术特点:

  1. 跨平台支持(Windows/Linux/macOS)
  2. 终端颜色高亮显示重要事件
  3. 动态刷新显示当前状态
  4. 完整的事件日志记录
  5. 可自定义检测参数

注意:首次运行可能需要安装依赖:pip install ping3,或直接使用系统ping命令(脚本已处理兼容性)

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/287241.html

(0)
上一篇 2026年2月8日 08:08
下一篇 2026年2月8日 08:11

相关推荐

  • php网站源码解密工具哪个好用?php源码加密解密方法大全

    PHP网站源码解密的核心在于平衡代码安全审计需求与知识产权保护,其本质是对Zend加密、ionCube加密或混淆代码进行逆向分析或还原,专业的解密过程并非简单的“破解”,而是基于对PHP运行机制底层原理的深度解析,需要结合自动化工具与人工调试,在合法合规的前提下,恢复代码的可读性与可维护性, 对于运维人员而言……

    2026年3月16日
    0242
  • 虚拟机显卡驱动总是不兼容,究竟有什么一劳永逸的解决方法?

    在虚拟化技术日益普及的今天,无论是开发者、设计师还是普通技术爱好者,都可能遇到在虚拟机(或称虚拟主机)中运行图形密集型应用的需求,一个常见的障碍便是“虚拟主机显卡不兼容”的问题,这个问题并非单一原因造成,其解决方案也因虚拟化环境的不同而大相径庭,本文将深入剖析此问题的根源,并提供一套系统化、结构清晰的解决方案……

    2025年10月18日
    03320
  • 如何查找POP账户的收件服务器地址?不同邮箱的POP3收件服务器设置详解?

    POP3(Post Office Protocol 3)是用于从邮件服务器接收邮件的标准协议,其收件服务器的地址格式遵循特定的规范,理解并正确配置该地址对邮件客户端(如Outlook、Foxmail、酷番云邮件中转服务等)的邮件接收至关重要,本文将系统解析POP3收件服务器地址的结构、常见邮箱的配置示例,并结合……

    2026年1月25日
    0670
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 关于PostgreSQL排行榜,你关心的排名逻辑、应用价值与行业趋势问题有哪些?

    PostgreSQL(简称PG)作为一款开源关系型数据库管理系统,自1986年由Waldemar Korczak开发以来,凭借其卓越的技术特性与活跃的社区生态,在全球数据库市场中占据重要地位,它不仅是全球最大的开源数据库项目之一,更因强大的功能、高可靠性和灵活的扩展性,被广泛应用于金融、医疗、电商、云服务等关键……

    2026年1月2日
    01380

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注