https://github.com/GuoTengda1993/pynetem
因为 tc/netem 只在 linux 系统中存在,所以只能在 Linux 系统中安装:
pip install pynetem
### 使用
有两种模式:命令行模式、Web 模式,两种模式下每次传入新规则都会将旧规则替换掉。
pynetem -h
可以查看帮助信息,参数和 tc/netem 基本一致,只使用上有些许区别,点击此链接即可查看 tc/netem 的相关文档:netem
向远端 linux 服务器发送需添加如下参数:
--host 远端服务器IP地址
--usrname 用户名
--password 密码
使用示例:
# 该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送
pynetem -i eth0 --delay=100ms,10ms,30%
# 该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30%
pynetem -i eth0 --loss=1%,30%
# 该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包
pynetem -i eth0 --duplicate=1%
# 该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。 (内核版本需在2.6.16以上)
pynetem -i eth0 --corrupt =0.2%
# 该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟 10ms
pynetem -i eth0 --delay=10ms --reorder=25%,50%
# 该命令将 eth0 网卡的传输设置为 延迟100ms,同时限定网卡的出速率
pynetem -i eth0 --delay=100ms --rate=256kbit
# 该命令将 eth0 网卡的传输设置为 在符合CIDR条件下延迟100ms&限定网卡的出速率
pynetem -i eth0 --delay=100ms --rate=256kbit --dst=10.10.10.10/32
8899
端口,也可以指定其它端口。
pynetem --web --port=9000
共有 8 个 API 可以调用:
[GET] /pynetem/help -- Get demo post data and simple description
[GET] /pynetem/listInterfaces -- Get interfaces name of host
[GET] /pynetem/getRules?eht=<interface name> -- Get qdisc rules by interface
[GET/DELETE] /pynetem/clear?eth=<interface name> -- Clear all rules
[POST] /pynetem/setRules?eth=<interface name> -- Set tc qdisc rule
[POST] /pynetem/brctl/addbr -- Set bridge, the bridge name is pynetem_bridge by defaut
[GET/DELETE] /pynetem/brctl/delbr -- Delete pynetem_bridge
[POST] /pynetem/brctl/addif -- Add interface(s) to pynetem_bridge
请求体中,如果设置参数为None
或""
,则会忽略此参数,请求体示例如下:
[POST] /pynetem/setRules?eth=<interface name>
{
"delay": "100ms 10ms 25%",
"distribution": "normal",
"reorder": "25% 50%",
"loss": "0.3% 25%",
"duplicate": "1%",
"corrupt": "0.1%",
"rate": "256kbit",
"buffer": 1600,
"limit": 3000,
"dst": "10.10.10.0/24"
}
配置 Linux 网桥:[POST] /pynetem/brctl/addbr
stp
is "on" by default.
{
"interfaces": ["eth0", "eth1"],
"stp": "on"
}
需要注意的是,当按下ctrl + c
关停 web 服务时,会自动将所有网卡接口下的所有 qdisc 规则全部清空。