Annotation of embedaddon/dhcdrop/man/dhcdrop.8, revision 1.1.1.1

1.1       misho       1: .TH DHCDROP 8 "18/08/2009" 
                      2: .SH NAME
                      3: dhcdrop \- program for searching and suppress false DHCP servers in Ethernet. 
                      4: .SH SYNOPSIS
                      5: .BI "dhcdrop 
                      6: .RB [ " \-h "]
                      7: .RB [ " \-D "]
                      8: .RB [ " \-t "]
                      9: .RB [ " \-y "]
                     10: .RB [ " \-r "]
                     11: .RB [ " \-b "]
                     12: .RB [ " \-a "]
                     13: .RB [ " \-A "]
                     14: .RB [ " \-f "]
                     15: .RB [ " \-R "]
                     16: .RB [ " \-q "]
                     17: .LP
                     18: .RB [ " \-m "
                     19: .I count
                     20: ]
                     21: .RB [ " \-c "
                     22: .I count
                     23: ]
                     24: .RB [ " \-n " 
                     25: .I hostname
                     26: ]
                     27: .RB [ " \-N "
                     28: .I clientname
                     29: ]
                     30: .RB [ " \-p "
                     31: .I port
                     32: ]
                     33: .RB [ " \-P "
                     34: .I port
                     35: ]
                     36: .RB [ " \-w "
                     37: .I seconds
                     38: ]
                     39: .LP
                     40: .RB [ " \-T "
                     41: .I timeout
                     42: ]
                     43: .RB [ " \-M "
                     44: .I max-hosts-scan
                     45: ]
                     46: .RB [ " \-l "
                     47: .I MAC-address
                     48: ]
                     49: .RB [ " \-L "
                     50: .I network
                     51: ]
                     52: .RB [ " \-S "
                     53: .I network/mask
                     54: ]
                     55: .RB [ " \-F "
                     56: .I from-IP
                     57: ]
                     58: .LP
                     59: .RB [ " \-s "
                     60: .I server-IP
                     61: ]
                     62: .RB [ " \-C "
                     63: .I children count (2 - 32)
                     64: ]
                     65: .LP
                     66: .RB [ " \initial-MAC-address " ]
                     67: .RB < " \-i "
                     68: .I interface-name|interface-index
                     69: >
                     70: .LP
                     71: .SH DESCRIPTION
                     72: Suppressing DHCP server is made by
                     73: .B dhcdrop
                     74: with a help of an attack DHCP 
                     75: starvation or with a help of flooding with DHCPDISCOVER messages. 
                     76: Look for details below. Besides dhcdrop can be used as a diagnostical 
                     77: tool and stress-testing when setting and developing DHCP servers
                     78: .SH OPTIONS
                     79: .TP
                     80: .B "-h"
                     81: prints help-message and also codes of program's return.
                     82: .TP
                     83: .B "-D"
                     84: list of available network interfaces. Format - index:name.
                     85: .TP
                     86: .B "-t"
                     87: test mode. Using this mode 
                     88: .B dhcdrop
                     89: does not execute suppression of server. DHCPDISCOVER is being sent. 
                     90: If the answer comes to it from the non\-ignored server then the program is 
                     91: completes returning code 200 and printing the string: 
                     92: .IP
                     93: DHCP SRV: 10.7.7.1 (IP-hdr: 10.7.7.1) SRV ether: 00:02:44:75:77:E4, YIP: 10.7.7.205
                     94: .IP
                     95: which consists of the MAC address of found false DHCP server.
                     96: .TP
                     97: .B "-y"
                     98: answer 'yes' to all questions.
                     99: .TP
                    100: .B "-r"
                    101: disable ethernet address randomize. Every further source MAC address differs from previous for 1.
                    102: .TP
                    103: .BI "-b"
                    104: points on necessity of using flag  
                    105: .B BROADCAST
                    106: in DHCP packets sent.
                    107: .TP
                    108: .B "-a"
                    109: always wait for server's response to default DHCP client port (68) even if a 
                    110: number of client's port set differs from default value.
                    111: .TP
                    112: .B "-A"
                    113: always wait for server's response from default DHCP server port (67), 
                    114: even if a number of client's port set differs from default value.
                    115: .TP
                    116: .B "-f"
                    117: flood mode with DHCPDISCOVER requests. SHOULD BE USED ATTENTIVELY. 
                    118: It is convenient for stress-testing of the server. 
                    119: In case of using option 
                    120: .B "-r"
                    121: all the packets sent have the same MAC address.
                    122: .TP
                    123: .BI "-R"
                    124: send DHCPRELEASE from source MAC address specified by 
                    125: .B "<initial MAC address>"
                    126: and IP address specified by option 
                    127: .B "-F" 
                    128: to server specified by option 
                    129: .B "-s"
                    130: .
                    131: .TP
                    132: .B "-q"
                    133: quiet mode.
                    134: .TP
                    135: .BI "-m" " count" 
                    136: maximum number of attempts to receive answer from DHCP server. (default: 5).
                    137: .TP
                    138: .BI "-c" " count"
                    139: maximum number of receiving addresses from DHCP server (default: 255).
                    140: .TP
                    141: .BI "-n" " hostname"
                    142: value of DHCP-option 'HostName' (default: 'DHCP-dropper').
                    143: .TP
                    144: .BI "-N" " clientname"
                    145: value of DHCP-option 'Vendor-Class' (default: 'DHCP-dropper').
                    146: .TP
                    147: .BI "-p" " port"
                    148: set client port value (default: 68).
                    149: .TP
                    150: .BI "-P" " port"
                    151: set server port value (default: 67).
                    152: .TP
                    153: .BI "-w" " seconds"
                    154: set timeout after which the process will be restarted when using 
                    155: agressive mode (see option 
                    156: .B "-L"
                    157: ) (default: 60 secs).
                    158: .TP
                    159: .BI "-T" " timeout"
                    160: set timeout of waiting server response in seconds (default: 3).
                    161: .TP
                    162: .BI "-M" " maximum-hosts"
                    163: maximum number of hosts scanned if agressive mode used (option -L).
                    164: .TP
                    165: .BI "-l" " MAC-address"
                    166: ethernet address of DHCP server which need to ignore. 
                    167: May be several servers. Need option
                    168: .B -l
                    169: for each server.
                    170: .TP
                    171: .BI "-L" " legal-network"
                    172: specify legal network(s) on interfase. May be
                    173: several networks. If this parameter is set, dhcdrop
                    174: uses agressive mode: it scans address range assigned
                    175: by DHCP server for searching hosts with incorrect addresses,
                    176: sends DHCPRELEASE to server from every found host after
                    177: this it restarts process of receiving addreses. Need option
                    178: .B -L
                    179: for each network.
                    180: .TP
                    181: .BI "-S" " network/mask"
                    182: ARP-scan for network 'network' with network mask 'mask' (CIDR notation). 
                    183: Source IP address for scanning specified by option 
                    184: .B -F
                    185: . 
                    186: If source IP is not set - using random IP address from network address range. 
                    187: .TP
                    188: .BI "-F" " source-ip"
                    189: source IP for scanning network or sending DHCPRELEASE (see option  
                    190: .B -S
                    191: and 
                    192: .B -R
                    193: ).
                    194: .TP
                    195: .BI "-s" " server-ip-adress"
                    196: specify DHCP server IP address. Used with option 
                    197: .B -R
                    198: .
                    199: .TP
                    200: .BI "-C" " count"
                    201: children number (default: 0, minimal value: 2, maximum: 32). Compatible only with flag  
                    202: .B -f
                    203: . 
                    204: .TP
                    205: .B "initial-MAC-address"
                    206: specify source MAC address for sending first DHCP message.
                    207: If address not set - used random value.
                    208: .TP
                    209: .BI "-i" " interface"
                    210: defines network interface, can be name or index (cannot be 'any'). 
                    211: For listing available interfaces use option 
                    212: .B -D
                    213: .
                    214: .SH THEORETICAL BASICS
                    215: In DHCP protocol there is an option which specifies duration of leasing an IP address 
                    216: (Lease Time). During this time DHCP server gives IP address for client's use. 
                    217: After this time period a client have to make an attempt to refresh IP address 
                    218: for the purpose of extension the lease. For the server giving out IP address in 
                    219: lease means that during the lease this IP address can be given only to an owner 
                    220: of the lease and nobody else. Identification of clients is usually done by the 
                    221: server on the ground of MAC address. Usually every server has a pool of dynamic 
                    222: IP addresses. These are addresses which are not assigned to concrete MAC addresses 
                    223: and are given dynamically after any client's request. Pool on SOHO routers with 
                    224: default settings is not very big - from tens to about 200 addresses. In case 
                    225: of using software which performs the function of DHCP server the size of the pool 
                    226: is defined by the one who sets. If the pool of addresses is over then DHCP server 
                    227: ignores the requests from new clients (probably documenting this in logs). 
                    228: Actually it's not in action.
                    229: 
                    230: Thereby in case of appearance false DHCP they can be supressed rather easy. 
                    231: It's necessary to receive lease for every IP address available on this server 
                    232: sending requests from unique clients every time. The more Lease Time is in server 
                    233: settings, the bigger period of DHCP server suppression in case of exhaustion of 
                    234: dynamical pool is. For most of SOHO routers Lease time comes to a number of days 
                    235: or even weeks. In case of using WinGate, dhcpd and other similar soft as DHCP 
                    236: server the lease time depends on the fantasy of the man who launched false DHCP server.
                    237: .SH PRINCIPLE OF DHCDROP OPERATION
                    238: The program opens the interface specified in command line options using promiscuous 
                    239: mode then forms DHCP message (DHCPDISCOVER) using random source MAC address 
                    240: (if another conduct isn't specified) and sends it to the interface:
                    241: 
                    242: .nf
                    243: 01:58:04.681600 00:70:de:3b:b9:05 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), 
                    244: length 342: (tos 0x10, ttl 64, id 33964, offset 0, flags [none], 
                    245: proto UDP (17), length 328) 
                    246: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:70:de:3b:b9:05, 
                    247: length 300, xid 0xcc1cfc5c, Flags [none]
                    248:           Client-Ethernet-Address 00:70:de:3b:b9:05
                    249:           Vendor-rfc1048 Extensions
                    250:             Magic Cookie 0x63825363
                    251:             DHCP-Message Option 53, length 1: Discover
                    252:             Parameter-Request Option 55, length 3:
                    253:               Domain-Name-Server, Default-Gateway, Subnet-Mask
                    254:             Hostname Option 12, length 12: "DHCP-dropper"
                    255:             Vendor-Class Option 60, length 12: "DHCP-dropper"
                    256:             Client-ID Option 61, length 7: ether 00:70:de:3b:b9:05
                    257: .fi
                    258: 
                    259: After this it starts to wait for server's answer (DHCPOFFER). If the answer with 
                    260: offering IP address lease is received then the next DHCP message (DHCPREQUEST) 
                    261: is send to the interface. On this message server answers with DHCPACK-packet 
                    262: which confirms the possibility of using the IP address by a client. 
                    263: This completes the operation of receiving IP address suggested by the server. 
                    264: The program changes source MAC address and sends DHCPDISCOVER again. 
                    265: After that all the above operations of receiving the lease of a new 
                    266: IP address are repeated. It's worth paying attention that the program 
                    267: changes not only the client's MAC address in DHCP message but also the 
                    268: MAC address in the header of Ethernet-frame. This possibility brings the work 
                    269: of the program maximally nearer to the work of real DHCP client (and also 
                    270: allows to avoid DHCP snooping).
                    271: 
                    272: Cycle of receiving IP addresses from server comes to an end when the maximum 
                    273: number of IP addresses set by the option is received or in case of exhausting 
                    274: dynamical pool of the server. In the second case you gained a victory. 
                    275: In the first case if you have an aim to reject the DHCP server then there 
                    276: is a point to set another value of maximum number of leased address option.
                    277: .SH USAGE OF THE PROGRAM
                    278: \fIInterfaces listing\fP
                    279: .sp
                    280: First of all it's necessary to understand how the network interface, 
                    281: where there is DHCP server, is called. This is easy to understand in UNIX-like OS 
                    282: by outputting ifconfig command. But in Windows OS it is not so evident. 
                    283: Because of this let's launch the program with  
                    284: .B -D
                    285: option first of all:
                    286: 
                    287: .nf
                    288: C:\>dhcdrop -D
                    289: Available interfaces:
                    290: 1:\\Device\\NPF_GenericDialupAdapter
                    291:   descr: Adapter for generic dialup and VPN capture
                    292: 2:\\Device\\NPF_{0C796DB5-22D9-46AB-9301-9C7ADC2304AF}
                    293:   descr: ZyXEL GN650 1000Base-T Adapter          (Microsoft's Packet Scheduler)
                    294:   iaddr: 192.168.1.2/24  bcast: 255.255.255.255
                    295:   iaddr: 10.7.7.7/24  bcast: 255.255.255.255
                    296: .fi
                    297: 
                    298: According to the output information it's evident that we need the second interface. 
                    299: As an argument for program's option 
                    300: .B -i
                    301: any index of the second interface or its name 
                    302: .B "\\\\Device\\\\NPF_{0C796DB5-22D9-46AB-9301-9C7ADC2304AF}"
                    303: can be set. To my mind it's more easy to use index and to launch the 
                    304: program with pointing index instead of a name. For example: 
                    305: .B dhcdrop -i 2
                    306: 
                    307: \fIInteractive mode, by default\fP
                    308: .sp
                    309: The easiest way of using the program for searching and choosing the rejected 
                    310: server manually:
                    311: 
                    312: .nf
                    313: $ sudo dhcdrop -i eth1
                    314: Using interface: 'eth1'
                    315: Got response from server 10.7.7.1 (IP-header 10.7.7.1), server ethernet address: 00:02:44:75:77:E4, lease time: 1.1h (3960s)
                    316: Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 10.7.7.201/24
                    317: Drop him? [y/n] n
                    318: Searching next server...
                    319: Got response from server 192.168.1.1 (IP-header 192.168.1.1), server ethernet address: 00:1E:2A:52:C8:CA, lease time: 24h (86400s)
                    320: Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
                    321: Drop him? [y/n] y
                    322: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
                    323: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:A2:FA:12:41:F7 You IP: 192.168.1.3/24
                    324: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:56:EA:F8:1C:B0 You IP: 192.168.1.4/24
                    325: 4. Got BOOTREPLY (DHCPACK) for client ether: 00:EA:91:1A:C8:A8 You IP: 192.168.1.5/24
                    326: 5. Got BOOTREPLY (DHCPACK) for client ether: 00:83:8A:25:C7:1C You IP: 192.168.1.6/24
                    327: 6. Got BOOTREPLY (DHCPACK) for client ether: 00:CA:A7:FF:C1:70 You IP: 192.168.1.7/24
                    328: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    329: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    330: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    331: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    332: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    333: Finished.
                    334: .fi
                    335: 
                    336: As it's seen from the example when receiving an answer from DHCP server  
                    337: .B dhcdrop 
                    338: reports information from the server about given IP address and asks of necessity 
                    339: to suppress this server. Receiving a negative answer it goes on searching for 
                    340: servers in the network ignoring the server discovered before. In case of 
                    341: receiving a positive answer it starts a process for rejecting the server with a 
                    342: method shown above.
                    343:  
                    344: \fIAutomatical suppresion mode of all the servers except the legitimate one\fP
                    345: .sp
                    346: In case of knowing (and usually we know) MAC address of the legal DHCP server in our 
                    347: network the operation of suppressing illegal servers can be simplified:
                    348: 
                    349: .nf
                    350: $ sudo dhcdrop -i eth1 -y -l 00:02:44:75:77:E4
                    351: Using interface: 'eth1'
                    352: Got response from server 192.168.1.1 (IP-header 192.168.1.1), server ethernet address: 00:1E:2A:52:C8:CA, lease time: 24h (86400s)
                    353: Got BOOTREPLY (DHCPOFFER) for client ether: 00:37:C5:10:BE:16 You IP: 192.168.1.2/24
                    354: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:37:C5:10:BE:16 You IP: 192.168.1.2/24
                    355: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:94:26:88:33:BD You IP: 192.168.1.3/24
                    356: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:E5:AC:7B:79:BB You IP: 192.168.1.4/24
                    357: <skipped>
                    358: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    359: Finished.
                    360: .fi
                    361: 
                    362: In this version of using  
                    363: .B dhcdrop 
                    364: rejects any server except that ones states with 
                    365: .B -l 
                    366: option without asking additional questions (due to using option 
                    367: .B -y
                    368: ).
                    369: 
                    370: \fITest mode\fP
                    371: .sp
                    372: Test mode (
                    373: .B -t
                    374: ) is comfortable to use for execution the program from code in computer-aided mode. 
                    375: An example of the simplest code is below: 
                    376: 
                    377: .nf
                    378: 00 #!/bin/bash
                    379: 01 LEGAL_SERVER="00:11:22:33:44:55"    
                    380: 02 DROPPER="/usr/sbin/dhcdrop"
                    381: 03 IFNAME="eth1"
                    382: 
                    383: 04 $DROPPER -i $IFNAME -t -l $LEGAL_SERVER -m 3
                    384: 
                    385: 05 if [ $? = 200 ]
                    386: 06 then
                    387: 07    echo Illegal server found\! Dropping him\!
                    388: 08    $DROPPER -i eth1 -l $LEGAL_SERVER -y
                    389: 09 else
                    390: 10    echo Illegal server not found.
                    391: 11 fi
                    392: .fi
                    393: 
                    394: In the forth line launching of 
                    395: .B dhcdrop 
                    396: is being executed in a test mode with setting an option of legal DHCP server 
                    397: for the network (
                    398: .B -l
                    399: ), an option of testing (
                    400: .B -t
                    401: ) and an option of setting maximum number of attempts of sending DHCPDISCOVER 
                    402: in mode of searching the server (
                    403: .B -m).
                    404: If there is no answer for all the requests been sent then the program 
                    405: ends with 0 code. If there is answer for the server without 
                    406: .B -l
                    407: option then the program ends with 200 code which leads to the further
                    408: launching of the program with options describing suppression of any DHCP server 
                    409: in the network except the legal one.
                    410: 
                    411: \fIUsage of aggressive mode for receiving addresses\fP
                    412: .sp
                    413: As you can guess from the description of DHCP protocol - if a client received 
                    414: the configuration from illegal DHCP server then the server wouldn't give 
                    415: this configuration iteratively to another client until the period of lease expires. 
                    416: So a simple exhaustion of IP addresses' pool won't save clients who have already 
                    417: received incorrect configuration. The server will give these addresses only to 
                    418: the clients who requested them initially and will ignore requests from 
                    419: .B dhcdrop
                    420: . When trying to refresh the address once more the clients will receive 
                    421: information from illegal DHCP server again and it would be continued until 
                    422: illegal DHCP server switched off. For solving such a problem there were added 
                    423: the aggressive mode of receiving IP addresses in dhcdrop starting with version 0.5.
                    424: It is activated with
                    425: .B -L
                    426: option which points a legitimate IP subnet for the given Etherner segment of the network. 
                    427: Here is the algorithm of its operation: 
                    428: .B dhcdrop
                    429: launches an ordinary mode of suppression and exhausts the whole IP addresses' 
                    430: pool of illegal DHCP server. Analyzes the first DHCPOFFER received from illegal 
                    431: DHCP, with a help of the network mask and client's IP address given out by the 
                    432: server receives the address of IP network attended by this server. 
                    433: Launches ARP-scanning of received subnet for the purpose of exposing hosts 
                    434: which received incorrect configurational information, default number of scanned 
                    435: hosts is limited to 512 (can be changed with
                    436: .B -M
                    437: option), some servers gives out configurational set with a mask /8 which 
                    438: conforms to approximately 16 million of hosts - scanning of such an address range 
                    439: will take a lot of time. Sends messages DHCPRELEASE to the DHCP server from every 
                    440: found host (except the server itself). Waits 60 seconds 
                    441: (default value can be changed with
                    442: .B -w
                    443: option), after then restarts the process of receiving IP addresses.
                    444: As an example let's launch
                    445: .B dhcdrop
                    446: with the same options as in the previous example but 
                    447: additionally state legal IP network 10.7.7.0:
                    448: 
                    449: .nf
                    450: $ sudo dhcdrop -i eth1 -y -l 00:02:44:75:77:E4 -L 10.7.7.0
                    451: Using interface: 'eth1'
                    452: Got response from server 192.168.1.1 (IP-header 192.168.1.1), server ethernet address: 00:1E:2A:52:C8:CA, lease time: 24h (86400s)
                    453: Got BOOTREPLY (DHCPOFFER) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
                    454: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
                    455: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:FB:E7:A4:19:EC You IP: 192.168.1.6/24
                    456: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:CB:44:F9:A8:6F You IP: 192.168.1.7/24
                    457: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    458: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    459: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    460: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    461: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    462: Trying to use agressive mode.
                    463: Starting ARP scanning network in range: 192.168.1.0 - 192.168.1.255...
                    464: Illegal DHCP server perhaps assigned IP adresses to the following hosts:
                    465: 1. Received ARP-reply from: 00:1e:2a:52:c8:ca (192.168.1.1) - itself DHCP server.
                    466: 2. Received ARP-reply from: 00:03:ff:15:52:90 (192.168.1.3)
                    467: 3. Received ARP-reply from: 00:03:ff:14:52:90 (192.168.1.4)
                    468: 4. Received ARP-reply from: 00:a0:c5:30:52:90 (192.168.1.200)
                    469: Sending DHCPRELEASE for invalid clients:
                    470: Send DHCPRELEASE for host 00:03:ff:15:52:90 (192.168.1.3).
                    471: Send DHCPRELEASE for host 00:03:ff:14:52:90 (192.168.1.4).
                    472: Send DHCPRELEASE for host 00:a0:c5:30:52:90 (192.168.1.200).
                    473: Restart dropping DHCP server after 60 seconds timeout...
                    474: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
                    475: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:F1:32:14:60:A3 You IP: 192.168.1.3/24
                    476: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:2D:1C:80:ED:12 You IP: 192.168.1.4/24
                    477: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    478: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    479: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    480: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    481: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    482: 
                    483: WARNING: Failed to take away all the IP addresses assigned by DHCP server.
                    484: Perhaps DHCP server checks availability of IP addresses by sending ARP-request
                    485: before assigning them. Try to restart dhcpdrop later. If it doesn't help
                    486: try to disconnect problem hosts temporarily, then send manually DHCPRELEASE
                    487: from address of this hosts (use option -R) and restart dhcdrop.
                    488: 
                    489: Finished.
                    490: .fi
                    491: 
                    492: Explanation of the program operation's results.
                    493: 
                    494: After outputting the inscription "Trying to use aggressive mode" ARP-scanning of subnet, 
                    495: serviced by illegal DHCP server in the stated range, starts. 
                    496: As a result 4 hosts are found including the DHCP server itself (the first host). 
                    497: Then dhcdrop sends DHCPRELEASE message to the server 192.168.1.1 from addresses 
                    498: (Ethernet & IP) of all the hosts found in the subnet except DHCP server itself and stops 
                    499: execution for 60 seconds. Timeout is necessary because some DHCP servers hold giving out 
                    500: IP addresses to a new client during little period of time after receiving DHCPRELEASE from
                    501: a previous client. In case of necessity timeout's value can be changed with
                    502: .B -w
                    503: option. On the expiry of timeout dhcdrop launches the process of receiving released IP addresses. 
                    504: We succeeded in receiving IP addresses 192.168.1.5 (it was received initially when 
                    505: starting the program), 192.168.1.3 and 192.168.1.4. The last two addresses were 
                    506: successfully released by the server after receiving DHCPRELEASE messages generated by 
                    507: dhcdrop. Failed to receive the address 192.168.1.200, in spite of presence of this host
                    508: in the network, and the fact that from its address DHCPRELEASE message was send. One of 
                    509: the reasons of failure was described in warning in the end of the program's output: 
                    510: DHCP server before giving out the addresses can check if the host with the requested IP 
                    511: address exists and only after this it can give out the address if such a host is absent 
                    512: in the network. If not, a new lease for this address will not be given out. In this 
                    513: situation switching off the problem hosts fron the network manually and sending DHCPRELEASE 
                    514: messages from these hosts' addresses to the server (see an example below) can be helpful.
                    515: After this it's necessary to restart the process of receiving IP addresses.
                    516: But in our case the problem isn't hidden here. The host 192.168.1.200 has a statically set 
                    517: IP address and because of this it has never requested the configuration from DHCP server. 
                    518: The necessity itself of stating the legal network for launching the aggressive mode is 
                    519: necessary to check of the address range given out by illegal DHCP server crosses the 
                    520: address range of the subnet where it was discovered. If the address ranges cross each 
                    521: other then ARP-scanning will be done with the hosts, which have the correct configuration 
                    522: and will output the incorrect information. Because of this in case of discovering crossing 
                    523: of the address ranges aggressive mode will not be launched.
                    524: 
                    525: \fISending DHCPRELEASE message\fP
                    526: .sp
                    527: You will probably have a necessity to send DHCPRELEASE message manually. For example, 
                    528: because of the reason mentioned in the previous example. You can do it with a help of 
                    529: .B -R
                    530: option:
                    531: 
                    532: .nf
                    533: $ sudo dhcdrop -i eth1 -R -s 192.168.1.1 -F 192.168.1.4 00:2D:1C:80:ED:12
                    534: Using interface: 'eth1'
                    535: Send DHCPRELEASE from 00:2D:1C:80:ED:12 client IP 192.168.1.4 to DHCP server 192.168.1.1
                    536: Finished.
                    537: .fi
                    538: 
                    539: Option
                    540: .B -s
                    541: sets server's IP address,
                    542: .B -F
                    543: set DHCP client's IP address, 00:2D:1C:80:ED:12 set client's  Ethernet address. 
                    544: As a result such a sort of packet will be send in the network:
                    545: .nf
                    546: 
                    547: 16:13:43.887735 00:2d:1c:80:ed:12 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 
                    548: (tos 0x10, ttl 64, id 29807, offset 0, flags [none], proto UDP (17), length 328) 
                    549: 0.0.0.0.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:2d:1c:80:ed:12, 
                    550: length 300, xid 0xb2f04a28, Flags [none]
                    551:     Client-IP 192.168.1.4
                    552:     Client-Ethernet-Address 00:2d:1c:80:ed:12
                    553:     Vendor-rfc1048 Extensions
                    554:     Magic Cookie 0x63825363
                    555:     DHCP-Message Option 53, length 1: Release
                    556:     Server-ID Option 54, length 4: 192.168.1.1
                    557:     Client-ID Option 61, length 7: ether 00:2d:1c:80:ed:12
                    558: .fi
                    559: 
                    560: \fIScanning the network's segment\fP
                    561: .sp
                    562: You can use ARP-scanning of the network for searching clients who received incorrect configurational information. It is realized with a help of
                    563: .B -S
                    564: option:
                    565: 
                    566: .nf
                    567: $ dhcdrop -i eth1 -S 192.168.1.0/24
                    568: Using interface: 'eth1'
                    569: Starting ARP-scanning for subnet 192.168.1.0/24.
                    570: IP address range 192.168.1.0 - 192.168.1.255.
                    571: WARNING: Source IP is not set (use option -F).
                    572: Using random value for source IP address: 192.168.1.195
                    573: 1. Received ARP-reply from: 00:1e:2a:52:c8:ca (192.168.1.1).
                    574: 2. Received ARP-reply from: 00:a0:c5:30:52:90 (192.168.1.200).
                    575: Finished.
                    576: .fi
                    577: 
                    578: According to the warning, which was printed by the program, when launching, the source 
                    579: IP address wasn't set. Because of this dhcdrop chooses a random IP address from address 
                    580: range of a stated subnet. If you need to set a source address then use
                    581: .B -F
                    582: option. For this kind of scanning factual settings of routing in your network aren't 
                    583: important. Interface set by an option
                    584: .B -i
                    585: will always be used accepting that hosts of the 
                    586: mentioned subnet are in the same Ethernet segment with the host where dhcdrop 
                    587: is being launched. Also this option allows to discover duplication of IP addresses in 
                    588: the same segment of the network even if the scanning is being done from the host 
                    589: which IP address is being duplicated by another host.
                    590: .SH AUTHOR
                    591: This program was written by Roman Chebotarev <roma@ultranet.ru>
                    592: .SH REPORTING BUGS
                    593: Any bugs/remarks/suggestions/wishes concerning this program please send to 
                    594: <roma@ultranet.ru>
                    595: .SH MAN FILE
                    596: Guidance page was made by Andrew Clark <andyc@altlinux.org>, 
                    597: basing on the articles of the author of the program, 
                    598: web page http://www.netpatch.ru/en/dhcdrop.html
                    599: .SH TRANSLATION
                    600: The translation from Russian into English was made by Anna Makhtinger <mailmnoo@rambler.ru>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>