我正在使用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