Перевірте, чи існує сервер DHCP в моїй мережі за допомогою bash


23

використовуючи CentOS зі статичним IP, чи є спосіб визначити, чи працює сервер DHCP, який працює в мережі, використовуючи bash?

Відповіді:


44

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

1
Хоча існуючі відповіді були досить хорошими, я дуже віддаю перевагу вашому рішенню!
Джулі Пелтьє,

1
Хороша команда, але варто зазначити, що це просто виводить перший сервер DHCP, який відповідає. Якщо існує декілька серверів DHCP, ця команда їх не знайде.
ткнути

6

Якщо є в сховищі, є 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.

5

Якщо у вас є tcpdumpдоступність, виклик програми як кореня із наступними параметрами може допомогти вам у пошуку сервера:

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

Так, мені довелося використовувати його для пошуку розбіжних серверів DHCP на ранніх розгортаннях кабельних модемних мереж, поки ми не з'ясували, як відфільтрувати вихідний порт 67 UDP на кожному типі кабельних модемів до DOCSIS у нашій мережі. Навіть після того, як ми визначили шахрая, не завжди вдалося визначити, за яким модемом він стоїть. У важких випадках нам довелося вимкнути кожен вузол, поки шахрай не зупинився, а потім виділити потужність на цьому вузлі, щоб звузити кількість валків вантажних автомобілів, які зробили б MSO. Веселі часи. Хай живе ДОКСИС.
Невін Вільямс

будь-яке просте рішення, тому що я хочу часто перевіряти баш
Стів

Якщо ви залишите цю tcpdumpкоманду запущеною, вона відобразить пакети серверів DHCP, що надсилаються за MAC-адресою, відмінною від сервера DHCP. Звичайно, вам потрібно буде вказати адресу у вказаному місці ... Я розміщую її у своїй відповіді зараз, щоб покращити форматування.
Невін Вільямс

0

З огляду на достатньо часу, виявлення може бути пасивним: Нагадаємо, що ініціалізуючий клієнт надсилає трансляцію DHCPDISCOVER. Якщо dhcpserver доступний, він вибере пропозицію, а потім передасть (знову ж таки трансляцію!) DHCPREQUEST. Таким чином

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

Успіх перших двох пунктів залежить від кількості інших хостів, щойно приєднаних / завантажених до мережі, а також строків оренди.


0

Ви можете спробувати створити пристрій псевдоніму та використовувати клієнт dhcp у режимі тестування, де він виводить будь-яку відповідь, фактично не переналаштовуючи інтерфейс:

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

У мене є лише доступ до вікна debian, тому якщо у вас є інша реалізація dhcp, параметр "сухого запуску" може бути іншим, як для dhcpcd:

dhcpcd -T eth0:1

У мене раніше був запущений сценарій cron із чимось подібним, що сповістило б адміністратора (мене!) Про шахрайські dhcp-сервери.


1
коли дзвоніть ifconfig eth0:1 upна вихідSIOCSIFFLAGS: Cannot assign requested address
Стів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.