web-dev-qa-db-fra.com

Vérifier si un serveur DHCP existant sur mon réseau utilise bash

utilisant CentOS avec une adresse IP statique, existe-t-il un moyen de déterminer si un serveur DHCP s'exécutant sur le réseau à l'aide de bash?

19
Steve

nmap le fait facilement:

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

montrera:

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
34
galgalesh

Si disponible dans le référentiel, il y a dhcpdump

depuis la page de manuel:

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.
6
Pol Hallen

Si vous disposez de tcpdump, appeler le programme en tant que root avec les paramètres suivants peut vous aider à trouver le serveur:

tcpdump -i [id d'interface] -nev port udp 68

Malheureusement, en raison de la disposition de mon réseau, je ne peux pas capturer immédiatement une négociation DHCP. Cependant, je vois une demande DHCP de mon 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"

Après avoir laissé tcpdump s'exécuter pendant la nuit, j'ai finalement vu cet 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

Si lors de l'exécution de cette commande tcpdump, et que vous voyez une offre BOOTP/DHCP ou un accusé de réception (Nack), ce sera à partir d'un serveur DHCP et l'adresse MAC du serveur sera juste après l'horodatage de la première ligne.

Donc, le serveur DHCP (valide) a ici l'adresse MAC a8: 39: 44: 96: fa: b8`.

En utilisant l’un des nombreux outils de recherche d’adresses MAC sur le Web , je vois que ce MAC appartient à A8:39:44 Actiontec Electronics, Inc qui est mon routeur.

Pour attraper les paquets de serveurs DHCP non autorisés au fur et à mesure qu'ils se produisent, je devrais laisser ce processus tcpdump s'exécuter dans la fenêtre du terminal:

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

Cela ne me montrera que les réponses du serveur DHCP des hôtes autres que mon serveur DHCP valide, tant que le processus s'exécute dans sa propre fenêtre.

La commande suivante sera exécutée en arrière-plan jusqu'à ce que 100 paquets soient capturés, en ajoutant tous les messages de serveur DHCP non autorisés au fichier /tmp/rogue. Là encore, l'adresse MAC de votre serveur DHCP valide doit être utilisée à l'emplacement approprié, ainsi que le descripteur d'interface de votre système.

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 &

`

5
Nevin Williams

Vous pouvez essayer de créer un périphérique alias et d’utiliser un client DHCP en mode test, où il affiche toutes les réponses sans reconfigurer réellement l’interface:

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

Je n'ai accès qu'à une boîte debian, donc si vous avez une autre implémentation dhcp, l'option d'exécution à sec peut être différente, comme pour dhcpcd:

dhcpcd -T eth0:1

J'avais un script cron exécuté avec quelque chose comme ceci, qui alerterait l'administrateur (moi!) Des serveurs dhcp non autorisés.

0
Kenned

Si le temps le permet, il peut être possible d'effectuer la détection de manière passive: Rappelez-vous qu'un client en cours d'initialisation envoie une diffusion DHCPDISCOVER. Si un serveur dhcpserver est disponible, il choisira une offre, puis émettra (à nouveau en diffusion!) Un DHCPREQUEST. Ainsi

  • si vous recevez une diffusion DHCPREQUEST, il y a un serveur DHCP
  • si vous recevez DHCPDISCOVER, mais pas DHCPREQUEST en une seconde ou deux (pour tenir compte des serveurs DHCP distants via relais DHCP), il n'y a pas de serveur DHCP
  • si vous ne recevez même pas DHCPDISCOVER, vous devez attendre plus longtemps - ou essayer de rechercher activement un serveur DHCP (par exemple, selon la méthode de Kenned)

Le succès des deux premiers points dépend du nombre d'autres hôtes récemment connectés/démarrés sur le réseau et des durées de bail.

0