以编程方式检查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 static
或dhcp
。 这在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-tool
和nmcli
。
我在这上写了以下脚本:
#!/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}'
这将打印单词static或dhcp ,具体取决于接口eth0的当前配置。
您还可以进行小幅调整,例如:
cat /etc/network/interfaces |grep ^iface\ | awk -F ' ' '{print $2, $4}'
为了列出所有接口及其配置。
更容易确定:
只需断开机器与网络的连接即可 如果您可以在该接口的ifconfig输出中看到ip地址,则以动态方式静态分配。
关于delaflota