![Ungültige MAC-Erkennung des DHCP-Servers](https://rvso.com/image/768933/Ung%C3%BCltige%20MAC-Erkennung%20des%20DHCP-Servers.png)
In meiner DHCP-Konfiguration habe ich einen Commit-Hook, um Geräteinformationen zu speichern. Mein Problem ist, dass einige der MAC-Adressen ungültig werden:
8:7c:39:cf:b6:3f
- dies sollte mit Null beginnen
8:d0:b7:52:f9:68
- auch das
Meindhcpd.conf
set clientmac = binary-to-ascii(16,8,":",substring(hardware,1,6));
Antwort1
Es hängt davon ab, was Sie zum Parsen verwenden. Man könnte argumentieren, dass es völlig in Ordnung ist, vorangestellte Nullen wegzulassen, und das tun wir auch meistens, weil es keine Definition gibt, wie viele Ziffern es geben sollte.
Wenn wir jedoch den Teil darüber überspringen, ob und warum dies ungültig ist, und stattdessen fragen „Wie bekomme ich dies im gewünschten Format“, können wir eine Antwort geben.
In diesem Fallisc hat einen KB-Artikel darüber
Dies ist kein Fehler. Das Problem besteht darin, dass die Binär-zu-ASCII-Funktion nichts über die beabsichtigte Verwendung der konvertierten Binärziffern „weiß“ und es unüblich ist, beim Drucken numerischer Werte führende Nullen einzuschließen.
Mit ein wenig zusätzlicher Manipulation ist es jedoch immer noch möglich, das gewünschte Ergebnis zu erzielen:
set foo = concat (
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);
(Dies funktioniert, indem jede „Komponente“ separat konvertiert wird, ihr eine Null vorangestellt wird (falls eine benötigt wird), die letzten beiden Hex-Zeichen genommen und sie dann alle wieder aneinandergereiht werden.)
Antwort2
Dies ist keine Antwort, ich möchte nur diese Konfiguration teilen. Dabei legt der DHCP-Server den Bootfile-Namen (Option 67) so fest, dass er die Mac-Adresse des Clients enthält. Die Mac-Adresse wird jedoch so geändert, dass sie mit 00
oder endet 80
. Dies ist die Basis-Mac-Adresse von Cisco-Switches. Unabhängig davon, welchen Mac der Switch aus seinem Pool an Mac-Adressen verwendet, erhält er immer noch dieselbe Konfigurationsdatei.
# Option 66
option tftp-server-name "198.51.100.19";
# Option 67
# Set to "switch-config/by-mac/<mac-of-client>"
# If the mac ends with 80-ff, set it to 80, else 00.
# Because the base MAC either ends with 00 or 80.
if substring(suffix (concat ("0", binary-to-ascii (2, 8, "", substring(hardware,6,1))),8), 0, 1) = "1"
{
option bootfile-name = concat(
"switch-config/by-mac/",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2),
"80",
"");
} else {
option bootfile-name = concat(
"switch-config/by-mac/",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2),
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2),
"00",
"");
}