2021-08-29 00:02:47 +08:00

62 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
type function > /dev/null 2>&1
[ 0 -ne $? ] && echo 'Run with bash.' && exit 3
[ 1 -lt $# ] && echo "Usage: $0 [seconds]" && exit 1
[[ ! "$2" =~ ^[0-9]*$ ]] && "Usage: $0 [seconds]" && exit 2
CONF='/tmp/ipflow.conf'
function deal_forward {
for ip in $(cat $CONF); do
iptables -$1 FORWARD -s $ip -j COLBEN_UPLOAD
iptables -$1 FORWARD -d $ip -j COLBEN_DOWNLOAD
done
}
function insert_forward {
cat /proc/net/arp | grep '^10' | grep -v '00:00:00:00:00:00' | awk '{print $1}' > $CONF
deal_forward I
}
function clean_forward {
[ ! -f "$CONF" ] && return 0
deal_forward D
rm -f $CONF
}
function show_result {
clear
echo 'Download:'
iptables -nvxL FORWARD | grep COLBEN_DOWNLOAD | awk "{printf(\"%-4dKB/s:%-10s \n\",\$2/1024/$1,\$9)}" | sort -t: -r
echo -e '\033[s\033[1;25HUpload:'
line_num=1
iptables -nvxL FORWARD | grep COLBEN_UPLOAD | awk "{printf(\"%-4dKB/s:%-10s\n\",\$2/1024/$1,\$8)}" | sort -t: -r | while read line; do
let "line_num=1+$line_num"
echo -e "\033[$line_num;25H$line"
done
echo -e '\033[u'
sleep $1
}
function quit {
clean_forward
iptables -X COLBEN_UPLOAD
iptables -X COLBEN_DOWNLOAD
exit 0
}
iptables -N COLBEN_UPLOAD
iptables -N COLBEN_DOWNLOAD
trap "quit" 2 3 15
while :; do
insert_forward
iptables -Z FORWARD
show_result ${1:-2}
clean_forward
sleep 1
done