Основное

» Linux Docker 0.9 - краткое практическое руководство
Установка, настройка, запуск, основные моменты работы.

» Изучаем CGroups
Практический подход к изучению подсистемы ядра Linux

» db2dhcp - DHCP сервер на SQL СУБД
Сборка из исходников, настройка БД, запуск.

Последние записи

» Отличия синтаксиса C++ & Java и некоторые особенности Java
В рамках "заметок на полях" - краткий, очень поверхностный и слабо структурированный набор различий в...

» Восстановление старых разработок
Старые проекты по которым планируется восстановить работы

» Linux Docker 0.9 - краткое практическое руководство
Установка, настройка, запуск, основные моменты работы.

Подавление DHCP серверов - dhcdrop

24 августа 2009

Поддерживаемые для сборки платформы: Windows, Linux, FreeBSD, NetBSD, OpenBSD & DragonFlyBSD.

Предисловие

При использовании в сети протокола DHCP и некотором недостатке управляемых коммутаторов с возможностью настройки фильтрации трафика, периодически возникает проблема с появлением ложных DHCP серверов. Обычно, причиной подобной проблемы является неграмотный пользователь, который неправильно подключил SOHO маршрутизатор к сети, либо очередное юное дарование, желающее заняться изучением телекоммуникационных технологий на практике. Так или иначе, но следствие одинакого - Ваши клиенты получившие конфигруационную информацию от подобного "вредителя", выбывают из нормальной работы в сети. В данной статье описана программа dhcdrop, позволяющая решить подобную проблему посредством подавления нелегальных DHCP серверов.

Кроме того, данная программа является хорошим диагностическим инструментом для проверки работоспособности DHCP серверов, а так же средством стресс-тестирования. Применение этой программы для каких-либо иных целей остаётся на Вашей совести ;-)

Теоретическая основа

В протоколе DHCP определена опция, которая задает длительность аренды IP адреса (Lease time) - это время на которое DHCP сервер выдаёт IP адрес в пользование клиенту. По истечении этого временного интервала клиент должен выполнить попытку обновить IP адрес с целью продления аренды. Для сервера выдача IP адреса в аренду обозначает то, что за время аренды данный IP адрес может быть выдан только владельцу аренды и никому кроме него. Идентификация клиентов сервером производится на основании MAC адреса. Обычно, каждый сервер имеет пул динамических IP адресов, т.е. IP адресов которые не закреплены за конкретными MAC адресами и выдаются динамически по запросу любому клиенту. Пул на SOHO маршрутизаторах в конфигурации по умолчанию имеет небольшой размер - от нескольких десятков до 2х сотен адресов. В случае использования ПО, выполняющего роль DHCP сервера, величину пула определяет тот, кто настраивает. Если пул адресов исчерпан, то DHCP сервер игнорирует запросы от новых клиентов (возможно документируя это в логах) - т.е., фактически, бездействует.

Таким образом, в случае появления в сети ложных DHCP их можно нейтрализовать достаточно просто - необходимо получить аренду на все доступные на данном сервере IP адреса, каждый раз посылая запросы от уникальных клиентов. Чем больше время аренды в настройках сервера, тем на больший срок DHCP сервер оказывается нейтрализован в случае исчерпания динамического пула. Для большинства SOHO маршрутизаторов Lease Time исчисляется днями, или даже неделями. В случае использования в качестве DHCP сервера WinGate, dhcpd и прочего подобного софта, время зависит от фантазии человека который его настроил.

Принцип работы dhcdrop

Программа открывает указанный в параметрах командной строки интерфейс в promiscuous режиме, формирует DHCP запрос (DHCPDISCOVER), используя случайный исходящий MAC адрес (если в параметрах не задано иное поведение), и отправляет его в интерфейс.

01:58:04.681600 00:70:de:3b:b9:05 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), 
length 342: (tos 0x10, ttl 64, id 33964, offset 0, flags [none], 
proto UDP (17), length 328) 
0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:70:de:3b:b9:05, 
length 300, xid 0xcc1cfc5c, Flags [none]
          Client-Ethernet-Address 00:70:de:3b:b9:05
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: Discover
            Parameter-Request Option 55, length 3:
              Domain-Name-Server, Default-Gateway, Subnet-Mask
            Hostname Option 12, length 12: "DHCP-dropper"
            Vendor-Class Option 60, length 12: "DHCP-dropper"
            Client-ID Option 61, length 7: ether 00:70:de:3b:b9:05

