玩蛇网提供最新Python编程技术信息以及Python资源下载!

python如何才能实时获取tcpdump的输出

linux tcpdump命令行执行后回显是一行一行输出的,但是如果用python的subprocess执行tcpdump命令就会成为一段一段的回显,实时性不高。这个怎么解决?有人说是tcpdump本身的原因,和linux缓存有关系,但是python有没有办法实现和命令行一行一行输出的效果。
代码如下

#coding=utf-8
import subprocess

p = subprocess.Popen("tcpdump udp -i eth0",shell=True,stdout=subprocess.PIPE)

while p.stdout.readline()!=' ':

    line = p.stdout.readline()
    line = line.strip()
    print line

tcpdump -l 选项

#!/usr/bin/env python

import subprocess

subprocess.call("echo your_password | sudo -S tcpdump", shell=True)

你给的代码有bug 在这一行,while p.stdout.readline()!=' '
改正如下!

#coding=utf-8
import subprocess

p = subprocess.Popen("tcpdump udp -i eth0",shell=True,stdout=subprocess.PIPE)

while True:
    line = p.stdout.readline()
    line = line.strip()
    if line == '':
        break
    print line

我也弄了这个, 用于被动启动某个端口服务!

import subprocess as sub

# 注意参数-l很重要(行显)
# 在Mac上测试, 所以加了sudo
pipe = sub.Popen(['sudo', 'tcpdump', '-l', '-nn', '-i', 'lo0', 'dst portrange 200000-30000'], stdout=sub.PIPE)

while True:
    for row in iter(p.stdout.readline, b''):
        print(row)

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd14109.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月31日 - 11时10分11秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules