2012-10-22 27 views
0

從linux操作系統我試圖用C或python編寫我自己的數據使用情況監視器。我已經搜索了幾天,並進行了研究。目前我正在嘗試改編sniffex.c以滿足我的需求。我已經成功驗證了幾個FTP會話期間發送和接收的總字節數。如何計算udp數據包大小libpcap

在sniffex.c中計算tcp數據包大小。我的問題是你如何計算UDP數據包的大小?我已經搜索了這個主題,但還沒有找到任何東西。這個問題有意義嗎?

更新:

的功能,其中包大小計算如下:

got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) 
{ 
... 
int size_payload; 
... 
case IPPROTO_UDP: 
    printf(" Protocol: UDP\n"); 
    size_payload = header->len; 
... 
} 

我是否還需要增加4到size_payload

回調到這個功能看起來是這樣的:

/* now we can set our callback function */ 
pcap_loop(handle, num_packets, got_packet, NULL); 
+0

好像這條線「 size_payload = header-> len;'正是你所需要的。你有頭結構,所以你可以直接從這個結構中獲得數據包長度。 – fycth

回答

0

如果你有一個UDP數據報,你可以從它的頭部得到它的大小。

例如,如果你有一個指針的char * HDR到UDP數據報頭,你可以通過這樣的結構得到其長度

int length = *(int *)(hdr + 4); 

更多關於UDP http://en.wikipedia.org/wiki/User_Datagram_Protocol

+0

謝謝你的迴應。我像你顯示的那樣實現它,但是我得到了:警告:賦值使得指針中的整數不需要轉換。我一直在Python上花費太多時間,解決這個問題的最好方法是什麼?我會在我原來的問題中詳細說明。謝謝。 – nomadicME

+0

我更新了答案 - 代碼行中有一個錯字,抱歉 – fycth