簡體   English   中英

Python-tcpdump子進程掛起

[英]Python - tcpdump subprocess hangs

可能是關於subprocesses的簡單修復,但是我無法弄清楚出了什么問題。

我有一小段要捕獲數據包的網頁。 我想要每個網頁一個pcap文件。 我正在使用tcpdumpphantomJS 這是代碼的相關部分:

from selenium import webdriver
..more imports here..

URLs = ['https://webpage1.com', 'https://webpage2.com', etc.]

driver = webdriver.PhantomJS(executable_path='/usr/bin/phantomjs', port=65000)
driver.set_window_size(1024, 768)

def Crawler():
    for eachHost in URLs:
        print '\n* Capturing in-progress.'
        print '* Host: ', eachHost
        try:
            handle = subprocess.Popen(['sudo', 'tcpdump', '-w', str(eachHost) + '.pcap'], stdout=subprocess.PIPE)

            driver.get(eachHost)
            time.sleep(5)
            driver.close()

            time.sleep(2)
            handle.terminate()
            print '* tcpdump killed.'

        except:
            print '* Exception caught.'
            sys.exit(0)
    sys.exit(0)

我期望它做的是 :捕獲每個頁面加載的前5秒,並放入單獨的pcaps

它的作用 :在我的終端中打印以下內容,然后掛起,捕獲但不終止,並且不循環到下一個網頁。

Host:  https://www.webpage1.com/
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

我認為您無法終止子進程的原因是因為您正在使用sudo命令啟動該進程。 由於tcpdump然后以root用戶身份運行,因此您不能僅以常規用戶身份終止它。

我只是嘗試在本地測試。 啟動tcpdump之后:

$ ps ax | grep tcpdump
62410 s007  S+     0:00.01 sudo tcpdump
62420 s007  S+     0:00.05 tcpdump
62540 s008  S+     0:00.00 grep tcpdump
$ kill -15 62410
-bash: kill: (62410) - Operation not permitted
$ kill -15 62420
-bash: kill: (62420) - Operation not permitted

我不知道在不派生另一個進程的情況下執行sudo kill / terminate命令的方法(例如,通過subprocess ),所以我將不得不使用handle.pid獲取tcpdump進程ID( pid )並調用handle.pid subprocess.Popen(['sudo', 'kill', '15', <pid>])

我認為您的子流程調用阻塞了您無法停止它的原因。 嘗試使用multiprocessing然后將tcpdump命令放入線程中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM