首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在sudo模式下在子进程中运行tcpdump干净地退出

如何在sudo模式下在子进程中运行tcpdump干净地退出
EN

Stack Overflow用户
提问于 2017-04-14 07:16:03
回答 2查看 2.2K关注 0票数 1

我正在运行tcpdump,使用python中的subprocess模块捕获网站的跟踪,使用以下代码:

代码语言:javascript
运行
复制
import subprocess
from tbselenium.tbdriver import TorBrowserDriver

site = "check.torproject.org"

try:

        process = subprocess.Popen(['sudo', 'tcpdump', '-l', '-i', 'eth0', '-w', 'trace.pcap'], stdout=subprocess.PIPE)

        with TorBrowserDriver("/path/to/tor-browser_en-US/") as driver:
            driver.load_url("https://" + site, wait_on_page=20)

        process.send_signal(subprocess.signal.SIGTERM)

except OSError:
    print "OSError"

代码给我一个OSError,当我试图在wireshark中打开pcap文件时,会得到以下错误框:

The capture file appears to have been cut short in the middle of a packet.

我读过this解决方案来解决同样的问题,并且尝试过发送SIGINTSIGTERM,但是在每种情况下,我都得到了与OSError相同的截断数据包消息。我也尝试过使用process.terminate(),但这也不起作用。有什么方法可以让tcpdumpsudo模式运行时干净地退出吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-14 10:52:46

正如OSError: Errno 1操作不允许的建议的那样,不允许终止该过程。因为您使用了sudo,所以也应该实例化sudo。也许你试过这个:

代码语言:javascript
运行
复制
import subprocess
import os
from tbselenium.tbdriver import TorBrowserDriver

site = "check.torproject.org"

try:
    process = subprocess.Popen(['sudo', 'tcpdump', '-l', '-i', 'eth0', '-w', 'trace.pcap'], stdout=subprocess.PIPE)

    with TorBrowserDriver("/path/to/tor-browser_en-US/") as driver:
        driver.load_url("https://" + site, wait_on_page=20)

    cmd = "sudo kill " + str(process.pid)
    os.system(cmd)
except OSError, e:
    print e
票数 1
EN

Stack Overflow用户

发布于 2017-06-07 19:37:06

由于tcpdump需要su特权,所以您只需以su的形式运行脚本并在生成tcpdump之前检查它:

代码语言:javascript
运行
复制
# Check we are running as root:
if os.geteuid() != 0:
    print('This script requires root privileges to capture packets. Try running this script as root.')
    raise SystemExit

# Start TCPDUMP
import subprocess, os
_process = subprocess.Popen(['tcpdump', '-nnvvv', '-s0', '-w', os.path.join('/tmp', 'output.pcap'), ])

这样你就可以跑了

代码语言:javascript
运行
复制
_process.terminate()

代码语言:javascript
运行
复制
_process.kill()

tcpdump发送适当的信号

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43406983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档