计算每秒传入数据包数量的脚本?
Script to count number of incoming packets per second?
目前,我正在尝试编写一个脚本,该脚本将在启动时 运行 (Debian Linux),并每十秒计算一次每秒传入数据包的数量。这样做的目的是研究减轻 DoS 攻击的不同方法,但我真的不知道如何设置脚本的这个基本功能。我已经对完成此任务的最佳方法进行了大量研究,但确实找不到我要找的东西。由于我是 Linux 脚本编写的初学者,有人可以用通俗易懂的语言描述完成此过程的过程吗?非常感谢!
试试这个:
#!/bin/bash
old_packets=0
while true; do
packets=$(awk ' == "eth0:"{print }' /proc/net/dev)
if ((old_packets)); then
clear
echo "$(bc <<< "($packets - $old_packets) / 10") packets/seconds"
fi
old_packets=$packets
sleep 10
done
其中 eth0
是目标接口。
编辑:
来自评论,如果你想禁用 eth0
如果速率超过 20 packets/seconds :
#!/bin/bash
old_packets=0
while true; do
packets=$(awk ' == "eth0:"{print }' /proc/net/dev)
if ((old_packets)); then
clear
# the variable rate contains the packets/seconds
rate=$(bc <<< "($packets - $old_packets) / 10")
echo "$rate packets/seconds"
if ((rate>20)); then
ip link set eth0 down
fi
fi
old_packets=$packets
sleep 10
done
如果你想 运行 这个脚本在启动时,你可以编辑你的 /etc/rc.local
文件,它在启动过程结束时执行。
目前,我正在尝试编写一个脚本,该脚本将在启动时 运行 (Debian Linux),并每十秒计算一次每秒传入数据包的数量。这样做的目的是研究减轻 DoS 攻击的不同方法,但我真的不知道如何设置脚本的这个基本功能。我已经对完成此任务的最佳方法进行了大量研究,但确实找不到我要找的东西。由于我是 Linux 脚本编写的初学者,有人可以用通俗易懂的语言描述完成此过程的过程吗?非常感谢!
试试这个:
#!/bin/bash
old_packets=0
while true; do
packets=$(awk ' == "eth0:"{print }' /proc/net/dev)
if ((old_packets)); then
clear
echo "$(bc <<< "($packets - $old_packets) / 10") packets/seconds"
fi
old_packets=$packets
sleep 10
done
其中 eth0
是目标接口。
编辑:
来自评论,如果你想禁用 eth0
如果速率超过 20 packets/seconds :
#!/bin/bash
old_packets=0
while true; do
packets=$(awk ' == "eth0:"{print }' /proc/net/dev)
if ((old_packets)); then
clear
# the variable rate contains the packets/seconds
rate=$(bc <<< "($packets - $old_packets) / 10")
echo "$rate packets/seconds"
if ((rate>20)); then
ip link set eth0 down
fi
fi
old_packets=$packets
sleep 10
done
/etc/rc.local
文件,它在启动过程结束时执行。