Можно ли получить порт сокета из типа данных ядра Linux struct sock? - PullRequest
0 голосов
/ 08 мая 2020

Мотивация

Я пытаюсь написать программу bpftrace, чтобы отследить, когда сокет готов к чтению, подключившись к kprobe sock_def_readable. Я получу struct sock для проверки. Я хотел бы сопоставить его с сокетом, который я создал в пользовательской области.

Вопрос

Как восстановить номер порта из struct sock?

1 Ответ

0 голосов
/ 09 мая 2020

Я только что расширил определение inet_sk ... которое было просто приведением.

#!/usr/bin/env bpftrace

#include <linux/net/inet_sock.h>

BEGIN
{
    printf("network tracing");
}

kprobe:sock_def_readable
{
  $inet_sock = (struct inet_sock *)arg0;
  printf("sock_def_readable destination port %d, source port %d \n", $inet_sock->inet_sport, $inet_sock->inet_dport);
}
...