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>