在Linux中检测IP地址的变化

Joe*_*rth 10 linux ip dhcp

有没有人知道在Linux中检测IP地址变化的方法.假设我运行了dhcpcd,并且它分配了一个新的IP地址,有什么方法可以在它发生变化时收到通知吗?我不能使用D-Bus,因为这是一个没有它的嵌入式ucLinux构建.

inotify/proc/net /中的某些内容?

Mar*_*rkR 14

命令

ip monitor
Run Code Online (Sandbox Code Playgroud)

会告诉你这种事情正在发生.它使用了一些相当棘手且没有很好记录的netlink API(至少对人类来说是理解的).但是,它能够被内核通知各种事件,例如分配的IP的更改,路由表和链路状态(例如有人拔掉网络)

  • 看起来不错——非常好;谢谢...但在 ucLinux 的 BusyBox 版本的 ip 上不可用! (2认同)

kma*_*imo 14

这是一个老问题,但我会回答那些将由谷歌到达的人(比如我自己).经过一段时间的努力,我发现你不一定需要为此调查或破解C解决方案.对于我的情况,我想在IP更改时更新我的​​家庭服务器(动态DNS)域.

如果你在跑dhcpcd,你很幸运.dhcpcd发生任何事情时都会运行钩子脚本.见man dhcpcd-run-hooks (在线).基本上,您将需要修改或创建自己的dhcpcd.enter-hookdhcpcd.exit-hook根据您要对事件提供的数据执行的操作.

  • 当你位于 NAT 后面时你会做什么?你的 IP 是固定的,但你的全局 IP 发生了变化,你如何检测到这一点? (2认同)

Sno*_*are 1

由于 DHCP 活动会发送到 syslogd,因此您可以创建一个命名管道,将 syslog 流量定向到该管道并监视该流以获取 IP 地址更新。请参阅“man syslogd”和“man syslog.conf”。

编辑:另一种方法是使用 inotify 来监视接口的 DHCP 租用文件。在 Ubuntu 9.10 下,位于 /var/lib/dh​​cp3 目录中。