Autor Tema: una ayuda con bash HELPPPP AYUDAMEEE !!! :)  (Leído 13691 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« en: 17-04-2015, 22:32 (Viernes) »
A VER si me explico como libro abierto ,o medio abierto.


estoy intentando mejorar el script que busca fabricantes por mac.


la idea es que el script se de cuenta , cuando el campo de busqueda NO SEA CORRECTO.

el campo de busquda es del tipo

xx:xx:xx

las x , estarian cubiertas por un charset estricto ...

A-F a-f 0-9

charset=ABCDEFabcdef0123456789


como hago para que por ejemplo si se escribe mal , o hay un caracter invalido , el script se de cuenta y avise.


por ejemplo

A1:2B:3Z    O    11::22::34    O  INCLUSO incompleto   00:11:2


creo que solo me falta este detallito ...a veces obtenemos como resultado fabricante desconocido ... por un error de sintaxis y busco evitar eso.



warcry

  • Visitante
Re:
« Respuesta #1 en: 17-04-2015, 22:44 (Viernes) »
Metele un if cuando valide, si encuentra un carácter no valido no le dejas continuar

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re:
« Respuesta #2 en: 17-04-2015, 22:57 (Viernes) »
Metele un if cuando valide, si encuentra un carácter no valido no le dejas continuar

si claro , un if ... ¿con que condicionante ?


la variable que llevara la mac escrita o lo que se va a buscar sera

"$preguntar"

entonces debe ser igua a xx:xx:xx

donde esas x, solo pueden ser caracteres validos del charset



Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #3 en: 17-04-2015, 23:02 (Viernes) »
no se si esto seria correcto  




Código: [Seleccionar]
charset="[A-F,0-9,a-f][A-F,0-9,a-f]:[A-F,0-9,a-f][A-F,0-9,a-f]:[A-F,0-9,a-f][A-F,0-9,a-f]"

if [ ! $preguntar = $charset ]; then
................
fi



este mini test , respoonde mal ,,,cuando la consulta esta bien ,con solo numeros..


Código: [Seleccionar]
#!/bin/bash

charset="[A-F,0-9,a-f][A-F,0-9,a-f]:[A-F,0-9,a-f][A-F,0-9,a-f]:[A-F,0-9,a-f][A-F,0-9,a-f]"
preguntar=11:22:33

if [ ! $preguntar = $charset ]; then
echo mal
else
echo bien
fi
« Última modificación: 17-04-2015, 23:06 (Viernes) por USUARIONUEVO »

warcry

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #4 en: 17-04-2015, 23:50 (Viernes) »
yo lo haria asi

Código: [Seleccionar]
#!/bin/bash
read n
echo "$n" > /root/Desktop/1.lst
if [ -z "`grep -i '[g-z]' /root/Desktop/1.lst`" ]; then
echo "hola"
fi

con read n leo la mac que meto a mano
la mando a un fichero con la segunda linea

luego le digo que mire que no contenga ningun caracter desde la g hasta la z y con el parametro -i le digo que no diferencie entre mayusculas y minusculas

si la mac es correcta devuelve hola, si no no hace nada finaliza.

lo que no me hago es como introducir los caracteres especiales

ejemplo 11:22:3ç 

la cedilla es una cosa muy tipica que metes cuando das a enter

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #5 en: 18-04-2015, 00:14 (Sábado) »
por eso pense a la inversa


definir que valores son los correctos y como

??:??:??

donde interrogantes = a algu nvalor de los permitidos ...si no , error.

warcry

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #6 en: 18-04-2015, 00:25 (Sábado) »
por eso pense a la inversa


definir que valores son los correctos y como

??:??:??

donde interrogantes = a algu nvalor de los permitidos ...si no , error.

negativo, porque con el grep con que haya un solo valor correcto en la cadena te va a dar un falso positvo

ejemplo

Código: [Seleccionar]
wifiway ~ # grep -i '[g-z]' /root/Desktop/1.lst
j1
wifiway ~ # grep -i '[\W]' /root/Desktop/1.lst
wifiway ~ # grep -i '[;]' /root/Desktop/1.lst
;
wifiway ~ # grep -i '[a-f/:/0-9]' /root/Desktop/1.lst
11:2ç
wifiway ~ # grep -i '[a-f/:/0-9]' /root/Desktop/1.lst
11;22
wifiway ~ # grep -i '[a-f/:/0-9]' /root/Desktop/1.lst
11:22
wifiway ~ #

en todas sale que existe la cadena, porque en todas hay un valor que cumple el criterio, el 1 esta permitido luego ya vale, por lo que tienes que hacerlo a la inversa, con que haya un carácter no valido directamente break y devuelves mensaje de error

lo que tendras que añadir a mano los caracteres especiales, porque yo no se incluirlos todos con una expresion  :-\

ejemplo

Código: [Seleccionar]
if [ -z "`grep -i '[g-zç;]' /root/Desktop/1.lst`" ]; then
ahi la cedilla y el punto y coma tambien son caracteres no validos, luego tendrias que ir añadiendo y luego tener cuidado de encasillar o con barra o contrabarra los caracteres con significado como $

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #7 en: 18-04-2015, 00:35 (Sábado) »
nope


por que se comprobara campo por campo


se verificara cada una de las X en la cadena...si una falla,pa casa.

comprobar primera x , segunda , las seis.

ademas de que entre cada dos valors, exista un   :   que divide los octetos.


verificar campos

12 45 78  cumplen todos con loa valores permitidos
4 6 comprobar son :


necesito que sea estricto ,por eso mismo de darle sin querer a un caracter raro ,,,

por eso intente

[A-F,a-f,0-9][A-F,a-f,0-9]:
« Última modificación: 18-04-2015, 00:39 (Sábado) por USUARIONUEVO »

warcry

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #8 en: 18-04-2015, 00:40 (Sábado) »
si lo quieres hacer asi, tendras que picar mas codigo

lees cadena la mandas a un archivo, con sed eliminas los dos puntos

y con cut vas aislando caracter por caracter y los vas mandando a temporales.

comparas los temporales con los caracteres validos y si alguno no coincide pues break.

pero como digo son muchas lineas de codigo

5.1

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #9 en: 18-04-2015, 00:45 (Sábado) »
A ver. no solo tienes que tener en cuenta que la posicion sea hexa o los dos puntos... piensa que en el primer byte de la mac, no todas las combinaciones hexadecimales están permitidas, justamente el otro día abri un post hablando de eso

https://foro.seguridadwireless.net/tecnologia-de-redes/pregunta-sobre-macadress/msg328926/?boardseen#new

por tanto no te vale con validar dígito a digito si es hexadecimal o los dos puntos,
Hablando con Geminis_Demon sobre el tema, aportó la solución más elegante creo yo....


Código: [Seleccionar]
if [ "$(echo "$MAC"|egrep -x "([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}")" ] && [ $(($(echo "ibase=16; ${MAC:0:2}"|bc)%2)) -eq 0 ]; then

echo "FORMATO CORRECTO"
else
echo "FORMATO INCORRECTO"
fi

Y USUARIO, tio, deja de toquetear que has cepillado el foro medía tarde  ;D ;D ;D
« Última modificación: 18-04-2015, 00:51 (Sábado) por 5.1 »

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #10 en: 18-04-2015, 00:51 (Sábado) »
Y USUARIO, tio, deja de toquetear que has cepillado el foro medía tarde  ;D ;D ;D

eso no lo he entendio ,jja , si me fui a dormir a las 5 de la tarde ,y este post lo abri de nohe ya.   ;D

warcry

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #11 en: 18-04-2015, 00:52 (Sábado) »
edito: estaba haciendolo mal

me voy pa la piltra que ya no doy pie con bola
« Última modificación: 18-04-2015, 00:55 (Sábado) por warcry »

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #12 en: 18-04-2015, 00:54 (Sábado) »
VENIA A LO MISMO ...


SIEMPRE DICE INCORRECTO


Código: [Seleccionar]
#!/bin/bash
MAC=11:22:3B
if [ "$(echo "$MAC"|egrep -x "([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}")" ] && [ $(($(echo "ibase=16; ${MAC:0:2}"|bc)%2)) -eq 0 ]; then

echo "FORMATO CORRECTO"
else
echo "FORMATO INCORRECTO"
fi

5.1

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #13 en: 18-04-2015, 00:56 (Sábado) »
Jejejeje, ya se lo diré a Geminis que me la paso el... Yo valido en mi script así :

Citar
validar_mac() {
let mac_correcta=1
if [ -z $MAC_A_VALIDAR ] || [ "${#MAC_A_VALIDAR}" != 17 ]
then
  let mac_correcta=1
  return
fi

for ((i=1; i<=17; i++)); do
    caracter=`expr substr $MAC_A_VALIDAR $i 1`
    case $i in
      3|6|9|12|15) if [ $caracter != ":" ]; then 
          let mac_correcta=1
          return
         fi 
         ;;
      2) if [[ $caracter =~ [ACEace02468] ]]; then
               let mac_correcta=0
                 else
               let mac_correcta=1
               return
                 fi
                 ;;
      1|4|5|7|8|10|11|13|14|16|17) if [[ $caracter =~ [A-Fa-f0-9] ]]; then
               let mac_correcta=0
                 else
               let mac_correcta=1
               return
                 fi
                 ;;
    esac
done
}

