J'essaie de déterminer si mon adresse IP a été attribuée de manière statique ou dynamique dans Ubuntu 11.04 à partir de C. Le plus proche de moi est d'examiner /var/lib/dhcp/dhclient.leases
, mais cela ne change pas si une adresse IP statique est attribuée (comme il met en cache les baux DHCP pour les futures tentatives de connexion).
Alors ... existe-t-il un utilitaire de ligne de commande (pour Ubuntu) qui me permettra de vérifier si le protocole DHCP est activé ou non?
Alternativement: la machine est un serveur dédié à une application; serait-il plus facile de maintenir une variable d'environnement qui garde trace de l'état de DHCP?
Vous pouvez placer des scripts dans /etc/network/if-up.d
à exécuter lorsqu'une interface est activée (soit par ifup
, soit par Network Manager). Ces scripts reçoivent des informations sur l'interface, notamment la variable d'environnement $METHOD
, définie sur static
ou dhcp
. Ceci est documenté dans la interfaces(5)
page de manuel .
#!/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
Une autre méthode consiste à utiliser les outils NetworkManager, à savoir nm-tool
et nmcli
.
J'ai écrit le script suivant sur ceci:
#!/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"
}'
Il se brise probablement dans des cas non habituels, par exemple où vous avez plus d’une connexion active, mais pourrait être un point de départ sur lequel élaborer.
De plus, si vous modifiez une connexion, le script verra les nouveaux paramètres, même si la connexion n'a pas été redémarrée, afin qu'ils ne soient pas encore utilisés.
J'ai écrit cette commande pour obtenir les interfaces configurées par DHCP dans un script Shell:
ps -A -o cmd | grep -E '(/| )dhclient .'
Ensuite, vous pouvez ignorer les interfaces non gérées par dhclient
.
Pour le moment, je ne sais pas si cela fonctionne pour toutes les distributions GNU/Linux.