Перейти к содержимому

Проверьте, есть ли в моей сети DHCP-сервер, использующий bash

16

используя CentOS со статическим IP, есть ли способ определить, работает ли сервер DHCP в сети с помощью bash?

43 584 просмотра
Steve спросил 12 лет назад
S 143

5 ответов

25

nmap делает это легко:

sudo nmap --script broadcast-dhcp-discover -e eth0 

покажет:

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-16 09:25 UTC Pre-scan script results: | broadcast-dhcp-discover:  | IP Offered: 192.168.14.67 | DHCP Message Type: DHCPOFFER | Server Identifier: 192.168.14.1 | IP Address Lease Time: 0 days, 0:05:00 | Subnet Mask: 255.255.255.0 | Router: 192.168.14.1 | Domain Name Server: 193.190.127.150 | Domain Name: maas | Broadcast Address: 192.168.14.255 |_ NTP Servers: 91.189.91.157, 91.189.89.199, 91.189.94.4, 91.189.89.198 WARNING: No targets were specified, so 0 hosts scanned. Nmap done: 0 IP addresses (0 hosts up) scanned in 0.27 seconds 

Хотя существующие ответы были довольно хорошими, я предпочитаю ваше решение!

Julie Pelletier · 9 лет назад · 1
galgalesh ответил 10 лет назад
G 365
5

Если у вас есть tcpdumpдоступ, запуск программы с правами root со следующими параметрами может помочь вам найти сервер:

tcpdump -i [идентификатор интерфейса] -nev порт udp 68

К сожалению, из-за структуры моей сети, я не могу сразу получить полное рукопожатие DHCP. Тем не менее, я вижу запрос DHCP от моего iPad:

22:16:44.767371 30:10:e4:8f:02:14 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: (tos 0x0, ttl 255, id 15652, offset 0, flags [none], proto UDP (17), length 328) 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 30:10:e4:8f:02:14, length 300, xid 0x42448eb6, Flags [none] Client-Ethernet-Address 30:10:e4:8f:02:14 Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: Request Parameter-Request Option 55, length 6:  Subnet-Mask, Default-Gateway, Domain-Name-Server, Domain-Name Option 119, Option 252 MSZ Option 57, length 2: 1500 Client-ID Option 61, length 7: ether 30:10:e4:8f:02:14 Requested-IP Option 50, length 4: 192.168.2.222 Lease-Time Option 51, length 4: 7776000 Hostname Option 12, length 15: "NevinWiamssiPad" 

После того, как tcpdump запустился на ночь, я наконец увидел ACK:

07:46:40.049423 a8:39:44:96:fa:b8 > 68:a8:6d:58:5b:f3, ethertype IPv4 (0x0800), length 320: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 306) 192.168.2.1.67 > 192.168.2.22.68: BOOTP/DHCP, Reply, length 278, xid 0x5e7944f, Flags [none] Client-IP 192.168.2.22 Your-IP 192.168.2.22 Client-Ethernet-Address 68:a8:6d:58:5b:f3 Vendor-rfc1048 Extensions Magic Cookie 0x63825363 DHCP-Message Option 53, length 1: ACK Server-ID Option 54, length 4: 192.168.2.1 Lease-Time Option 51, length 4: 86400 Subnet-Mask Option 1, length 4: 255.255.255.0 Default-Gateway Option 3, length 4: 192.168.2.1 Domain-Name-Server Option 6, length 8: 192.168.2.1,142.166.166.166 

Если при выполнении этой tcpdumpкоманды вы видите предложение BOOTP / DHCP или Ack (Nack), это будет от DHCP-сервера, а MAC-адрес сервера будет указан сразу после отметки времени в первой строке.

