首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UDP校验和计算

UDP校验和计算
EN

Stack Overflow用户
提问于 2009-09-26 06:29:51
回答 2查看 95.7K关注 0票数 27

在/usr/include/netinet/udp.h中定义的UDP标头结构如下

struct udphdr
{
  u_int16_t source;
  u_int16_t dest;
  u_int16_t len;
  u_int16_t check;
};

报头的check字段中存储了什么值?如何验证校验和是否正确?我的意思是,校验和是根据什么数据计算的?(仅仅是udp报头还是udp报头加上它后面的有效负载?)

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-06-01 14:24:42

Gerd Hoffmann完成了一个很好且易于理解的UDP校验和计算示例。

你可以在谷歌上搜索"net-checksum.c Gerd Hoffmann“,或者看看这里的文件:

https://gist.github.com/fxlv/81209bbd150abfeaceb1f85ff076c9f3

您可以使用net_checksum_tcpudp函数,向它提供UDP有效载荷长度、协议、源和dst IP,然后输入UDP有效载荷本身,它将执行正确的操作。

最后,您必须对校验和调用htons(),这样就很好了。

票数 2
EN

Stack Overflow用户

发布于 2011-09-09 17:34:21

我在网上搜索一些可以计算udp报头的代码(带有上面提到的伪ip报头)。

最后,我找到了open-bsd dhclient包。c:

https://github.com/openbsd/src/blob/master/sbin/dhclient/packet.c

查看函数assemble_udp_ip_header()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1480580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档