This is a DHCP test tool. It can send DHCP discover packets, and listen for DHCP replies.
The tool is cross-platform, although you will need to compile it yourself for non-Windows platforms.
The tool is written in the D Programming Language.
You can download a compiled Windows executable from my website, here.
The latest development build for Windows can be downloaded from GitHub Actions.
With DMD (or another D compiler) installed, run:
$ dmd dhcptest.d
By default, dhcptest starts in interactive mode.
It will listen for DHCP replies, and allow sending DHCP discover packets using the "d" command.
Type help
in interactive mode for more information.
If you do not receive any replies, try using the --bind
option (or --iface
on Linux) to bind to a specific local interface.
The program can also run in automatic mode if the --query
switch is specified on the command line.
An example command line to automatically send a discover packet and explicitly request option 43, wait for a reply, then print just that option:
dhcptest --quiet --query --request 43 --print-only 43
Options can also be specified by name:
dhcptest --quiet --query \
--request "Vendor Specific Information" \
--print-only "Vendor Specific Information"
Query mode will report the first reply recieved. To automatically send a discover packet and wait for
all replies before the timeout, use --wait
. For additional resilience against dropped packets on busy
networks, consider using the --tries
and --timeout
switches:
dhcptest --quiet --query --wait --tries 5 --timeout 10
You can spoof the Vendor Class Identifier, or send additional DHCP options with the request packet,
using the --option
switch:
dhcptest --query --option "60=Initech Groupware"
Option 82 (Relay Agent Information) can be specified as follows:
dhcptest --query --option "Relay Agent Information=agentCircuitID=\"foo\", agentRemoteID=\"bar\""
Run dhcptest --help
for further details and additional command-line parameters.
For a list and description of DHCP options, see RFC 2132.
dhcptest
is available under the Boost Software License 1.0.
--iface
option for Linux--raw
)--bind
, --target
, and --target-port
options--giaddr
option (contributed by pcsegal)Refactor and improve option value parsing
Allow specifying all supported format types in both --option
and
--print-only
switches
Allow specifying DHCP option types by name as well as by number
Allow overriding the request type option. E.g., you can now send 'request' (instead of 'discover') packets using:
--option "DHCP Message Type=request"
Add formatting support for options 42 (Network Time Protocol Servers Option) and 82 (Relay Agent Information)
Change how timeouts are handled:
--tries
and --wait
are absent), but still allow waiting indefinitely if
0 is specified.--secs
switch--wait
switch--print-only
switch now understands output formatting:
--print-only "N[hex]"
will output the value as a zero padded hexadecimal string of bytes.
--print-only "N[ip]"
will output the value as an IP address.--option
switch now understands hexadecimal or IPv4-dotted-quad formatting:--option "N[hex]=XX XX XX ..."
or --option "N[IP]=XXX.XXX.XXX.XXX"
--tries
, --timeout
, --option
--mac
, --quiet
, --query
, --request
, --print-only
--help
switch--bind
switch to specify the interface to bind onhelp
and quit
commandsdiscover
command