Y decía lo de toquetear pq el foro lleva media tarde con "Internal Server error"

warcry

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #14 en: 18-04-2015, 00:56 (Sábado) »
con tres sip

con seis nop

Código: [Seleccionar]
wifiway Desktop # sh 1.sh
00:1a:2b
FORMATO INCORRECTO
wifiway Desktop # sh 1.sh
00:1a:2b:00:00:01
FORMATO CORRECTO
wifiway Desktop #

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #15 en: 18-04-2015, 00:57 (Sábado) »
con tres sip

con seis nop

Código: [Seleccionar]
wifiway Desktop # sh 1.sh
00:1a:2b
FORMATO INCORRECTO
wifiway Desktop # sh 1.sh
00:1a:2b:00:00:01
FORMATO CORRECTO
wifiway Desktop #

normal , para buscar fabricante solo se necesitan 6 ,el resto , si añades de mas, que de error.

5.1

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #16 en: 18-04-2015, 01:00 (Sábado) »
LA funciones que os he puesto, tanto una como la otra son para una mac completa claro, si la quieres solo para tres pues hay que adaptarla un poco

Código: [Seleccionar]
#!/bin/bash


validar_mac() {
if [ -z $MAC_A_VALIDAR ] || [ "${#MAC_A_VALIDAR}" != 8 ]
then
  return 1
fi

for ((i=1; i<=8; i++)); do
    caracter=`expr substr $MAC_A_VALIDAR $i 1`
    case $i in
      3|6) if [ $caracter != ":" ]; then return 1;fi ;;
      2) if [[ $caracter =~ [ACEace02468] ]]; then continue;else return 1; fi ;;
      1|4|5|7|8) if [[ $caracter  =~ [A-Fa-f0-9] ]]; then continue; else return 1; fi ;;
    esac
