Verifique se o IP é estático ou dinâmico programaticamente

5

Estou tentando determinar se meu IP foi atribuído estaticamente ou dinamicamente no Ubuntu 11.04 de dentro de C. O mais próximo que cheguei é examinar /var/lib/dhcp/dhclient.leases , mas isso não muda se um IP estático for atribuído ( armazenando DHCP para futuras tentativas de conexão).

Então ... existe um utilitário de linha de comando (para o Ubuntu) que me permitirá verificar se o DHCP está habilitado ou desabilitado?

Alternativamente: a máquina é um servidor dedicado a uma aplicação; seria mais fácil apenas manter uma variável de ambiente que rastreia o status do DHCP?

    
por Alex Mullans 09.06.2011 / 16:46

5 respostas

3

Você pode colocar scripts em /etc/network/if-up.d a serem executados quando uma interface é ativada (por ifup ou pelo Network Manager). Esses scripts recebem informações sobre a interface, incluindo a variável de ambiente $METHOD definida como static ou dhcp . Isso está documentado na interfaces(5) man page .

#!/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
    
por Gilles 10.06.2011 / 02:26
0

Outra maneira é usar as ferramentas do NetworkManager, ou seja, nm-tool e nmcli .

Eu escrevi o seguinte script sobre isso:

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

Provavelmente, ocorrerá em casos não usuais, por ex. onde você tem mais de uma conexão ativa, mas pode ser um ponto de partida para elaborar.

Além disso, se você modificar uma conexão, o script verá as novas configurações, mesmo que a conexão não tenha sido reiniciada, portanto, elas ainda não estão em uso.

    
por enzotib 06.08.2011 / 23:27
0

Eu escrevi este comando para obter as interfaces configuradas do DHCP em um script de shell:

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

Depois, você pode descartar interfaces não gerenciadas por dhclient .

No momento não sei se funciona para todas as distribuições GNU / Linux.

    
por Narcis Garcia 01.10.2015 / 10:31
-1

Eu acho que você está se referindo à atribuição de IP da sua máquina Ubuntu localmente e não ao seu IP externo / público.

Talvez a seguinte saída possa ajudar:

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

Isso imprimirá a palavra estática ou dhcp , dependendo da configuração atual da interface eth0.

Você também pode fazer pequenos ajustes, como:

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

para listar todas as interfaces e suas configurações.

    
por Pavlos G. 10.06.2011 / 01:07
-1

É muito mais fácil determinar isso:

Apenas desconecte a máquina da rede. Se você pode ver o endereço IP na saída ifconfig para essa interface então é estaticamente atribuído de outra forma dinamicamente.

considera delaflota

    
por delaflota 18.12.2015 / 14:54