弱网配置

c565cb586a8b4c06bda1c871bb1fbef9

sudo tc qdisc replace dev eno1 root netem delay 120ms 30ms 25% loss 5%
解除sudo tc qdisc del dev eno1 root

https://blog.csdn.net/2303_78922833/article/details/151372115

#!/usr/bin/env bash
set -u

# 循环切换网络状态:正常网络 -> 异常网络 -> 断开网络

IFACE=${1:-eno1}          # 网卡:wlp0s20f3

NORMAL_SECS=${2:-30}           # 正常网络持续时间:30s
NETEM_SECS=${3:-60}            # 异常网络持续时间:60s
DISCONNECT_SECS=${4:-30}       # 断开网络持续时间:30s

# 检查网卡是否存在(修复版)
check_interface() {
  # 使用更可靠的方法检查网卡
  if ! ip link show "${IFACE}" >/dev/null 2>&1; then
    echo "[-] Error: Interface ${IFACE} not found!"
    echo "[-] Available interfaces:"
    ip -o link show | awk -F': ' '{print $2}'
    exit 1
  fi
  echo "[+] Interface ${IFACE} found and available"
}

# 恢复网络配置
cleanup() {
  echo "[*] Restoring normal network on ${IFACE}..."

  # 恢复tc配置
  sudo tc qdisc del dev "${IFACE}" root 2>/dev/null || true

  # 确保网卡是up状态
  sudo ip link set "${IFACE}" up 2>/dev/null || true

  echo "[+] Network restored to normal state"
}

# 断开网络连接
disconnect_network() {
  echo "[*] DISCONNECTING network for ${DISCONNECT_SECS}s"
  sudo ip link set "${IFACE}" down
}

# 恢复网络连接
reconnect_network() {
  echo "[*] RECONNECTING network..."
  sudo ip link set "${IFACE}" up
  # 等待网卡完全启动
  sleep 2
}

# 设置异常网络
setup_netem() {
  echo "[*] NETEM(delay 1000ms ±2000ms 35%, loss 20%) for ${NETEM_SECS}s"
  sudo tc qdisc replace dev "${IFACE}" root netem delay 1000ms 2000ms 35% loss 20%
}

# 恢复正常网络
setup_normal() {
  echo "[*] NORMAL network for ${NORMAL_SECS}s"
  sudo tc qdisc del dev "${IFACE}" root 2>/dev/null || true
}

# 注册退出处理
trap cleanup EXIT

# 主循环
main() {
  echo "[*] Starting network condition simulator on ${IFACE}"
  echo "[*] Cycle: ${NORMAL_SECS}s normal -> ${NETEM_SECS}s netem -> ${DISCONNECT_SECS}s disconnect"
  echo "[*] Press Ctrl+C to stop and restore normal network"

  check_interface

  local cycle_count=0

  while true; do
    cycle_count=$((cycle_count + 1))
    echo ""
    echo "=== Cycle ${cycle_count} ==="

    # 阶段1: 正常网络
    setup_normal
    sleep "${NORMAL_SECS}"

    # 阶段2: 异常网络
    setup_netem
    sleep "${NETEM_SECS}"

    # 阶段3: 断开网络
    disconnect_network
    sleep "${DISCONNECT_SECS}"
    reconnect_network

    # 短暂等待确保网络重新连接稳定
    sleep 2
  done
}

# 运行主函数
main



sudo tc qdisc del dev eno1 root

sudo tc qdisc add dev eno1 root tbf rate 500kbit burst 16kbit latency 800ms

posted @ 2025-09-25 20:45  流年中渲染了微笑  阅读(10)  评论(0)    收藏  举报