2010-05-25 132 views
2

我想我的手理解PCAP庫。 我可以應用一個過濾器,並在端口80獲得TCP有效載荷。但接下來呢?我如何讀取HTTP數據 - 假設我想知道http頭中的「User Agent」字段值。我應該繼續嗎? 我已經搜索了網站(並且搜索了很多),並且可以在這裏找到相關的主題: writing a http sniffer。但這並不能幫助我在任何地方...寫一個http嗅探器(或任何其他應用程序級嗅探器)

謝謝!

回答

3

首先,您應該知道PCAP爲您提供了數據包,並且不會重建TCP流,因此如果不首先重新構建數據,您將無法讀取完整的HTTP TCP數據流。

假設所有數據都在一個數據包中可用,請嘗試並查看我的回答a similar question。您需要做的不同之處是解析HTTP標頭並獲取用戶代理。

如果您不限制自己使用C,並且可以使用Windows,則可以編寫.NET應用程序並使用Pcap.Net來完美地解析以太網,IPv4和TCP。

+0

非常感謝你Brickner !! 我正在尋找這個 - 處理TCP有效載荷(但我更喜歡C學習)。 你可以請你解釋一下你的代碼行: /*開始url - 跳過「GET」*/url = tcpPayload + 4; 爲什麼4?我應該探索什麼才能獲得更多這樣的值(我閱讀RFC的HTTP,但不知道如何使用它)。 我實際上想讀取該數據包中的所有HTTP數據。只有我重建完整的流纔有可能嗎?如果是的話,你可以給我一些關於重建的想法嗎? 非常感謝! – Ishi 2010-05-25 21:30:21

+0

4用於「GET」 - 3個ASCII字符+空格。 RFC包含所有可能的請求名稱(如GET,POST ...)。 如果您只需要單個數據包中的HTTP數據,則不需要重建。如果你想要整個HTTP請求,你可能需要重建TCP流(如果請求多於一個數據包)。 TCP重建是另一個(也是相當複雜的)問題,您應該爲Google或其他問題開個頭。順便說一下,你是使用LibPcap還是Windows包裝WinPcap,還是你的問題更通用? – brickner 2010-05-26 05:29:00

+0

我在linux上使用libpcap。我的目標是捕獲http數據包並提取一些有用的信息,但重建無疑目前太困難了。我應該瞄準只包含代碼和消息的FTP--是否可行?例如。我想從FTP消息中提取用戶名和密碼。 – Ishi 2010-05-26 08:53:46

0

已經有一個很好的PCAP包裝爲.NET稱爲Pcap.Net - here it is

「Pcap.Net是寫在C++/CLI和C# WinPcap的一個.NET包裝它 特點幾乎所有WinPcap功能 幷包括一個數據包解釋 框架。「