我正在寻找有关如何在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结构,以及如何访问各个位字段。
查看标题我发现它区分了版本和标题长度字段的字节顺序,但我无法理解如何提取其他字段,例如
为:
如果有可用于解析这些字段的宏,那么我会假设它们已经记录在某处?我在哪里可以找到这样的文档。
我还要验证我的假设,即我可以简单地使用通过char *buffer
收到的recvfrom
,并通过演员方式将其分配给struct iphdr
,如下所示:
char *buffer;
recvfrom (raw_socket_fd, buffer, ...);
struct iphdr* ipPacket;
ipPacket = (struct iphdr*) buffer;
我错过了什么或者这个标题没有在任何地方记录?
我的问题主要是关于记录在哪里。但是,关于如何解析上述位字段的代码示例也是受欢迎的。