Command line program to test DHCP service
Solution 1
Even if you don't use a Nagios monitoring server, you can grep the check_dhcp binary or compile it from source and use the check to test a DHCP-Server. E.g.
./check_dhcp -v -s <dhcp_server_address> -r <expected_ip_address> -m <mac_address_touse>
Solution 2
Based on this answer, assuming you have installed nmap (sudo apt install nmap
):
sudo nmap --script broadcast-dhcp-discover
Add the -e $interface
option if you have more than one network interface. (For example: nmap --script broadcast-dhcp-discover -e eth0
)
Sample output:
Starting Nmap 7.01 ( https://nmap.org ) at 2017-09-27 17:40 CEST
Pre-scan script results:
| broadcast-dhcp-discover:
| Response 1 of 1:
| IP Offered: 192.168.81.94
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.81.2
| IP Address Lease Time: 5m00s
| Subnet Mask: 255.255.255.0
| Router: 192.168.81.2
| Domain Name Server: 192.168.81.2
| Domain Name: example.lan
| NTP Servers: 192.168.81.10, 192.168.81.2
| NetBIOS Name Server: 192.168.81.10
|_ NetBIOS Node Type: 8
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.66 seconds
Or this output on a different network, with nmap v. 6 :
Starting Nmap 6.00 ( http://nmap.org ) at 2017-09-27 17:42 CEST
Pre-scan script results:
| broadcast-dhcp-discover:
| IP Offered: 192.168.4.101
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.4.1
| IP Address Lease Time: 7 days, 0:00:00
| Subnet Mask: 255.255.255.0
| Time Offset: 7200
| Router: 192.168.4.1
| Domain Name Server: 208.91.112.53, 208.91.112.52
| Renewal Time Value: 3 days, 12:00:00
|_ Rebinding Time Value: 6 days, 3:00:00
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.15 seconds
Solution 3
or you can try dhcpcd
in test mode:
dhcpcd -T eth0
Solution 4
dhcpdump
is good for sniffing and displaying DHCP packets on the network.
E.g.
# dhcpdump -i eth0
---------------------------------------------------------------------------
TIME: 2015-11-27 11:41:37.379
IP: 0.0.0.0 (0:11:b9:5:0:b8) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: abce9327
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:11:b9:05:00:b8:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER)
OPTION: 57 ( 2) Maximum DHCP message size 576
OPTION: 55 ( 4) Parameter Request List 1 (Subnet mask)
3 (Routers)
28 (Broadcast address)
6 (DNS server)
---------------------------------------------------------------------------
You can use it in conjunction with another tool to do DHCP requests, or just use it to watch PCs/devices query DHCP.
Solution 5
Why not just make a DHCP request?
dhclient
For verbose output use:
dhclient -v
Related videos on Youtube
pufferfish
Updated on July 19, 2022Comments
-
pufferfish about 9 hours
Is there a simple ping-like command to test whether a DHCP service is running on a network? ...on Linux
-
ThiefMaster about 10 yearsProbably because that will make your system use the IP assigned by the DHCP server which is not what one wants when e.g. trying to find out if there are rogue DHCP servers in his network.
-
akostadinov over 9 years-n option helps here?
-
Josip Rodin over 6 yearsOption
-n
seems to be broken on ISC DHCP Client v4.2.4 on Ubuntu 14 LTS? -
the almost 6 yearsAlso available for macOS thru
brew install dhcpdump
. -
Maarten Wolzak almost 5 yearsUse
dhcpcd -T eth0 -t 2
to timeout after 2 seconds -
mivk almost 5 yearsThis seems to only only work if there is actual dhcp traffic on the network.
-
Jasen over 4 yearsI don't think
-n
does what you think it does. -
Jasen over 4 yearsthis didn't find my DHCP server.- must be something wrong with my pc... ethernet works, just not that.
-
Ken Sharp over 4 years@mivk Are you being serious?
-
mivk over 4 years@KenSharp Why? Yes. dhcpdump will only show something when a client on the network requests a dhcp address. If you don't want to wait and don't want to send a dhcp request yourself but only see which machine would answer what IF there were a request, then this is not the solution.
-
Gert van den Berg over 3 yearsWritten in D... It seems possible (with
ldc2
) to get static binaries withldc2 -link-defaultlib-shared=false -static -L=-lphobos2-ldc -L=-lz dhcptest.d
-
mwfearnley over 3 yearsexplainshell.com/explain?cmd=dhclient+-n: "Do not configure any interfaces. This is most likely to be useful in combination with the -w flag."
-
Dessa Simpson about 3 years@mivk Why? Because the poster said exactly that.
-
Bob almost 3 yearsNote that this script uses a fixed MAC address (
DE:AD:CO:DE:CA:FE
) and therefore will not work if your DHCP server is configured with a whitelist. -
mivk almost 3 years@Bob : Thanks. That is good to know
-
Sopalajo de Arrierez about 2 yearsCould you please expand on why should this command detect DHCP servers on your network and what kind of output should we expect when someone will be detected?
-
Paul M about 2 yearsThat test is run on the dhcp server to check its configuration, it doesn't tell you if a device on the network will actually see a working server
-
Paul M about 2 yearsa dhcp server needs to see a packet on the network from a host requesting a dhcp configuration message. therefore we need to mimic a dhcp request,, and this tool will do that and print the response, which will be an ip address, netwmask, default router, and optionally dns resolvers, ntp servers etc.
-
Aleksandr Dubinsky almost 2 years@Bob An option has been added.
--script-args mac=XX:XX:XX:XX:XX:XX
. It hasn't been released yet though. -
Paul M over 1 yearnot all distros seem to have the dhcpcd program, so you'll have to try the dhclient program in test mode, as discussed elsewhere on this page.
-
MemphiZ 6 monthsThis should be the accepted answer IMHO.