#! /bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

check_all_data(){
for port in `seq +port1+ 1 +port2+`
do
rm -rf /root/port_control/data_cache_${port}.txt  
cat /root/port_control/port_data.txt | grep ${port}
iptables -vnL | grep ${port}  | awk '{ print $2 }'  >> /root/port_control/data_cache_${port}.txt
Mag=`iptables -vnL | grep ${port}  | awk '{ print $2 }' `
    if [[ $Mag == *K* ]]; then
data1=`cat /root/port_control/data_cache_${port}.txt | grep K | tr -d "a-zA-Z" | awk '{sum+=$1} END {print sum}'`
    else
data1=0
    fi
    if [[ $Mag == *M* ]]; then
data2=`cat /root/port_control/data_cache_${port}.txt | grep M | tr -d "a-zA-Z" | awk '{sum+=$1} END {print sum}'`
    else
data2=0
    fi   
    if [[ $Mag == *G* ]]; then
data3=`cat /root/port_control/data_cache_${port}.txt | grep G | tr -d "a-zA-Z" | awk '{sum+=$1} END {print sum}'`
    else
data3=0
    fi
GB=`expr $data1 / 1048576 + $data2 / 1024 + $data3`
MB=`expr $data1 / 1024 + $data2 + $data3 \* 1024` 
KB=`expr $data1 + $data2 \* 1024 + $data3 \* 1048576`    
rm -rf /root/port_control/data_cache_${port}.txt   
    if [[ $GB -ne 0 ]]; then
echo -e "$GB GB" >>  /root/port_control/count.txt   
    elif [[ $MB -ne 0 ]]; then
echo -e "$MB MB" >>  /root/port_control/count.txt  
    elif [[ $KB -ne 0 ]]; then
echo -e "$KB KB" >>  /root/port_control/count.txt  
    fi         
done
}

sum_all_data(){
    if [[ -f /etc/redhat-release ]];then
        OS=CentOS
    elif cat /etc/issue | grep -q -E -i "debian";then
        OS=Debian
    elif cat /etc/issue | grep -q -E -i "ubuntu";then
        OS=Ubuntu
    elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then
        OS=CentOS
    elif cat /proc/version | grep -q -E -i "debian";then
        OS=Debian
    elif cat /proc/version | grep -q -E -i "ubuntu";then
        OS=Ubuntu
    elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then
        OS=CentOS
    else
        echo "Not supported OS, Please reinstall OS and try again."
        exit 1
    fi
sum=0
if [ -f "/root/port_control/count.txt" ]; then
Mag=`cat /root/port_control/count.txt`
    if [[ $Mag == *K* ]]; then
for kbdata in `cat /root/port_control/count.txt  | grep K | tr -d "a-zA-Z" | awk '{sum+=$1} END {print sum}'`
do
data1=$[$sum+$kbdata] 
done
fi
if [[ $Mag == *M* ]]; then
for mbdata in `cat /root/port_control/count.txt  | grep M | tr -d "a-zA-Z" | awk '{sum+=$1} END {print sum}'`
do
data2=$[$sum+$mbdata] 
done
fi      
if [[ $Mag == *G* ]]; then
for gbdata in `cat /root/port_control/count.txt  | grep G | tr -d "a-zA-Z" | awk '{sum+=$1} END {print sum}'`
do
data3=$[$sum+$gbdata] 
done  
fi  
GB=`expr $data1 / 1048576 + $data2 / 1024 + $data3`
rm -rf /root/port_control/count.txt
if [ $GB -ge +t+ ];then    
for port in `seq +port1+ 1 +port2+`
do
iptables -A INPUT -p tcp --dport ${port} -j DROP
done
echo "+port1+~+port2+ 流量在$(date "+%Y-%m-%d %H:%M:%S")已用了【$GB】GB ，超过了设定的限额"  >> /root/port_control/log.txt  
    if [[ "${OS}" == 'CentOS' ]];
then
    sed -i -e "/+port1+_+port2+_29482/d" /var/spool/cron/root
else
    sed -i -e "/+port1+_+port2+_29482/d" /var/spool/cron/crontabs/root
    fi 
  fi     
fi          

}

check_date(){
    if [[ -f /etc/redhat-release ]];then
        OS=CentOS
    elif cat /etc/issue | grep -q -E -i "debian";then
        OS=Debian
    elif cat /etc/issue | grep -q -E -i "ubuntu";then
        OS=Ubuntu
    elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then
        OS=CentOS
    elif cat /proc/version | grep -q -E -i "debian";then
        OS=Debian
    elif cat /proc/version | grep -q -E -i "ubuntu";then
        OS=Ubuntu
    elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then
        OS=CentOS
    else
        echo "Not supported OS, Please reinstall OS and try again."
        exit 1
    fi		
date="+d+"

day=$(date "+%Y%m%d")

if [ $day -ge $date ]; then
for port in `seq +port1+ 1 +port2+`
do
iptables -A INPUT -p tcp --dport ${port} -j DROP
done
    echo "+port1+~+port2+ 于$(date "+%Y-%m-%d")已到期"  >> /root/port_control/log.txt
    if [[ "${OS}" == 'CentOS' ]];
then
    sed -i -e "/+port1+_+port2+_29482/d" /var/spool/cron/root
else
    sed -i -e "/+port1+_+port2+_29482/d" /var/spool/cron/crontabs/root
    fi     
fi
}
 
check_all_data
sum_all_data
check_date
