如何计算udp数据包大小libpcap

如何计算udp数据包大小libpcap

问题描述:

从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

如果你有一个UDP数据报,你可以从它的头部得到它的大小。

例如,如果你有一个指针的char * HDR到UDP数据报头,你可以通过这样的结构得到其长度

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

更多关于UDP http://en.wikipedia.org/wiki/User_Datagram_Protocol

+0

谢谢你的回应。我像你显示的那样实现它,但是我得到了:警告:赋值使得指针中的整数不需要转换。我一直在Python上花费太多时间,解决这个问题的最好方法是什么?我会在我原来的问题中详细说明。谢谢。 – nomadicME

+0

我更新了答案 - 代码行中有一个错字,抱歉 – fycth