ioctl과 마찬가지로 AF_NETLINK 통신을 strace "디코드"하려면 어떻게 해야 합니까?

ioctl과 마찬가지로 AF_NETLINK 통신을 strace "디코드"하려면 어떻게 해야 합니까?

strace일반적으로 호출을 "해독" ioctl하여 의미를 표시하고 네트워크 인터페이스 이름 등을 확인합니다.

그러나 AF_NETLINK를 사용하여 수행된 동일한 작업은 strace. 사물을 strace살펴보는 법을 어떻게 가르칠 수 있나요 AF_NETLINK? 이 기능이 포함된 패치나 포크가 있습니까?

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

"요리된" strace 출력의 예ioctl

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

AF_NETLINK에 대한 배경

에서 발췌위키피디아

AF_NETLINK제품군은 여러 프로토콜 하위 집합을 제공합니다. 각각은 서로 다른 커널 구성 요소와 인터페이스하며 서로 다른 메시징 하위 집합을 갖습니다. 아래 필드에서는 다음 프로토콜이 참조됩니다.

  int socket(AF_NETLINK, SOCK_DGRAM or SOCK_RAW, protocol)

표준이 부족하며 SOCK_DGRAM특정 SOCK_RAWLinux(또는 기타 OS) 릴리스에서 구현이 보장되지 않습니다. 일부 소스에서는 두 옵션이 모두 적법하다고 명시하고 있으며 아래 Red Hat 참조에서는 이것이 SOCK_RAW항상 매개변수라고 명시하고 있지만 iproute2는 두 옵션을 모두 교대로 사용합니다.

관련 정보