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

下面是一个用于检测网络断流和丢包的脚本,使用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

相关推荐

  • POP3账户设置疑问,Foxmail个人如何正确接收邮件?

    POP3协议作为邮件接收的核心标准,与Foxmail这类个人邮件客户端的结合,为用户提供了高效、便捷的邮件管理方案,对于个人用户而言,通过配置POP3连接邮件服务器,可确保邮件的及时同步与安全存储,尤其在移动办公与多设备使用场景下,这一组合能极大提升邮件处理的灵活性与可靠性,POP3协议与Foxmail的个人应……

    2026年1月26日
    04480
  • 大模型能帮我把一段英文配音成中文吗,AI英文转中文配音

    大模型可以直接将英文音频转化为中文配音,但需通过“语音识别转文字+大模型翻译+语音合成”的技术链路实现,目前主流方案已能实现高拟真度的多语言配音,但完全替代人工专业配音仍有细微情感差距,技术实现原理与核心链路要实现从英文音频到中文配音的转换,并非单一模型直接完成,而是依赖三个关键步骤的协同工作,这一过程在202……

    2026年6月17日
    01512
  • 施乐j75和c75服务器有什么区别,施乐j75和c75服务器哪个好

    施乐J75和C75服务器在硬件配置、处理能力和适用场景上存在显著差异:J75采用高性能嵌入式服务器架构,专为黑白高速印刷设计,适合大批量生产;C75则采用通用服务器平台,优化色彩管理,适合中小型彩色印刷作业,核心硬件配置对比处理器与内存规格施乐J75和C75服务器在核心计算单元上存在代际差异,这直接影响RIP速……

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

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

      2026年1月10日
      020
  • 连接isp服务器超时是什么意思,如何解决网络连接超时问题

    连接isp服务器超时是什么意思连接ISP服务器超时,简单说就是你的设备(电脑、手机、路由器)在规定的等待时间内,没能和运营商(联通、电信、移动)的机房服务器完成一次有效的数据握手,导致网络请求失败,这通常意味着从你家到运营商机房这条物理链路的某个环节出了状况,或者运营商侧临时响应不过来,下文帮你彻底搞懂这个弹窗……

    2026年9月25日
    0101

发表回复

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