После чего переходит к ожиданию ответа (DHCPOFFER) сервера. Если получен ответ с предложением аренды IP адреса, то в интерфейс отправляется следующий DHCP запрос (DHCPREQUEST) на который сервер отвечает DHCPACK-пакетом подтверждающим возможность использования данного IP адреса клиентом. На этом операция получения аренды на предложенный сервером IP адрес завершена. Программа изменяет MAC адрес источника и вновь посылает DHCPDISCOVER, после чего все вышеуказанные операции по получению аренды нового IP адреса повторяются. Стоит обрать внимание что программа изменяет не только MAC адрес клиента в DHCP сообщении, но и MAC адрес в заголовке Ethernet-фрейма. Данная возможность максимально приближает работу программы к работе реального DHCP клиента (а так же позволяет обойти DHCP snooping).

Описание опций программы

Запуск без параметров:

$ dhcdrop
Usage:
dhcpdrop [-h] [-D] [-t] [-y] [-r] [-b] [-a] [-A] [-f] [-R] [-q]
        [-m <count>] [-c <count>] [-n <hostname>] [-N <clientname>]
        [-p <port>] [-P <port>] [-w <secs>] [-T <timeout>]
        [-M <max-hosts-scan>] [-l <MAC-address>] [-L <network>]
        [-S <network/mask>] [-F <from-IP>] [-s <server-IP>]
        [-C <children count (2 - 32)>] [<initial MAC address>]
        -i <interface-name|interface-index>

DHCP-dropper v0.5 was written by Chebotarev Roman at 05.08.2009
Home page: http://www.netpatch.ru/dhcdrop.html
Use option -h for help. Exit.

Подробное описание:

  • -h - показывает help-сообщение.
  • -D - просмотр списка имён и индексов сетевых интерфейсов. Актуально в ОС Windows - см. пример ниже.
  • -t - Режим теста. В этом режиме dhcdrop не выполняет подавление сервера. Производится лишь посылка DHCPDISCOVER, если на него приходит ответ нелегального сервера, то программа заверается возвращаяя код 200 и выводя на экран строку вида 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 содержащую минимум информации о создающем проблему DHCP сервере.
  • -y - подразумевается ответ "yes" на любой вопрос программы.
  • -r - отключает рандомизацию MAC адреса источника. Каждый последующий MAC адрес источника увеличивается на 1.
  • -b - указывает на необходимость использования флага BROADCAST в отправляемых DHCP пакетах.
  • -a - всегда ожидать ответа сервера на порт DHCP клиента по умолчанию (68), даже если задано значение номера порта клиента отличное от значения по умолчанию.
  • -A - всегда ожидать ответа с порта DHCP сервера по умолчанию (67), даже если задано значение номера порта сервера отличное от значения по умолчанию.
  • -f - режим флуда запросами DHCPDISCOVER. ПРИМЕНЯТЬ С ОСТОРОЖНОСТЬЮ. Удобен для стресс-тестирования сервера. В случае указания опции -r все отправляемые пакеты имеют одинаковый MAC адрес.
  • -R - отправляет сообщение DHCPRELEASE с MAC адресом источника указанном при запуске программы и IP адресом указанным при помощи опции -F к серверу указанному опцией -s.
  • -q - "тихий" режим работы. Выводится минимум информации.
  • -m count - максимальное число попыток получения ответа от сервера.
  • -c count - максимальное число адресов арендуемых у сервера.
  • -n hostname - значение DHCP опции HostName (по умолчанию - "DHCP-dropper")
  • -N clientname - значение DHCP опции Vendor-Class (по умолчанию - "DHCP-dropper")
  • -p port - порт используемый клиентом для отправки DHCP сообщений. По умолчанию - 68.
  • -P port - порт сервера, на который отправляются DHCP сообщения. По умолчанию - 67.
  • -w секунд - задаёт таймаут рестарта процесса получения IP адресов в случае использования агрессивного режима. По умолчанию - 60 секунд.
  • -T timeout - устанавливает таймаут ожидания ответа сервера (в секундах). По умолчанию - 3 секунды.
  • -M хостов-максимум - максимально допустимое количество сканируемых хостов в случае использования агрессивного режима.
  • -l MAC-address - Ethernet адрес сервера который необходимо игнориновать при выполненении поиска ложных DHCP серверов в сети. В этой опции следует указать адрес DHCP сервера ответственного за раздачу адресов в данном сегменте сети. Может быть указано несколько адресов - каждый должен предваряться ключом -l.
  • -L легальная-сеть - указывает легальную IP подсеть для выбранного интерфейса. Использование этой опции автоматически включает агрессивный режим получения IP адресов. Может быть указано несколько сетей - каждая должна предваряться ключом -L. Подробное описание смотрите ниже.
  • -S сеть/маска - ARP сканирование сети 'сеть' с использованием сетевой маски 'маска' в CIDR нотации. IP адрес источника задаётся опцией -F. Если IP адрес источника не задан - используется случайный адрес из диапазона указанной подсети. Пример использования смотрите ниже.
  • -F исходящий-IP-адрес - указывает IP адрес источника для сканирования сети (опция -S), либо IP адрес DHCP клиента для отправки сообщения DHCPRELEASE (опция -R).
  • -s IP-адрес-сервера - задаёт IP адрес DHCP сервера. Используется с опцией -R.
  • -C count - число порождаемых процессов-потомков. Совместим только с флагом -f. Используется для увеличения числа отправляемых пакетов за единицу времени. При значении этого параметра равном 30, 10000 пакетов генерировалось менее чем за 1,5 секунды.
  • -i interface - имя либо индекс сетевого интерфейса (см. ключ -D). Не может быть "any"! Единственный обязательный параметр программы.
    initial MAC address - задаёт MAC адрес источника используемый при отправке первого DHCP сообщения, либо используемый постоянно, в случае использования опции -f (flood) вместе с опцией -r. Если не указан, то используется случайный MAC адрес источника.