Таким образом, (действительный) DHCP-сервер здесь имеет MAC-адрес a8: 39: 44: 96: fa: b8`.

Используя один из многих инструментов поиска MAC-адресов в Интернете, я вижу, что этот MAC-адрес принадлежит A8:39:44 Actiontec Electronics, Incмоему маршрутизатору.

Для того, чтобы перехватить пакеты мошеннического DHCP-сервера, как они происходят, мне нужно оставить этот tcpdumpпроцесс запущенным в окне терминала:

tcpdump -i en0 -nev udp src port 67 and not ether host a8:39:44:96:fa:b8

Это покажет мне ответы DHCP-сервера от хостов, отличных от моего действующего DHCP-сервера, если процесс выполняется в своем собственном окне.

Следующая команда будет работать в фоновом режиме до тех пор, пока не будут собраны 100 пакетов, добавляя в файл любые сообщения мошеннического DHCP-сервера /tmp/rogue. Опять же, MAC-адрес вашего действующего DHCP-сервера должен использоваться в соответствующем месте, а также дескриптор интерфейса в вашей системе.

tcpdump -U -i en0 -c 100 -nev udp src port 67 and not ether host a8:39:44:96:fa:b8 >> /tmp/rogue 2>&1 &

`

+1 всегда использовал это в VoIP-сетях клиентов, чтобы помочь им обнаружить мошеннические DHCP-серверы, которые испортили свой сервис.

MaQleod · 12 лет назад · 0

Да, мне пришлось использовать его для поиска мошеннических DHCP-серверов в ранних развертываниях сетей с кабельным модемом, пока мы не выяснили, как фильтровать исходящий UDP-порт 67 на каждом типе кабельных модемов до DOCSIS в нашей сети. Даже после того, как мы определили мошенника, не всегда было возможно определить, за каким модемом он стоял. В серьезных случаях нам приходилось отключать каждый узел до тех пор, пока мошенник не остановился, а затем изолировать, какой усилитель на этом узле сузил количество кренов грузовиков, которые мог бы сделать MSO. Веселые времена. Да здравствует DOCSIS.

Nevin Williams · 12 лет назад · 0

любое простое решение, потому что я хочу часто проверять с Bash

Steve · 12 лет назад · 0

Если вы оставите эту команду tcpdump запущенной, она будет отображать пакеты DHCP-сервера, отправленные по MAC-адресу, отличному от вашего DHCP-сервера. Конечно, вам нужно будет указать адрес в указанном месте ... Сейчас я добавлю его в свой ответ, чтобы улучшить форматирование.

Nevin Williams · 12 лет назад · 0
Nevin Williams ответил 12 лет назад
N 3 295
5

Если доступно в репозитории есть dhcpdump

со страницы руководства:

SYNOPSIS dhcpdump [-h regular-expression] -i interface  DESCRIPTION This command parses the output of tcpdump to display the dhcp-packets for easier checking and debugging.  USAGE dhcpdump -i /dev/fxp0  If you want to filter a specific Client Hardware Address (CHADDR), then you can specifiy it as a regular expressions:  dhcpdump -i /dev/fxp0 -h ^00:c0:4f  This will display only the packets with Client Hardware Addresses which start with 00:c0:4f. 
Pol Hallen ответил 10 лет назад
P 189
0

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

ifconfig eth0:1 up dhclient -w -n eth0:1 

У меня есть доступ только к коробке Debian, поэтому, если у вас есть другая реализация dhcp, опция пробного запуска может отличаться, например, для dhcpcd:

dhcpcd -T eth0:1 

Я имел обыкновение запускать скрипт cron с чем-то вроде этого, который предупредил бы администратора (меня!) О мошеннических серверах dhcp.

при вызове ifconfig eth0: 1 up вывод SIOCSIFFLAGS: Невозможно назначить запрошенный адрес

Steve · 12 лет назад · 1
Kenned ответил 12 лет назад
K 644
0

При наличии достаточного количества времени может быть возможно выполнить обнаружение пассивно: вспомните, что инициализирующий клиент отправляет широковещательную рассылку DHCPDISCOVER. Если сервер dhcp доступен, он откроет предложение, а затем отправит (снова как широковещательно!) Запрос DHCPREQUEST. таким образом

  • если вы получаете широковещательную рассылку DHCPREQUEST, есть сервер dhcp
  • если вы получаете DHCPDISCOVER, но в течение секунды или двух DHCPREQUEST отсутствует (для учета удаленных серверов dhcp через ретранслятор dhcp), сервер dhcp отсутствует
  • если вы даже не получаете DHCPDISCOVER, вам придется подождать дольше - или попытаться активно найти сервер dhcp (например, по методу Кеннеда)

Успех первых двух пунктов зависит от количества других узлов, вновь подключенных / загруженных к сети, а также от времени аренды.

Hagen von Eitzen ответил 12 лет назад
H 503