2013-05-11 138 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