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

下面是一个用于检测网络断流和丢包的脚本,使用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 年移动光纤宽带设置的核心在于完成光猫光路同步、配置 PPPoE 拨号并开启 IPv6,即可实现千兆速率稳定运行,在 2026 年,随着 FTTR(光纤到房间)技术的全面普及,移动宽带接入已从单一光猫模式转向全屋分布式组网,用户不再需要复杂的物理布线,但面对光猫后台的复杂参数,如何快速完成移动光纤宽带设……

    2026年5月4日
    0484
  • php网页间返回数据库怎么操作?php网页数据库返回方法

    PHP实现网页间高效返回数据库数据的核心逻辑在于构建一套安全、高效且可复用的数据交互层,这一过程不仅仅是简单的代码拼接,而是涉及到数据库连接管理、SQL注入防御、数据结果集处理以及性能优化的系统工程,核心结论是:在PHP网页开发中,应当摒弃传统的直接嵌入SQL语句模式,转而采用PDO预处理机制配合智能连接池技术……

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

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

      2026年1月10日
      020
  • 电信宽带用户密码忘了怎么办?电信宽带用户密码查询重置

    2026 年电信宽带用户密码已全面升级为“动态令牌 + 设备绑定”双重验证机制,默认弱口令策略彻底淘汰,用户需通过“电信营业厅 APP+ 实名认证”或“线下营业厅”重置,无法再通过简单猜测或旧版默认规则获取,随着 2026 年《网络安全法》实施细则的升级与工信部“清朗·网络接入安全”专项行动的深入,电信宽带的身……

    2026年5月6日
    0272
  • PS切片转换Web格式后,为何部分切片未能成功保存?

    在网页设计中,PS(Photoshop)切片功能被广泛用于将复杂的图像分解成多个部分,以便于在不同的网页元素中使用,有时在将切片存储为Web所用格式后,可能会遇到一些切片没有保存的情况,本文将详细介绍这一问题的原因以及解决方案,切片保存问题分析切片未保存的原因a. 保存时未勾选“存储为Web所用格式”选项在使用……

    2025年12月21日
    02000

发表回复

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