Как я могу программно (C) узнать, имеет ли данный интерфейс статический адрес или адрес, предоставленный dhcp? Я могу посмотреть на /var/db/dhclient.leases.<interface_name>
. Есть ли лучший/более чистый способ? какие ioctl
я могу использовать?
FreeBSD: адрес сетевого интерфейса: dhcp или статический
Ответы (3)
Читать /etc/rc.conf
. Найдите строки, начинающиеся с ifconfig
, и посмотрите, какие из них содержат текст DHCP
.
Это не будет перехватывать интерфейсы, которые были перенастроены путем запуска dhclient
вручную. Разбор файла аренды будет работать лучше в этом отношении, при условии, что его разрешения позволяют вашей программе читать его.
Короткий ответ - нет, не существует. Клиент dhcp устанавливает адрес интерфейса и т. д., используя те же механизмы, что и ifconfig. Нет специального флага или другого признака, указывающего на то, что интерфейс был настроен динамически.
Я бы проверил файлы конфигурации в /etc/, а не аренду, но да, вам придется сделать что-то хакерское, чтобы узнать информацию.
в дополнение к проницательному совету Роланда и Перри, я бы добавил следующее: если rc.conf НЕ настроен на использование dhcp, это не означает, что он не был вызван из командной строки.
если вы видите, что он работает, есть большая вероятность, что интерфейс получает свой адрес.
pgrep dhclient