【问题标题】:Script to count number of incoming packets per second?脚本来计算每秒传入数据包的数量?
【发布时间】:2018-08-02 18:42:00
【问题描述】:

目前,我正在尝试编写一个在启动时运行的脚本(Debian Linux),并每隔十秒计算每秒传入数据包的数量。这样做的目的是研究减轻 DoS 攻击的不同方法,但我真的不知道如何设置脚本的这个基本功能。我已经对实现这一目标的最佳方法进行了大量研究,但真的找不到我想要的东西。由于我是 Linux 脚本的初学者,有人可以用外行的术语描述完成此任务的过程吗?非常感谢!

【问题讨论】:

  • This 应该可以帮助您入门

标签: linux scripting debian denial-of-service


【解决方案1】:

试试这个:

#!/bin/bash

old_packets=0

while true; do
    packets=$(awk '$1 == "eth0:"{print $3}' /proc/net/dev)
    if ((old_packets)); then
        clear
        echo "$(bc <<< "($packets - $old_packets) / 10") packets/seconds"
    fi
    old_packets=$packets
    sleep 10
done

eth0 是目标接口。

编辑:

来自 cmets,如果您想在速率超过 20 个数据包/秒的情况下禁用 eth0

#!/bin/bash

old_packets=0

while true; do
    packets=$(awk '$1 == "eth0:"{print $3}' /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文件,它在启动过程结束时执行。

【讨论】:

  • 哪个变量用于存储每秒发送的数据包数?我对脚本非常陌生,所以有些语法对我来说有点混乱。
  • 使用 echo "$(bc &lt;&lt;&lt; "($packets - $old_packets) / 10") packets/seconds" 行每 10 秒计算一次
  • 好的。如果我试图在 If 语句中使用数据包数量(即,如果传入数据包的数量 > x,则禁用 eth0 连接)我会怎么做?相反,我应该在 If 语句中使用哪个变量(如果该术语适用)?我已经习惯了依赖变量来存储信息的较新的语言(C++、Java),所以也许这就是我对这种逻辑感兴趣的原因。再次感谢您的帮助。
  • 澄清一下,rate=$(bc &lt;&lt;&lt; "($packets - $old_packets) / 10") 行每 10 秒检查一次接收到的数据包数量,并将该值存储在变量 rate?
  • 感谢您的所有帮助。我非常感谢您为进一步研究我所做的一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多