使用struct iphdr和ip.h解析原始套接字数据的文档

时间:2018-03-11 11:55:08

标签: c ip glibc raw-sockets

我正在寻找有关如何在Linux上使用GNU LibC的原始套接字API的文档。

到目前为止,我已阅读以下手册页:

man 7 ip
man 7 raw
man 7 socket

查看netinet/ip.h标题,我发现有一个struct iphdr定义。但是,在GNU LibC Manual和上述任何手册页中,我都找不到有关如何使用此API的任何信息。具体来说,如何将通过SOCK_RAW套接字接收的IP包解析为iphdr结构,以及如何访问各个位字段。

查看标题我发现它区分了版本标题长度字段的字节顺序,但我无法理解如何提取其他字段,例如
为:

  • 优先级和服务类型(6位和2位)
  • 标志和片段偏移量(3和13位)

如果有可用于解析这些字段的宏,那么我会假设它们已经记录在某处?我在哪里可以找到这样的文档。

我还要验证我的假设,即我可以简单地使用通过char *buffer收到的recvfrom,并通过演员方式将其分配给struct iphdr,如下所示:

char *buffer;
recvfrom (raw_socket_fd, buffer, ...);

struct iphdr* ipPacket;
ipPacket = (struct iphdr*) buffer;

我错过了什么或者这个标题没有在任何地方记录?

我的问题主要是关于记录在哪里。但是,关于如何解析上述位字段的代码示例也是受欢迎的。

0 个答案:

没有答案