74

Is there a simple ping-like command to test whether a DHCP service is running on a network? ...on Linux

pufferfish
  • 2,660
  • 9
  • 37
  • 40

9 Answers9

93

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
mivk
  • 3,457
  • 1
  • 34
  • 29
  • this didn't find my DHCP server.- must be something wrong with my pc... ethernet works, just not that. – Jasen Nov 22 '17 at 23:27
  • 2
    Note that [this script](https://github.com/nmap/nmap/blob/master/scripts/broadcast-dhcp-discover.nse) 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. – Bob Oct 08 '19 at 05:27
  • @Bob : Thanks. That is good to know – mivk Oct 11 '19 at 09:32
  • @Bob An option has been added. `--script-args mac=XX:XX:XX:XX:XX:XX`. It hasn't been released yet though. – Aleksandr Dubinsky Aug 14 '20 at 08:25
  • This should be the accepted answer IMHO. – MemphiZ Jan 10 '22 at 05:42
17

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>
sandoz
  • 508
  • 1
  • 4
  • 7
15

or you can try dhcpcd in test mode:

dhcpcd -T eth0
chicks
  • 3,639
  • 10
  • 26
  • 36
Paul M
  • 553
  • 5
  • 10
  • 1
    Use `dhcpcd -T eth0 -t 2` to timeout after 2 seconds – Maarten Wolzak Sep 22 '17 at 11:14
  • Could 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? – Sopalajo de Arrierez May 29 '20 at 19:30
  • a 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. – Paul M Jun 22 '20 at 14:28
  • not 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. – Paul M Dec 11 '20 at 14:03
12

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.

Craig McQueen
  • 720
  • 6
  • 18
  • 2
    Also available for macOS thru `brew install dhcpdump`. – the Oct 05 '16 at 17:46
  • This seems to only only work if there is actual dhcp traffic on the network. – mivk Sep 27 '17 at 15:51
  • @mivk Are you being serious? – Ken Sharp Feb 22 '18 at 13:14
  • 2
    @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. – mivk Feb 26 '18 at 15:49
  • @mivk Why? Because the poster said exactly that. – Dessa Simpson Jul 12 '19 at 19:20
7

Why not just make a DHCP request?

dhclient

For verbose output use:

dhclient -v

Sirex
  • 5,447
  • 2
  • 32
  • 54
6

I wrote a DHCP test client program a while ago, works on Windows and POSIX:

https://github.com/CyberShadow/dhcptest

Vladimir Panteleev
  • 1,705
  • 4
  • 20
  • 34
  • Written in D... It seems possible (with `ldc2`) to get static binaries with `ldc2 -link-defaultlib-shared=false -static -L=-lphobos2-ldc -L=-lz dhcptest.d` – Gert van den Berg Oct 22 '18 at 07:27
4

There is a program called dhcping (with just one p)

topdog
  • 3,490
  • 16
  • 13
0

if you use nagios you could monitor it with check_dhcp

natxo asenjo
  • 5,641
  • 2
  • 25
  • 27
0

On Debian-Ubuntu systems:

dhcpd -f

gives good feedback and tests the configuration.

On RH systems try:

/etc/rc.d/init.d/dhcpd configtest
John P. Fisher
  • 470
  • 4
  • 9
  • That 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 May 30 '20 at 21:44