【发布时间】:2014-07-13 14:59:45
【问题描述】:
我需要识别数据包 IP 的 IP 地址系列(即 IPv4 或 IPv6)。 In 已设法利用libnetfilter 捕获数据包并获取源和目标 IP 地址。但是现在我需要从我正在实现的kernel module 中识别获得的IP 地址地址族。
IP地址存储如下,
struct iphdr *ip_header = (struct iphdr *)skb_network_header(skb);
unsigned int src_ip = (unsigned int)ip_header->saddr;
unsigned int dest_ip = (unsigned int)ip_header->daddr;
在研究过程中,我空手而归,只知道如何使用%pI4 和%pI6 将其格式化并显示为字符串。但不是如何以编程方式识别 IP 地址系列。 (可能像Linux内核模块等价于函数IPAddress.AddressFamily)
如果各位专家能帮助我解决这个困扰我好几天的问题,我将不胜感激。
提前致谢:)
编辑
根据@alk 的建议,如果各位专家建议我更改上述unsigned int 变量声明以支持IPv6,我将不胜感激。 :)
【问题讨论】:
-
@alk 谢谢他的回复,先生。我应该如何修改它以支持 IPv4 和 IPv6 并识别版本?
标签: c linux ip ip-address kernel-module