【问题标题】:how to get notified for IP address changes automatically如何自动获得 IP 地址更改通知
【发布时间】:2011-12-17 02:58:10
【问题描述】:

在 linux 中是否有任何方法,如回调或信号,以便在 IP 地址发生任何变化时得到通知。 我想用内核注册一个回调或者从内核获取一个自动完成的信号,而不是我的代码在套接字上轮询。

提前致谢。

【问题讨论】:

  • 我会调查udev
  • udev 并不真正关心这个。

标签: linux linux-kernel


【解决方案1】:

您通过 netlink 套接字接收来自内核的通知。

您需要创建一个NETLINK_ROUTE 套接字,并通过bind()将其订阅到RTMGRP_IPV4_IFADDR 组,以订阅IP 更改。然后,您将收到RTM_NEWADDRRTM_DELADDR 类型的网络链接消息,其路由属性为IFA_LOCALIFA_ADDRESS

【讨论】:

    【解决方案2】:

    没有 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 
    

    您可以使用 shell 和一些 awk 或 perl 来处理这些消息,或者您可以使用 popen() 和朋友 C 库函数并在 C 中处理输出。

    使用 C 编程,您可以通过 NETLINK 连接到内核。这是相当复杂的,并且没有很好的记录。请参阅此 Wikipedia article 了解 Netlink 接口的起点。

    【讨论】:

      【解决方案3】:

      您可以生成“/sbin/ip monitor”作为子进程并观察其输出。

      它会告诉你 IP 地址何时发生变化等。有关详细信息,请参阅 ip(8) 的手册页。

      【讨论】:

        猜你喜欢
        • 2014-05-06
        • 2013-08-25
        • 2020-06-12
        • 2020-09-03
        • 2015-05-05
        • 2022-11-21
        • 2022-01-21
        • 2021-03-03
        • 1970-01-01
        相关资源
        最近更新 更多