Задать вопрос
Наши специалисты ответят на любой интересующий вопрос по услуге
Иногда при разборе чужой сети требуется определить насколько правильно работает сеть и нет ли там чужих DHCP серверов.
Делается это довольно просто. Для этого можно использовать небольшую утилиту RogueChecker.
Скачиваем, запускаем, видим такое окошко:
Нажимаем кнопку “Detect Rogue Servers” и в верхнем окне получаем список всех серверов, которые отозвались.
Если же клиентский компьютер был введен в домен, то список авторизованных серверов появится в нижней части окна.
После первого поиска все найденные DHCP серверы будут считаться неизвестными. Утилита не сверяет найденные серверы со списком авторизованных в AD.
Если поставить галочку в столбце “Valid DHCP Servers” напротив нашего правильного сервера, то программа будет его считать авторизованным, и больше не будет рисовать красный кружочек с восклицательным знаком около него. Это сделано для удобства просмотра и поиска “левых” DHCP серверов в сети. Иконка в трее меняется, если обнаружен неизвестный DHCP сервер:
Также программу можно использовать для автоматического вылавливания периодически появляющихся DHCP серверов.
Для этого надо зайти во вкладку Configuration и установить настройки, как часто делать поиск DHCP серверов. В данном примере я поставил проверку на каждые 5 минут.
Также в этом окне можно выбрать через какие сетевые карты делать поиск серверов (при условии, что сетевых карт несколько в этом компьютере).
Источник
Заказать услугу
Оформите заявку на сайте, мы свяжемся с вами в ближайшее время и ответим на все интересующие вопросы.
On my LAN there are multiple DHCP servers running, and all of them are on the same range.
Now I use a machine which has a dynamic IP address from a DHCP server. I have to know from which server it comes.
How to do that?!
Aaron
6,6365 gold badges34 silver badges48 bronze badges
asked Jan 31, 2014 at 16:19
To find out the DHCP server that’s giving you the IP, just press Ctrl+Alt+T on your keyboard to open Terminal. When it opens, run the command(s) below:
cat /var/lib/dhcp3/dhclient.leases
Or you can just use grep command to get DHCP server address.
grep dhcp-server-identifier /var/lib/dhcp3/dhclient.leases
OR
grep dhcp-server-identifier /var/lib/dhcp/dhclient.leases
For Ubuntu 14.04, 16.04, and 17.10 you can use:
dhclient -d -nw eth0
Sample output:
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/00:0c:29:49:3e:67
Sending on LPF/eth0/00:0c:29:49:3e:67
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x4f723f9)
DHCPREQUEST of 192.168.138.136 on eth0 to 255.255.255.255 port 67 (xid=0x4f723f9)
DHCPOFFER of 192.168.138.136 from 192.168.138.254
DHCPACK of 192.168.138.136 from 192.168.138.254
RTNETLINK answers: File exists
bound to 192.168.138.136 -- renewal in 892 seconds.
answered Jan 31, 2014 at 17:04
Mitch♦Mitch
106k24 gold badges208 silver badges266 bronze badges
4
In Ubuntu 14.04, the /var/lib/dhcp/dhclient.leases
is empty. The actual lease file can be found on the command line of dhclient
via ps
. Look for the -lf
option. This command should work in Ubuntu 14.04 installations (still valid as of 17.10):
cat $(ps aux | grep -o '[/]var/lib/NetworkManager/S*.lease') | grep dhcp-server-identifier
answered May 5, 2015 at 2:36
glibdudglibdud
7378 silver badges21 bronze badges
1
With:
-
nmap (source; DHCPv6):
sudo nmap --script broadcast-dhcp-discover -e eth0 # DHCPv4 sudo nmap --script broadcast-dhcp6-discover -6 # DHCPv6
-
dhdump (source):
sudo dhcpdump -i eth0
-
tcpdump (source):
sudo tcpdump -i eth0 -nev udp port 68
Others:
dhcp_probe
(dhcp-probe
package)
answered Oct 19, 2018 at 19:44
Pablo BianchiPablo Bianchi
13.8k4 gold badges74 silver badges112 bronze badges
1
In Ubuntu 16.04 you can try
journalctl | grep DHCPACK
answered Sep 3, 2018 at 9:33
1
Using the new iproute2 (in my case in Ubuntu 22.04.1 LTS):
$ ip route | grep default
default via 1xx.1xx.xxx.xxx dev gpd0 metric 10
default via 192.168.xxx.xxx dev wlp0s proto dhcp metric 100
The DHCP server IP is the one given after the via
keyword for each of your specified network interface(s).
ip r | grep default
also works.
From the man:
ip route
Show table routes.
The help:
$ ip route help
$ ip route help
Usage: ip route { list | flush } SELECTOR
ip route save SELECTOR
ip route restore
ip route showdump
ip route get [ ROUTE_GET_FLAGS ] ADDRESS
[ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
[ mark NUMBER ] [ vrf NAME ]
[ uid NUMBER ] [ ipproto PROTOCOL ]
[ sport NUMBER ] [ dport NUMBER ]
ip route { add | del | change | append | replace } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
[ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO ]
[ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
[ ttl-propagate { enabled | disabled } ]
INFO_SPEC := { NH | nhid ID } OPTIONS FLAGS [ nexthop NH ]...
NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ]
[ dev STRING ] [ weight NUMBER ] NHFLAGS
FAMILY := [ inet | inet6 | mpls | bridge | link ]
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ as [ to ] ADDRESS ]
[ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ]
[ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
[ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
[ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
[ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
[ pref PREF ] [ expires TIME ] [ fastopen_no_cookie BOOL ]
TYPE := { unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat }
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
PREF := [ low | medium | high ]
TIME := NUMBER[s|ms]
BOOL := [1|0]
FEATURES := ecn
ENCAPTYPE := [ mpls | ip | ip6 | seg6 | seg6local | rpl | ioam6 ]
ENCAPHDR := [ MPLSLABEL | SEG6HDR | SEG6LOCAL | IOAM6HDR ]
SEG6HDR := [ mode SEGMODE ] segs ADDR1,ADDRi,ADDRn [hmac HMACKEYID] [cleanup]
SEGMODE := [ encap | inline ]
SEG6LOCAL := action ACTION [ OPTIONS ] [ count ]
ACTION := { End | End.X | End.T | End.DX2 | End.DX6 | End.DX4 |
End.DT6 | End.DT4 | End.DT46 | End.B6 | End.B6.Encaps |
End.BM | End.S | End.AS | End.AM | End.BPF }
OPTIONS := OPTION [ OPTIONS ]
OPTION := { srh SEG6HDR | nh4 ADDR | nh6 ADDR | iif DEV | oif DEV |
table TABLEID | vrftable TABLEID | endpoint PROGNAME }
IOAM6HDR := trace prealloc type IOAM6_TRACE_TYPE ns IOAM6_NAMESPACE size IOAM6_TRACE_SIZE
ROUTE_GET_FLAGS := [ fibmatch ]
Current version:
$ ip -V
ip utility, iproute2-5.15.0, libbpf 0.5.0
More:
Web: https://wiki.linuxfoundation.org/networking/iproute2
Git.kernel: https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
Github: https://github.com/shemminger/iproute2
answered Sep 27, 2022 at 19:29
s.ks.k
1,1282 gold badges14 silver badges40 bronze badges
наличие двух серверов. при каждом запросе ip-адреса от клиента он будет получать его от того сервера, пакет от которого успел раньше прийти.
избежать конфликтов ip-адресов. при назначении вручную – вести список назначенных адресов, не выдавать пользователям прав на изменение ip-адресов. при назначении автоматическом – настроить DHCP-сервер (один), не выдавать пользователям прав на изменение ip-адресов, не допускать появления в сети других DHCP-серверов (защитить сетевые коммутаторы от постороннего доступа, использовать на коммутаторах DHCP-snooping, если поддерживается).
найти лишние DHCP-сервера. запустить на компьютере Wireshark. заставить компьютер переполучить ip-адрес (например, вытаскиванием патчкорда). проанализировать результат. если ответы на запрос пришли с разных MAC-адресов – посмотреть, какой MAC-адрес у правильного DHCP-сервера; остальные, следовательно, лишние. дальше их можно искать, если у вас управляемые коммутаторы, на них можно посмотреть, какому физическому порту коммутатора назначен MAC-адрес лишнего DHCP-сервера.
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.
CentOS 7 example:
[[email protected] ~]$ sudo grep -IR "DHCPOFFER" /var/log/* /var/log/anaconda/syslog:17:15:00,299 INFO dhclient:DHCPOFFER from 10.0.0.1
Fedora 30 example:
[[email protected] ~]$ sudo grep -IR "DHCPOFFER" /var/log/* /var/log/anaconda/journal.log:Apr 03 20:02:33 localhost-live dhclient[2464]: DHCPOFFER from 10.0.0.1
Ubuntu 19.04 example:
[email protected]:~$ sudo grep -IR "DHCPOFFER" /var/log/* /var/log/syslog:Oct 12 10:15:55 ubuntu1904 dhclient[864]: DHCPOFFER of 192.168.122.204 from 192.168.122.1
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.
[[email protected] ~]$ sudo journalctl | grep -m1 DHCPACK Apr 20 21:46:28 putor dhclient[1506]: DHCPACK from 10.0.0.1 (xid=0x65f93c03)
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.
Common locations:
/var/lib/dhcp/dhclient.[interface].leases /var/lib/dhcp3/dhclient.leases
NOTE: Replace [interface] with the name of your network interface (i.e. eth0, eno1, etc..)
Now use grep to find the DHCP server.
[[email protected] ~]$ sudo grep -m1 "dhcp-server" /var/lib/dhcp/dhclient.eno1.leases option dhcp-server-identifier 10.0.0.1;
If you are using NetworkManager, you can find the lease file location by looking at the running processes (ps aux).
[[email protected] ~]$ ps aux | grep NetworkManager root 967 0.0 0.1 620636 20348 ? Ssl 10:14 0:00 /usr/sbin/NetworkManager --no-daemon root 2603 0.0 0.0 15176 9016 ? S 10:15 0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eno1.pid -lf /var/lib/NetworkManager/dhclient-dd040512-708c-3858-97c6-d79e66458e36-eno1.lease -cf /var/lib/NetworkManager/dhclient-eno1.conf eno1
Now that you know where the leases file is, you can get the DHCP server IP address from that file.
[[email protected] ~]$ sudo grep -m1 "dhcp-server" /var/lib/NetworkManager/dhclient-dd040512-708c-3858-97c6-d79e66458e36-eno1.lease option dhcp-server-identifier 10.0.0.1;
We can string both of these operations together to simplify the process.
[[email protected] ~]$ sudo cat $(ps aux | grep -o '[/]var/lib/NetworkManager/S*.lease') | grep -m1 dhcp-server-identifier option dhcp-server-identifier 10.0.0.1;
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.
[[email protected] ~]$ sudo dhclient -d -nw eno1 Internet Systems Consortium DHCP Client 4.3.6 Copyright 2004-2017 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/eno1/34:e6:d7:0f:a9:83 Sending on LPF/eno1/34:e6:d7:0f:a9:83 Sending on Socket/fallback DHCPDISCOVER on eno1 to 255.255.255.255 port 67 interval 7 (xid=0x1e69d667) DHCPREQUEST on eno1 to 255.255.255.255 port 67 (xid=0x1e69d667) DHCPOFFER from 10.0.0.1 DHCPACK from 10.0.0.1 (xid=0x1e69d667) bound to 10.0.0.2 -- renewal in 3287 seconds.
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.
Resources and Links
- DHCP (Dynamic Host Configuration Protocol) – Wikipedia
Иногда при разборе чужой сети требуется определить насколько правильно работает сеть и нет ли там чужих DHCP серверов.
Делается это довольно просто. Для этого можно использовать небольшую утилитку RogueChecker (см. аттач). Автор ее Subhash Badri. Основную страничку с утилитой можно посмотреть тут, скачать утилиту тут.
Скачиваем, запускаем, видим такое окошко:
Нажимаем кнопку “Detect Rogue Servers” и в верхнем окне получаем список всех серверов, которые отозвались.
Если же клентский компьютер был введен в домен, то список авторизованных серверов появится в нижней части окна.
После первого поиска все найденные DHCP серверы будут считаться неизвестными. Утилита не сверяет найденные серверы со списком авторизованных в AD.
Если поставить галочку в столбце “Valid DHCP Servers” напротив нашего правильного сервера, то программа будет его считать авторизованным, и больше не будет рисовать красный кружочек с восклицательным знаком около него. Это сделано для удобства просмотра и поиска “левых” DHCP серверов в сети. Иконка в трее меняется, если обнаружен неизвестный DHCP сервер:
Также программу можно использовать для автоматического вылавливания периодически появляющихся DHCP серверов.
Для этого надо зайти во вкладку Configuration и установить настройки, как часто делать поиск DHCP серверов. В данном примере я поставил проверку на каждые 5 минут.
Также в этом окне можно выбрать через какие сетевые карты делать поиск серверов (при условии, что сетевых карт несколько в этом компьютере).