Konvertieren Quell-IP-Adresse vom struct iphdr* string-äquivalent unter Linux netfilter
Ich umwandeln wollen, Quelle & Ziel-IP-Adressen aus einem Paket erfasst mit netfilter char *.
In meinem netfilter-hook-Funktion, die ich habe:
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
Dank.
- Mit inet_ntoa()?
- Die Konvertierung erfolgt in das kernel-Modul. Ich konnte nicht finden, eine header-Datei linux/ Ordner mit inet_ntoa () - Funktion. Ich habe in_aton() in linux/inet.h die tut genau das Gegenteil, wandelt char* to __be32.
- Hoppla, kernel. Versuchen Sie dieses;
printk("ip-address is " NIPQUAD_FMT "\n", NIPQUAD(ip_header->saddr));
. Ich habe keinen Zugriff auf meine linux-hosts von hier, so kann ich Ihnen nicht sagen, wo die Makros definiert sind. Und es ist nur für ipv4.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kernel-Familie
printf()
Funktionen hat ein spezielles format specifier für IP-Adressen (%pI4
für IPv4-Adressen, die%pI6
für IPv6).Also mit IPv4, könnten Sie so etwas wie:
Schreiben oder dynamisch zugewiesenen Speicher.
Wenn Sie wollen einfach drucken-debug-Ausgabe, können Sie auch
printk()
. Für die vielen anderen features von%p
finden Sie dieses Dokument.