strace AF_NETLINK 통신을 ioctl과 동일하게 "디코드"하려면 어떻게 해야 합니까?

strace AF_NETLINK 통신을 ioctl과 동일하게 "디코드"하려면 어떻게 해야 합니까?

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)

특정 Linux(또는 기타 운영 체제) 버전에서의 표준 SOCK_DGRAM및 구현 부족은 보장되지 않습니다. SOCK_RAW일부 소스에서는 두 옵션이 모두 유효하다고 명시하고 있으며 아래 Red Hat 참조에서는 이 SOCK_RAW매개변수가 항상 매개변수라고 명시하고 있지만 iproute2는 두 옵션을 서로 바꿔서 사용합니다.

관련 정보