Files
cgrates/data/scripts/block-ports.sh
2024-12-17 15:18:19 +01:00

44 lines
1.0 KiB
Bash
Executable File

#!/bin/bash
usage() {
echo "Usage: $(basename "$0") -p PORT[,PORT...] [-d SECONDS]"
echo "Example: $(basename "$0") -p 8021,2014 -d 300"
exit 1
}
# Set default duration
DURATION=10
# Parse arguments
while getopts "p:d:h" opt; do
case $opt in
p) IFS=',' read -r -a PORTS <<< "$OPTARG" ;;
d) DURATION="$OPTARG" ;;
*) usage ;;
esac
done
# Check required arguments
[[ ${#PORTS[@]} -eq 0 ]] && usage
cleanup() {
sudo tc qdisc del dev lo root 2>/dev/null
echo "Traffic restored"
}
# Set up cleanup on script exit
trap cleanup EXIT INT TERM
# Block ports
echo "Blocking ports ${PORTS[*]} for $DURATION seconds..."
sudo tc qdisc add dev lo root handle 1: prio
sudo tc qdisc add dev lo parent 1:3 handle 30: netem loss 100%
for port in "${PORTS[@]}"; do
sudo tc filter add dev lo protocol ip parent 1:0 prio 3 u32 match ip dport "$port" 0xffff flowid 1:3
sudo tc filter add dev lo protocol ip parent 1:0 prio 3 u32 match ip sport "$port" 0xffff flowid 1:3
done
sleep "$DURATION"