利用iptable limit模块限制ip下载速度

#!/bin/bash

#SPEED=`/bin/bash  /etc/zabbix/script/flow.sh |cut -d ‘.‘ -f1`

SPEED=`/bin/bash  /root/flow.sh |cut -d ‘.‘ -f1`

[ -z $SPEED ]&& SPEED=1

EXIST=`iptables -n -v -L |grep CC-FLOW|wc -l`

if [ $SPEED -gt 1250 ];

then

IP=`netstat -antup|grep ESTABLISHED|awk ‘{print $5}‘ |grep  -o  "\([0-9]\{1,3\}\.\)\{1,3\}[0-9]\{1,3\}"|sort  -rn |uniq -c|awk ‘{print $2}‘`    #awk截取客户端字段、sort 和uniq是防止ip重复

if [ $EXIST -eq 0 ];then

iptables -N CC-FLOW   #创建自定义链CC-FLOW

iptables -A OUTPUT -j CC-FLOW    #把OUTPUT规则引到CC-FLOW

fi

for  i  in $IP

do

x=`iptables  -n -v -L |grep  $i|wc -l`

if [ $x -ne 0 ];then

continue

fi

iptables -A CC-FLOW -d $i  -m limit --limit 150/s -j ACCEPT  #限制$i下载输入为每秒150个包,一个包一般是1540字节左右,所以速度大概在200kbyte

iptables -A CC-FLOW -d $i  -j DROP    #超过的drop

done

else

if [ $EXIST -ne 0 ] && [ $SPEED -lt 500 ]; then

iptables -F CC-FLOW           #清空cc-flow的规则

iptables -D OUTPUT -j CC-FLOW     #清空cc-flow与output的链接,否则删除不了链接

iptables -X CC-FLOW        #删除cc-flow链

fi

fi

flow.sh计算流量脚本:

#!/bin/bash

old_inbw=`cat /proc/net/dev | grep eth0 | awk -F‘[: ]+‘ ‘{print $3}‘`

old_outbw=`cat /proc/net/dev | grep eth0 | awk -F‘[: ]+‘ ‘{print $11}‘`

sleep 5

new_inbw=`cat /proc/net/dev | grep eth0 | awk -F‘[: ]+‘ ‘{print $3}‘`

new_outbw=`cat /proc/net/dev | grep eth0 | awk -F‘[: ]+‘ ‘{print $11}‘`

inbw=$[ $new_inbw - $old_inbw ]

outbw=$[ $new_outbw - $old_outbw ]

# echo "eth0: IN:$inbw bytes  OUT:$outbw bytes"

IN=`echo "scale=2;$inbw/5/1024" |bc |awk ‘{printf "%.2f\n", $0}‘`

OUT=`echo "scale=2;$outbw/5/1024" |bc |awk ‘{printf "%.2f\n", $0}‘`

echo "$IN+$OUT" |bc

old_inbw=${new_inbw}

old_outbw=${new_outbw}

var0=$[$var0 + 1]

时间: 2024-10-09 00:11:39

利用iptable limit模块限制ip下载速度的相关文章

利用ansible modules模块来自定义集群管理

前沿: 在一些个特定环境下,用ansible做集群管理还是很棒的,这两天看了他的模块,官方提供了很多,就算不够,你也可以自定义定制. 话说我挺喜欢他的modules模块的,够直接 !!! 我这里就说些常见的ansible的modules吧. 下面的ansible service一看大家就懂了,就是服务状态的管理模块 [[email protected] ~ ]$ ansible web -m service -a "name=nginx state=started" 10.150.14

php利用新浪接口查询ip获取地理位置示例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php function getIPLoc_sina($queryIP){   $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP;   $ch = curl_init($url);    curl_setopt($ch,CURLOPT_ENCODING ,'utf8');

optparser 模块 提取IP,端口,用户名,密码参数模板

import optparse #class FtpClient(object): #自定义类可以自己修改 '''ftp客户端''' #def __init__(self): parser = optparse.OptionParser() parser.add_option("-s","--server",dest = "server",help="ftp server ip_addr") parser.add_option

关于socket模块获取ip失败报错

问题:socket模块获取ip失败报错 In [64]: import socket In [71]: socket.gethostname() Out[71]: 'web01' In [72]: host_name = socket.gethostname() In [73]: socket.gethostbyname(host_name) --------------------------------------------------------------------------- g

利用python httplib模块 发送Post请求测试web服务是否正常起来!

最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己. 由于本人也刚接触这块不久属于菜鸟级别,所以在任务之前,只能上网把基于post请求的web监控了解清楚,这些资料网上很多,因为本人认为完成这类任务最重要的就是要将实现的原理研究清楚,写程序只是实现的工具,如果大的逻辑不正确,后面的都是白忙活. 了解post发送请求的原理后,利用Python的httplib模块进行逻辑

利用pip安装模块(以安装pyperclip为例)

>任务:利用pip安装pyperclip模块 >前提:你已经在你的电脑里面安装啦Python2.7的Windows版本,并且已经配置了环境变量 >实现步骤 >>打开你的Python2.7安装文件夹,里面有一个scripts文件 >>注意:在DOS窗口中只有在Python安装路径中的scripts目录下执行pip才会弹出相应的pip信息 >>在DOS窗口中cd到Python安装路径中的scripts目录 >>运行 pip install py

利用腾讯接口进行IP定位

关于IP定位,通常用的两种方式 有一种是通过软件,也就是QQ2009版本,在网上一搜一大把,这个东西可以知道对面的ip    还有一种是通过腾讯的接口进行定位.今天我给大家说一下利用腾讯的接口进行定位IP 教程里面会用到一款工具叫做NtrQQ工具,官方网站的地址如下: http://www.ntrqq.net/ 可在里面下载ntrqq工具.但是官网上的注册账号,我就贡献出一个我下载好的吧 http://pan.baidu.com/s/1miNZIBY 密码为2fdp   失效的话联系我,我重新发

利用Nginx sub模块对网页内容进行替换

在我们环境下,经常需要运营对网站进行测试,但是偶尔会出现不知道是在测试环境还是正式环境,因为测试环境都是通过Nginx反向代理进行访问.因此本文利用Nginx进行网页内容替换,然后在醒目位置进行提醒,以达到对测试环境的标识作用 在编译nginx的时候添加--with-http_sub_module以加载sub模块 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module 

利用阴影增加模块的立体感

这是一种利用贝塞尔曲线显示阴影增加模块立体感的方法 具体代码如下 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 200, 200)]; [imageView setImage:[UIImage imageNamed:@"001"]]; UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:imageView