以编程方式检查IP是静态还是动态

我正在尝试确定我的IP是否已经在C内从Ubuntu 11.04中静态或动态分配。我最接近的是检查/var/lib/dhcp/dhclient.leases ,但如果静态不变则不会改变分配IP(因为它缓存DHCP租约以用于将来的连接尝试)。

那么…是否有一个命令行实用程序(对于Ubuntu),它将允许我检查DHCP是启用还是禁用?

或者:机器是专用于一个应用程序的服务器; 维护一个跟踪DHCP状态的环境变量会更容易吗?

您可以在/etc/network/if-up.d放置脚本,以便在激活接口时执行(通过ifup或网络管理器)。 这些脚本接收有关接口的信息,包括环境变量$METHOD set to staticdhcp 。 这在interfaces(5)手册页中有记录 。

 #!/bin/sh ## This is /etc/network/if-up.d/zzzz_alex_notify_myserver case $LOGICAL in eth0) case $METHOD in dhcp) ;; static) ;; esac;; esac 

另一种方法是使用NetworkManager工具,即nm-toolnmcli

我在这上写了以下脚本:

 #!/bin/sh # get the connection id of the active connection get_con_id() { nm-tool | awk ' $1 == "-" { dev = $3 id = dev if (NF > 4 && match($0, "\\[(.*)\\]", a)) id = a[1] } /^ / && $1 == "State:" && $2 == "connected" { print id }' } # get the address type of the active connection nmcli con list id "$(get_con_id)" | awk ' $1 == "ipv4.method:" { if ($2 == "manual") print "static" else if ($2 == "auto") print "dynamic" else print "unknown" }' 

它可能会在非常规情况下中断,例如,您有多个活动连接,但可能是一个要详细阐述的起点。

此外,如果您修改连接,脚本将看到新设置,即使连接尚未重新启动,因此它们尚未使用。

我已编写此命令以在shell脚本中获取DHCP配置的接口:

 ps -A -o cmd | grep -E '(/| )dhclient .' 

然后您可以丢弃不由dhclient管理的接口。

目前我不知道它是否适用于所有GNU / Linux发行版。

我猜你是指你本地的ubuntu机器的IP分配而不是你的外部/公共IP。

也许以下输出可能会有所帮助:

cat /etc/network/interfaces |grep ^iface\ eth0 | awk -F ' ' '{print $4}'

这将打印单词staticdhcp ,具体取决于接口eth0的当前配置。

您还可以进行小幅调整,例如:

cat /etc/network/interfaces |grep ^iface\ | awk -F ' ' '{print $2, $4}'

为了列出所有接口及其配置。

更容易确定:

只需断开机器与网络的连接即可 如果您可以在该接口的ifconfig输出中看到ip地址,则以动态方式静态分配。

关于delaflota