在/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报头加上它后面的有效负载?)
谢谢。
发布于 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()
,这样就很好了。
发布于 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()
https://stackoverflow.com/questions/1480580
复制相似问题