我想将使用 netfilter 捕获的数据包中的源和目标 IP 地址转换为 char *。
在我的 netfilter 挂钩函数中,我有:
sock_buff = skb; // argument 2 of hook function
// ip_header is struct iphdr*
ip_header = (struct iphdr *)skb_network_header(sock_buff);
// now how to convert ip_header->saddr & ip_header->daddr to char *
// ip_header->saddr & ip_header->daddr are of type __be32
Thanks.
内核家族printf()
函数有一个特殊的 IP 地址格式说明符(%pI4
对于 IPv4 地址,%pI6
对于 IPv6)。
因此,对于 IPv4,您可以使用如下内容:
char source[16];
snprintf(source, 16, "%pI4", &ip_header->saddr); // Mind the &!
或者写入动态分配的内存。
如果您只想打印调试输出,您也可以使用printk()
。对于许多其他功能%p
, see 这个文件.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)