【问题标题】:how to calculate udp packet size libpcap如何计算 udp 数据包大小 libpcap
【发布时间】:2012-10-22 07:17:49
【问题描述】:

从一个 linux 操作系统,我尝试用 C 或 python 编写我自己的数据使用监视器。我已经搜索和研究了几天。目前我正在尝试调整sniffex.c 以满足我的需求。我已经成功验证了在几个 ftp 会话期间发送和接收的总字节数。

在 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;
...
}

我还需要在size_payload 上加 4 吗?

此函数的回调如下所示:

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

【问题讨论】:

  • 这行 'size_payload = header->len;'正是您所需要的。你有头结构,所以你可以直接从这个结构中获取数据包长度。

标签: c libpcap packet-sniffers


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复。我像你展示的那样实现了它,但我得到了:警告:赋值从指针中生成整数而没有强制转换。我在 python 上花了太多时间,解决这个问题的最佳方法是什么?我会在我原来的问题中详细说明。谢谢。
  • 我更新了答案 - 代码行有错字,抱歉
猜你喜欢
  • 2011-02-05
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2011-10-07
  • 1970-01-01
  • 2020-05-25
  • 2015-05-17
相关资源
最近更新 更多