обнаружение неверного MAC-адреса сервера dhcpd

обнаружение неверного MAC-адреса сервера dhcpd

В моей конфигурации DHCP у меня есть хук on commit для сохранения информации об устройстве. Моя проблема в том, что некоторые MAC-адреса становятся недействительными:

8:7c:39:cf:b6:3f- это должно начинаться с нуля

8:d0:b7:52:f9:68- также это

мойdhcpd.conf

set clientmac = binary-to-ascii(16,8,":",substring(hardware,1,6));

решение1

Это зависит от того, что вы используете для анализа. Можно утверждать, что полностью допустимо опускать префиксные нули, и именно так мы поступаем большую часть времени, поскольку нет определения того, сколько цифр должно быть.

Однако если мы пропустим часть о том, является ли это недействительным и почему, и вместо этого спросим «Как мне получить это в нужном формате», мы сможем дать ответ.

В этом случаеУ isc есть статья в базе знаний об этом

Это не ошибка. Проблема в том, что функция двоичного кода в код ASCII ничего не «знает» о предполагаемом использовании преобразованных двоичных цифр, и включение начальных нулей при печати числовых значений является необычным.

Однако, проделав немного дополнительных манипуляций, все равно можно получить желаемый результат:

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)
);

(Он работает, преобразуя каждый «компонент» по отдельности, добавляя к нему начальный ноль (если он необходим), беря два последних шестнадцатеричных символа, а затем снова объединяя их все вместе.)

решение2

Это не ответ, но я просто хочу поделиться этой конфигурацией. Где DHCP-сервер устанавливает bootfile-name (опция 67) для содержания mac-адреса клиента. Но mac изменяется так, чтобы заканчиваться на 00или 80. Что является базовым mac-адресом коммутаторов Cisco. Поэтому независимо от того, какой mac использует коммутатор из своего пула mac-адресов. Он все равно получит тот же файл конфигурации.

# 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",
"");
}

Связанный контент