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

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

相关推荐

  • 酷番云云服务器如何发布站点?

    云服务器怎么发布站点?云服务器发布站点,开通云服务器后,还需注册申请一个域名,以及网站程序。这些准备好以后,按照下面的流程来操作。 远程连接 云服务器windows操作系统可以使用…

    2022年3月4日
    08100
  • 三丰云免费虚拟主机真的适合新手建站吗?

    在当今这个对网站和在线应用需求日益增长的时代,虚拟主机作为一项基础的互联网服务,其重要性不言而喻,对于初学者、学生开发者以及小型项目而言,成本往往是启动第一个线上项目的首要考量,在此背景下,互联免费虚拟主机三丰云凭借其“零成本入门”的策略,成为了备受关注的选择,它为无数用户迈出数字化第一步提供了宝贵的实践平台……

    2025年10月21日
    01400
  • 高防服务器,网络安全的坚固壁垒!

     高防服务器:网络安全的坚固堡垒,保卫您的数字资产!   在当今这个数字化迅速发展的时代,网络安全已成为企业和个人不可忽视的重要课题。网络攻击无时无刻不在发生,从简单的恶…

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

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

      2026年1月10日
      020
  • POLARDB数据库好不好?实际性能与稳定性表现如何评估?

    {POLARDB数据库好不好}云原生数据库的革新者定位POLARDB是阿里巴巴自主研发的云原生关系型数据库,于2019年正式推出,旨在解决传统关系型数据库在高并发、大规模数据场景下的扩展性瓶颈问题,作为阿里云核心产品之一,其设计融合了传统关系型数据库的强一致性和分布式数据库的可扩展性,被定位为“云原生数据库的标……

    2026年1月8日
    0620

发表回复

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