it-swarm.com.de

Überprüfen Sie programmgesteuert, ob IP statisch oder dynamisch ist

Ich versuche aus C heraus festzustellen, ob meine IP-Adresse in Ubuntu 11.04 statisch oder dynamisch zugewiesen wurde. Als Nächstes überprüfe ich /var/lib/dhcp/dhclient.leases, aber das ändert sich nicht, wenn eine statische IP-Adresse zugewiesen wird (als DHCP-Leases werden für zukünftige Verbindungsversuche zwischengespeichert.

Also ... gibt es ein Befehlszeilenprogramm (für Ubuntu), mit dem ich überprüfen kann, ob DHCP aktiviert oder deaktiviert ist?

Alternativ: Die Maschine ist ein Server, der für eine Anwendung reserviert ist. Wäre es einfacher, eine Umgebungsvariable zu verwalten, die den DHCP-Status verfolgt?

5
Alex Mullans

Sie können Skripte in /etc/network/if-up.d einfügen, die ausgeführt werden, wenn eine Schnittstelle aktiviert wird (entweder von ifup oder von Network Manager). Diese Skripte empfangen Informationen über die Schnittstelle, einschließlich der Umgebungsvariablen $METHOD, die auf static oder dhcp gesetzt ist. Dies ist in der interfaces(5) man page dokumentiert.

#!/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
3
Gilles

Eine andere Möglichkeit ist die Verwendung der NetworkManager-Tools nm-tool und nmcli.

Ich habe folgendes Skript dazu geschrieben:

#!/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"
    }'

Es bricht wahrscheinlich in ungewöhnlichen Fällen, z.B. Wenn Sie mehr als eine aktive Verbindung haben, dies jedoch ein Ausgangspunkt sein kann, auf den Sie näher eingehen müssen.

Wenn Sie eine Verbindung ändern, werden die neuen Einstellungen auch dann im Skript angezeigt, wenn die Verbindung nicht neu gestartet wurde, sodass sie noch nicht verwendet werden.

0
enzotib

Ich habe diesen Befehl geschrieben, um die DHCP-konfigurierten Schnittstellen in einem Shell-Skript abzurufen:

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

Dann können Sie Schnittstellen verwerfen, die nicht von dhclient verwaltet werden.

Im Moment weiß ich nicht, ob es für alle GNU/Linux-Distributionen funktioniert.

0
Narcis Garcia