44

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

10

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>
34

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
  • 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
5

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.

  • 2
    Also available for macOS thru brew install dhcpdump. – guaka Oct 5 '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. – Duncan X Simpson Jul 12 at 19:20
4

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

https://github.com/CyberShadow/dhcptest

  • 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 7:27
4

or you can try dhcpcd in test mode:

dhcpcd -T eth0
  • Use dhcpcd -T eth0 -t 2 to timeout after 2 seconds – Maarten Wolzak Sep 22 '17 at 11:14
4

Why not just make a DHCP request?

dhclient

For verbose output use:

dhclient -v

  • 13
    Probably 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. – ThiefMaster Jun 9 '12 at 18:54
  • 5
    -n option helps here? – akostadinov Jan 24 '13 at 22:20
  • 1
    Option -n seems to be broken on ISC DHCP Client v4.2.4 on Ubuntu 14 LTS? – Josip Rodin Apr 15 '16 at 14:33
  • I don't think -n does what you think it does. – Jasen Nov 22 '17 at 23:19
  • explainshell.com/explain?cmd=dhclient+-n: "Do not configure any interfaces. This is most likely to be useful in combination with the -w flag." – mwfearnley Jan 28 at 12:22
3

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

1

On Debian-Ubuntu systems:

dhcpd -f

gives good feedback and tests the configuration.

On RH systems try:

/etc/rc.d/init.d/dhcpd configtest
0

if you use nagios you could monitor it with check_dhcp

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.