Как узнать dhcp сервер linux

Linux find DHCP server IP address using CLI

Linux find DHCP server IP address command line options

The procedure to find out your DHCP IP address in Linux is as follows:

  1. Open the terminal application
  2. Run less /var/lib/dhcp/dhclient.leases command to list your DHCP server IP address
  3. Another option is to type grep dhcp-server-identifier /var/lib/dhcp/dhclient.leases command to find the IP address of a DHCP server
  4. One can use ip r Linux command to list default route which act as the DHCP Server on most home networks

Let us see all commands and examples in details.

The dhclient.leases file

Under Linux, you need to use dhclient command to obtain and managing dhcp tasks. In order to keep track of leases across system reboots and server restarts, dhclient keeps a list of leases it has been assigned in the dhclient.leases file. On startup, after reading the dhclient.conf file, dhclient reads the dhclient.leases file to refresh its memory about what leases it has been assigned.

When a new lease is acquired, it is appended to the end of the dhclient.leases file. In order to prevent the file from becoming arbitrarily large, from time to time dhclient creates a new dhclient.leases file from its in-core lease database. The old version of the dhclient.leases file is retained under the name dhclient.leases

until the next time dhclient rewrites the database.

Источник

Find DHCP Server IP Address on Linux Command Line

I recently received an email from a reader asking “How do I find the IP address of my DHCP server”? My initial reaction was “Hmmm, good question”. That lead me to investigate the fastest way to find your DHCP server IP address from the Linux command line.

What is a DHCP Server?

A DHCP Server is a system on a network that manages dynamic configuration of client systems on the network. DHCP (Dynamic Host Configuration Protocol) is a standard network protocol used on almost all IP networks. It allows for dynamic configuration of network parameters on systems connected to the network. Before DHCP an administrator would have to configure each system individually. For more information on DHCP, see the Resource and Links section below.

How to Find Your DHCP Server IP Address

There is no simple command to show the IP address of the DHCP server on the network. However, there are places it is recorded, if you know where to look. Here are a few ways you can find the IP address of a DHCP server on your network.

NOTE: You will need root or sudo access to run all of these commands.

Find DHCP Server IP Using grep to Find Log Entries

The first method I thought of was to check the logs for the DHCPOFFER. The DHCPOFFER packet would come from the DHCP server and should be written to your logs. Here we use grep with some options (-I to ignore binary files, -R for recursive) to find the log file entry that contains our DHCP server IP address.

Читайте также:  Кодировками ubuntu для windows

CentOS 7 example:

Fedora 30 example:

Ubuntu 19.04 example:

NOTE: Notice that every distribution stores it in a different log file? That is why we recursively search the whole /var/log/ directory.

Using Journalctl and grep

You can do the same as above using journalctl.

To learn more about using journalctl read “Viewing logs with journalctl“.

Find DHCP Server IP Address using Leases File

The dhclient utility stores your lease information in leases file. These lease files are kept in different places for different distros, software loads, and different versions.

NOTE: Replace [interface] with the name of your network interface (i.e. eth0, eno1, etc..)

Now use grep to find the DHCP server.

If you are using NetworkManager, you can find the lease file location by looking at the running processes (ps aux).

Now that you know where the leases file is, you can get the DHCP server IP address from that file.

We can string both of these operations together to simplify the process.

Find DHCP Server IP Using dhclient Utility

Another way would be to use the dhclient utility with some options. This also requires root or elevated privileges. The drawback of this is that the dhclient will go through the whole DHCP D.O.R.A. process. This also means that your DHCP server, network and client system need to be configured correctly. This is not much help if you are troubleshooting DHCP issues.

Conclusion

There you have it, a few different methods to find the IP address of your DHCP server. I am sure there are other ways, as with anything in Linux. If you know of another way please leave it in the comments and I will update the article.

Источник

Обнаружить DHCP

Доброго времени суток! Озадачили меня тут: надо проверить из программы (C++) работает ли dhcp или сеть сконфигурирована с постоянным адресом. Гуглеж дал лишь советы проверять leases в /var/lib/dhcpd/dhcpd.leases. Ubuntu 12.04,

Можно послать DHCPDISCOVER и найти таким образом DHCP-серверы.

Ещё можно узнать адрес сервера у NetworkManager, распарсив вывод команды:

($UUID — это UUID соединения).

Вместо запуска команды лучше получить нужную информацию напрямую через D-Bus.

лучше получить нужную информацию напрямую через D-Bus

а вот с этого места поподробнее, пожалуйста.

В общем случае это невозможно, так как настройки, полученные от DHCP, принципиально ничем не отличаются от настроек, заданных «руками».

