如何在Django中显示Iftop

时间:2015-03-03 11:52:44

标签: python html linux django

我已经安装了iftop,当我尝试将它集成到Django中时,它在命令行上工作正常,它根本不给我任何输出,但同时我没有收到错误。

views.py

def packets(request, template="linux_path/packets.html"):

context = {}
tcp_data = subprocess.Popen(['sudo', 'iftop','-i', 'eth1'], stdout=subprocess.PIPE)
raw_packets = tcp_data.stdout.read()
groups = []
for raw_packet in raw_packets.split("\n"):

    tokens = re.match("[5:5]", raw_packet)
    if tokens is None:
        continue
    else:
        packet_name, packet_length = tokens.groups()

    group = {
        "packet_name":packet_name, 
        "packet_length":packet_length
        }
    groups.append(groups)
return groups

HTML

{% extends "base.html" %}

{% block title %}
  Packet Log
{% endblock %}

{% block content %}

<table style="width: 100%">
  <thead> 
    <th>Name</th>
  </thead>
  <tbody>

    <tr>
      <td>{{function call here}}</td>
    </tr>

  </tbody>
</table>

{% endblock %}

我还在urls.py文件中输入了正确的代码

发生的情况是页面只是在加载时挂起,而不会移动到我的packets.html页面

知道我做错了什么?

一旦我开始工作,那么我将能够使用RE将数据操作为我想要的格式。

我甚至在该选项出现时在命令行输入了sudo密码,但页面仍然挂起。

1 个答案:

答案 0 :(得分:1)

iftop使用ncurses,这意味着您无法使用STDOUT捕获它。查看help,您可以提供以下选项:

-t text output mode
       Use text interface without ncurses and print the output to STDOUT.

所以尝试传递这个参数,它可以解决你的问题。

虽然这里存在问题,但您的网络服务器不应该被允许sudo。这是一个严重的安全问题。您可以考虑制作一个非常简单的Django应用程序,该应用程序仅运行此命令,并且不会处理任何其他数据以减少攻击面。