我正在运行tcpdump
,使用python
中的subprocess
模块捕获网站的跟踪,使用以下代码:
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解决方案来解决同样的问题,并且尝试过发送SIGINT
和SIGTERM
,但是在每种情况下,我都得到了与OSError
相同的截断数据包消息。我也尝试过使用process.terminate()
,但这也不起作用。有什么方法可以让tcpdump
在sudo
模式运行时干净地退出吗?谢谢!
发布于 2017-04-14 10:52:46
正如OSError: Errno 1操作不允许的建议的那样,不允许终止该过程。因为您使用了sudo,所以也应该实例化sudo。也许你试过这个:
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
发布于 2017-06-07 19:37:06
由于tcpdump
需要su特权,所以您只需以su的形式运行脚本并在生成tcpdump之前检查它:
# 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'), ])
这样你就可以跑了
_process.terminate()
或
_process.kill()
向tcpdump
发送适当的信号
https://stackoverflow.com/questions/43406983
复制相似问题