将源IP地址从struct iphdr *转换为使用Linux netfilter的等效string

我想将来自使用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 

谢谢。

Solutions Collecting From Web of "将源IP地址从struct iphdr *转换为使用Linux netfilter的等效string"

内核的printf()函数族具有特殊的IP地址格式说明符(IPv4地址为%pI6 ,IPv6为%pI6 )。

所以在IPv4中,你可以使用如下的东西:

 char source[16]; snprintf(source, 16, "%pI4", &ip_header->saddr); // Mind the &! 

或写入动态分配的内存。

如果你只是想打印调试输出,你也可以使用printk() 。 对于%p的许多其他功能,请参阅此文档 。