2012-08-17 152 views
3

我需要監視某個網站在尋址時需要多長時間才能響應。我想嗅探端口80上的流量,但只有在與目標站點交換流量時。我已經搜索過,似乎pcapy或scapy是工作的正確工具,但它們似乎比我需要的更深。我已經研究了下面的腳本:使用pcapy或scapy監視自生(HTTP)網絡流量

Network traffic monitor with pcapy in python

,我想我需要改變目的地爲目標站點的

def __handle_packet(self, header, data): 
    # method is called for each packet by dispatch call (pcapy) 
    self._dispatch_bytes_sum += header.getlen() #header.getlen() #len(data) 
    logger.debug("header: (len:{0}, caplen:{1}, ts:{2}), d:{3}".format(header.getlen(), header.getcaplen(), header.getts(), len(data))) 
    #self.dumper.dump(header, data) 

以某種方式只能解包/手柄包。請注意,這適用於LAN上的Windows XP計算機,瀏覽器啓動流量至關重要。

任何指針讚賞?

+0

[Bro](http://stackoverflow.com/a/11081321/1170277)將是適用於此方案的適當工具。但是,它不適用於Windows。 – mavam 2012-08-17 21:39:23

+0

回答我自己的問題,答案在這裏:http://pypi.python.org/packages/source/N/NetCube/NetCube-0.3.0.zip。你必須查看network.py文件。 – reckoner 2012-09-05 13:15:57

回答

3

scapy的問題是它不處理重組TCP streams。您正在查找的HTTP可能會嵌入到TCP流中。引用文檔:

Scapy基於刺激/響應模型。這個模型對於TCP堆棧並不適用。另一方面,很多時候,TCP流被用作管道來交換基於刺激/響應的消息。

就像你說的,scapy更適合低層的東西。例如,您可能會在DHCP請求上跟蹤IP數據包。像許多網絡工具一樣,TCP的複雜性和基於流的特性意味着一旦你跨越了這一層,就很難重新組合所有的東西,並且處理所有的重傳以及不合理的情況,並且一致地將數據抽出。

您可以使用curl或urllib之類的東西,看看回復需要多長時間嗎?

+0

是的,我目前使用硒來做到這一點,因爲它從瀏覽器產生流量。我希望被動地嗅探瀏覽器產生的流量是可能的,因爲配置相應的硒會話並不總是可能的,但是從你所說的看來,這將是一個相當大的挑戰。 – reckoner 2012-08-17 16:50:20

+0

@reckoner是的,嗅探TCP是非常平凡的。它的有狀態。您可以建立連接並保持對多個請求的開放,或者可以爲每個HTTP請求設置一個新的連接。你當然可以編寫一些代碼,這些代碼可以讓一些假設TCP總是可靠的,並且表現出一種你知道只在特定情況下才起作用的特定方式。 – 2012-08-17 16:54:22

+0

@reckoner scapy也有點煩人,因爲只在python 2.6運行最後我試圖使用它。 – 2012-08-17 16:56:27