Использование программы

Ниже представлены наиболее часто используемые режимы запуска программы.

Просмотр списка интерфейсов

Для начала нужно понять как называется сетевой интерфейс на котором находится DHCP сервер. Если в UNIX-like ОС понять это достаточно просто, руководствуясь выводом команды ifconfig, то в ОС семейства Windows всё не так очевидно. По этому сперва запустим программу с ключом -D:

C:\>dhcdrop -D
Available interfaces:
1:\Device\NPF_GenericDialupAdapter
  descr: Adapter for generic dialup and VPN capture
2:\Device\NPF_{0C796DB5-22D9-46AB-9301-9C7ADC2304AF}
  descr: ZyXEL GN650 1000Base-T Adapter                (Microsoft's Packet Scheduler)
  iaddr: 192.168.1.2/24  bcast: 255.255.255.255
  iaddr: 10.7.7.7/24  bcast: 255.255.255.255

По выведенной информации очевидно что нам нужен второй интерфейс. В качестве аргумента для ключа программы -i можно задать либо индекс интерфейса 2, либо его имя: \Device\NPF{0C796DB5-22D9-46AB-9301-9C7ADC2304AF}_. На мой взгляд гораздо проще использовать индекс и запустить программу указав вместо имени индекс, например: dhcdrop -i 2

Интерактивный режим, по умолчанию

Самый простой вариант использования программы для поиска и выбора подавляемого сервера вручную:

$ sudo dhcdrop -i eth1
Using interface: 'eth1'
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)
Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 10.7.7.201/24
Drop him? [y/n] n
Searching next server...
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)
Got BOOTREPLY (DHCPOFFER) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
Drop him? [y/n] y
1. Got BOOTREPLY (DHCPACK) for client ether: 00:16:09:D8:CF:60 You IP: 192.168.1.2/24
2. Got BOOTREPLY (DHCPACK) for client ether: 00:A2:FA:12:41:F7 You IP: 192.168.1.3/24
3. Got BOOTREPLY (DHCPACK) for client ether: 00:56:EA:F8:1C:B0 You IP: 192.168.1.4/24
4. Got BOOTREPLY (DHCPACK) for client ether: 00:EA:91:1A:C8:A8 You IP: 192.168.1.5/24
5. Got BOOTREPLY (DHCPACK) for client ether: 00:83:8A:25:C7:1C You IP: 192.168.1.6/24
6. Got BOOTREPLY (DHCPACK) for client ether: 00:CA:A7:FF:C1:70 You IP: 192.168.1.7/24
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Finished.

