Jak*_*ake 10 c linux kernel netfilter kernel-module
我想将源和目标IP地址从使用netfilter捕获的数据包转换为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
Run Code Online (Sandbox Code Playgroud)
谢谢.
fnl*_*fnl 16
内核的printf()函数系列具有IP地址的特殊格式说明符(%pI4对于IPv4地址,%pI6对于IPv6).
因此,使用IPv4,您可以使用以下内容:
char source[16];
snprintf(source, 16, "%pI4", &ip_header->saddr); // Mind the &!
Run Code Online (Sandbox Code Playgroud)
或写入动态分配的内存.
如果您只想打印调试输出,也可以使用printk().有关其他许多功能%p,请参阅此文档.