2011-12-17 16 views
9

En Linux hay algún método como devolución de llamada o señal para recibir notificaciones cada vez que haya algún cambio en la dirección IP. Quiero registrar una devolución de llamada con kernel u obtener una señal del kernel que se realiza automáticamente en lugar de mi sondeo de código en el socket.cómo recibir una notificación para cambios en la dirección IP automáticamente

gracias de antemano.

+0

Me gustaría ver 'udev' –

+0

udev realmente no se preocupa por eso. –

Respuesta

16

Recibes notificaciones del kernel a través de sockets netlink.

Debería crear un socket NETLINK_ROUTE y suscribirlo a los cambios de IP a través del bind() al grupo RTMGRP_IPV4_IFADDR. Luego, recibirá mensajes netlink de tipo RTM_NEWADDR y RTM_DELADDR con un atributo de ruta de IFA_LOCAL o IFA_ADDRESS.

1

Puede generar "/ sbin/ip monitor" como un proceso secundario y ver su salida.

Le dirá cuándo cambian las direcciones IP, etc. Consulte la página man para obtener información sobre ip (8) para obtener más información.

3

Sin programación C: el comando

$ ip monitor 

produce una salida en su salida estándar, cada vez que alguna configuración en los cambios en los subsistemas IP. El comando

# ip addr add 10.10.10.10/24 dev em1 

produce la siguiente salida

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 

la supresión de la addresss 10.10.10.10 con el comando

# ip addr del 10.10.10.10/24 dev em1 

produce la siguiente salida

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 

puede utilizar eito ella el intérprete de órdenes y algunos awk o perl para procesar estos mensajes, o puede usar las funciones de biblioteca popen() y amigos C y procesar el outpout en C.

Usando la programación C puede enganchar en el kernel a través de NETLINK. Esto es bastante complicado y no está muy bien documentado. Consulte este Wikipedia article para obtener un punto de partida en la interfaz de Netlink.

Cuestiones relacionadas