Как с помощью sysctl получить статистику по сетевому интерфейсу (/proc/net/dev)?

Посредством функции sysctl из libc можно получать информацию из ядра. Какая иерархия имён должна быть для получения статистических данных по сетевому интерфейсу? Интересует количество принятых интерфейсом пакетов и байт.

Данная информация доступна в "проке" - /proc/net/dev, но я пытаюсь получить это же через вызов sysctl().

Нашел информацию лишь по FreeBSD:

static int name[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM, IFMIB_IFCOUNT };


Но под линукс такое не подходит.
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@iamFake Автор вопроса
В общем я не нашел способа реализовать это через sysctl (или не нашел соответствующей документации), но с подсказкой требуемое все таки смог реализовать. Все решается через функцию getifaddrs которая возвращает интерфейсы в системе выдавая отдельно AF_INET и AF_PACKET семейки на каждый реальный интерфейс. Запись с типом AF_PACKET как раз таки и содержит байты и пакеты, переданные и полученные.

man7.org/linux/man-pages/man3/getifaddrs.3.html
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы