netlink install tool что это

netlink install tool что это. Смотреть фото netlink install tool что это. Смотреть картинку netlink install tool что это. Картинка про netlink install tool что это. Фото netlink install tool что этоРабота с NetLink в Linux. Часть 1

Posted by Chas under Журнал, Статьи

И вновь, после вынужденного долгого перерыва приветствую уважаемых читателей нашего журнала. За время этого перерыва накопилось достаточно много интересных материалов, которые я постараюсь осветить в новых статьях. Начну с этой. Надеюсь, что эта информация кому-то поможет и пригодится, как, в свое время, помогла мне. В прошлой статье я рассказал о системном вызове IOCTL и обещал рассказать о Netlink. Пришло время выполнять обещание 🙂 К сожалению, невозможно изложить все в рамках одной журнальной статьи. Поэтому материал я разбил на несколько частей. Настоящая статья – первая часть.

Итак, Netlink представляет из себя особый компонент Linux ядра. С ним можно общаться через обычный сокет передавая и принимая сообщения, сформированные особым образом. Что же дает нам netlink?

С помощью Netlink мы можем:

Кроме этого Netlink позволяет нам отказаться от устаревшего вызова ioctl, упростить и унифицировать код, так как все операции выполняются посредством стандартного сокета. Гарантируется быстрая работа кода и его общая надежность. Именно Netlink использует мощная утилита администрирования iproute2, пришедшая на смену утилитам ifconfig, route и другие.

К сожалению о Netlink очень мало материалов как на русском языке, так и на английском. Пожалуй, наиболее ценным источником можно считать две статьи в Linux journal и Doxygen- документацию. В этой статье я постараюсь приподнять завесу тайны и рассказать как можно больше.

Архитектура Netlink

Как уже говорилось выше, Netlink – это особый компонент ядра, с которым пользователь может общаться посредством обычных сокетов. Для работы с netlink существует особое семейство протоколов – AF_NETLINK, его необходимо указывать при создании нового сокета. Тип сокета следует выбирать SOCK_RAW или SOCK_DGRAM, для протокола, в данном случае, нет разницы. Как можно догадаться, протокол netlinka является диаграммным и не гарантирует доставку сообщений, хоть и старается это сделать всеми доступными средствами.

Каждое сообщение netlink представляет собой поток байт, содержащий один или несколько заголовков, представленных структурой nlmsghdr, а так же связанных с ними данными, которые называются «полезной нагрузкой» (playload). Сообщение, во время доставки, может быть разбито на несколько частей. В таких случаях каждый следующий пакет помечается флагом NLM_F_MULTI, а последний флагом NLMSG_DONE. Для разбора сообщений имеется целый набор макросов, определенный в заголовочном файле netlink.h. Там же определено все прочее, связанное с Netlink.

Надо сказать, что существует отдельная библиотека для работы с netlink – libnl. Она реализует особый уровень абстракции над netlink сокетами и предоставляет множество методов. Лично мне она не очень нравится, т.к. немного имеет немного запутанный и плохо документированный API, который любит часто меняться, что требует изменений и в приложениях, использующих эту библиотеку. Я один раз напоролся на такой сюрприз, поэтому мы не будет рассматривать эту библиотеку, а реализуем весь протокол сами, увидите, это не очень сложно.

Создание сокета netlink

Объявление netlink сокета выглядит так:

Где:
AF_NETLINK – протокол Netlink,
SOCK_RAW – тип сокета,
NETLINK_ROUTE – семейство Netlink протокола

Последний параметр может быть различным, в зависимости от того, что мы именно хотим получить от Netlink.
Приведу таблицу со наиболее интересными параметрами (полный список параметров можно посмотреть в документации):

Далее созданные сокет можно использовать для отправки сообщений, с помощью стандартной функции send и приема сообщений с помощью recvmsg.

Сообщения Netlink

Как уже выше сообщалось – каждое netlink сообщение представлено одним или несколькими заголовками, за которыми следуют полезные данные. Заголовок сообщения представлен структурой nlmsghdr:

Поле nlmsg_type может указывать на один из стандартных типов сообщений:

NLMSG_NOOP – сообщения такого типа игнорируются.
NLMSG_ERROR – сообщение с ошибкой, и в секции полезных данных будет структура nlmsgerr (о ней чуть ниже)
NLMSG_DONE – сообщение с этим флагом должно завершать сообщение, разбитое на несколько частей

Сообщения могут быть одного или нескольких (различные типы объеденяются с помощью операции логического или – |) типов:

Для идентификации клиентов (на уровне ядра и на пользовательском уровне) существует специальная адресная структура – nladdr:

nl_pid – это уникальный адрес сокета. Для клиентов в ядре он всегда равен нулю. Для клиентов на пользовательском уровне он равен идентификатору процесса, владеющего сокетом. Каждый идентификатор должен быть уникальным, поэтому тут вы можете натолкнутся на проблему, когда попытаетесь создать несколько netlink сокетов в многопоточном приложении: при создании нового сокета будет возвращаться ошибка «Operation not permitted».

Для обхода данного ограничения следуют nl_pid присваивать значение данного выражения:

Компиляция: gcc monitor.c –o monitor. Запуск:

Пояснения к программе

Как обещал – появились новые структуры. Давайте рассмотрим их, а так же более детально логику приложения:

Эта структура служит хранилищем полезных данных, передаваемых через сокеты netlink. Полю iov_base присваивается указатель на байтовый массив. Именно в этот байтовый массив будут записаны данные сообщения:

Эта структура непосредственно передается через сокет. Она содержит в себе указатель на блок полезных данных, количество данных блоков, а так же ряд дополнительных флагов и полей, пришедших, по большей части, с платформы BSD:

Эта структура используется для представления сетевого устройства, его семейства, типа, индекса и флагов:

Эта структура служит для представления сетевого адреса, назначенного на сетевой интерфейс:

Эта структура* служит для хранения, какого–либо параметра соединения или адреса.

Пояснения к коду

После запуска программы мы создаем netlink сокет и проверяем успешность его создания. Далее происходит объявление необходимых переменных и заполнение структуры локального адреса. Тут мы указываем группы сообщений, на которые хотим подписаться: RTMGRP_LINK, RTMGRP_IPV4_IFADDR, RTMGRP_IPV4_ROUTE.

Так же объявляем структуру сообщения и связываем с ней один блок данных. После этого происходит связывание с сокетом, с помощью bind(). После этого мы становимся подписанными на сообщения для указанных групп. Можно принимать сообщения через сокет.

Далее следует бесконечный цикл приема сообщений из сокета. Так как принимаемый блок данных может иметь несколько заголовков и ассоциированных с ними данных – начинаем перебирать, с помощью netlink макросов все принятые данные. Каждое новое сообщение расположено по указателю struct nlmsghdr *h. Теперь можно разбирать собственно сообщение. Смотрим на поле nlmsg_type и выясняем, что же за сообщение к нам приехало. Если оно связано с таблицей маршрутизации – печатаем сообщение и идем к следующему сообщению. А если нет – начинаем детально разбираться.

Объявляются массивы опций rtattr, куда будут складываться все необходимые данные. За получение этих данных отвечает вспомогательная функция parseRtattr. Она использует макросы Netlink и заполняет указанный массив всеми атрибутами из блока данных структуры ifinfomsg или ifaddrmsg.

После того как мы получили массивы, заполненные атрибутами – можем работать с этим значениями, анализировать их, печатать. Доступ к каждому атрибуту осуществляется по его индексу. Все индексы определены в заголовочных файлах netlink и прокомментированы. В данном случае мы используем следующие индексы:

После всего этого мы обладаем полной информацией о том, что произошло и можем печатать информацию на экран. Как видите ничего страшного.

Заключение

Итак, мы получили базовые знания о Netlink и его протоколе, рассмотрели все основные структуры и написали наглядный пример. На этом я бы хотел завершить первую часть. Надюсь, что Вам понравилось. Если есть, какие то вопросы – с удовольствием отвечу.

В следующей части мы изучим работу с таблицей маршрутизации и научимся выполнять специализированные запросы. Будет изучено еще ряд структур и методик. Так же будет рассмотрен пример определения своего собственного протокола и общение, с помощью него, со своим модулем в ядре. Для тех, кому нетерпимость изучить что-то новое и кто умеет и хочет учиться чему-то самостоятельно, думаю, пригодится полный RFC протокола Netlink [1], а так же статья в Linux journal [2]. До встречи на страницах журнала клуба ПРОграммистов!

Литература

Статья из восьмого выпуска журнала «ПРОграммист».

Источник

Что такое nvstlink.exe? Это безопасно или вирус? Как удалить или исправить это

Что такое nvstlink.exe?

nvstlink.exe это исполняемый файл, который является частью NVIDIA Stereoscopic 3D Driver Программа, разработанная NVIDIA Corporation, Программное обеспечение обычно о 11.9 MB по размеру.

netlink install tool что это. Смотреть фото netlink install tool что это. Смотреть картинку netlink install tool что это. Картинка про netlink install tool что это. Фото netlink install tool что это

Nvstlink.exe безопасный или это вирус или вредоносная программа?

Первое, что поможет вам определить, является ли тот или иной файл законным процессом Windows или вирусом, это местоположение самого исполняемого файла. Например, такой процесс, как nvstlink.exe, должен запускаться из C: \ Program Files \ NVIDIA Corporation \ 3D Vision \ nvStInst.exe, а не в другом месте.

Если статус процесса «Проверенная подписывающая сторона» указан как «Невозможно проверить», вам следует взглянуть на процесс. Не все хорошие процессы Windows имеют метку проверенной подписи, но ни один из плохих.

Наиболее важные факты о nvstlink.exe:

Если у вас возникли какие-либо трудности с этим исполняемым файлом, вы должны определить, заслуживает ли он доверия, перед удалением nvstlink.exe. Для этого найдите этот процесс в диспетчере задач.

Найдите его местоположение (оно должно быть в C: \ Program Files \ NVIDIA Corporation \ 3D Vision) и сравните размер и т. Д. С приведенными выше фактами.

Если вы подозреваете, что можете быть заражены вирусом, вы должны немедленно попытаться это исправить. Чтобы удалить вирус nvstlink.exe, вам необходимо Загрузите и установите приложение полной безопасности, например Malwarebytes., Обратите внимание, что не все инструменты могут обнаружить все типы вредоносных программ, поэтому вам может потребоваться попробовать несколько вариантов, прежде чем вы добьетесь успеха.

Могу ли я удалить или удалить nvstlink.exe?

Не следует удалять безопасный исполняемый файл без уважительной причины, так как это может повлиять на производительность любых связанных программ, использующих этот файл. Не забывайте регулярно обновлять программное обеспечение и программы, чтобы избежать будущих проблем, вызванных поврежденными файлами. Что касается проблем с функциональностью программного обеспечения, проверяйте обновления драйверов и программного обеспечения чаще, чтобы избежать или вообще не возникало таких проблем.

Однако, если это не вирус и вам необходимо удалить nvstlink.exe, вы можете удалить драйвер стереоскопического 3D NVIDIA со своего компьютера с помощью программы удаления, которая должна находиться по адресу: «C: \ Program Files \ NVIDIA Corporation \ 3D Vision. \ nvStInst.exe «/ удалить / спросить. Если вы не можете найти его деинсталлятор, вам может потребоваться удалить драйвер NVIDIA Stereoscopic 3D, чтобы полностью удалить nvstlink.exe. Вы можете использовать функцию «Добавить / удалить программу» в Панели управления Windows.

Распространенные сообщения об ошибках в nvstlink.exe

Наиболее распространенные ошибки nvstlink.exe, которые могут возникнуть:

• «Ошибка приложения nvstlink.exe.»
• «Ошибка nvstlink.exe».
• «Возникла ошибка в приложении nvstlink.exe. Приложение будет закрыто. Приносим извинения за неудобства».
• «nvstlink.exe не является допустимым приложением Win32».
• «nvstlink.exe не запущен».
• «nvstlink.exe не найден».
• «Не удается найти nvstlink.exe.»
• «Ошибка запуска программы: nvstlink.exe.»
• «Неверный путь к приложению: nvstlink.exe.»

Как исправить nvstlink.exe

Если у вас возникла более серьезная проблема, постарайтесь запомнить последнее, что вы сделали, или последнее, что вы установили перед проблемой. Использовать resmon Команда для определения процессов, вызывающих вашу проблему. Даже в случае серьезных проблем вместо переустановки Windows вы должны попытаться восстановить вашу установку или, в случае Windows 8, выполнив команду DISM.exe / Online / Очистка-изображение / Восстановить здоровье, Это позволяет восстановить операционную систему без потери данных.

Чтобы помочь вам проанализировать процесс nvstlink.exe на вашем компьютере, вам могут пригодиться следующие программы: Менеджер задач безопасности отображает все запущенные задачи Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записи автозапуска. Единый рейтинг риска безопасности указывает на вероятность того, что это шпионское ПО, вредоносное ПО или потенциальный троянский конь. Это антивирус обнаруживает и удаляет со своего жесткого диска шпионское и рекламное ПО, трояны, кейлоггеры, вредоносное ПО и трекеры.

Обновлен декабрь 2021:

Мы рекомендуем вам попробовать это новое программное обеспечение, которое исправляет компьютерные ошибки, защищает их от вредоносных программ и оптимизирует производительность вашего ПК. Этот новый инструмент исправляет широкий спектр компьютерных ошибок, защищает от таких вещей, как потеря файлов, вредоносное ПО и сбои оборудования.

Загрузите или переустановите nvstlink.exe

Вход в музей Мадам Тюссо не рекомендуется загружать заменяемые exe-файлы с любых сайтов загрузки, так как они могут содержать вирусы и т. д. Если вам нужно скачать или переустановить nvstlink.exe, мы рекомендуем переустановить основное приложение, связанное с ним NVIDIA Stereoscopic 3D Driver.

Информация об операционной системе

Ошибки nvstlink.exe могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:

Источник

Русские Блоги

Введение в использование netlink в Linux

1. Что такое netlink

Сокет Netlink используется для достиженияПользовательский процесспротивПроцесс ядраСпециальная межпроцессная связь (IPC) также является наиболее часто используемым интерфейсом для связи между сетевыми приложениями и ядром.

В ядре Linux есть много приложений, которые используют netlink для связи с ядром, например

По сравнению с системными вызовами, файловой системой ioctl и / proc, Netlink имеет следующие преимущества:

Протокол Netlink основан на сокете BSD и AF_NETLINK Кластер адресов, использующий 32-битную адресацию номера порта, каждый протокол Netlink обычно связан с одной или группой основных служб / компонентов, таких как NETLINK_ROUTE Используется для получения и установки информации о маршрутах и ​​ссылках, NETLINK_KOBJECT_UEVENT Используется ядром для отправки уведомлений процессу udev в пользовательском пространстве и т. Д.

Два, структура данных пользовательского режима

Приложения пользовательского режима используют стандартные API-интерфейсы сокетов, такие как sendto (), recvfrom (), sendmsg (), recvmsg ().

Связь Netlink похожа на обычную связь UDP Socket, struct sockaddr_nl Это коммуникационный адрес netlink, который совпадает с обычным socket struct sockaddr_in похожий.

1. Структура struct sockaddr_nl:

2. Структура struct nlmsghd:

3. Структура struct msghdr

Три, структура данных ядра netlink

1. Тип сообщения Netlink:

2. Часто используемые макросы Netlink:

3. Общие функции ядра Netlink

Функция ядра netlink_kernel_create используется для создания сокета ядра и взаимодействия с пользовательским режимом.

4. Одноадресная передача netlink_unicast () и многоадресная передача netlink_broadcast ()

Четыре, экземпляр netlink

1. Программа пользовательского режима (sendto (), recvfrom ())

Источник

Простой монитор сетевых интерфейсов Linux, с помощью netlink

Что такое netlink?

Итак, netlink представляет удобный собой способ коммуникации между юзерспейсом и ядром Linux. Коммуникация осуществляется с помощью обычного сокета, с использованием особого протокола — AF_NETLINK.
Netlink позволяет взаимодействовать с большим количеством подсистем ядра — интерфейсы, маршрутизация, фильтр сетевых пакетов. Кроме того, можно общаться со своим модулем ядра. Разумеется в последнем должна быть реализована поддержка такого способа коммуникации.
Каждое сообщение netlink представляет собой заголовок, представленный структурой nlmsghdr, а так же определенного количества байт — «полезной нагрузки» (playload). Данная «нагрузка» может представлять собой какую либо структуру, либо же просто RAW данные. Сообщение, во время доставки, может быть разбито на несколько частей. В таких случаях каждый следующий пакет помечается флагом NLM_F_MULTI, а последний флагом NLMSG_DONE. Для разбора сообщений имеется целый набор макросов, определенный в заголовочных файлах netlink.h и rtnetlink.h

Создание сокета netlink.

Объявление netlink сокета выглядит вполне стандартно:

socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)

Где AF_NETLINK — протокол netlink
SOCK_RAW — тип сокета
NETLINK_ROUTE — семейство netlink протокола.

Последний параметр может быть различным, в зависимости от того, что мы именно хотим получить от netlink.
Приведу таблицу со наиболее интересными параметрами (полный список параметров можно посмотреть в документации):

NETLINK_ROUTE — получать уведомления об изменениях таблицы маршрутизации и сетевых интерфейсов.
так же может использоваться для изменения всех параметров вышеперечисленных объектов.
NETLINK_USERSOCK — зарезервировано для определения пользовательских протоколов.
NETLINK_FIREWALL — служит для передачи IPv4 пакетов из сетевого фильтра на пользовательский уровень
NETLINK_INET_DIAG — мониторинг inet сокетов
NETLINK_NFLOG — ULOG сетевого/пакетного фильтра
NETLINK_SELINUX — получать уведомления от системы Selinux
NETLINK_NETFILTER — работа с подсистемой сетевого фильтра
NETLINK_KOBJECT_UEVENT — получение сообщений ядра

Далее созданные сокет можно использовать для отправки сообщений, например, с помощью функции send и приема сообщений с помощью recvmsg.

Сообщение netlink.

Заголовок сообщения представлен структурой nlmsghdr

Поле nlmsg_type может указывать на один из стандартных типо сообщения:
NLMSG_NOOP — сообщения такого типа игнорируются.
NLMSG_ERROR — сообщение с ошибкой, и в секции полезных данных будет структура nlmsgerr (о ней чуть ниже)
NLMSG_DONE — сообщение с этим флагом должно завершать сообщение, разбитое на несколько частей

Сообщения могут быть одного или нескольких (различные типы объеденяются с помощью операции логического или ) типов:

NLM_F_REQUEST — сообщение — запрос чего либо
NLM_F_MULTI — сообщение, часть сообщения разбитого на части
NLM_F_ACK — сообщение — запрос подтверждения
NLM_F_ECHO — эхо запрос. обычное направление — запросы из уровня ядра на пользовательский уровень
NLM_F_ROOT — данный тип запроса возвращает некую таблицу, внутри некой сущности
NLM_F_MATCH — запрос возвращает все найденные соответствия
NLM_F_ATOMIC — возвращает атомарный срез некой таблицы
NLM_F_DUMP — аналог NLM_F_ROOT|NLM_F_MATCH

NLM_F_REPLACE — заменить существующий аналогичный объект
NLM_F_EXCL — не заменять, если такой объект уже существует
NLM_F_CREATE — создать объект, если он не существует
NLM_F_APPEND — добавить объект в список к уже существующему

Для идентификации клиентов (на уровне ядра и на пользовательском уровне) существует специальная адресная структура — nladdr:

nl_pid — это уникальный адрес сокета. Для клиентов в ядре он всегда равен нулю. Для клиентов на пользовательском уровне он равен идентификатору процесса, владеющего сокетом. Каждый идентификатор должен быть уникальным, поэтому тут вы можете натолкнутся на проблему, когда попытаетесь создать несколько netlink сокетов в многопоточном приложении: при создании нового сокета будет возвращаться ошибка «Operation not permitted». Для обхода данного ограничения следуют nl_pid присваивать значение данного выражения:
pthread_self()
Присваивать значение идентификатора следует до того, как будет вызван bind() для сокета.
Так же идентификатору можно присвоить нулевое значение. В этом случае генерацией уникальных идентификаторов будет заниматься ядро, но первому сокету созданному в приложение всегда будет присваиваться значение идентификатора данного приложения.

nl_groups — это битовая маска, каждый бит которой представляет номер группы netlink. При вызове bind() для сокета netlink следует указывать битовую маску группы, которую желает прослушивать приложение, в данном контексте. Различные группы могут быть объединены с помощью логического или.
Основные группы определены в заголовочном файле netlink.
Пример некоторых из них:

RTMGRP_LINK — эта группа получает уведомления об изменениях в сетевых интерфейсах (интерфейс удалился, добавился, опустился, поднялся)
RTMGRP_IPV4_IFADDR — эта группа получает уведомления об изменениях в IPv4 адресах интерфейсов (адрес был добавлен или удален)
RTMGRP_IPV6_IFADDR — эта группа получает уведомления об изменениях в IPv6 адресах интерфейсов (адрес был добавлен или удален)
RTMGRP_IPV4_ROUTE — эта группа получает уведомления об изменениях в таблице маршрутизации для IPv4 адресов
RTMGRP_IPV6_ROUTE — эта группа получает уведомления об изменениях в таблице маршрутизации для IPv6 адресов

После структуры заголовка nlmsghdr всегда расположен указатель на блок данных. Доступ к нему можно получить с помощью макросов, о которых будет рассказано далее.

Макросы netlink

Наиболее полезными, в данном случае, макросами являются:
NLMSG_ALIGN — Округляет размер сообщения netlink до ближайшего большего значения, выровненного по границе.
NLMSG_LENGTH — Принимает в качестве параметра размер поля данных (payload) и возвращает выровненное по границе значение размера для записи в поле nlmsg_len заголовка nlmsghdr.
NLMSG_SPACE — Возвращает размер, который займут данные указанной длины в пакете netlink.
NLMSG_DATA — Возвращает указатель на данные, связанные с переданным заголовком nlmsghdr.
NLMSG_NEXT — Возвращает следующую часть сообщения, состоящего из множества частей. Макрос принимает следующий заголовок nlmsghdr в сообщении, состоящем из множества частей. Вызывающее приложение должно проверить наличие в текущем заголовке nlmsghdr флага NLMSG_DONE – функция не возвращает значение NULL при завершении обработки сообщения. Второй параметр задает размер оставшейся части буфера сообщения. Макрос уменьшает это значение на размер заголовка сообщения.
NLMSG_OK — Возвращает значение true если сообщение не было усечено и его разборка прошла успешно.
NLMSG_PAYLOAD — Возвращает размер данных (payload), связанных с заголовком nlmsghdr.

От теории к практике.

Ну что же. Думаю, что я уже успел надоесть со скучной теорией 🙂 Может быть что-то показалось запутанным или не понятным — постараюсь разжевать все в наглядных примерах, там на самом деле нет ничего сложного.
Ниже приведено обещанное приложение, которое будет получать уведомления об изменениях в сетевых интерфейсах и таблице маршрутизации.
В примере введен целый ряд новых структур:

Эта структура служит хранилищем полезных данных, передаваемых через сокеты netlink. Полю iov_base присваивается указатель на байтовый массив. Именно в этот байтовый массив будут записаны данные сообщения.

Эта структура непосредственно передается через сокет. Она содержит в себе указатель на блок полезных данных, количество данных блоков, а так же ряд дополнительных флагов и полей, пришедших, по большей части, с платформы BSD.

Эта структура используется для представления сетевого устройства, его семейства, типа, индекса и флагов.

Эта структура служит для представления сетевого адреса, назначенного на сетевой интерфейс.

Эта структура служит для хранения какого либо параметра соединения или адреса.

Исходный код, монитор

И результат работы:
netlink install tool что это. Смотреть фото netlink install tool что это. Смотреть картинку netlink install tool что это. Картинка про netlink install tool что это. Фото netlink install tool что это

Пояснения к коду.
После запуска программы мы создаем netlink сокет и проверяем успешность его создания. Далее происходит объявление необходимых переменных и заполнение структуры локального адреса. Тут мы указываем группы сообщений, на которые хотим подписаться: RTMGRP_LINK, RTMGRP_IPV4_IFADDR, RTMGRP_IPV4_ROUTE.
Так же объявляем структуру сообщения и связываем с ней один блок данных.
После этого происходит связывание с сокетом, с помощью bind(). После этого мы становимся подписанными на сообщения для указанных групп. Можно принимать сообщения через сокет.
Далее следует бесконечный цикл приема сообщений из сокета. Т.к. принимаемый блок данных может иметь несколько заголовков и ассоциированных с ними данных — начинаем перебирать, с помощью netlink макросов все принятые данные.
Каждое новое сообщение расположено по указателю struct nlmsghdr *h.
Теперь можно разбирать собственно сообщение. Смотрим на поле nlmsg_type и выясняем, что же за сообщение к нам приехало. Если оно связано с таблицей маршрутизации — печатаем сообщение и идем к следующему сообщению. А если нет — начинаем детально разбираться.
Объявляются массивы опций rtattr, куда будут складываться все необходимые данные. За получение этих данных отвечает вспомогательная функция parseRtattr. Она использует макросы netlink и заполняет указанный массив всеми атрибутами из блока данных структуры ifinfomsg или ifaddrmsg.
После того как мы получили массивы, заполненные атрибутами — можем работать с этим значениями, анализировать их, печатать.
Доступ к каждому атрибуту осуществляется по его индексу. Все индексы определены в заголовочных файлах netlink и прокомментированы.
В данном случае мы используем следующие индексы:
IFLA_IFNAME — индекс атрибута с именем интерфейса.
IFA_LOCAL — индекс атрибута с локальным IP адресом.
После всего этого мы обладаем полной информацией о том, что произошло и можем печатать информацию на экран.

Вот и все. Очень надеюсь, что данный материал будет полезен кому-то.
Если будет достаточное количество желающих (больше одного человека:) ) — могу написать продолжение и рассмотреть, например, взаимодействие с модулем ядра или реализацию работы с IPv6.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *