python实时获取tcpdump输出

发布于 2022-09-04 12:12:31 字数 402 浏览 17 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

鸢与 2022-09-11 12:12:32

你给的代码有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
暖心男生 2022-09-11 12:12:32
#!/usr/bin/env python

import subprocess

subprocess.call("echo your_password | sudo -S tcpdump", shell=True)
人间不值得 2022-09-11 12:12:32

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

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)
不念旧人 2022-09-11 12:12:31

tcpdump -l 选项

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文