Как видно из примера - при получении ответа от DHCP сервера dhcdrop сообщает полученную от сервера информацию о предлагаемом IP адресе и спрашивает о необходимости подавления данного сервера. Получив отрицательный ответ - продолжает поиск серверов в сети игнорируя обнаруженный ранее сервер. В случае получения утвердительного ответа - начинает процесс подавления сервера указанным выше способом.

Режим автоматического подавления всех серверов кроме легитимного

В случае если мы знаем (а обычно мы знаем) MAC адрес легального DHCP сервера в нашей сети, операцию подавления ложных серверов можно упростить:

$ sudo dhcdrop -i eth1 -y -l 00:02:44:75:77:E4
Using interface: 'eth1'
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)
Got BOOTREPLY (DHCPOFFER) for client ether: 00:37:C5:10:BE:16 You IP: 192.168.1.2/24
1. Got BOOTREPLY (DHCPACK) for client ether: 00:37:C5:10:BE:16 You IP: 192.168.1.2/24
2. Got BOOTREPLY (DHCPACK) for client ether: 00:94:26:88:33:BD You IP: 192.168.1.3/24
3. Got BOOTREPLY (DHCPACK) for client ether: 00:E5:AC:7B:79:BB You IP: 192.168.1.4/24
4. Got BOOTREPLY (DHCPACK) for client ether: 00:EA:16:AD:B2:30 You IP: 192.168.1.5/24
5. Got BOOTREPLY (DHCPACK) for client ether: 00:A2:8D:16:7E:82 You IP: 192.168.1.6/24
6. Got BOOTREPLY (DHCPACK) for client ether: 00:04:ED:4A:C2:C5 You IP: 192.168.1.7/24
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Finished.

В подобном варианте использования dhcdrop подавляет любой сервер кроме указанного опцией -l сервера, не задавая дополнительных вопросов (благодаря использованию опции -y).

Тестовый режим

Тестовый режим (-t) удобно использовать для выполнения программы из скриптов, в автоматизированном режиме. Ниже приведён пример простейшего скрипта:

#!/bin/bash
LEGAL_SERVER="00:11:22:33:44:55"
DROPPER="/usr/sbin/dhcdrop"
IFNAME="eth1"

$DROPPER -i $IFNAME -t -l $LEGAL_SERVER -m 3

if [ $? = 200 ]
then
   echo Illegal server found\! Dropping him\!
   $DROPPER -i $IFNAME -l $LEGAL_SERVER -y
else
   echo Illegal server not found.
fi

В строке 4 выполняется запуск dhcdrop в тестовом режиме, с указанием опции легального для сети DHCP сервера (-l), опцией режима тестирования (-t) и опцией задающей максимальное число попыток отправки DHCPDISCOVER в режиме поиска сервера (-m). Если ни на один из отправленных запросов не придёт ответа - программа завершается с кодом 0. Если приходит ответ от сервера не заданного опцией -l, программа завершается с кодом 200, что вызывает последующий запуск программы с параметрами определяющими подавление любого DHCP сервера в сети, кроме легального.

Использование агрессивного режима получения адресов

Как можно догадаться из описания протокола DHCP - если клиент уже получил конфигурационный набор данных от нелегального DHCP сервера, то сервер не выдаст повторно этот набор другому клиенту пока не истечёт срок аренды. Следовательно простое исчерпание пула IP адресов не спасёт клиентов уже получивших не верные конфигурационные данные - сервер будет выдавать эти адреса только изначально запросившим их клиентам и будет игнорировать запросы от dhcdrop. При следующей попытке обновления адреса клиенты вновь получат информацию от нелегального DHCP сервера, и так будет продолжаться пока не отключат нелегальный DHCP сервер.

