我的环境是Python + Linux
我有一个可以从命令行运行的程序。用户按ctrl + c运行后,它会将一些数据保存在输出文件中(在我的情况下,程序为tcpdump,并在用户按ctrl + c)后将嗅探包存储在pcap文件中。没有Ctrl + C程序不会退出/停止。
我通过线程运行这个程序tcpdump,经过一些操作后我必须停止线程并收集pcap文件。
我的代码:
class MyClass(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.process = None
self.stdout = None
self.stderr = None
def run(self):
print '[+] Starting Sniffer at : ',Interface
cmd = 'tcpdump -i lo tcp port 8080 -w hello.pcap'
p = subprocess.Popen(cmd.split(),shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
self.stdout, self.stderr = p.communicate()
def stop(self):
print "[+] Trying to stop the sniffer thread.."
if self.process is not None:
self.process.terminate()
self.process = None
print '[+] Thread stopped'
s = MyClass()
s.start()
#some operation
s.stop()
# some opes
我遇到的问题我得到空的pcap文件。我想可能是因为以下问题之一,它正在发生
也许是因为没有ctrl + C它不会将输出保存到pcap文件中。有没有解决方案/黑客,强行保存这个?
我认为,即使在执行s.stop()之后线程也没有停止。我已经使用s.is_alive()确认了这一点。我在s.start()和s.stop()之前和之后得到 True
谢谢,