我试图从 C 语言中确定我的 IP 在 Ubuntu 11.04 中是静态分配还是动态分配。我最接近的方法是检查/var/lib/dhcp/dhclient.leases
,但如果分配了静态 IP,情况就不会改变(因为它会缓存 DHCP 租约以供将来的连接尝试)。
那么...是否有一个命令行实用程序(用于 Ubuntu)可以让我检查 DHCP 是否启用或禁用?
或者:该机器是专用于一个应用程序的服务器;维护一个跟踪 DHCP 状态的环境变量会更容易吗?
答案1
您可以将脚本放入在/etc/network/if-up.d
激活接口时执行的程序(由或由网络管理器激活)。这些脚本接收有关接口的信息,包括设置为或的ifup
环境变量。这记录在$METHOD
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) <notify server that it's on DHCP>;;
static) <notify server that it's on a static IP configuration>;;
esac;;
esac
答案2
另一种方法是使用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"
}'
它可能会在非正常情况下中断,例如当您有多个活动连接时,但可能是详细说明的起点。
此外,如果您修改连接,脚本将看到新的设置,即使连接尚未重新启动,因此它们尚未使用。
答案3
我猜你指的是你本地的 ubuntu 机器的 IP 分配,而不是你的外部/公共 IP。
也许以下输出可能会有所帮助:
cat /etc/network/interfaces |grep ^iface\ eth0 | awk -F ' ' '{print $4}'
这将打印单词静止的或者DHCP服务,取决于接口 eth0 的当前配置。
您还可以进行一些小的调整,例如:
cat /etc/network/interfaces |grep ^iface\ | awk -F ' ' '{print $2, $4}'
以列出所有接口及其配置。
答案4
更容易确定的是:
只需断开机器与网络的连接即可。如果您可以在 ifconfig 输出中看到该接口的 ip 地址,则该地址是静态分配的,否则是动态分配的。
问候 delaflota