![detecção de MAC inválida do servidor dhcpd](https://rvso.com/image/768933/detec%C3%A7%C3%A3o%20de%20MAC%20inv%C3%A1lida%20do%20servidor%20dhcpd.png)
Na minha configuração DHCP, tenho um gancho de commit para salvar informações do dispositivo. Meu problema é que alguns endereços MAC se tornam inválidos:
8:7c:39:cf:b6:3f
- isso deve começar com zero
8:d0:b7:52:f9:68
- também isso
meudhcpd.conf
set clientmac = binary-to-ascii(16,8,":",substring(hardware,1,6));
Responder1
Depende do que você usa para analisá-lo, pode-se argumentar que é totalmente válido deixar de fora os prefixos zeros, e é isso que fazemos na maioria das vezes porque não há definição de quantos dígitos devem haver.
No entanto, se pularmos a parte sobre se isso é inválido e por que ou não e, em vez disso, perguntarmos "Como faço para obter isso no formato desejado", poderemos fornecer uma resposta.
Nesse casoisc tem um artigo da base de conhecimento sobre isso
Isso não é um bug. O problema é que a função binária para ascii não "sabe" nada sobre o uso pretendido dos dígitos binários convertidos e é incomum incluir zeros à esquerda ao imprimir valores numéricos.
No entanto, com um pouco de manipulação adicional ainda é possível obter o resultado desejado:
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)
);
(Ele opera convertendo cada "componente" separadamente, adicionando um zero à esquerda (caso seja necessário); pegando os dois últimos caracteres hexadecimais e concatenando-os novamente.)
Responder2
Esta não é uma resposta, mas quero apenas compartilhar esta configuração. Onde o servidor DHCP define o nome do arquivo de inicialização (opção 67) para conter o endereço MAC do cliente. Mas o mac foi alterado para terminar com 00
ou 80
. Qual é o endereço MAC básico dos switches Cisco. Portanto, independentemente de qual Mac o switch usa em seu conjunto de endereços MAC. Ele ainda obterá o mesmo arquivo de configuração.
# 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",
"");
}