Wie kann ich strace dazu bringen, die AF_NETLINK-Kommunikation wie mit ioctl zu „dekodieren“?

Wie kann ich strace dazu bringen, die AF_NETLINK-Kommunikation wie mit ioctl zu „dekodieren“?

strace„entschlüsselt“ normalerweise ioctlAnrufe, zeigt ihre Bedeutung an, löst sogar Netzwerkschnittstellennamen auf und so weiter.

Aber die gleiche Operation, die mit AF_NETLINK ausgeführt wird, bleibt in undurchsichtig strace. Wie kann ich jemandem beibringen , sich die Dinge stracegenauer anzusehen AF_NETLINK? Gibt es Patches oder Forks mit dieser Funktion?

sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0\0\0\0\32\0\1\0\323K\255S\0\0\0\0\n\200\0\0\0\0\0\0\0\0\0\0\24\0\1\0"..., 48}], msg_controllen=0, msg_flags=0}, 0) = 48
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\224\0\0\0\30\0\0\0\323K\255S\3674\0\0\n\200\200\0\0\2\0\7\0\0\0\0\10\0\17\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 148

Beispiel für "gekochte" Strace-Ausgabe mitioctl

ioctl(4, SIOCGIFFLAGS, {ifr_name="veth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_ALLMULTI}) = 0

Hintergrund zu AF_NETLINK

Ausschnitt ausWikipedia

Die AF_NETLINKFamilie bietet mehrere Protokolluntergruppen. Jede ist mit einer anderen Kernelkomponente verbunden und verfügt über eine andere Nachrichtenuntergruppe. Das folgende Protokoll wird im Feld unten referenziert:

  int socket(AF_NETLINK, SOCK_DGRAM or SOCK_RAW, protocol)

Es fehlt ein Standard SOCK_DGRAMund SOCK_RAWes ist nicht garantiert, dass diese in einer bestimmten Linux-Version (oder einer anderen Betriebssystemversion) implementiert sind. Einige Quellen geben an, dass beide Optionen zulässig sind, und der folgende Verweis von Red Hat gibt an, dass dies SOCK_RAWimmer der Parameter ist. Allerdings verwendet iproute2 beide Optionen austauschbar.

verwandte Informationen