[MASOCH-L] Algoritimo para validar MAC
Lao DanTong
danton at inexo.com.br
Mon May 23 19:35:32 -03 2005
On Mon, 23 May 2005, scsantos at unigranrio com br wrote:
> Vamos lá Lao,
>
> se vc digitar uma regra de iptables com o ip 192.168.0.1 e o MAC 00:00:00:00
> o iptables irá gerar um erro e criará a regra somente com o IP ignorando o
> MAC.
>
> Gostaria que antes de gerar a regra verificar (com uma aplicação) se a
> sintaxe do MAC está correta.
>
> Foi agora?
só isso? isso não é validar.
> Tem como fazer isso com perl como disse um colaborador da lista, eu só quero
> entender o algoritimo.
>
> Usando perl:
> ifconfig | grep "eth0" | awk '{print $5}' | perl -ne
> '(/([0-9a-f]{1,2}:){5}[0-9a-f]{1,2}/i && print "OK\n") || print "ERRO\n"'
humm, isso não faz o que você quer porque 00:00:00:00:00:00 passa por esse
teste. além disso o jeito com que isto está feito é muito complicado, usa grep,
awk e perl, que são os três processadores de expressões regulares.
eu faria assim:
mac=$(/sbin/ip link show $interface |
sed -n 's/^.* \(\([0-9a-f]\{2\}:\)\{5\}[0-9a-f]\{2\}\) .*$/\1/p')
test "$mac" || deu_pau 1B
test "$mac" = "00:00:00:00:00:00" && deu_pau 2
test "$mac" = "ff:ff:ff:ff:ff:ff" && deu_pau 3
iptables....
o sed é meio feio, mas o que ele faz é arrancar da saída do comando 'ip link
show' o endereço MAC da interface. funcionaria também com ifconfig, mas os
comandos 'ip' são muito mais ricos e interessantes.
para entender o que é a espressão regular do sed, man 7 regex. tirando o
símbolo de escape \ e colocando na vertical fica mais fácil entendê-la:
(segue ascii-art, use fonte de passo fixo)
^ - início da linha
. - qualquer caracter
* - repetido indefinidamente
- espao em branco
( -- expressão agrupada
( --- expressão agrupada-----------------------+
[ ---------------------+ |
0 ---+ | |
- | de zero a nove | |
9 ---+ | dígitos hexadecimais |
a ---+ | | dois hexadecimais
- | de a até f | | seguidos de ':'
f ---+ | | ] ---------------------+
|
{ ---+ |
2 | repetidos duas vezes |
} ---+ |
: --- o símbolo ':' |
) ---------------------------------------------+
{ ---- daqui para a frente fica como exercício.
5
}
[
0
-
9
a
-
f
]
{
2
}
)
.
*
$
se houver outros endereços MAC inválidos, coloque outros comandos 'test' depois
da definição da variável mac.
deu_pau evidentemente é uma function para ser chamada caso o mac seja inválido.
More information about the masoch-l
mailing list