Преобразуйте исходный IP-адрес из struct iphdr * в строковый эквивалент, используя сетевой фильтр Linux - PullRequest
10 голосов
/ 15 февраля 2012

Я хочу преобразовать 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

Спасибо.

1 Ответ

16 голосов
/ 16 февраля 2012

Семейство функций ядра printf() имеет специальный спецификатор формата для IP-адресов (%pI4 для IPv4-адресов, %pI6 для IPv6).

Так что с IPv4 вы могли бы использовать что-тонапример:

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

Или запись в динамически выделенную память.

Если вы просто хотите распечатать выходные данные отладки, вы также можете использовать printk().Для многих других функций %p см. этот документ .

...