А ещё наличие/отсутствие DHCP никак не коррелирует с «постоянством» IP-адреса.

А мне не надо настройки получать, нужно лишь определить наличие DHCP сервера.

А мне не надо настройки получать, нужно лишь определить наличие DHCP сервера.

  • На клиентской машине: определить, получены ли настройки по DHCP, или заданы локально.
  • На клиентской машине: определить, работает ли в локальной сети DHCP-сервер.
  • На сервере: определить, работает ли DHCP-сервер на этой же системе.

Что именно из этого тебе нужно?

На клиентской машине: определить, работает ли в локальной сети DHCP-сервер

Именно это. Пардон муа, что не оговорил сразу.

Почитай описание работы DHCP, посмотри снифером какие пакеты шлют dhcp-клиенты при поиске серверов и посмотри исходники dhcp-клиентов.

Тебе нужно отправить в сеть DHCPDISCOVER (насколько я помню) и подождать ответа от сервера (или нескольких серверов). Если ответ придёт — DHCP-сервер работает.

а вот с этого места поподробнее, пожалуйста.

NetworkManager виден как org.freedesktop.NetworkManager. Сначала в /org/freedesktop/NetworkManager вызываем org.freedesktop.NetworkManager.GetDevices, получаем там список путей, соответствующих устройствам. Для каждого из этих путей вызываем org.freedesktop.NetworkManager.Device.Interface, находим, какому устройству соответствует нужный интерфейс. На нужном устройстве вызываем org.freedesktop.NetworkManager.Device.Dhcp4Config, получаем путь. Если это /, тогда DHCP не использовался, иначе на этом пути можно вызвать org.freedesktop.NetworkManager.DHCP4Config.Options и получить словарь с конфигурацией DHCP.

Читайте также:  Windows 10 ipx spx

Это был вариант, если нужно проверить, использовался ли DHCP для конкретного интерфейса. Также можно раскрутить это через org.freedesktop.NetworkManager.ActiveConnections. Полное описание API здесь: http://projects.gnome.org/NetworkManager/developers/api/09/spec.html

Но если таки нужно определить наличие DHCP-сервера, а не факт его использования клиентом, но нужно посылать DHCPDISCOVER.

Спасибо!

и наилучшие пожелания 🙂

Премного благодарен! Кажется, это то, что мне надо.

А вот я не уверен. Если таки нужно это:

На клиентской машине: определить, работает ли в локальной сети DHCP-сервер

то нужно посылать DHCPDISCOVER и ждать ответа.

Если же сгодится и это:

На клиентской машине: определить, получены ли настройки по DHCP, или заданы локально.

тогда действительно можно опрашивать NetworkManager.

Я не говорил, что уверен. Там ведь «кажется», не?

А за помощь — спасибо. Я думаю, что смогу обойтись вариантом опроса NetworkManager.

думаю, что смогу обойтись вариантом опроса NetworkManager.

Не рекомендовал бы зацикливаться на NetworkManager’е, так как:
во-первых, существуют и другие менеджеры сети (например, wvdial),
во-вторых, сеть может работать и без менеджеров (в дебиане, например, может задаваться через /etc/network/interfaces).

Ну и в-третьих, даже если на этой машине стоит NetworkManager и настройки заданы вручную, в сети могут быть работоспособные dhcp-сервера.

Согласен

Ибо уже по граблям прошел. NetworkManager работает, а файла сервиса нет. Придется искать другие пути. Кстати, там где надо определяться, в /etc/network/interfaces практически пусто. С чем еще посоветуете повозиться?

Погуглируй по слову DHCPDISCOVER как и советовали.

Т.е. тебе нужно посылать в сеть по протоколу UDP специально сформированный широковещательный запрос. И слушать ответы на 67/68 портах UDP.

Возможно, тебе придется изучить работу с udp-пакетами, а также формат запросов. А может быть тебе повезет, и найдешь готовую C++ библиотеку для работы с DHCP. Ищи 😉

Спасибо.

Читал, читаю и буду читать. Только давайте посмотрим на задачу с другой стороны. В /etc/network/interfaces нет адреса, заданного явно. NeworkManager работает, в сети есть dhcp-сервер. Можно ли узнать (и как), какой ip у машины? Пропала связь, через некоторое время восстановилась, какой адрес получен?

В /etc/network/interfaces нет адреса, заданного явно

Эммм. Почему-то ты всё время говоришь о файлах и о службах.
Мне кажется тебе нужно делать упор на системные функции из системных библиотек.

Я не писал на C++, но уверен, что из «приплюснутых ссей» есть вызов сетевых системных функций, в том числе и определение поднятых на данный момент интерфейсов и ip-адресов.

