简单粗暴,先说思路,再附上代码
解决思路(linux环境下,nats为例):
在网络层延迟发送或者drop掉nats的消息,进而模拟消息丢失和延迟发送&接收的测试情况。
和方案(linux环境下,nats为例):
1.了解nats使用,暴露的IP和端口号,以及部署方式
2.iptables 按需drop掉发出的消息或者接收的消息
3.使用TC来延迟发送消息
# 网络设备名称
DEV=$1
# 目标IP
IP=$2
# 目标端口
PORT=$3
# 延迟发送时间
DELAY=$4
echo $DEV
echo $IP
echo $PORT
echo $DELAY
# 先清除所有iptables规则
sudo iptables -t mangle -F
# 遍历所有网络接口,清除所有的tc规则
for interface in $(ls /sys/class/net/); do
echo "Deleting tc rules on interface: $interface"
sudo tc qdisc del dev $interface root
done
###############################拦截发往目标IP和端口数据
iptables -t mangle -A OUTPUT -d $IP -p tcp --dport $PORT -j DROP
# 清除规则
# iptables -t mangle -D OUTPUT -d 192.168.32.42 -p tcp --dport 443 -j DROP
# 创建一个发送队列,延迟发送数据包到目标IP和端口
sudo iptables -t mangle -A OUTPUT -p tcp --dport $PORT -j MARK --set-mark 1
sudo tc qdisc add dev $DEV root handle 1: htb default 12
sudo tc class add dev $DEV parent 1: classid 1:1 htb rate 1000mbit
sudo tc qdisc add dev $DEV parent 1:1 handle 10: netem delay ${DELAY}ms
sudo tc filter add dev $DEV protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1