分析本地网络流量,使用tshark和BASH更新配额

时间:2011-02-07 08:17:57

标签: bash automation wireshark network-traffic

我有一个有点奇怪的问题,我真的希望有人可以帮忙解决这个问题:

我上大学,无线网络在这里发出每个登录一定的配额/周(我的是2GB)。这意味着每周,我只能访问2GB的互联网 - 我的上传和下载一起最多必须达到2GB(我可以访问网页,告诉我剩余的配额)。我通常会获得一些恩典KB,但我们不考虑这个问题。

我的笔记本电脑运行Ubuntu并安装了conky系统监视器,我已将其配置为显示(除其他外)我剩余的无线配额。最初,我在网页和grep上找到了剩下的配额。但是,由于我的conky每5秒刷新一次并且我在无线连接上超过12小时,因此检查网页本身会导致我的无线配额失效。

为了解决这个问题,我想我可以做两件事之一:

  1. 更频繁地点击网页,这样做不会导致我的配额中断。
  2. 监控无线网卡上的无线流量,并将其从2GB
  3. 中减去

    (1)是我到目前为止所做的:我设置了一个cron作业,每分钟点击网页并将结果存储在我本地文件系统的文件中。 Conky随后读取此文件 - 无需点击该网页;没有失去无线配额,感谢conky。

    这个解决方案是一个12倍的胜利,但仍然不够。但是,我是实时数据的粉丝,不会进一步降低cron频率。

    所以,我唯一的其他解决方案是(2)。这是我发现有关wireshark和它的命令行版本tshark的时候。现在,这就是我认为我应该做的事情:

    1. daemonize tshark
    2. 设置tshark以监控流经无线网卡的流量(以KB或B或MB - 我可以稍后转换)
    3. 继续将此流量信息附加到file1
    4. 汇总file1中的流量信息,并从2GB中减去。将结果存储在file2
    5. 设置conky以读取file2 - 这是我的剩余配额
    6. 设置一个cron作业,每周一上午6点30分删除/ erase_the_contents_of file1(即每周配额重置时)
    7. 最后,我的问题是:

      1. 您认为有更好的方法吗?
      2. 如果没有,我如何设置tshark让它做我想做的事情?我还需要哪些其他脚本?
      3. 如果有帮助,网站会告诉我剩余的配额是KB

        我已经查看了tshark man page,遗憾的是,这对我来说毫无意义,是我的网络n00b。

        提前谢谢。

2 个答案:

答案 0 :(得分:0)

有趣的问题。我没有使用 tshark 的经验,所以我个人会用 iptables 来解决这个问题。

看着:

[root@home ~]# iptables -nvxL | grep -E "Chain (INPUT|OUTPUT)"
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
Chain OUTPUT (policy ACCEPT 9763462 packets, 1610901292 bytes)

我们看到iptables保持了通过每个链的字节数。因此,可以通过以下方式监控您的带宽使用情况:

  1. 系统启动时,从网络上检索剩余的配额
  2. iptables 中的字节标记归零(使用-z选项)
  3. 每隔X秒,从 iptables 获取使用并从配额中扣除
  4. 以下是using iptables for IP accounting的一些示例。

    注意事项

    这种方法有一些缺点。首先,你需要root权限来运行 iptables ,这意味着你需要以root身份运行conky,或者运行一个cron守护进程,它将当前值写入conky可以访问的文件。

    此外,并非所有INPUT / OUTPUT数据包都可以计入您的带宽分配,例如内部网访问,DNS等。可以通过匹配它们并将它们放在单独的 iptables 链中来过滤掉相关的连接(上面给出的链接中的示例)。一种更简单的方法(如果差异不是太大)将偶尔从网上获取您的实时配额,重置您的值并重新开始。

    如果现有的 iptables 规则很复杂或使用自定义链,那么它也会变得有点棘手。然后,您将需要一些 iptables 的知识来检索正确的值。

答案 1 :(得分:0)

这听起来像是vnstat的工作!

请参阅:How do I calculate network utilization for both transmit and receive