免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1000 | 回复: 0
打印 上一主题 下一主题

用shell脚本自动添加基于mac地址的流量限制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-03 21:56 |只看该作者 |倒序浏览
用shell脚本自动添加基于mac地址的流量限制
在使用fw和u32过滤器限制基于客户mac地址的上传和下载速率时,由于客户端经常有新电脑接入,为了添加新的规则,经常要比较mac地址,为了省事写了个脚本自动添加未纳入限制的mac地址的新规则。
#!/bin/sh
#get fw unload mac
arp |grep eth2|
awk  '{print $3"\t"$1}'  >/tmp/tt
EE=`iptables -L -t mangle |grep MAC |
awk '{printf $7"#"}'`
awk '{if (!( match(v1,$1))){print $1}   }' v1=$EE  
/tmp/tt >/tmp/fwmac
#get u32 unload mac
DD=`tc filter ls dev eth2 |
grep -E 'at -16|at -12' |awk
'{if(NR%2==1){macstr=substr($2,1,8)macstr;}else{macstr="#"substr($2,5,4)mac
str;}}END{print
macstr}'`
awk '{if (!( match(v1,gsub(":","",$1)))){print $1}   }' v1=$DD  
/tmp/tt >/tmp/u32mac
#get max mark
iptables -L -t mangle| grep MARK |awk
'{print $10}' > /tmp/max
max=`awk '{if((max_val+0) /dev/null
2>&1
then
first=0
else
first=1
fi
awk 'BEGIN{
speed="80"
rul1_1="iptables -A PREROUTING -t
mangle  -m mac --mac-source "
rul1_2=" -j MARK --set-mark "
rul2_1="tc
class add dev eth0 parent 100:1 classid 100:"
rul2_2=" cbq bandwidth 10Mbit
rate "
rul2_3="Kbit allot 1513 weight 8Kbit prio 6 maxburst 8 avpkt 1000
bounded"
rul3_1="tc qdisc add dev eth0 parent 100:"
rul3_2=" sfq quantum
1514b perturb 15"
rul4_1="tc filter add dev eth0 parent 100:0 protocol ip
prio 3 handle "
rul4_2=" fw classid 100:"
rul5_2="tc qdisc add dev eth0
root handle 100: cbq bandwidth 10Mbit avpkt 1000"
rul5_3="tc class add dev
eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514
weight 60Kbit prio 8 maxburst 8
avpkt 1000
bounded"
}
{{if((v3==1)&&(NR==1)){ print
rul5_2"\n"rul5_3;}}        print rul1_1 $1 rul1_2 v2++"\n" rul2_1 v2 rul2_2
speed rul2_3 "\n"rul3_1 v2
rul3_2"\n"rul4_1 (v2+0-1) rul4_2 v2"\n"   } '
v2=$fw_num v3=$first /tmp/fwmac >/tmp/fwmacadd
chmod u+x /tmp/fwmacadd
#/tmp/fwmacadd
#make u32script
if tc class ls dev eth2 |
grep 200:1>/dev/null
2>&1
then
first1=0
else
first1=1
fi
awk
'BEGIN{
speed2="700"
rul6_1="tc qdisc add dev eth2 root handle 200: cbq
bandwidth 10Mbit avpkt 1000"
rul6_2="tc class add dev eth2 parent 200:0
classid 200:1 cbq bandwidth 10Mbit rate 40000Kbit allot 1514 weight 200Kbit prio
8 maxbur
st 8 avpkt 1000 bounded"
rul7_1="tc class add dev eth2 parent
200:1 classid 200:"
rul7_2=" cbq bandwidth 10Mbit rate "
rul7_3="Kbit
allot 1513 weight 60Kbit prio 5 maxburst 8 avpkt 1000 bounded"
rul8_1="tc
qdisc add dev eth2 parent 200:"
rul8_2=" sfq quantum 1514b perturb
15"
rul9_1="tc filter add dev eth2 parent 200:0 protocol ip prio 5 u32 match
u16 0x0800 0xffff at -2 match u32 0x"
rul9_2=" 0xffffffff at -12 match u16
0x"
rul9_3=" 0xffff at -14 flowid
200:"
}
{{if((v5==1)&&(NR==1)){print rul6_1 "\n" rul6_2 "\n";}}
v4=v4+1; print rul7_1 v4 rul7_2 speed2  rul7_3 "\n" rul8_1 v4 rul8_2 "\n"
ru
l9_1 substr($1,5,8) rul9_2 substr($1,1,4)  rul9_3 v4 "\n" }' v4=$fw_num
v5=$first1 /tmp/u32mac >/tmp/u32macadd
chmod u+x
/tmp/u32macadd
/tmp/u32macadd
rm /tmp/fwmacadd /tmp/fwmac /tmp/max /tmp/tt /tmp/u32macadd
/tmp/u32mac
  该脚本可以加入crontab -e
*/6 * * * * /tmp/addmac
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100089/showart_2045069.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP