как автоматически получать уведомления об изменении IP-адреса - PullRequest
10 голосов
/ 17 декабря 2011

В Linux есть какой-либо метод, например, обратный вызов или сигнал, чтобы получать уведомления при любых изменениях IP-адреса.Я хочу зарегистрировать обратный вызов в ядре или получить сигнал от ядра, который выполняется автоматически вместо опроса моего кода в сокете.

Ответы [ 3 ]

18 голосов
/ 17 декабря 2011

Вы получаете уведомления от ядра через сокеты netlink.

Вам потребуется создать сокет NETLINK_ROUTE и подписать его на изменения IP через bind(), добавив его в группу RTMGRP_IPV4_IFADDR.Затем вы получите сообщения netlink типа RTM_NEWADDR и RTM_DELADDR с атрибутом маршрута IFA_LOCAL или IFA_ADDRESS.

3 голосов
/ 17 декабря 2011

Без программирования на C: команда

$ ip monitor

производит вывод на свой стандартный вывод всякий раз, когда изменяется какая-либо конфигурация в подсистеме IP.Команда

# ip addr add 10.10.10.10/24 dev em1 

производит следующий вывод

2: em1    inet 10.10.10.10/24 scope global em1
local 10.10.10.10 dev em1  table local  proto kernel  scope host  src 0.10.10.10 
10.10.10.0/24 dev em1  proto kernel  scope link  src 10.10.10.10 
broadcast 10.10.10.0 dev em1  table local  proto kernel  scope link  src 10.10.10.10 
broadcast 10.10.10.255 dev em1  table local  proto kernel  scope link  src 10.10.10.10 

, удаление адресов 10.10.10.10 с помощью команды

# ip addr del 10.10.10.10/24 dev em1

производит следующий вывод

Deleted 2: em1    inet 10.10.10.10/24 scope global em1
Deleted 10.10.10.0/24 dev em1  proto kernel  scope link  src 10.10.10.10 
Deleted broadcast 10.10.10.255 dev em1  table local  proto kernel  scope link  src 10.10.10.10 
Deleted broadcast 10.10.10.0 dev em1  table local  proto kernel  scope link  src 10.10.10.10 
Deleted local 10.10.10.10 dev em1  table local  proto kernel  scope host  src 10.10.10.10 

вы можете использовать либо оболочку и некоторые awk или perl для обработки этих сообщений, либо вы можете использовать функции библиотеки popen () и friends C и обработать выход в C.

Использование программирования на Cвы можете подключиться к ядру через NETLINK.Это довольно сложно и не очень хорошо задокументировано.См. статью в Википедии , чтобы узнать, как начать работу с интерфейсом Netlink.

1 голос
/ 17 декабря 2011

Вы можете порождать "/ sbin / ip monitor" как дочерний процесс и наблюдать за его выводом.

Он сообщит вам, когда IP-адреса меняются, и т. Д. Для получения дополнительной информации см. Справочную страницу ip (8).подробности.

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