我正在使用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' 不支持......
这意味着某种程度上的参数没有被正确
传递
你需要在子进程中使用Popen类。调用函数不会是你想要的,因为它将等待过程完成。对于每个参数需要在列表中单独的元素。 Ie [“ettercap”,“-M”,“APR”,...] – mshildt 2013-05-12 00:28:34
这个: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
正确。 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