在python中处理tcpdump输出

ash*_*h g 12 python subprocess popen tcpdump

我试图在python中处理tcpdump输出.

我需要的是运行tcpdump(捕获数据包并给我信息)并读取输出并处理它.

问题是tcpdump一直在运行,我需要在输出后立即读取数据包信息并继续执行.

我试着查看python的子进程并尝试使用popen调用tcpdump并管道stdout但它似乎没有用.

关于如何进行此操作的任何指示.

import subprocess

def redirect():
    tcpdump = subprocess.Popen("sudo tcpdump...", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
    while True:
        s = tcpdump.stdout.readline()
        # do domething with s

redirect()
Run Code Online (Sandbox Code Playgroud)

sws*_*phe 19

您可以使用"-l"使tcpdump行缓冲.然后,您可以使用子进程捕获输出.

import subprocess as sub

p = sub.Popen(('sudo', 'tcpdump', '-l'), stdout=sub.PIPE)
for row in iter(p.stdout.readline, b''):
    print row.rstrip()   # process here
Run Code Online (Sandbox Code Playgroud)