done
return 0
}

MAC_A_VALIDAR=$1
if validar_mac
then
  echo "CORRECTA"
else
  echo "ERROR EN EL FORMATO DE LA MAC"
fi

« Última modificación: 18-04-2015, 01:21 (Sábado) por 5.1 »

Desconectado USUARIONUEVO

  • Moderador
  • *
  • Mensajes: 14480
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #17 en: 18-04-2015, 01:26 (Sábado) »
en la de geminis cambiar el 5 por un 2 y ya valida con los 6 primeros charts  >:(



vk496

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #18 en: 18-04-2015, 01:28 (Sábado) »
Quieres validar toda la MAC o solo los primeros bytes de la MAC?

Porque si nos metemos en materia, también hay MAC con mas bytes de lo habitual (eso si, son raras de encontrar)

@USUARIONUEVO

Con mi primer script, Chamac, me suena haber implementado eso. A lo mejor te sirve.

Si no, lo que se me ocurre es:

Una función que avance carácter por carácter buscando que solo sean 0-9A-F y tenga en cuenta que la [ posición_indice_actual MOD 3] tiene que ser igual a ":".

Salu2

5.1

  • Visitante
Re: una ayuda con bash HELPPPP AYUDAMEEE !!! :)
« Respuesta #19 en: 18-04-2015, 01:31 (Sábado) »
en la de geminis cambiar el 5 por un 2 y ya valida con los 6 primeros charts  >:(




Y en una jodida linea, que artista :)