Проверьте, является ли IP статичным или динамичным программно

Я пытаюсь определить, был ли мой IP статически или динамично присвоен в Ubuntu 11.04 из C. Самое близкое я приехал, исследует /var/lib/dhcp/dhclient.leases, но это не изменяется, если статический IP присвоен (поскольку он кэширует арендные договоры DHCP для будущих попыток подключения).

Так... существует ли утилита командной строки (для Ubuntu), который позволит мне проверять, включен ли DHCP или отключен?

Кроме того: машина является сервером, выделенным одному приложению; было бы легче только поддержать переменную среды, которая отслеживает состояние DHCP?

5
задан 9 June 2011 в 13:11

5 ответов

Можно вставить сценарии /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
3
ответ дан 23 November 2019 в 10:45

Я предполагаю, что Вы обращаетесь к присвоению 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}'

для списка всех интерфейсов и их конфигурации.

-1
ответ дан 23 November 2019 в 10:45

Иначе должен использовать инструменты 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"
    }'

Это, вероятно, прерывает не обычные случаи, например, где Вы имеете больше чем одно активное соединение, но могли быть начальной точкой, которую можно уточнить.

Кроме того, при изменении соединения сценарий будет видеть новые настройки, даже если соединение не было перезапущено, таким образом, они еще не используются.

0
ответ дан 23 November 2019 в 10:45

Я записал, что эта команда для получения DHCP настроила интерфейсы в сценарии оболочки:

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

Затем можно отбросить интерфейсы, не управляемые dhclient.

В данный момент я не знаю, работает ли это на весь GNU/дистрибутивы Linux.

0
ответ дан 23 November 2019 в 10:45

Его намного более легкое, чтобы решить, что:

Просто отключите машину от сети. Если Вы видите IP-адрес в выводе ifconfig для того интерфейса затем, он статически присвоен иначе динамично.

отношения delaflota

-1
ответ дан 23 November 2019 в 10:45

Другие вопросы по тегам:

Похожие вопросы: