将源IP地址从struct IPHDR*转换为使用Linux NetFilter等效的字符串[英] Convert source IP address from struct iphdr* to string equivalent using Linux netfilter

本文是小编为大家收集整理的关于将源IP地址从struct IPHDR*转换为使用Linux NetFilter等效的字符串的处理方法,想解了将源IP地址从struct IPHDR*转换为使用Linux NetFilter等效的字符串的问题怎么解决?将源IP地址从struct IPHDR*转换为使用Linux NetFilter等效的字符串问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

谢谢.

推荐答案

内核家族的printf()函数具有IP地址的特殊格式指定符(ipv4-addresses %pI4 %pI4,%pI6 for ipv6).

因此,使用IPv4,您可以使用以下内容:

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

或写入动态分配的内存.

如果您只想打印调试输出,也可以使用printk().有关%p的许多其他功能,请参见此文档.

其他推荐答案

尝试in4_pton() net/core/utils.c中的函数(定义: https://elixir.bootlin.com/linux/latest/source/net/core/core/utils.c#l118 )

#include <linux/inet.h>

char source[16];
in4_pton(source, -1, &ip_header->saddr, '\0', NULL);

本文地址:https://www.itbaoku.cn/post/359311.html