[MASOCH-L] Algoritimo para validar MAC

Lao DanTong danton at inexo.com.br
Mon May 23 19:35:32 BRT 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