Работай через системные функции.

p.s. Сам пишу на Ruby, тут всё проще 🙂

Работай через системные функции.

есть вызов сетевых системных функций

тогда действительно можно опрашивать NetworkManager.

Которого вполне может не быть

А ещё наличие/отсутствие DHCP никак не коррелирует с «постоянством» IP-адреса.

вообще-то коррелирует — если DHCP есть, то клиент от него получает IP, а если его нет, то использует свой IP из своих настроек. Конечно IRL возможны варианты.

Вот в этом и есть одна из проблем линукса — существует куча велосипедов, делающих одно и то же и конфликтующих друг с другом, и на компьютере пользователя запущен абсолютно произвольный набор программ, одинаковое будет только ядро. Как новой программе взаимодействовать с этим всем зоопарком, непонятно, потому что недостаточно стандартизированы уровни абстракции. Было бы гораздо лучше, если бы такие уровни абстракции существовали. Например, где-то был бы описан стандарт, каким должен быть API, через который настраивается сеть. Тогда программы, которым необходимо получить или изменить какие-либо настройки, связанные с сетью, использовали бы только этот API, а программа, делающая настройки сети, вызывая методы ядра, предоставляла бы этот API, и было бы гораздо проще разрабатывать программы. Но сейчас таких стандартов нет, есть только попытки создания подобных API (одна их этих попыток — NetworkManager, пример конкурирующих разных API для одной цели — logind и ConsoleKit). Конечно, есть небольшое число стандартизированных вещей (например, стандарты xdg и freedesktop), но они необязательны и их недостаточно. И одна из причин этого — свободное ПО, для которого очень трудно сделать такие стандарты, потому что тот, кто не захочет им подчиняться, может форкнуть проект и забить на эти стандарты (пример этому — два недавно появившихся форка udev), и это очень сильно тормозит развитие линукса.

Читайте также:  Art with windows paint

Доктор, скажите мне.

где этот самый DHCP хранит полученный от сервера ip?

если DHCP есть, то клиент от него получает IP

Клиент не обязан получать адрес от DHCP, даже если в сети работает DHCP-сервер.

а если его нет, то использует свой IP из своих настроек

Динамический IPv4-адрес можно получить и без DHCP, например link local 169.254.0.0/16.

И, к тому же, адреса, выдаваемые по DHCP, не обязаны быть динамическими, они могут быть и жёстко завязаны на конкретных клиентов.

где этот самый DHCP хранит полученный от сервера ip?

зачем формировать DHCP запрос самостоятельно, если можно вызвать уже имеющуюся в системе программу-DHCP-клиент?

где этот самый DHCP хранит полученный от сервера ip?

зачем его где-то хранить? Он устанавливается при настройке интерфейса, у меня это делает /sbin/dhcpcd, ну а посмотреть его можно ip a или ifconfig.

Клиент не обязан получать адрес от DHCP, даже если в сети работает DHCP-сервер.

не обязан. А кто говорит, что обязан? Но на кой хрен ставить в сети DHCP сервер(ы), а потом статически прописывать IP?

Динамический IPv4-адрес можно получить и без DHCP, например link local 169.254.0.0/16.

И, к тому же, адреса, выдаваемые по DHCP, не обязаны быть динамическими, они могут быть и жёстко завязаны на конкретных клиентов.

я в курсе. Могут и не жёстко. dhcpd можно настроить так, что-бы он выдавал клиенту последний его IP, если это возможно. На практике это приводит к тому, что IP очень редко меняется, и почти постоянный (постоянный, если клиентов не очень много, и IP адресов всегда и на всех хватает. Если клиентов больше 64K, а пул в 64К, то очевидно, возникнет момент, когда 65536у клиенту придётся выдать чужой IP из пула.) К сожалению у нас ISP с эти не заморачиваются.

Озадачили меня тут: надо проверить из программы (C++) работает ли dhcp или сеть сконфигурирована с постоянным адресом.

кстати, а как же /var/log/message?

Но на кой хрен ставить в сети DHCP сервер(ы), а потом статически прописывать IP?

Совершенно типичная ситуация: DHCP только для клиентских машин.

Ага, тут ещё один вариант забыли предложить: вывести окошко «У вас сеть настроена по DHCP?» с кнопками Да/Нет 8).

А вообще, автор судя по всему сам не знает что он хочет и зачем ему это надо. То ему надо определить, что адрес получен по DHCP, то ему надо определить, что в сети работает DHCP-сервер.

Совершенно типичная ситуация: DHCP только для клиентских машин.

Источник

Оцените статью