Convertir l'adresse IP source de struct iphdr* équivalent de chaîne à l'aide de Linux netfilter
Je veux convertir la source & adresses IP de destination d'un paquet capturé en utilisant netfilter en char *.
Dans mon netfilter crochet de fonction, j'ai:
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
Grâce.
Avec inet_ntoa()?
La conversion doit être effectuée dans le module du noyau. Je ne pouvais pas trouver un fichier d'en-tête dans linux/ dossier contenant inet_ntoa() fonction. Je n'ai trouver in_aton (sous linux)/inet.h qui fait exactement le contraire, convertit char* __be32.
Oups, noyau. Essayez ceci;
La conversion doit être effectuée dans le module du noyau. Je ne pouvais pas trouver un fichier d'en-tête dans linux/ dossier contenant inet_ntoa() fonction. Je n'ai trouver in_aton (sous linux)/inet.h qui fait exactement le contraire, convertit char* __be32.
Oups, noyau. Essayez ceci;
printk("ip-address is " NIPQUAD_FMT "\n", NIPQUAD(ip_header->saddr));
. Je ne peux pas accéder à mes hôtes linux à partir d'ici, donc je ne peux pas dire où les macros sont définies. Et c'est pour ipv4 uniquement.OriginalL'auteur Jake | 2012-02-15
Vous devez vous connecter pour publier un commentaire.
Le noyau de la famille de
printf()
fonctions a un spécificateur de format pour les adresses IP (%pI4
pour IPv4 adresses,%pI6
pour IPv6).Donc, avec IPv4, vous pouvez utiliser quelque chose comme:
Ou écrire dans la mémoire allouée dynamiquement.
Si vous voulez simplement de les imprimer-sortie de débogage, vous pouvez également utiliser
printk()
. Pour les nombreuses autres fonctionnalités de%p
, voir ce document.OriginalL'auteur fnl