subprocess - python实时获取tcpdump输出

 罗帅飞1 发布于 2022-10-26 15:48

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
4 个回答
  • 我也弄了这个, 用于被动启动某个端口服务!

    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-10-27 01:18 回答
  • #!/usr/bin/env python
    
    import subprocess
    
    subprocess.call("echo your_password | sudo -S tcpdump", shell=True)
    2022-10-27 01:18 回答
  • 你给的代码有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-10-27 01:18 回答
  • tcpdump -l 选项

    2022-10-27 01:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有