linux系统下通过tc命令实现对端口的限速,实用脚本

使用方法,创建.sh脚本文件,将以下内容复制到脚本文件中保存退出即可。

#!/bin/sh

#通过tc命令实现对端口的限速

#获取网卡名称
function ips(){
	local nics=$(route -n | grep ^0.0.0.0 | awk '{print $8}') 
	for nic in $nics
	do
	    local ip=$(ifconfig $nic | grep -E 'inet\s+' | sed -E -e 's/inet\s+\S+://g' | awk '{print $2}')
	    echo $nic
	done
}

#声明变量
MIN=10
MAX=15
CARDNAME=eth0



DATA=`ips`;
array=(${DATA});
echo "共有"${#array[@]}"个网卡";
for var in ${array[@]};
do
   CARDNAME=$var;
done

echo ${CARDNAME}


/sbin/tc qdisc del dev ${CARDNAME} root	   #先清空之前的规则
/sbin/tc qdisc add root dev ${CARDNAME} handle 1: htb default 4 #创建规则默认使用策略1.4
/sbin/tc class add dev ${CARDNAME} parent 1: classid 1:1 htb rate 1000mbit  #创建根策略,限速值1000M
/sbin/tc class add dev ${CARDNAME} parent 1:1 classid 1:2 htb rate ${MIN}mbit ceil ${MAX}mbps   #基于根策略创建子策略  并设置最大最小限速
/sbin/tc class add dev ${CARDNAME} parent 1:1 classid 1:3 htb rate ${MIN}mbit ceil ${MAX}mbps
/sbin/tc class add dev ${CARDNAME} parent 1:1 classid 1:4 htb rate 100mbit
/sbin/tc filter add dev ${CARDNAME} protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:2  #将子策略绑定端口
/sbin/tc filter add dev ${CARDNAME} protocol ip parent 1:0 prio 1 u32 match ip sport 8080 0xffff flowid 1:3

你可能感兴趣的:(linux,bash,网络)