我想用recvfrom()从套接字中检索数据
recvfrom()允许获取包含IP报头、TCP头和数据的缓冲区。
有没有直接指向数据的快速函数?为了读取数据,我们是否应该将数据转换为主机(网络到主机)?
我不想使用read(),因为read()不提供ip报头和TCP头
我认为应该是这样的:
recvfrom(sock, packet, sizeof(buf) - 1, 0, NULL, NULL);
iph = (struct iphdr*)packet;
iphlen = iph->ihl* 4;
tcph = (struct tcphdr*)(packet + iphlen);
tcphlen = tcph->doff * 4;
data = packet + iphlen + tcphlen;但我不知道是否必须将数据转换为主机(网络到主机)?
发布于 2019-07-21 01:44:50
假设使用SOCK_RAW套接字。
IP头长度位于IP头的第一个字节的低位4位,计算32位整数。
TCP报头长度位于TCP报头的第13个字节的前4位,计算32位整数。
根据/usr/include/netinet/ip.h和/usr/include/netinet/tcp.h,iph->ihl和tcph->doff位字段已经考虑字符顺序,并且因为它们小于一个字节长(4位),所以它们不受任何进一步的hton/ntoh转换的影响。
https://stackoverflow.com/questions/57126971
复制相似问题