弱网配置

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

浙公网安备 33010602011771号