小编典典

在python中处理tcpdump输出

python

我正在尝试处理python中的tcpdump输出。

我需要运行tcpdump(捕获数据包并向我提供信息)并读取输出并进行处理。

问题是tcpdump永远保持运行状态,我需要在输出后立即读取数据包信息并继续进行操作。

我尝试调查python的子进程,并尝试使用popen调用tcpdump并传递标准输出,但它似乎不起作用。

有关如何进行此操作的任何说明。

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()

阅读 225

收藏
2021-01-20

共1个答案

小编典典

您可以使tcpdump用“ -l”行缓冲。然后,您可以使用子流程捕获输出结果。

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
2021-01-20