Для решения подобных проблем в dhcdrop начиная с версии 0.5. добавлен агрессивный режим получения IP адресов. Включается опцией -L указывающей легитимную IP подсеть для данного Ethernet сегмента сети. Алгоритм его работы следующий:

  1. dhcdrop запускает обычный режим подавления и исчерпывает весь пул свободных IP адресов нелегального DHCP сервера.
  2. Анализирует первый DHCPOFFER полученный от нелегального DHCP. При помощи сетевой маски и IP адреса клиента выданных сервером получает адрес IP сети обслуживаемой этим сервером.
  3. Запускает ARP-сканирование полученной подсети с целью выявить хосты получившие не правильную конфигурационную информацию. По умолчанию число сканируемых хостов ограничено числом 512 (можно изменить опцией -M) - некоторые сервера выдают конфигурационные наобры с маской /8, что соответствует примерно 16 млн. хостов - сканирование такого адресного диапазона займёт очень большое время.
  4. Отправляет DHCP серверу сообщения DHCPRELEASE от каждого из найденных хостов (исключая сам сервер).
  5. Ожидает 60 секунд (значение по умолчанию, может быть изменено опцией -w) после чего перезапускает процесс получения IP адресов.
$ sudo dhcdrop -i eth1 -y -l 00:02:44:75:77:E4 -L 10.7.7.0
Using interface: 'eth1'
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)
Got BOOTREPLY (DHCPOFFER) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
1. Got BOOTREPLY (DHCPACK) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
2. Got BOOTREPLY (DHCPACK) for client ether: 00:FB:E7:A4:19:EC You IP: 192.168.1.6/24
3. Got BOOTREPLY (DHCPACK) for client ether: 00:CB:44:F9:A8:6F You IP: 192.168.1.7/24
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Trying to use agressive mode.
Starting ARP scanning network in range: 192.168.1.0 - 192.168.1.255...
Illegal DHCP server perhaps assigned IP adresses to the following hosts:
1. Received ARP-reply from: 00:1e:2a:52:c8:ca (192.168.1.1) - itself DHCP server.
2. Received ARP-reply from: 00:03:ff:15:52:90 (192.168.1.3)
3. Received ARP-reply from: 00:03:ff:14:52:90 (192.168.1.4)
4. Received ARP-reply from: 00:a0:c5:30:52:90 (192.168.1.200)
Sending DHCPRELEASE for invalid clients:
Send DHCPRELEASE for host 00:03:ff:15:52:90 (192.168.1.3).
Send DHCPRELEASE for host 00:03:ff:14:52:90 (192.168.1.4).
Send DHCPRELEASE for host 00:a0:c5:30:52:90 (192.168.1.200).
Restart dropping DHCP server after 60 seconds timeout...
1. Got BOOTREPLY (DHCPACK) for client ether: 00:BC:BF:D6:39:2E You IP: 192.168.1.5/24
2. Got BOOTREPLY (DHCPACK) for client ether: 00:F1:32:14:60:A3 You IP: 192.168.1.3/24
3. Got BOOTREPLY (DHCPACK) for client ether: 00:2D:1C:80:ED:12 You IP: 192.168.1.4/24
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.
Wait DHCPOFFER timeout. Resending DHCPDISCOVER.

WARNING: Failed to take away all the IP addresses assigned by DHCP server.
Perhaps DHCP server checks availability of IP addresses by sending ARP-request
before assigning them. Try to restart dhcpdrop later. If it doesn't help
try to disconnect problem hosts temporarily, then send manually DHCPRELEASE
from address of this hosts (use option -R) and restart dhcdrop.

Finished.

Пояснения к результатам работы программы.

После вывода надписи "Trying to use agressive mode." начинается ARP сканирование подсети обслуживаемой нелегальным DHCP сервером в указанном диапазоне. В результате найдено 4 хоста, включая сам DHCP сервер (1й хост). Затем dhcdrop посылает серверу 192.168.1.1 сообщения DHCPRELEASE от адресов (Ethernet & IP) всех хостов найденных в подсети кроме самого DHCP сервера и останавливает выполнение на 60 секунд. Таймаут необходим потому что некоторые DHCP сервера удерживают выдачу IP адреса новому клиенту в течение небольшого времени после получения сообщения DHCPRELEASE от предыдущего клиента. В случае необходмости значение таймаута можно изменить опцией -w. По истечении таймаута dhcdrop запускает процесс получения освободившихся IP адресов. Успешно удалось получить IP адреса 192.168.1.5 (был получен изначально при старте программы), 192.168.1.3 и 192.168.1.4. Последние два адреса были успешно особождены сервером после получения сообщений DHCPRELEASE сгенерированных dhcdrop. Не удалось получить адрес 192.168.1.200 несмотря на присутствие этого хоста в сети, и то что от его адреса было отправлено сообщение DHCPRELEASE. Одна из причин неудачи описана в предупреждении, в конце вывода программы - DHCP сервер перед выдачей адресов может проверять присутствует ли в сети хост с запрашиваемым IP адресом и только после этого - выдавать адрес, если таковой хост в сети отсутствует. В противном случае - новая аренда на этот адрес выдана не будет. В этой ситуации может помочь отключение проблемных хостов от сети вручную и отправка сообщений DHCPRELEASE от адреса этих хостов серверу (см. пример ниже), после чего необходимо снова запустить процесс получения IP адресов.

