Annotation of embedaddon/dhcdrop/man/ru/dhcdrop.8, revision 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>