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

1.1       misho       1: .TH DHCDROP 8 "14/08/2009" 
                      2: .SH НАЗВАНИЕ
                      3: dhcdrop \- программа для выявления и нейтрализации несанкционированных DHCP
                      4: серверов в Ethernet сетях. 
                      5: 
                      6: .SH СИНТАКСИС
                      7: .BI "dhcdrop 
                      8: .RB [ " \-h "]
                      9: .RB [ " \-D "]
                     10: .RB [ " \-t "]
                     11: .RB [ " \-y "]
                     12: .RB [ " \-r "]
                     13: .RB [ " \-b "]
                     14: .RB [ " \-a "]
                     15: .RB [ " \-A "]
                     16: .RB [ " \-f "]
                     17: .RB [ " \-R "]
                     18: .RB [ " \-q "]
                     19: .LP
                     20: .RB [ " \-m "
                     21: .I count
                     22: ]
                     23: .RB [ " \-c "
                     24: .I count
                     25: ]
                     26: .RB [ " \-n " 
                     27: .I hostname
                     28: ]
                     29: .RB [ " \-N "
                     30: .I clientname
                     31: ]
                     32: .RB [ " \-p "
                     33: .I port
                     34: ]
                     35: .RB [ " \-P "
                     36: .I port
                     37: ]
                     38: .RB [ " \-w "
                     39: .I seconds
                     40: ]
                     41: .LP
                     42: .RB [ " \-T "
                     43: .I timeout
                     44: ]
                     45: .RB [ " \-M "
                     46: .I max-hosts-scan
                     47: ]
                     48: .RB [ " \-l "
                     49: .I MAC-address
                     50: ]
                     51: .RB [ " \-L "
                     52: .I network
                     53: ]
                     54: .RB [ " \-S "
                     55: .I network/mask
                     56: ]
                     57: .RB [ " \-F "
                     58: .I from-IP
                     59: ]
                     60: .LP
                     61: .RB [ " \-s "
                     62: .I server-IP
                     63: ]
                     64: .RB [ " \-C "
                     65: .I children count (2 - 32)
                     66: ]
                     67: .RB [ " \initial-MAC-address "]
                     68: .RB < " \-i "
                     69: .I interface-name|interface-index
                     70: >
                     71: .LP
                     72: 
                     73: .SH ОПИСАНИЕ
                     74: Подавление DHCP сервера dhcdrop осуществляется при помощи атаки 
                     75: DHCP starvation, либо при помощи флуда DHCPDISCOVER сообщениями.
                     76: Подробности смотрите ниже. Кроме того, dhcdrop может применяться 
                     77: как средство диагностики и стресс-тестирования при настройке и 
                     78: разработке DHCP серверов.
                     79: 
                     80: .SH ОПЦИИ
                     81: .TP
                     82: .B "-h"
                     83: показывает help-сообщение, а так же - коды возврата программы.
                     84: .TP
                     85: .B "-D"
                     86: просмотр списка имён и индексов сетевых интерфейсов. Актуально в ОС Windows - см. пример ниже.
                     87: .TP
                     88: .B "-t"
                     89: Режим теста. В этом режиме 
                     90: .B dhcdrop
                     91: не выполняет подавление сервера. Производится лишь посылка DHCPDISCOVER, если 
                     92: на него приходит ответ от не игнорируемого сервера, то программа заверается
                     93: возвращаяя код 200 и выводя на экран строку вида 
                     94: .IP
                     95: 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
                     96: .IP
                     97: содержащую содержащую минимум информации о создающем проблему DHCP сервере.
                     98: .TP
                     99: .B "-y"
                    100: подразумевается ответ "yes" на любой вопрос программы.
                    101: .TP
                    102: .B "-r"
                    103: отключает рандомизацию MAC адреса источника. Каждый последующий MAC адрес 
                    104: источника отличается от предыдущего на 1.
                    105: .TP
                    106: .BI "-b"
                    107: указывает на необходимость использования флага 
                    108: .B BROADCAST
                    109: в отправляемых DHCP пакетах.
                    110: .TP
                    111: .B "-a"
                    112: всегда ожидать ответа сервера на порт DHCP клиента по умолчанию (68), даже 
                    113: если задано значение номера порта клиента отличное от значения по умолчанию.
                    114: .TP
                    115: .B "-A"
                    116: всегда ожидать ответа с порта DHCP сервера по умолчанию (67), даже если задано
                    117: значение номера порта сервера отличное от значения по умолчанию.
                    118: .TP
                    119: .B "-f"
                    120: режим флуда запросами DHCPDISCOVER. ПРИМЕНЯТЬ С ОСТОРОЖНОСТЬЮ. Удобен для 
                    121: стресс-тестирования сервера. В случае указания опции 
                    122: .B -r 
                    123: все отправляемые пакеты имеют одинаковый MAC адрес.
                    124: .TP
                    125: .BI "-R"
                    126: отправляет сообщение DHCPRELEASE с MAC адресом источника указанном при запуске
                    127: программы и IP адресом указанным при помощи опции 
                    128: .B -F
                    129: к серверу указанному опцией 
                    130: .B -s
                    131: .
                    132: .TP
                    133: .B "-q"
                    134: "тихий" режим работы. Выводится минимум информации.
                    135: .TP
                    136: .BI "-m" " count" 
                    137: максимальное число попыток получения ответа от сервера.
                    138: .TP
                    139: .BI "-c" " count"
                    140: максимальное число адресов арендуемых у сервера.
                    141: .TP
                    142: .BI "-n" " hostname"
                    143: значение DHCP опции HostName (по умолчанию - "DHCP-dropper")
                    144: .TP
                    145: .BI "-N" " clientname"
                    146: значение DHCP опции Vendor-Class (по умолчанию - "DHCP-dropper")
                    147: .TP
                    148: .BI "-p" " port"
                    149: порт используемый клиентом для отправки DHCP сообщений. По умолчанию - 68
                    150: .TP
                    151: .BI "-P" " port"
                    152: порт сервера, на который отправляются DHCP сообщения.
                    153: .TP
                    154: .B "-w" " seconds"
                    155: задаёт таймаут рестарта процесса получения IP адресов в случае использования 
                    156: агрессивного режима. По умолчанию - 60 секунд.
                    157: .TP
                    158: .BI "-T" " timeout"
                    159: устанавливает таймаут ожидания ответа сервера (в секундах). По умолчанию - 3
                    160: секунды.
                    161: .TP
                    162: .BI "-M" " maximum-hosts"
                    163: максимально допустимое количество сканируемых хостов в случае использования агрессивного режима.
                    164: .TP
                    165: .BI "-l" " MAC-address"
                    166: Ethernet адрес сервера который необходимо игнориновать при выполненении поиска 
                    167: ложных DHCP серверов в сети. В этой опции следует указать адрес DHCP сервера
                    168: ответственного за раздачу адресов в данном участке сети. Может быть указано
                    169: несколько адресов - каждый должен предворяться ключом
                    170: .B -l
                    171: .
                    172: .TP
                    173: .BI "-L" " legal-network"
                    174: указывает легальную IP подсеть для выбранного интерфейса. Использование этой 
                    175: опции автоматически включает агрессивный режим получения IP адресов. Может быть
                    176: указано несколько сетей - каждая должна предворяться ключом 
                    177: .B -L
                    178: .
                    179: Подробное описание смотрите ниже.
                    180: .TP
                    181: .BI "-S" " network/mask"
                    182: ARP сканирование сети 'сеть' с использованием сетевой маски 'маска' в CIDR 
                    183: нотации. IP адрес источника задаётся опцией 
                    184: .B -F
                    185: . 
                    186: Если IP адрес источника не задан - используется случайный адрес из диапазона
                    187: указанной подсети. Пример использования смотрите ниже.
                    188: .TP
                    189: .BI "-F" " source-ip"
                    190: указывает IP адрес источника для сканирования сети (опция 
                    191: .B -S
                    192: ), либо IP адрес DHCP клиента для отправки сообщения DHCPRELEASE (опция 
                    193: .B -R
                    194: ).
                    195: .TP
                    196: .BI "-s" " server-ip-adress"
                    197: задаёт IP адрес DHCP сервера. Используется с опцией 
                    198: .B -R
                    199: .
                    200: .TP
                    201: .BI "-C" " count"
                    202: число порождаемых процессов-потомков. Совместим только с флагом 
                    203: .B -f
                    204: . 
                    205: Используется для увеличения числа отправляемых пакетов за еденицу времени.
                    206: .TP
                    207: .BI "initial-MAC-address"
                    208: задаёт MAC адрес источника используемый при отправке первого DHCP сообщения,
                    209: либо используемый постоянно, в случае использования опции 
                    210: .B -f 
                    211: (flood) вместе с опцией 
                    212: .B -r
                    213: Если не указан, то используется случайный MAC адрес источника. 
                    214: .TP
                    215: .BI "-i" " interface"
                    216: имя либо индекс сетевого интерфейса (см. ключ 
                    217: .B -D
                    218: ). Не может быть "any"! Единственный обязательный параметр программы.
                    219: 
                    220: .SH ТЕОРЕТИЧЕСКАЯ ОСНОВА
                    221: В протоколе DHCP определена опция, которая задает длительность аренды
                    222: IP адреса (Lease time) - это время на которое DHCP сервер выдаёт IP адрес
                    223: в пользование клиенту. По истечении этого временного интервала клиент
                    224: должен выполнить попытку обновить IP адрес с целью продления аренды.
                    225: Для сервера выдача IP адреса в аренду означает то, что за время аренды
                    226: данный IP адрес может быть выдан только владельцу аренды и никому кроме него.
                    227: Идентификация клиентов сервером производится на основании MAC адреса. Обычно,
                    228: каждый сервер имеет пул динамических IP адресов, т.е. IP адресов которые не
                    229: закреплены за конкретными MAC адресами и выдаются динамически по запросу
                    230: любому клиенту. Пул на SOHO маршрутизаторах в конфигурации по умолчанию имеет
                    231: небольшой размер - от нескольких десятков до двух сотен адресов. В случае
                    232: использования ПО, выполняющего роль DHCP сервера, величину пула определяет
                    233: тот, кто настраивает. Если пул адресов исчерпан, то DHCP сервер игнорирует
                    234: запросы от новых клиентов (возможно документируя это в логах) - т.е.,
                    235: фактически, бездействует.
                    236: 
                    237: Таким образом, в случае появления в сети ложных DHCP их можно нейтрализовать
                    238: достаточно просто - необходимо получить аренду на все доступные на данном
                    239: сервере IP адреса, каждый раз посылая запросы от уникальных клиентов. Чем
                    240: больше время аренды в настройках сервера, тем на больший срок DHCP сервер
                    241: оказывается нейтрализован в случае исчерпания динамического пула. Для
                    242: большинства SOHO маршрутизаторов Lease Time исчисляется днями, или даже
                    243: неделями. В случае использования в качестве DHCP сервера WinGate, dhcpd и
                    244: прочего подобного софта, время зависит от фантазии человека который его
                    245: настроил.
                    246: 
                    247: .SH ПРИНЦИП РАБОТЫ dhcdrop
                    248: Программа открывает указанный в параметрах командной строки интерфейс в
                    249: promiscuous режиме, формирует DHCP запрос (DHCPDISCOVER), используя
                    250: случайный исходящий MAC адрес (если в параметрах не задано иное поведение)
                    251: и отправляет его в интерфейс:
                    252: 
                    253: .nf
                    254: 01:58:04.681600 00:70:de:3b:b9:05 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800),
                    255: length 342: (tos 0x10, ttl 64, id 33964, offset 0, flags [none],
                    256: proto UDP (17), length 328)
                    257: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:70:de:3b:b9:05,
                    258: length 300, xid 0xcc1cfc5c, Flags [none]
                    259:         Client-Ethernet-Address 00:70:de:3b:b9:05
                    260:         Vendor-rfc1048 Extensions
                    261:         Magic Cookie 0x63825363
                    262:         DHCP-Message Option 53, length 1: Discover
                    263:         Parameter-Request Option 55, length 3:
                    264:         Domain-Name-Server, Default-Gateway, Subnet-Mask
                    265:         Hostname Option 12, length 12: "DHCP-dropper"
                    266:         Vendor-Class Option 60, length 12: "DHCP-dropper"
                    267:         Client-ID Option 61, length 7: ether 00:70:de:3b:b9:05
                    268: .fi
                    269: 
                    270: После чего переходит к ожиданию ответа (DHCPOFFER) сервера. Если получен ответ
                    271: с предложением аренды IP адреса, то в интерфейс отправляется следующий DHCP
                    272: запрос (DHCPREQUEST) на который сервер отвечает DHCPACK-пакетом подтверждающим
                    273: возможность использования данного IP адреса клиентом. На этом операция
                    274: получения аренды, на предложенный сервером IP адрес, завершена. Программа
                    275: изменяет MAC адрес источника и вновь посылает DHCPDISCOVER, после чего, все
                    276: вышеуказанные операции по получению аренды нового IP адреса повторяются. Стоит
                    277: обрать внимание, что программа изменяет не только MAC адрес клиента в DHCP
                    278: сообщении, но и MAC адрес в заголовке Ethernet-фрейма. Данная возможность
                    279: максимально приближает работу программы к работе реального DHCP клиента
                    280: (а так же, позволяет обойти DHCP snooping). Цикл получения IP адресов с сервера
                    281: завершается, когда получено заданное параметром максимальное число IP адресов,
                    282: либо в случае исчерпания динамического пула сервера.
                    283: 
                    284: .SH ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
                    285: \fIПросмотр списка интерфейсов\fP
                    286: .sp
                    287: Актуально в ОС семейства Windows. Используется ключ 
                    288: .B -D
                    289: :
                    290: 
                    291: .nf
                    292: C:\>dhcdrop -D
                    293: Available interfaces:
                    294: 1:\\Device\\NPF_GenericDialupAdapter
                    295:   descr: Adapter for generic dialup and VPN capture
                    296: 2:\\Device\\NPF_{0C796DB5-22D9-46AB-9301-9C7ADC2304AF}
                    297:   descr: ZyXEL GN650 1000Base-T Adapter          (Microsoft's Packet Scheduler)
                    298:   iaddr: 192.168.1.2/24  bcast: 255.255.255.255
                    299:   iaddr: 10.7.7.7/24  bcast: 255.255.255.255
                    300: .fi
                    301: 
                    302: В качестве аргумента для ключа программы
                    303: .B-i
                    304: можно задать либо индекс интерфейса 2, либо его имя:
                    305: \\Device\\NPF_{0C796DB5-22D9-46AB-9301-9C7ADC2304AF}
                    306: .
                    307: 
                    308: \fIИнтерактивный режим\fP
                    309: .sp
                    310: Самый простой вариант использования программы для поиска и выбора подавляемого
                    311: сервера вручную:
                    312: 
                    313: .nf
                    314: $ sudo dhcdrop -i eth1
                    315: Using interface: 'eth1'
                    316: 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)
                    317: Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 10.7.7.201/24
                    318: Drop him? [y/n] n
                    319: Searching next server...
                    320: 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)
                    321: Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
                    322: Drop him? [y/n] y
                    323: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
                    324: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:A2:FA:12:41:F7 You IP: 192.168.1.3/24
                    325: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:56:EA:F8:1C:B0 You IP: 192.168.1.4/24
                    326: <пропущено>
                    327: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    328: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    329: Finished.
                    330: .fi
                    331: 
                    332: При получении ответа от DHCP сервера 
                    333: .B dhcdrop 
                    334: сообщает информацию о предлагаемом IP адресе и спрашивает о необходимости 
                    335: подавления данного сервера. Получив отрицательный ответ - продолжает поиск
                    336: серверов в сети игнорируя обнаруженный ранее сервер. В случае получения
                    337: утвердительного ответа - начинает процесс подавления сервера указанным выше
                    338: способом 
                    339: 
                    340: \fIРежим автоматического подавления всех серверов кроме легитимного\fP
                    341: .sp
                    342: В случае, если мы знаем (а обычно мы знаем) MAC адрес легального DHCP сервера 
                    343: в нашей сети, операцию подавления ложных серверов можно упростить:
                    344: 
                    345: .nf
                    346: $ sudo dhcdrop -i eth1 -y -l 00:02:44:75:77:E4
                    347: Using interface: 'eth1'
                    348: 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)
                    349: Got BOOTREPLY (DHCPOFFER) for client ether: 00:37:C5:10:BE:16 You IP: 192.168.1.2/24
                    350: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:37:C5:10:BE:16 You IP: 192.168.1.2/24
                    351: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:94:26:88:33:BD You IP: 192.168.1.3/24
                    352: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:E5:AC:7B:79:BB You IP: 192.168.1.4/24
                    353: <пропущено>
                    354: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    355: Finished.
                    356: .fi
                    357: 
                    358: В подобном варианте использования 
                    359: .B dhcdrop 
                    360: подавляет любой сервер, кроме указанного опцией 
                    361: .B -l 
                    362: сервера, не задавая дополнительных вопросов 
                    363: (благодаря использованию опции 
                    364: .B -y
                    365: ).
                    366: 
                    367: \fIТестовый режим\fP
                    368: .sp
                    369: Тестовый режим
                    370: .B -t
                    371: удобно использовать для выполнения программы из скриптов, в автоматизированном
                    372: режиме. Ниже приведён пример простейшего скрипта: 
                    373: 
                    374: .nf
                    375: 00 #!/bin/bash
                    376: 01 LEGAL_SERVER="00:11:22:33:44:55"
                    377: 02 DROPPER="/usr/sbin/dhcdrop"
                    378: 03 IFNAME="eth1"
                    379: 
                    380: 04 $DROPPER -i $IFNAME -t -l $LEGAL_SERVER -m 3
                    381: 
                    382: 05 if [ $? = 200 ]
                    383: 06 then
                    384: 07    echo Illegal server found\! Dropping him\!
                    385: 08    $DROPPER -i eth1 -l $LEGAL_SERVER -y
                    386: 09 else
                    387: 10    echo Illegal server not found.
                    388: 11 fi
                    389: .fi
                    390: 
                    391: В строке 4 выполняется запуск 
                    392: .B dhcdrop
                    393: в тестовом режиме, с указанием опции легального для сети DHCP сервера
                    394: .B -l
                    395: , опцией режима тестирования
                    396: .B -t
                    397: и опцией задающей максимальное число попыток отправки DHCPDISCOVER в 
                    398: режиме поиска сервера
                    399: .B -m
                    400: Если ни на один из отправленных запросов не придёт ответа - программа 
                    401: завершается с кодом 0. Если приходит ответ от сервера не заданного опцией 
                    402: .B -l
                    403: , программа завершается с кодом 200, что вызывает последующий запуск программы
                    404: с параметрами определяющими подавление любого DHCP сервера в сети, кроме 
                    405: легального.
                    406: 
                    407: \fIИспользование агрессивного режима получения адресов\fP
                    408: .sp
                    409: Как можно догадаться из описания протокола DHCP - если клиент уже получил 
                    410: конфигурационный набор данных от нелегального DHCP сервера, то сервер не выдаст
                    411: повторно этот набор другому клиенту пока не истечёт срок аренды. Следовательно,
                    412: простое исчерпание пула IP адресов не спасёт клиентов уже получивших неверные
                    413: конфигурационные данные - сервер будет выдавать эти адреса только изначально
                    414: запросившим их клиентам и будет игнорировать запросы от 
                    415: .B dhcdrop.
                    416: При следующей попытке обновления адреса клиенты вновь получат информацию от 
                    417: нелегального DHCP сервера, и так будет продолжаться пока не отключат
                    418: нелегальный DHCP сервер. Для решения подобных проблем, в dhcdrop, начиная с
                    419: версии 0.5, добавлен агрессивный режим получения IP адресов. Включается опцией
                    420: .B -L 
                    421: указывающей легитимную IP подсеть для данного Ethernet сегмента сети. Алгоритм
                    422: его работы следующий:
                    423: .B dhcdrop
                    424: запускает обычный режим подавления и исчерпывает весь пул свободных IP адресов
                    425: нелегального DHCP сервера. Анализирует первый DHCPOFFER полученный от
                    426: нелегального DHCP. При помощи сетевой маски и IP адреса клиента выданных
                    427: сервером получает адрес IP сети обслуживаемой этим сервером. Запускает 
                    428: ARP-сканирование полученной подсети, с целью выявить хосты получившие
                    429: неправильную конфигурационную информацию. По умолчанию, число сканируемых 
                    430: хостов ограничено числом 512 (можно изменить опцией 
                    431: .B-M
                    432: ) - некоторые сервера выдают конфигурационные наобры с маской /8, что 
                    433: соответствует примерно 16 млн. хостов - сканирование такого адресного диапазона
                    434: займёт очень большое время. Отправляет DHCP серверу сообщения DHCPRELEASE от
                    435: каждого из найденных хостов (исключая сам сервер). Ожидает 60 секунд (значение
                    436: по умолчанию, может быть изменено опцией 
                    437: .B -w
                    438: ) после чего перезапускает процесс получения IP адресов.
                    439: 
                    440: В качестве примера запустим 
                    441: .B dhcdrop 
                    442: с теми же параметрами, что и в предыдущем примере, но дополнительно укажем
                    443: легальную IP сеть 10.7.7.0.
                    444: 
                    445: .nf
                    446: $ sudo dhcdrop -i eth1 -y -l 00:02:44:75:77:E4 -L 10.7.7.0
                    447: Using interface: 'eth1'
                    448: 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)
                    449: Got BOOTREPLY (DHCPOFFER) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
                    450: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
                    451: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:FB:E7:A4:19:EC You IP: 192.168.1.6/24
                    452: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:CB:44:F9:A8:6F You IP: 192.168.1.7/24
                    453: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    454: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    455: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    456: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    457: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    458: Trying to use agressive mode.
                    459: Starting ARP scanning network in range: 192.168.1.0 - 192.168.1.255...
                    460: Illegal DHCP server perhaps assigned IP adresses to the following hosts:
                    461: 1. Received ARP-reply from: 00:1e:2a:52:c8:ca (192.168.1.1) - itself DHCP server.
                    462: 2. Received ARP-reply from: 00:03:ff:15:52:90 (192.168.1.3)
                    463: 3. Received ARP-reply from: 00:03:ff:14:52:90 (192.168.1.4)
                    464: 4. Received ARP-reply from: 00:a0:c5:30:52:90 (192.168.1.200)
                    465: Sending DHCPRELEASE for invalid clients:
                    466: Send DHCPRELEASE for host 00:03:ff:15:52:90 (192.168.1.3).
                    467: Send DHCPRELEASE for host 00:03:ff:14:52:90 (192.168.1.4).
                    468: Send DHCPRELEASE for host 00:a0:c5:30:52:90 (192.168.1.200).
                    469: Restart dropping DHCP server after 60 seconds timeout...
                    470: 1. Got BOOTREPLY (DHCPACK) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
                    471: 2. Got BOOTREPLY (DHCPACK) for client ether: 00:F1:32:14:60:A3 You IP: 192.168.1.3/24
                    472: 3. Got BOOTREPLY (DHCPACK) for client ether: 00:2D:1C:80:ED:12 You IP: 192.168.1.4/24
                    473: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    474: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    475: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    476: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    477: Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
                    478: 
                    479: WARNING: Failed to take away all the IP addresses assigned by DHCP server.
                    480: Perhaps DHCP server checks availability of IP addresses by sending ARP-request
                    481: before assigning them. Try to restart dhcpdrop later. If it doesn't help
                    482: try to disconnect problem hosts temporarily, then send manually DHCPRELEASE
                    483: from address of this hosts (use option -R) and restart dhcdrop.
                    484: 
                    485: Finished.
                    486: .fi
                    487: 
                    488: Пояснения к результатам работы программы.
                    489: После вывода надписи "Trying to use agressive mode." начинается ARP 
                    490: сканирование подсети обслуживаемой нелегальным DHCP сервером в указанном
                    491: диапазоне. В результате найдено 4 хоста, включая сам DHCP сервер (1й хост).
                    492: Затем,
                    493: .B dhcdrop
                    494: посылает серверу 192.168.1.1 сообщения DHCPRELEASE от адресов (Ethernet & IP)
                    495: всех хостов найденных в подсети кроме самого DHCP сервера и останавливает
                    496: выполнение на 60 секунд. Таймаут необходим потому, что некоторые DHCP сервера
                    497: удерживают выдачу IP адреса новому клиенту в течение небольшого времени после
                    498: получения сообщения DHCPRELEASE от предыдущего клиента. В случае необходмости
                    499: значение таймаута можно изменить опцией 
                    500: .B -w.
                    501: По истечении таймаута, dhcdrop запускает процесс получения освободившихся IP
                    502: адресов. Успешно удалось получить IP адреса 192.168.1.5 (был получен 
                    503: изначально, при старте программы), 192.168.1.3 и 192.168.1.4. Последние два
                    504: адреса были успешно особождены сервером после получения сообщений DHCPRELEASE
                    505: сгенерированных 
                    506: .B dhcdrop. 
                    507: Не удалось получить адрес 192.168.1.200 несмотря на присутствие этого хоста в
                    508: сети, и то, что от его адреса было отправлено сообщение DHCPRELEASE. Одна из
                    509: причин неудачи описана в предупреждении, в конце вывода программы - DHCP сервер
                    510: перед выдачей адресов может проверять присутствует ли в сети хост с
                    511: запрашиваемым IP адресом и только после этого - выдавать адрес, если таковой
                    512: хост в сети отсутствует. В противном случае - новая аренда на этот адрес выдана
                    513: не будет. В этой ситуации может помочь отключение проблемных хостов от сети
                    514: вручную и отправка сообщений DHCPRELEASE от адреса этих хостов серверу 
                    515: (см. пример ниже), после чего необходимо снова запустить процесс получения IP
                    516: адресов. Но в нашем случае проблема кроется не в этом - хост 192.168.1.200 
                    517: имеет статически установленный адрес и потому никогда не запрашивал
                    518: конфигурации у DHCP сервера. Сама необходимость указания легальной сети для
                    519: запуска агрессивного режима необходима что бы проверить - не пересекается ли
                    520: адресный диапазон выдаваемый нелегальным DHCP сервером с адресным пространством
                    521: подсети в которой он обнаружен. Если адресные пространства пересекаются - ARP
                    522: сканирование будет проведено по хостам имеющим правильную конфигурацию и
                    523: выведет ошибочную информацию. Потому в случае обнаружения пересечения
                    524: диапазонов адресов агрессивный режим не запускается.
                    525: 
                    526: \fIОтправка сообщения DHCPRELEASE\fP
                    527: .sp
                    528: Возможно у вас возникнет необходимость отправки сообщений DHCPRELEASE в ручном
                    529: режиме. Например по причине указанной в предыдущем примере. Сделать это можно
                    530: при помощи опции 
                    531: .B -R
                    532: :
                    533: 
                    534: .nf
                    535: $ sudo dhcdrop -i eth1 -R -s 192.168.1.1 -F 192.168.1.4 00:2D:1C:80:ED:12
                    536: Using interface: 'eth1'
                    537: Send DHCPRELEASE from 00:2D:1C:80:ED:12 client IP 192.168.1.4 to DHCP server 192.168.1.1
                    538: Finished.
                    539: .fi
                    540: Опция
                    541: .B -s 
                    542: задаёт IP адрес сервера,
                    543: .B -F 
                    544: - IP адрес DHCP клиента, 00:2D:1C:80:ED:12 - Ethernet адрес клиента. 
                    545: В результате в сеть отправлен пакет вида:
                    546: 
                    547: .nf
                    548: 16:13:43.887735 00:2d:1c:80:ed:12 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 
                    549: (tos 0x10, ttl 64, id 29807, offset 0, flags [none], proto UDP (17), length 328) 
                    550: 0.0.0.0.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:2d:1c:80:ed:12, 
                    551: length 300, xid 0xb2f04a28, Flags [none]
                    552:     Client-IP 192.168.1.4
                    553:     Client-Ethernet-Address 00:2d:1c:80:ed:12
                    554:     Vendor-rfc1048 Extensions
                    555:     Magic Cookie 0x63825363
                    556:     DHCP-Message Option 53, length 1: Release
                    557:     Server-ID Option 54, length 4: 192.168.1.1
                    558:     Client-ID Option 61, length 7: ether 00:2d:1c:80:ed:12
                    559: .fi
                    560: 
                    561: \fIСканирование сегмента сети\fP
                    562: .sp
                    563: Вы можете использовать ARP сканирование сети для поиска клиентов получивших 
                    564: неверную конфигурационную информацию. Осуществляется подобное при помощи опции 
                    565: .B -S
                    566: :
                    567: 
                    568: .nf
                    569: $ dhcdrop -i eth1 -S 192.168.1.0/24
                    570: Using interface: 'eth1'
                    571: Starting ARP-scanning for subnet 192.168.1.0/24.
                    572: IP address range 192.168.1.0 - 192.168.1.255.
                    573: WARNING: Source IP is not set (use option -F).
                    574: Using random value for source IP address: 192.168.1.195
                    575: 1. Received ARP-reply from: 00:1e:2a:52:c8:ca (192.168.1.1).
                    576: 2. Received ARP-reply from: 00:a0:c5:30:52:90 (192.168.1.200).
                    577: Finished.
                    578: .fi
                    579: 
                    580: Как следует из предупреждения напечатанного программой - при запуске не был
                    581: задан IP адрес источника, потому dhcdrop выбирает случайный IP адрес из
                    582: диапазона адресов указанной подсети. Если вам нужно указать адрес источника
                    583: - используйте опцию 
                    584: .B -F
                    585: .
                    586: Для данного типа сканирования не важны фактические настройки маршрутизации 
                    587: в вашей сети. Всегда будет использоваться интерфейс заданный опцией 
                    588: .B -i
                    589: из расчёта что хосты указанной подсети находятся в одном Ethernet сегменте
                    590: с хостом на котором запущен 
                    591: .B dhcdrop.
                    592: Так же, данная опция позволяет обнаружить дублирование IP адресов в одном
                    593: сегменте сети, даже если сканирование производится с хоста чей IP адрес
                    594: дублируется другим хостом.
                    595: 
                    596: .SH АВТОР
                    597: Эта программа была написана Roman Chebotarev <roma@ultranet.ru>,
                    598: Какие-либо замечания/предложения/пожелания по поводу данной программы,
                    599: сообщайте по адресу <roma@ultranet.ru>.
                    600: 
                    601: .SH MAN ФАЙЛ
                    602: Страница руководства создана Andrew Clark <andyc@altlinux.org>,
                    603: на основе статьи автора програмы по адресу - 
                    604: http://www.netpatch.ru/dhcdrop.html

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