内核的流量整形层基本上是一个连接到网卡的数据包调度程序.因此,一个流量整形策略适用于一个网卡.

在您的情况下,您可以做的是创建一个附加IP和带宽的列表,然后,为每个IP创建:

>由classid标识的一个流量整形规则

>一个netfilter规则,将数据包标记为特定标记值

> One Filter将数据包标记绑定到classid,从而将流量控制规则应用于指定的数据包.

@Zoredache给出的示例有效,但我个人更喜欢使用Netfilter功能而不是TC来过滤数据包,而使用HTB代替CBQ来进行抖动算法.所以你可以试试这样的东西(需要Bash 4用于关联数组):

#! /bin/bash

NETCARD=eth0

MAXBANDWIDTH=100000

# reinit

tc qdisc del dev $NETCARD root handle 1

tc qdisc add dev $NETCARD root handle 1: htb default 9999

# create the default class

tc class add dev $NETCARD parent 1:0 classid 1:9999 htb rate $(( $MAXBANDWIDTH ))kbit ceil $(( $MAXBANDWIDTH ))kbit burst 5k prio 9999

# control bandwidth per IP

declare -A ipctrl

# define list of IP and bandwidth (in kilo bits per seconds) below

ipctrl[192.168.1.1]="256"

ipctrl[192.168.1.2]="128"

ipctrl[192.168.1.3]="512"

ipctrl[192.168.1.4]="32"

mark=0

for ip in "${!ipctrl[@]}"

do

mark=$(( mark + 1 ))

bandwidth=${ipctrl[$ip]}

# traffic shaping rule

tc class add dev $NETCARD parent 1:0 classid 1:$mark htb rate $(( $bandwidth ))kbit ceil $(( $bandwidth ))kbit burst 5k prio $mark

# netfilter packet marking rule

iptables -t mangle -A INPUT -i $NETCARD -s $ip -j CONNMARK --set-mark $mark

# filter that bind the two

tc filter add dev $NETCARD parent 1:0 protocol ip prio $mark handle $mark fw flowid 1:$mark

echo "IP $ip is attached to mark $mark and limited to $bandwidth kbps"

done

#propagate netfilter marks on connections

iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark

– 编辑:忘记默认类并在脚本末尾传播标记.

linux ip 流量 脚本,如何通过IP在Linux中进行流量整形?相关推荐

  1. linux查看局域网ip的脚本,检测网段IP使用情况的shell脚本

    #!/bin/bash #main--- network=192.168.1 ping_count=3 IP=1 :>IP_use :>IP_idle :>ping_action e ...

  2. linux 网卡流量脚本,每5分钟统计Linux 网卡流量的脚本

    每5分钟统计Linux 网卡流量的脚本 -- 脚本内容 #!/bin/bash eth="eth0" sec=300 echo -ne "date       start ...

  3. linux 运行lua脚本语言,你知道在linux下搭建lua脚本语言的编程环境?

    描述 lua是脚本语言的一种,具体的该脚本的介绍可百度,本文介绍Linux系统下搭建lua编程环境的步骤,以及在搭建过程中碰到的种种问题. 一.下载获取lua源码 地址http://www.lua.o ...

  4. 会linux基本命令是脚本语言吗,如何理解Linux Shell和基本Shell脚本语言?

    理解Linux Shell: shell:一个命令行解释器,通过执行命令或脚本,帮助用户与操作系统打交道. process:进程,用户执行的任务是进程,但进程不只是任务. file:文件放在硬盘上,包 ...

  5. linux java启动脚本文件_不错的linux下通用的java程序启动脚本

    #!/bin/sh #该脚本为Linux下启动java程序的通用脚本.即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用. # #Author: tudaxi ...

  6. linux shell 生产脚本汇总,【汇总】Linux常用脚本shell

    [crontab] #每天6:00 执行a.sh 00 6 * * * /bin/sh /home/work/rxShell/a.sh #每天3:20 执行a1.sh 20 3 * * * /bin/ ...

  7. 在linux跑python脚本将数据输出到文件中

    有时候python代码必须要在linux环境运行 在xshell运行脚本,将文件输出到文件不能使用下面的方法输出 import jsonwith open("tmp.txt", & ...

  8. linux服务器shell脚本,分享个简易版Linux服务器初始化Shell脚本

    该Shell脚本主要用于新安装Linux服务器系统的初始化工作,具体包括: 关闭IPv6模块 关闭SELinux 让vim显示颜色 设置系统语言编码 优化系统服务 内核参数优化等. 可以根据自己的实际 ...

  9. linux定时任务执行脚本文件找不到,linux中脚本放入计划任务当中为什么没有执行呢?...

    如何搭建linux下c++开发环境 方法/步骤 1 1.下载 Linux 下的 Oracle Instant Client 有rpm包和zip包两种,下载任意一种即可,这里以下载的 zip 包为例,下 ...

最新文章

  1. 实验室蒋田仔研究员:脑网络组图谱近10年研究详解【附PPT】
  2. python装饰器改变命运
  3. 全球域名解析商域名增量Top10:万网增量及涨幅皆第三
  4. 【MAC】Ncnn 编译so文件方案
  5. bupt summer training for 16 #3 ——构造
  6. opencv安装教程python3.7_Mac下安装使用Python-OpenCV,解决opencv3安装完成无法使用的问题 - pytorch中文网...
  7. 关于oracle with as用法
  8. java 源树_【Java源码】树-概述
  9. laytpl语法_浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
  10. QT设置选中的文字加下划线
  11. 量子计算机怎样输入数据,量子计算入门
  12. .NET Standard(1)——.NET Standard是什么
  13. Linux 流量监控
  14. python获取远程主机信息_python远程获取主机监控信息
  15. Linux那些事儿之我是U盘(4)想到达明天,现在就要启程
  16. 什么叫SSH?原理详解,看这一篇就够了!
  17. 赶集网和58同城网的赌局
  18. html生成日期表,如何从此HTML表格提取日期?
  19. 【稳定性day3】蘑菇街的运维体系 - 如何撑住双十一
  20. 小梅哥FPGA学习笔记——串口发送模块

热门文章

  1. 新增书籍类别,下拉框加载,书籍上下架操作
  2. 国际项目管理师PMP证书,值得考嘛?
  3. 兴达易控Modbus转Profinet网关将丹佛斯变频器接入西门子1200PLC配置案例
  4. Java 编程风格军规,看这一篇就够了
  5. pycharm读取JY-901S数据
  6. 基于51单片机的智能太阳能充电器带自动断开功能proteus仿真原理图PCB
  7. 升级鸿蒙系统的应用名称,华为升级鸿蒙系统名单软件下载-华为升级鸿蒙系统名单软件 v1.0-友情手机站...
  8. 计算机网络——会话层、表示层、应用层
  9. RTL8211D(I)业级网口芯片bsp自适应修改
  10. PCB孔铜厚度标准及成品铜厚构成、由来