Réponses:
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
Si disponible dans le référentiel, il y a dhcpdump
à partir de 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.
Si vous en disposez tcpdump
, l'appel du 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 configuration de mon réseau, je ne peux pas obtenir une poignée de main DHCP complète immédiatement. Cependant, je vois une demande DHCP depuis 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 tcpdump
commande, et que vous voyez une offre BOOTP / DHCP ou un accusé de réception (Nack), cela proviendra d'un serveur DHCP et l'adresse MAC du serveur sera juste après l'horodatage sur la première ligne.
Ainsi, 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'adresse MAC sur le Web, je vois que ce MAC appartient à A8:39:44 Actiontec Electronics, Inc
mon routeur.
Afin d'attraper les paquets de serveurs DHCP voyous au fur et à mesure qu'ils se produisent, je devrais laisser ce tcpdump
processus en cours d'exécution 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 s'exécutera en arrière-plan jusqu'à ce que 100 paquets soient capturés, en ajoutant tout message de serveur DHCP non autorisé au fichier /tmp/rogue
. Encore une fois, l'adresse MAC de votre serveur DHCP valide doit être utilisée à l'endroit approprié, ainsi que le descripteur d'interface sur 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 &
"
tcpdump
commande en cours d'exécution, elle affichera les paquets du serveur DHCP envoyés par une adresse MAC différente de celle de votre serveur DHCP. Bien sûr, vous devrez fournir l'adresse à l'endroit indiqué ... Je vais le placer dans ma réponse actuellement, pour obtenir un meilleur formatage.
Avec suffisamment de temps, il pourrait être possible de faire la détection de manière passive: Rappelez-vous qu'un client initialisant envoie une diffusion DHCPDISCOVER. Si un dhcpserver est disponible, il choisira une offre puis émettra (à nouveau en diffusion!) Une DHCPREQUEST. Donc
Le succès des deux premiers points dépend du nombre d'autres hôtes nouvellement connectés / démarrés au réseau et également des durées de location.
Vous pouvez essayer de créer un périphérique d'alias et d'utiliser un client DHCP en mode test, où il imprime toute réponse, sans réellement reconfigurer 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 de dry-run peut être différente, comme pour dhcpcd:
dhcpcd -T eth0:1
J'avais l'habitude d'exécuter un script cron avec quelque chose comme ça, qui alerterait l'administrateur (moi!) Sur les serveurs DHCP malveillants.
ifconfig eth0:1 up
la sortieSIOCSIFFLAGS: Cannot assign requested address