2013-05-11 140 views
0

我正在使用python中的脚本,首先将ettercap设置为ARP中毒,然后启动urlsnarf以记录URL。我想先让ettercap开始,然后在中毒时启动urlsnarf。问题是这些作业必须同时运行,然后urlsnarf显示输出。所以我认为它会很好如果我可以在后台运行ettercap而不等待退出,然后运行urlsnarf。我尝试了命令nohup,但是当时urlsnarf必须显示脚本刚刚结束的url。我运行:在后台运行控制台应用程序

subprocess.call(["ettercap", 
       "-M ARP /192.168.1.254/ /192.168.1.66/ -p -T -q -i wlan0"]) 

,但我得到:

ettercap NG-0.7.4.2版权2001-2005亚罗士打& NAGA

MITM法“ARP /192.168.1.254/ /192.168.1.66/-p -T -q -i为wlan0' 不支持......

这意味着某种程度上的参数没有被正确

传递

回答

1

您可以使用Python标准库中的子进程模块将ettercap作为独立进程产生,该进程将与父进程同时运行。使用子进程中的Popen类,你将能够产生你的ettercap进程运行你的其他进程,然后在完成时杀掉​​ettercap进程。更多的信息在这里:Python Subprocess Package

import shlex, subprocess 

args = shlex.split("ettercap -M ARP /192.168.1.254/ /192.168.1.66/ -p -T -q -i wlan0") 
ettercap = subprocess.Popen(args) 

# program continues without waiting for ettercap process to finish. 
+0

你需要在子进程中使用Popen类。调用函数不会是你想要的,因为它将等待过程完成。对于每个参数需要在列表中单独的元素。 Ie [“ettercap”,“-M”,“APR”,...] – mshildt 2013-05-12 00:28:34

+0

这个:subprocess.call([“ettercap”,“-M”,“ARP”,“/192.168.1.254/”,“/ 192.168.1.1/“,”-p“,”-T“,”-q“,”-i“,”wlan0“])的作用与os.system完全相同(”ettercap -M arp /192.168.1.254//192.168.1.66/ -p -T -q -i wlan0“) – user2373081 2013-05-12 10:10:12

+0

正确。 subprocess.call()和os.system()都调用一个外部进程并等待它完成。由于您不想等待流程完成,因此需要使用subprocess.Popen()以便与您的主程序同时运行子流程: 'import shlex,subprocess args = shlex.split( “ettercap -M ARP /192.168.1.254/192.168.1.66/ -p -T -q -i wlan0”) ettercap = subprocess.Popen(args) #程序继续而不等待ettercap进程完成。 ' – mshildt 2013-05-13 13:43:39