我想分析一個包含使用tcpdump捕獲的數據包的文件。我首先想要使用5元組將數據包分類爲流。然後,我需要獲取每個流中每個數據包的大小和到達間隔時間。我嘗試了wireshark中的Conversation列表,但它僅給出流中的數據包數量,而不是有關流中每個數據包的信息。任何可以完成這項工作的代碼(C++或shell腳本)的建議?謝謝分析pcap文件的代碼
回答
我在圖書館工作,分析tcp轉儲,但它是一個企業,所以我不能只給你。如果你沒有找到你正在尋找的東西,那麼我的答案可以提供幫助。 tcpdump只是嵌套的網絡數據,如Matryoshka dolls,其中pcap層由tcpdump添加。
如果您只想處理捕獲,轉儲格式在Libpcap File Format中指定。要獲得每個數據包到達的大小和時間,您需要使用此規範處理轉儲。
如果你不得不更深入的分析,這些都是以下幾層爲了
- 鏈路層
- 網絡層
- 傳輸層
- 應用層
每個圖層都有一個標題定義。所以你需要找到你的pcap數據包含哪個協議棧,並解析頭部以獲取信息。
使用該規範處理轉儲的最簡單方法是使用libpcap讀取它 - 使用'pcap_open_offline()'打開它。編寫自己的代碼來處理它通常是浪費時間;使用libpcap也意味着,在更新版本的libpcap中,許多pcap-ng文件也可以被讀取。 – 2012-04-18 19:46:59
五元組的成員是什麼?如果流是TCP或UDP,則源和目標IP地址和端口號,以及可能用於區分兩個端點之間的多個流隨時間流逝的數字;對於SCTP來說,它是相似的,但如果流是一個流,你可能需要更多。
如果五元組的成員都是Wireshark中的「命名字段」,則可以使用TShark和-T fields
選項,並使用-e
選項指定要打印的字段,並選擇帶時間戳的字段(frame.time_epoch
會給你從UN * X紀元開始秒和小數秒的時間),一個適當大小的字段(frame.len
給你鏈接層數據包的原始字節數PLUS任何元數據作爲802.11無線電信息的無線電標頭)以及其他字段,然後將TShark的輸出提供給執行您想要執行的處理的腳本或程序。這讓TShark可以處理協議層,這樣你的程序只需要處理結果數據。
UmNyobe,
如果你還沒有聽說過Scapy的的但我beleive你正在嘗試做的將是一個近乎完美的契合。例如,我寫了這個小片段來解析一個pcap字段,並給我一些你正在談論的使用Scapy的東西。
#!/usr/bin/python -tt
from scapy import *
import sys
from datetime import datetime
'''Parse PCAP files into easy to read NETFLOW like output\n
Usage:\n
python cap2netflow.py <[ pcap filename or -l ]>\n
-l is live capture switch\n
ICMP packets print as source ip, type --> dest ip, code'''
def parse_netflow(pkt):
# grabs 'netflow-esqe' fields from packets in a PCAP file
try:
type = pkt.getlayer(IP).proto
except:
pass
snifftime = datetime.fromtimestamp(pkt.time).strftime('%Y-%m-%d %H:%M:%S').split(' ')[1]
if type == 6:
type = 'TCP'
if type == 17:
type = 'UDP'
if type == 1:
type = 'ICMP'
if type == 'TCP' or type == 'UDP':
print(' '.join([snifftime, type.rjust(4, ' '), str(pkt.getlayer(IP).src).rjust(15, ' ') , str(pkt.getlayer(type).sport).rjust(5, ' ') , '-->' , str(pkt.getlayer(IP).dst).rjust(15, ' ') , str(pkt.getlayer(type).dport).rjust(5, ' ')]))
elif type == 'ICMP':
print(' '.join([snifftime, 'ICMP'.rjust(4, ' '), str(pkt.getlayer(IP).src).rjust(15, ' ') , ('t: '+ str(pkt.getlayer(ICMP).type)).rjust(5, ' '), '-->' , str(pkt.getlayer(IP).dst).rjust(15, ' '), ('c: ' + str(pkt.getlayer(ICMP).code)).rjust(5, ' ')]))
else:
pass
if '-l' in sys.argv:
sniff(prn=parse_netflow)
else:
pkts = rdpcap(sys.argv[1])
print(' '.join(['Date: ',datetime.fromtimestamp(pkts[0].time).strftime('%Y-%m-%d %H:%M:%S').split(' ')[0]]))
for pkt in pkts:
parse_netflow(pkt)
安裝Python和Scapy然後使用它來開始。讓我知道如果你需要任何幫助來搞清楚這一切,如果你知道C++的機會,這對你來說已經很有意義了。
獲取Scapy的這裏
http://www.secdev.org/projects/scapy/
有噸的此頁有用的教程鏈接,牢記Scapy的確實很多,但更多的磨練對談PCAP解析領域..
我希望這有助於!
dc
- 1. 將pcap文件解析爲txt文件
- 2. 解析普通的.pcap文件C
- 3. 解析Python中的PCAP文件
- 4. ATM PCAP文件以太網PCAP文件
- 5. 網絡分析儀 - 處理捕獲的pcap文件
- 6. 如何使用python顯示和分析.pcap文件的內容?
- 7. 一個簡單的C程序來分析pcap文件,但它不能讀取整個pcap文件
- 8. 如何使用libpcap解析pcap文件。
- 9. 代碼分析
- 10. Wireshark/Tshark pcap重組代碼
- 11. Haskell中的Pcap文件解碼
- 12. 轉換C++代碼,以XML文件進行代碼分析
- 13. 如何解析pcap文件的頭文件?
- 14. JavaScript代碼分析
- 15. Erlang - 代碼分析
- 16. 分析MSP430代碼
- 17. 分析PHP代碼
- 18. SQl代碼分析
- 19. 分析Mathematica代碼
- 20. php代碼分析
- 21. 代碼分析CSS
- 22. C代碼分析
- 23. 如何有效地分割PCAP文件?
- 24. Hudson的Objective-C代碼分析插件
- 25. 分析組件上的代碼流
- 26. 使用ET規則Snort pcap分析
- 27. 將Google Analytics(分析)代碼放在單獨的文件中會破壞分析
- 28. ruby的Gitlab代碼分析
- 29. 代碼成績的分析
- 30. python2.6的+代碼分析器
您可能想看看[Bro](http://www.bro-ids.org)強大的網絡腳本語言。它是「用於網絡分析的Python/Ruby」。具體來說,你可以編寫一個腳本來鉤住['new_packet'事件](http://www.bro-ids.org/documentation/scripts/base/event.bif.html#id-new_packet)來獲取你的號碼提及。 – mavam 2012-04-23 17:14:26