我正在從事一項任務,使我使用libpcap庫解析C中的pcap文件中的信息。我已經成功地弄清楚如何獲取諸如源/目的IP地址,tcp/udp端口以及源/目標以太網地址等數據。列表中的下一步是從網絡和傳輸層協議中查看統計數據以及每個協議有多少數據包。我恐怕似乎無法弄清楚如何獲得這個信息,並希望有人可能指引我朝着正確的方向前進。由於其他信息是從諸如/usr/include/netinet.h等地方的各種數據結構中收集而來的,因此它應該也在某處,但是,我又有點失落。如何從C中的pcap獲取網絡層和傳輸層協議?
0
A
回答
1
看起來好像你已經有答案了...... IP是一個網絡層協議,所以如果你能找到IP地址,你可以統計IP數據包。同樣,TCP和UDP是傳輸層協議。如果您可以在數據包中找到TCP/UDP端口,那麼您已經知道有多少數據包正在使用哪種協議。
0
在你的回調函數
/* define/compute ip header offset */
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
size_ip = IP_HL(ip)*4;
if (size_ip < 20) {
printf(" * Invalid IP header length: %u bytes\n", size_ip);
return;
}
switch(ip->ip_p) {
case IPPROTO_TCP:
/* define/compute tcp header offset */
tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip);
size_tcp = TH_OFF(tcp)*4;
if (size_tcp < 20) {printf(" * Invalid TCP header length: %u bytes\n", size_tcp); return; }
bytes_tcp+=ntohs(ip->ip_len);
packets_tcp++;
break;
}
case IPPROTO_UDP:
bytes_udp+=ntohs(ip->ip_len);
packets_udp++;
break;
}
相關問題
- 1. 計算機網絡中用於傳輸層協議實現的書
- 2. 有關網絡層和傳輸層工作的說明
- 3. 網絡或傳輸層模糊
- 4. 如何獲取PCAP文件中的協議號碼?
- 5. 理解/逆向工程頂層網絡協議的好工具
- 6. 各種網絡硬件的OSI協議層
- 7. 如何獲得SLIM vgg16網絡中某個圖層的輸出?
- 8. 原始套接字 - 網際協議層
- 9. 如何從pcap文件中刪除以太網層?
- 10. 監控傳輸,網絡和鏈路層緩存/ Linux中
- 11. 當etcd節點發出心跳時底層傳輸層協議是什麼
- 12. XmlHttpRequest使用的底層傳輸協議是什麼?
- 13. 如何聽L3網絡層?
- 14. Kaa網絡和協議
- 15. 用於解析網絡跟蹤(PCAP)中的文本和二進制協議消息的Google協議緩衝區
- 16. 哪一方將在SSH傳輸層協議中啓動版本協商?
- 17. 如何識別以太網後的下一層協議
- 18. 數據鏈路層和傳輸層
- 19. 以下哪項不是TCP/IP模型中的網絡層協議?
- 20. 在互聯網層或傳輸層完成校驗和?
- 21. 「應用層」與TCP網絡模型的「傳輸層」有什麼不同?
- 22. 解析網絡協議的C++方法
- 23. 如何獲取層次LINQ的C#
- 24. 如何讀取Java中的網絡流數據(協議包)
- 25. 任何將傳輸層協議名稱映射到數字的方法?
- 26. 網絡協議的實現
- 27. 如何訓練網絡的第一層?
- 28. 如何測量網絡性能(如何基準網絡協議)
- 29. 分層傳輸
- 30. 從千層麪(蟒蛇深度神經網絡框架)獲取輸出