2011-12-17 35 views
9

Trong linux, có bất kỳ phương thức nào như gọi lại hoặc tín hiệu để nhận thông báo bất cứ khi nào có bất kỳ thay đổi nào trong Địa chỉ IP. Tôi muốn đăng ký gọi lại với hạt nhân hoặc nhận tín hiệu từ hạt nhân được thực hiện tự động thay vì mã phiếu thăm dò của tôi trên ổ cắm.Cách nhận thông báo về thay đổi địa chỉ IP tự động

cảm ơn trước.

+0

Tôi sẽ xem xét 'udev' –

+0

udev không thực sự quan tâm đến điều đó. –

Trả lời

16

Bạn nhận được thông báo từ hạt nhân qua ổ cắm netlink.

Bạn cần phải tạo một ổ cắm NETLINK_ROUTE và đăng ký nó với thay đổi IP qua bind() nhập vào nhóm RTMGRP_IPV4_IFADDR. Sau đó, bạn sẽ nhận được thông báo netlink thuộc loại RTM_NEWADDRRTM_DELADDR với thuộc tính tuyến đường là IFA_LOCAL hoặc IFA_ADDRESS.

1

Bạn có thể sinh ra "/ sbin/ip monitor" như một tiến trình con và xem kết quả của nó.

Nó sẽ cho bạn biết khi nào địa chỉ IP thay đổi, v.v. Xem trang hướng dẫn sử dụng cho ip (8) để biết thêm chi tiết.

3

Nếu không có lập trình C: lệnh

$ ip monitor 

sản lượng sản xuất trên thiết bị xuất chuẩn của nó, bất cứ khi nào một số cấu hình trong những thay đổi hệ thống phụ IP. Lệnh

# ip addr add 10.10.10.10/24 dev em1 

xuất ra như sau

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 

xóa 10.10.10.10 addresss với lệnh

# ip addr del 10.10.10.10/24 dev em1 

xuất ra như sau

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 

bạn có thể sử dụng eit vỏ của nó và một số awk hoặc perl để xử lý các tin nhắn, hoặc bạn có thể sử dụng các chức năng thư viện popen() và bạn bè C và xử lý outpout trong C.

Sử dụng chương trình C bạn có thể móc vào hạt nhân thông qua NETLINK. Điều này là khá phức tạp và không phải là rất tốt documentd. Hãy xem Wikipedia article này để biết điểm bắt đầu vào giao diện Netlink.

Các vấn đề liên quan