Überprüfen Sie, ob ein DHCP-Server in meinem Netzwerk mit bash vorhanden ist

Gibt es bei Verwendung von CentOS mit statischer IP eine Möglichkeit zu bestimmen, ob ein DHCP-Server im Netzwerk mit bash ausgeführt wird ?

Author: Steve, 2014-05-06

6 answers

nmap macht das leicht:

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

Wird angezeigt:

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.0.67
|   DHCP Message Type: DHCPOFFER
|   Server Identifier: 192.168.0.1
|   IP Address Lease Time: 0 days, 0:05:00
|   Subnet Mask: 255.255.255.0
|   Router: 192.168.0.1
|   Domain Name Server: 8.8.8.8
|   Domain Name: maas
|   Broadcast Address: 192.168.0.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

Hinweis: Es gibt ein ähnliches Skript für dhcpv6

sudo nmap --script broadcast-dhcp6-discover -e eth0
 47
Author: Merlijn Sebrechts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-02-03 14:24:37

Falls im Repository verfügbar, gibt es dhcpdump

Von Manpage:

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
Author: Pol Hallen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-07-07 20:01:08

Wenn Ihnen tcpdump zur Verfügung steht, kann es hilfreich sein, das Programm als root mit den folgenden Parametern aufzurufen, um den Server zu finden:

Tcpdump -i [interface-id] -nev udp-port 68

Leider kann ich aufgrund des Layouts meines Netzwerks keinen vollständigen DHCP-Handshake sofort erfassen. Ich sehe jedoch eine DHCP-Anfrage von meinem 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"

Nachdem ich 'tcpdump' über Nacht laufen ließ, sah ich schließlich diesen 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

Wenn beim laufen dieser Befehl tcpdump und Sie sehen ein BOOTP / DHCP-Angebot oder ein Ack (Nack), das von einem DHCP-Server stammt, und die MAC-Adresse des Servers befindet sich direkt nach dem Zeitstempel in der ersten Zeile.

Der (gültige) DHCP-Server hier hat also die MAC-Adresse a8: 39: 44:96:fa: b8`.

Mit eines von vielen MAC-Adress-Lookup-Tools im Web Ich sehe, dass dieser MAC zu A8:39:44 Actiontec Electronics, Inc gehört, was mein Router ist.

Um schurkische DHCP-Serverpakete abzufangen, müsste ich dies verlassen tcpdump prozess läuft im Terminalfenster:

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

Dies zeigt nur DHCP-Serverantworten von anderen Hosts als meinem gültigen DHCP-Server an, solange der Prozess in einem eigenen Fenster ausgeführt wird.

Der folgende Befehl wird im Hintergrund ausgeführt, bis 100 Pakete erfasst werden, wobei alle fehlerhaften DHCP-Servermeldungen an die Datei angehängt werden /tmp/rogue. Auch hier muss die MAC-Adresse Ihres gültigen DHCP-Servers an der entsprechenden Stelle verwendet werden, sowie der Schnittstellendeskriptor auf Ihrem System.

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
Author: Nevin Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-05-09 21:57:52

Bei ausreichender Zeit ist es möglicherweise möglich, die Erkennung passiv durchzuführen: Denken Sie daran, dass ein initialisierender Client eine DHCPDISCOVER-Übertragung sendet. Wenn ein dhcpserver verfügbar ist, wird er sich für ein Angebot entscheiden und dann (wieder als Broadcast!) DHCPREQUEST. So

  • wenn Sie eine DHCPREQUEST-Übertragung empfangen, gibt es einen DHCP-Server
  • wenn Sie DHCPDISCOVER erhalten, aber innerhalb von ein oder zwei Sekunden keine DHCPREQUEST (um Remote-DHCP-Server über DHCP-Relay zu berücksichtigen), gibt es keinen DHCP-Server
  • wenn Sie nicht einmal DHCPDISCOVER erhalten, müssen Sie länger warten-oder versuchen, aktiv einen DHCP-Server zu finden (z. B. nach Kenneds Methode)

Der Erfolg der ersten beiden Punkte hängt von der Anzahl der anderen Hosts ab, die neu an das Netzwerk angeschlossen / gestartet wurden, sowie von den Leasingzeiten.

 0
Author: Hagen von Eitzen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-05-06 16:42:39

Sie können versuchen, ein Alias-Gerät zu erstellen und einen DHCP-Client im Testmodus zu verwenden, in dem eine Antwort ausgedruckt wird, ohne die Schnittstelle tatsächlich neu zu konfigurieren:

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

Ich habe nur Zugriff auf einen debian-box, so wenn Sie einen anderen dhcp-Implementierung, die dry-run-option, die könnte anders sein, wie zum dhcpcd:

dhcpcd -T eth0:1

Früher ließ ich ein Cron-Skript mit so etwas ausführen, das den Administrator alarmieren würde (ich!) über rogue-dhcp-Server.

 0
Author: Kenned,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-05-07 15:14:31

Wenn Sie scapy verfügbar haben, ist dies eine (sogar skriptfähige) einfache Befehlszeilenlösung. Nur dieser Code (in der Scapy-Schnittstelle ausgeführt oder wie gewünscht über die Datei .py skriptiert) sollte die DHCP-Anforderung ausführen und die Anzahl von answers (entspricht DHCP) zurückgeben verschiedene Server):

conf.checkIPaddr = False
fam,hw = get_if_raw_hwaddr(conf.iface)
dhcp_discover = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw)/DHCP(options=[("message-type","discover"),"end"])
ans, unans = srp(dhcp_discover, multi=True)      # Press CTRL-C after several seconds
ans.summary()

Der Scapy-Weg ist gut, da er auf many platforms und eingebetteten Geräten (wie OpenWRT) verfügbar ist und scripting akzeptiert.

Der Nachteil: Sie müssen python installiert (gut... weit verfügbar auch).

Keine Notwendigkeit für Bash auf dieser Lösung.

 0
Author: Sopalajo de Arrierez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-05-30 00:10:12