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

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

相关推荐

  • 联通免费宽带账号怎么申请?联通免费宽带账号领取攻略

    联通免费宽带账号的核心真相在于:目前中国联通官方从未存在向公众随意发放的“永久免费宽带账号”或“通用免密登录账号”,任何声称提供此类账号的第三方渠道,极大概率涉及账号盗用、欺诈诈骗或非法共享,不仅会导致用户个人信息泄露,更可能面临法律风险,真正的“免费”或“低资费”宽带,均属于运营商基于特定用户资质(如老用户回……

    2026年4月24日
    01953
  • 钉钉怎么用AI做会议纪要,钉钉AI会议纪要功能怎么设置

    钉钉利用AI做会议纪要的核心逻辑是:通过“钉钉闪记”或智能会议助手,在会议进行中实时将语音转化为文字,并自动提取待办事项、关键结论与摘要,实现会后秒级生成结构化文档,这一功能并非简单的录音转写,而是基于大语言模型(LLM)的深度语义理解,对于追求效率的企业团队而言,掌握这一工具能显著降低信息遗漏率,提升决策落地……

    2026年6月17日
    03332
  • PHP远程服务器端开发怎么做,如何实现远程连接?

    PHP远程服务器端开发是构建现代分布式系统和高性能Web应用的核心能力,它不仅仅是简单的脚本编写,而是涉及网络通信、并发处理、安全认证及服务治理的综合工程,在当前的互联网架构中,PHP早已突破了单一页面的处理范畴,通过Swoole、Workerman等异步扩展或gRPC等协议,PHP能够胜任复杂的远程服务端开发……

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

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

      2026年1月10日
      020
  • 为什么dnf登陆不上服务器失败怎么办,dnf登陆不上服务器原因

    针对DNF登录服务器失败,核心解决方案是首先检查本地网络连接,其次更新游戏客户端至最新版本,并参考官方公告确认服务器状态;若仍未解决,则需重置DNS或使用网络加速器,同时注意账号安全限制,以下从常见原因、自检流程、进阶方案及2026年高频场景展开分析,核心原因与自检流程1 网络环境排查原因:本地网络波动、运营商……

    2026年8月3日
    0330

发表回复

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