Но в нашем случае проблема кроется не в этом - хост 192.168.1.200 имеет статически установленный адрес и потому никогда не запрашивал конфигурации у DHCP сервера.

Сама необходимость указания легальной сети для запуска агрессивного режима необходима что бы проверить - не пересекается ли адресный диапазон выдаваемый нелегальным DHCP сервером с адресным пространством подсети в которой он обнаружен. Если адресные пространства пересекаются - ARP сканирование будет проведено по хостам имеющим правильную конфигурацию и выведет ошибочную информацию. Потому в случае обнаружения пересечения диапазонов адресов агрессивный режим не запускается.

Отправка сообщения DHCPRELEASE

Возможно у вас возникнет необходимость отправки сообщений DHCPRELEASE в ручном режиме. Например по причине указанной в предыдущем примере. Сделать это можно при помощи опции -R:

$ sudo dhcdrop -i eth1 -R -s 192.168.1.1 -F 192.168.1.4 00:2D:1C:80:ED:12
Using interface: 'eth1'
Send DHCPRELEASE from 00:2D:1C:80:ED:12 client IP 192.168.1.4 to DHCP server 192.168.1.1
Finished.

Опция -s задаёт IP адрес сервера, -F - IP адрес DHCP-клиента, 00:2D:1C:80:ED:12 - Ethernet адрес клиента. В результате в сеть отправлен пакет вида:

16:13:43.887735 00:2d:1c:80:ed:12 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 
(tos 0x10, ttl 64, id 29807, offset 0, flags [none], proto UDP (17), length 328) 
0.0.0.0.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:2d:1c:80:ed:12, 
length 300, xid 0xb2f04a28, Flags [none]
    Client-IP 192.168.1.4
    Client-Ethernet-Address 00:2d:1c:80:ed:12
    Vendor-rfc1048 Extensions
    Magic Cookie 0x63825363
    DHCP-Message Option 53, length 1: Release
    Server-ID Option 54, length 4: 192.168.1.1
    Client-ID Option 61, length 7: ether 00:2d:1c:80:ed:12

Сканирование сегмента сети

Вы можете использовать ARP сканирование сети для поиска клиентов получивших не верную конфигурационную информацию. Осуществляется при помощи опции -S:

$ dhcdrop -i eth1 -S 192.168.1.0/24
Using interface: 'eth1'
Starting ARP-scanning for subnet 192.168.1.0/24.
IP address range 192.168.1.0 - 192.168.1.255.
WARNING: Source IP is not set (use option -F).
Using random value for source IP address: 192.168.1.195
1. Received ARP-reply from: 00:1e:2a:52:c8:ca (192.168.1.1).
2. Received ARP-reply from: 00:a0:c5:30:52:90 (192.168.1.200).
Finished.

Как следует из предупреждения напечатанного программой - при запуске не был задан IP адрес источника, потому dhcdrop выбирает случайный IP адрес из диапазона адресов указанной подсети. Если вам нужно указать адрес источника - используйте опцию -F. Для данного типа сканирования не важны фактические настройки маршрутизации в вашей сети. Всегда будет использоваться интерфейс заданный опцией -i из расчёта что хосты указанной подсети находятся в одном Ethernet сегменте с хостом на котором запущен dhcdrop. Так же, данная опция позволяет обнаружить дублирование IP адресов в одном сегменте сети, даже если сканирование производится с хоста чей IP адрес дублируется другим хостом.


comments powered by Disqus