Linux ioctl -> как узнать, был ли текущий IP получен dhcp - PullRequest
0 голосов
/ 06 октября 2009

Я работаю с сокетами ioctl, чтобы получить текущую настройку интерфейсов, и я уже могу получить IP, имя интерфейса, маску сети и проверить, работает интерфейс или нет (я просто делаю IOCTl для SIOCGIFCONF, SIOCGIFNETMASK и SIOCGIFFLAGS ).

Я ищу способ узнать, был ли мой текущий IP-адрес получен через dhcp или статический.

Я могу проверить / etc / network / interfaces на все, что хочу, но я ищу способ сделать это программно (существует ли это слово?).

У кого-нибудь есть понимание этого?

Еще одна вещь, я работаю над Linux (пока).

Приветствия

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

С большим количеством клиентов DHCP в Linux - pump , dhcpcd , dhclient , udhcpc и, возможно, другие что я не знаю - это невозможно в общем смысле.

Однако, если вы нацелены на конкретный дистрибутив - скажем, «установка Ubuntu по умолчанию» - тогда вы можете исследовать решения, такие как Stefan. Обратите внимание, что все четыре из перечисленных здесь клиентов DHCP могут быть установлены в Ubuntu и могут заменить клиент DHCP по умолчанию, dhclient.

2 голосов
/ 06 октября 2009

Если вы работаете в Ubuntu, аренда хранится в /var/lib/dhcp3/dhclient-[interface_name].lease, возможно, это начало.

0 голосов
/ 27 октября 2009

Я не думаю, что можно через интерфейс ядра (ioctl) определить, был ли IP-адрес выделен через DHCP, как в большинстве дистрибутивов. DHCP - это пользовательское приложение, которое просто настраивает ядро ​​на данные, предоставляемые удаленным источником, как пользователь сделал это вручную. Фактически, если вы посмотрите на клиент ISC, он просто передает данные, полученные от DHCP-сервера, в простые сценарии оболочки, которые выполняют ifconfig, route и различные другие команды, которые можно вводить как пользователь.

Так что вам, вероятно, придется взглянуть на методы, специфичные для вашего DHCP-клиента и дистрибутива, как предлагает Стефан.

...