我已经安装了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密码,但页面仍然挂起。
答案 0 :(得分:1)
iftop
使用ncurses,这意味着您无法使用STDOUT捕获它。查看help,您可以提供以下选项:
-t text output mode
Use text interface without ncurses and print the output to STDOUT.
所以尝试传递这个参数,它可以解决你的问题。
虽然这里存在问题,但您的网络服务器不应该被允许sudo
。这是一个严重的安全问题。您可以考虑制作一个非常简单的Django应用程序,该应用程序仅运行此命令,并且不会处理任何其他数据以减少攻击面。