Autor Tema: ChaMAC 0.9-5 : Cambia todas tus MAC  (Leído 76761 veces)

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

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #140 en: 22-09-2013, 21:59 (Domingo) »
no por favor!
ya resulta bastante problematica que todas las apps se quieran llevar los oui a su terreno.
oui es una base de datos de uso general para todos.

un lugar para consultarla, una herramienta para gestionarla. eso seria lo ideal y optimizado.



vk496

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #141 en: 22-09-2013, 22:26 (Domingo) »
no por favor!
ya resulta bastante problematica que todas las apps se quieran llevar los oui a su terreno.
oui es una base de datos de uso general para todos.

un lugar para consultarla, una herramienta para gestionarla. eso seria lo ideal y optimizado.

Ya, pero hasta donde yo se, no hay ningún lugar genérico donde puedas acceder a ella, siempre tienes que ir basandote en otros (aircrack, nmap...)... (nose como son los de los demás, pero la OUI de nmap tenía 16000 entradas (la ultima tiene 18000)

Creo que tener una OUI en /usr/share/chamac y añadir alternativas si esa ruta esta vacía (hasta que usen -u, --update) es la mejor opción... no?

Salu2

Desconectado USUARIONUEVO

  • Colaborador
  • *
  • Mensajes: 14588
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #142 en: 22-09-2013, 22:40 (Domingo) »
Puedes hacerlo mejor aun..

una variable if , que busque en los sitios habituales donde suelen haber "oui"

si los hay..el primero que encuentre , que lo linkee dentro de  /usr/share/chamac


y punto , y si el sistema no tiene ningún oui , pues no hay mas.

antes tambiend eberas crear el directorio de destino del simbolico...


Código: [Seleccionar]
mkdir -p /usr/share/chamac
y luego si por ejemplo buscas el oiu de aircrack, que no recuerdo exactamente pero se que en

/etc


suele rondar ...

pues  ...

Código: [Seleccionar]
ln -s /etc/OUI.txt /usr/share/chamac/OUI.txt


o el plan b ...

una variable que antes de nada haga un ping a google ... y si hay respuesta pues ya sabes que hay internet...para tu primer caso.

si no hay internet linkeas.

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #143 en: 22-09-2013, 22:50 (Domingo) »
personalmente no linkaria, sino que buscaría en sitios predefinidos en cada ejecución

/usr/share/arp-scan/ieee-oui.txt
/etc/arpalert/oui.txt
/usr/share/btscanner/oui.txt
/usr/share/ntop/oui.txt
/usr/share/ocsinventory-reports/files/oui.txt
/usr/lib/python2.6/dist-packages/netaddr/eui/oui.txt
/usr/lib/python2.7/dist-packages/netaddr/eui/oui.txt
/usr/share/pyshared/netaddr/eui/oui.txt
/usr/lib/python3/dist-packages/netaddr/eui/oui.txt

son algunos ejemplos. no todos son importantes pero otros como el modulo netaddr de python, pues se puede realmente contar con ellos

Desconectado USUARIONUEVO

  • Colaborador
  • *
  • Mensajes: 14588
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #144 en: 22-09-2013, 22:52 (Domingo) »
alguien que use un script de cambiar macs , es que usa mas apps del tipo , yo apostaría mas por el oui de aircrack-ng .. en /etc

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #145 en: 22-09-2013, 22:58 (Domingo) »
alguien que use un script de cambiar macs , es que usa mas apps del tipo , yo apostaría mas por el oui de aircrack-ng .. en /etc

...que es justamente el que no encuentro para poner en la lista de ejemplos xD


EDIT:
ahhh, ya lo tengo...

Citar
$ cat `which airodump-ng-oui-update`
#!/bin/sh

CURL=`which curl 2>/dev/null`
WGET=`which wget 2>/dev/null`
OUI_DOWNLOAD_URL="http://standards.ieee.org/develop/regauth/oui/oui.txt"

OUI_PATH0="/etc/aircrack-ng"
OUI_PATH1="/usr/local/etc/aircrack-ng"
OUI_PATH2="/usr/share/aircrack-ng"
if [ -d "$OUI_PATH0" ]; then
   OUI_PATH="$OUI_PATH0"
elif [ -d "$OUI_PATH1" ]; then
   OUI_PATH="$OUI_PATH1"
elif [ -d "$OUI_PATH2" ]; then
   OUI_PATH="$OUI_PATH2"
else
   # default
   OUI_PATH="$OUI_PATH0"
fi

AIRODUMP_NG_OUI="${OUI_PATH}/airodump-ng-oui.txt"
OUI_IEEE="${OUI_PATH}/oui.txt"
USERID=""


# Make sure the user is root
if [ x"`which id 2> /dev/null`" != "x" ]
then
   USERID="`id -u 2> /dev/null`"
fi

if [ x$USERID = "x" -a x$UID != "x" ]
then
   USERID=$UID
fi

if [ x$USERID != "x" -a x$USERID != "x0" ]
then
   echo Run it as root ; exit ;
fi


if [ ! -d "${OUI_PATH}" ]; then
   mkdir -p ${OUI_PATH}
fi

if [ ${CURL} ] || [ ${WGET} ]; then
   # Delete previous partially downloaded file (if the script was aborted)
   rm -f ${OUI_IEEE} >/dev/null 2>/dev/null

   # Download it
   echo "
  • Downloading IEEE OUI file..."


   if [ ${WGET} ]; then
      ${WGET} ${OUI_DOWNLOAD_URL} -O ${OUI_IEEE} >/dev/null 2>/dev/null
   else
      ${CURL} -L ${OUI_DOWNLOAD_URL} > ${OUI_IEEE} 2>/dev/null
   fi

   if [ "${?}" -ne 0 ]; then
      echo "
  • Error: Failed to download OUI list, aborting..."

      exit 1
   fi

   # Parse the downloaded OUI list
   echo "
  • Parsing OUI file..."


   # Keep the previous file
   if [ -f "${OUI_DOWNLOADED}" ]; then
      mv ${AIRODUMP_NG_OUI} ${OUI}-old
   fi

   # Parse it
   grep "(hex)" ${OUI_IEEE} | sed 's/^[ \t]*//g;s/[ \t]*$//g' > ${AIRODUMP_NG_OUI}
   if [ "${?}" -ne 0 ]; then
      echo "
  • Error: Failed to parse OUI, aborting..."

      exit 1
   fi

   # Cleanup
   rm -f ${OUI_IEEE}

   echo "
  • Airodump-ng OUI file successfully updated"

else
   if [ -f "${OUI}" ]; then
      echo "
  • Please install curl or wget to update OUI list"

   else
      echo "
  • Please install curl or wget to install OUI list"

   fi
   exit 1
fi

exit 0



por tanto:

/etc/aircrack-ng/airodump-ng-oui.txt
/usr/local/etc/aircrack-ng/airodump-ng-oui.txt
/usr/share/aircrack-ng/airodump-ng-oui.txt

respecto a la heterogeneidad de los oui databases usadas por diferentes softwares, interesante leer esto:
http://hackerific.net/2010/04/04/oui/

la base de datos mas completa sigue siendo la de Wireshark, cómo no:
http://anonsvn.wireshark.org/wireshark/trunk/manuf

PD: algunos fabricantes están identificados por 16/32/36/40 bits:
00:1B:C5:00:00:00/36
09-00-2B-03-00-00/32
20-52-45-43-56-00/40
33-33-00-00-00-00/16
« Última modificación: 22-09-2013, 23:38 (Domingo) por alister »

vk496

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #146 en: 23-09-2013, 17:55 (Lunes) »
alguien que use un script de cambiar macs , es que usa mas apps del tipo , yo apostaría mas por el oui de aircrack-ng .. en /etc

...que es justamente el que no encuentro para poner en la lista de ejemplos xD


EDIT:
ahhh, ya lo tengo...

Citar
$ cat `which airodump-ng-oui-update`
#!/bin/sh

CURL=`which curl 2>/dev/null`
WGET=`which wget 2>/dev/null`
OUI_DOWNLOAD_URL="http://standards.ieee.org/develop/regauth/oui/oui.txt"

OUI_PATH0="/etc/aircrack-ng"
OUI_PATH1="/usr/local/etc/aircrack-ng"
OUI_PATH2="/usr/share/aircrack-ng"
if [ -d "$OUI_PATH0" ]; then
   OUI_PATH="$OUI_PATH0"
elif [ -d "$OUI_PATH1" ]; then
   OUI_PATH="$OUI_PATH1"
elif [ -d "$OUI_PATH2" ]; then
   OUI_PATH="$OUI_PATH2"
else
   # default
   OUI_PATH="$OUI_PATH0"
fi

AIRODUMP_NG_OUI="${OUI_PATH}/airodump-ng-oui.txt"
OUI_IEEE="${OUI_PATH}/oui.txt"
USERID=""


# Make sure the user is root
if [ x"`which id 2> /dev/null`" != "x" ]
then
   USERID="`id -u 2> /dev/null`"
fi

if [ x$USERID = "x" -a x$UID != "x" ]
then
   USERID=$UID
fi

if [ x$USERID != "x" -a x$USERID != "x0" ]
then
   echo Run it as root ; exit ;
fi


if [ ! -d "${OUI_PATH}" ]; then
   mkdir -p ${OUI_PATH}
fi

if [ ${CURL} ] || [ ${WGET} ]; then
   # Delete previous partially downloaded file (if the script was aborted)
   rm -f ${OUI_IEEE} >/dev/null 2>/dev/null

   # Download it
   echo "
  • Downloading IEEE OUI file..."


   if [ ${WGET} ]; then
      ${WGET} ${OUI_DOWNLOAD_URL} -O ${OUI_IEEE} >/dev/null 2>/dev/null
   else
      ${CURL} -L ${OUI_DOWNLOAD_URL} > ${OUI_IEEE} 2>/dev/null
   fi

   if [ "${?}" -ne 0 ]; then
      echo "
  • Error: Failed to download OUI list, aborting..."

      exit 1
   fi

   # Parse the downloaded OUI list
   echo "
  • Parsing OUI file..."


   # Keep the previous file
   if [ -f "${OUI_DOWNLOADED}" ]; then
      mv ${AIRODUMP_NG_OUI} ${OUI}-old
   fi

   # Parse it
   grep "(hex)" ${OUI_IEEE} | sed 's/^[ \t]*//g;s/[ \t]*$//g' > ${AIRODUMP_NG_OUI}
   if [ "${?}" -ne 0 ]; then
      echo "
  • Error: Failed to parse OUI, aborting..."

      exit 1
   fi

   # Cleanup
   rm -f ${OUI_IEEE}

   echo "
  • Airodump-ng OUI file successfully updated"

else
   if [ -f "${OUI}" ]; then
      echo "
  • Please install curl or wget to update OUI list"

   else
      echo "
  • Please install curl or wget to install OUI list"

   fi
   exit 1
fi

exit 0



por tanto:

/etc/aircrack-ng/airodump-ng-oui.txt
/usr/local/etc/aircrack-ng/airodump-ng-oui.txt
/usr/share/aircrack-ng/airodump-ng-oui.txt

respecto a la heterogeneidad de los oui databases usadas por diferentes softwares, interesante leer esto:
http://hackerific.net/2010/04/04/oui/

la base de datos mas completa sigue siendo la de Wireshark, cómo no:
http://anonsvn.wireshark.org/wireshark/trunk/manuf

PD: algunos fabricantes están identificados por 16/32/36/40 bits:
00:1B:C5:00:00:00/36
09-00-2B-03-00-00/32
20-52-45-43-56-00/40
33-33-00-00-00-00/16


La verdad es que me atrae mas la lista de Wireshark... es una base de datos muuy completa (con 23000 MAC, mas que de ieee.org  ;D)

El problema esta en que no sé como procesar una MAC entera y buscar alguna coincidencia en la lista, pues en la de ieee solo estaban los primeros 24 bits, por tanto, solo tenía que recortar los primeros 24bits de la MAC original y compararla con la lista (en el caso de IEEE.org usaba esto):

Código: [Seleccionar]
cat /usr/share/chamac/oui.txt | grep "(hex)" -n | tr -d '(hex)' | awk '{ gsub("-", ":", $2) ; print }' | grep -i $(echo $MAC_ORIGINAL | cut -d ":" -f 1-3) | cut -d " " -f 3-22
Bastante sencillo, sin embargo, con esta lista sé como "preparar el texto" para poder usarlo, pero no sé como puedo indicar una MAC entera (sin recortarla), y que me busque si hay alguna que coincida (tanto si es en 24 bits como si fuese en mas)....

Hasta ahora, el codigo que tengo para obtener una lista de whireshark que pueda ser interpretada fácilmente es este:

Código: [Seleccionar]
cat manuf | grep -v ^"#" |awk '{gsub(/[ ]+/," ")}1' | sed 's/\t/ /g' | awk '{ gsub("-", ":", $1) ; print }'
No se si me he explicado bien...


Resumiendo:

Si tengo un Cisco que tienen las MAC F0:29:29, como consigo que me lo muestro si introduzco la MAC completa (F0:29:29:c6:a4:22 por ejemplo) ?  ???

Salu2

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #147 en: 23-09-2013, 18:20 (Lunes) »
El problema esta en que no sé como procesar una MAC entera y buscar alguna coincidencia en la lista, pues en la de ieee solo estaban los primeros 24 bits, por tanto, solo tenía que recortar los primeros 24bits de la MAC original y compararla con la lista (en el caso de IEEE.org usaba esto):
el parsing es mas complejo pero no es tan dificil si sabes usar el "anchor" de inicio de linea de grep
Citar
Bastante sencillo, sin embargo, con esta lista sé como "preparar el texto" para poder usarlo,
pues eso, que no te consigues figurarte la forma de parsearlo. pero si te exprimes las neuronas los sacas.

lo prmero es normalizar los separadores. personalmente optaria por eliminar todas las ocurrencias de ":" y de "-", que ambas son toleradas en el fichero de wireshark.

con eso, te quedas simplemente con los datos relevantes.

luego, usando grep, separaria temporalmente el fichero padre en varios ficheros:

- un fichero de macs con especificacion de 16 bits, buscados por la expresion "/16". tomas los 4 primeros caracteres de cada linea, y ya lo tienes.
- un fichero de macs con especificacion de 32 bits, buscados por la expresion "/32". tomas los 8 primeros caracteres de cada linea, y ya lo tienes.
- un fichero de macs con especificacion de 36 bits, buscados por la expresion "/36". tomas los 9 primeros caracteres de cada linea, y ya lo tienes.
- un fichero de macs con especificacion de 40 bits, buscados por la expresion "/40". tomas los 10 primeros caracteres de cada linea, y ya lo tienes.
- por ultimo, un fichero de macs sin especificacion de mascara. es decir, unos 24 bits relevantes de toda la vida, las tres primeras parejas de las macs: 123456xxxxxx. este tendria mas truco, tendrias que hacer una búsqueda negativa del caracter "/", es decir, las lineas que no tienen la barra, porque no estan especificando máscaras diferentes a la clásica de 24 bits. cuando ya tienes esas lineas, puedes tomar los primeros seis caracteres como valor, y ya lo tienes.

ahora que tienes estas 5 sublistas, las concatenas, empezando por la que mayor máscara tiene (las de 40), para que la busqueda mas exacta sea la primera en salir (algunos registros son hijos de otros, por eso te digo que tienes que buscar de mas especifico a mas general. tienes un caso muy claro de lo que te digo en el registro llamado
"00:1B:C5   IeeeRegi # IEEE Registration Authority"
donde los siguientes registros son claramente "subtipos" que comparten los seis primeros caracteres, pero que mejoran la clasificacion añadiendo más caracteres.

lo que te resultará mas complicado es tomar el nombre de fabricante detŕas de la almohadilla #, y en caso de que no exista (algunas lineas no tienen), tomar el nombre corto de wireshark. para ese tipo de trabajo de procesamiento inteligente de texto, necesitas algo mas de conocimiento de sed y de awk, los procesadores de flujos texto de gnu por excelencia. tambien podrias usar un pequeño apoyo en perl, que tiene funciones muy buenas para estos casos

si procesas el archivo de esa manera, ya casi lo tienes.
EDIT:
supon que ya tienes el fichero de macs parseado tal que asi:

0001020304    fabricante0
12345678       fabricante1_familia1
12345690       fabricante1_familia2
123456          fabricante1_general
789012          fabricante2

sabemos que las macs tienen 40,36,32,24,16 bits relevantes.

para buscar la mac "00:01:02:03:04:05", solo tienes que:
tomar los 40 primeros bits (10 digitos) y buscar en la lista con egrep:
^0001020304

(donde ^ es el anchor de inicio de linea, para evitar coincidencias falsas en cosas que no son el inicio exacto de la mac)

si no encuentras coincidencias, buscas coincidencias por 36 bits (que son 9 caracteres), o sea, quitas un caracter mas y sigues buscando:
^000102030
 
asi hasta que encuentres una coincidencia en las listas.

dificil, verdad? :)

con bash, si lo es, un poco. muchas operaciones intermedias y archivos temporales necesarios.
si te parece muy rallante, lo mejor que puedes hacer es tomar la lista de xx:xx:xx, procesarla manualmente, incorporporarla junto al script y listo. los registros de longitudes diferentes a XX:XX:XX son pocos y puedes descartarlos sin que suponga un grave penalty


« Última modificación: 23-09-2013, 19:04 (Lunes) por alister »

vk496

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #148 en: 23-09-2013, 20:45 (Lunes) »
Gracias por la info!

Ya tengo parseado el texto para que muestre TODAS las MAC sin ningun digito tipo ":", "-", "/xx" separadas solo con espacios.

Mi idea era poder comparar la MAC (también sin dígitos) con la lista, y si no hay coincidencia, que quite un dígito del final de la MAC, y lo vuelva a comparar hasta encontrar una coincidencia y salir del "bucle"... y si la MAC llega a 0 sin encontrar nada, entonces definir el vendor como "unknow" y salir del "bucle"... Serviría este método? me parece que es mas sencillo... no?

Lo que no se es como hacer "algo" que vaya quitando un carácter del final, nunca me he topado con algo así...  :-\

Salu2

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #149 en: 23-09-2013, 20:49 (Lunes) »
Gracias por la info!

Ya tengo parseado el texto para que muestre TODAS las MAC sin ningun digito tipo ":", "-", "/xx" separadas solo con espacios.

Mi idea era poder comparar la MAC (también sin dígitos) con la lista, y si no hay coincidencia, que quite un dígito del final de la MAC, y lo vuelva a comparar hasta encontrar una coincidencia y salir del "bucle"... y si la MAC llega a 0 sin encontrar nada, entonces definir el vendor como "unknow" y salir del "bucle"... Serviría este método? me parece que es mas sencillo... no?

Lo que no se es como hacer "algo" que vaya quitando un carácter del final, nunca me he topado con algo así...  :-\

Salu2

exacto. esa es la mitad facil que te he descrito en mi descripción funcional anterior.
la parte dificil, pues te la saltas y ya esta xD

en bash puedes usar ciertas expresiones para tomar solo las primeras letras de una cadena
http://tldp.org/LDP/abs/html/string-manipulation.html

fijate en ${string:position:length}
« Última modificación: 23-09-2013, 20:51 (Lunes) por alister »

vk496

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #150 en: 23-09-2013, 23:01 (Lunes) »
Gracias por la info!

Ya tengo parseado el texto para que muestre TODAS las MAC sin ningun digito tipo ":", "-", "/xx" separadas solo con espacios.

Mi idea era poder comparar la MAC (también sin dígitos) con la lista, y si no hay coincidencia, que quite un dígito del final de la MAC, y lo vuelva a comparar hasta encontrar una coincidencia y salir del "bucle"... y si la MAC llega a 0 sin encontrar nada, entonces definir el vendor como "unknow" y salir del "bucle"... Serviría este método? me parece que es mas sencillo... no?

Lo que no se es como hacer "algo" que vaya quitando un carácter del final, nunca me he topado con algo así...  :-\

Salu2

exacto. esa es la mitad facil que te he descrito en mi descripción funcional anterior.
la parte dificil, pues te la saltas y ya esta xD

en bash puedes usar ciertas expresiones para tomar solo las primeras letras de una cadena
http://tldp.org/LDP/abs/html/string-manipulation.html

fijate en ${string:position:length}

Gracias por la info, me ha servdo, y mucho ;D

Hice un fragmento de codigo sobre el cual me basare para implementar todo lo comentado sobre las OUI hasta ahora (es un modelo de referencia):

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

MAC_O="$(cat /sys/class/net/eth0/address|tr -d ':')"
MAClist=$(cat ~/manuf | grep -v ^"#" |awk '{gsub(/[ ]+/," ")}1' | sed 's/\t/ /g' | awk '{ gsub("-", "", $1); gsub(":", "", $1); gsub("/44", "", $1); gsub("/40", "", $1); gsub("/36", "", $1); gsub("/32", "", $1); gsub("/25", "", $1); gsub("/24", "", $1); gsub("/16", "", $1);  print }')
i=12

while [ $i -gt 5 ]; do
if echo "$MAClist"|grep -i ^${MAC_O:0:i}&>/dev/null; then
MACvendor=$(echo "$MAClist"|grep -i ^${MAC_O:0:i}|cut -d " " -f 4-22)
echo MAC encontrada!
echo -e "\e[1;35m$MACvendor\e[0m"
break
fi

if [ $i -eq 6 ]; then
echo unknown
fi

let i=i-1
done

Hace su función correctamente, pero no encuentro la manera de poder acelerarlo... Tal cual está, realiza la comprobación X veces hasta encontrar el vendor (lo cual sería muuuuuyy lento si tuviesemos varias tarjetas de red)... hay alguna forma de poder corregir eso?¿

Salu2

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #151 en: 23-09-2013, 23:22 (Lunes) »
excelente trabajo con maclist. has tenido mucha paciencoa con el encadenamiento. incluso a mi me ha costado entenderlo, y eso que me especializo en parsing xD

la manera mas sencilla de aligerar esto es precomputando todo lo que se pueda, y evitando la duplicidad.

guarda maclist en un fichero y úsalo siempre que esté. reconstrúyelo única y exclusivamente cuando no esté.

eso nos aligera la carga bastante.

ahora veamos qué se puede hacer para arañar tiempo de proceso en la búsqueda.

estas duplicando innecesariamente grep.
Código: [Seleccionar]
if echo "$MAClist"|grep -i ^${MAC_O:0:i}&>/dev/null; then
MACvendor=$(echo "$MAClist"|grep -i ^${MAC_O:0:i}|cut -d " " -f 4-22)

ejecútalo solo una vez, luego guarda su salida en una variable.
nmediatamente después, asigna el valor de la variable $? a otra variable temporal.
la variable $? guarda el exit code del último comando ejecutado.
si no quieres perder este valor de vista, tienes que guardarlo inmediatamente despues de consultarlo,
porque en la proxima ejecucíón de cualquier comando, se reemplaza de nuevo.

Código: [Seleccionar]
SEARCHING_RESULT=$(echo "$MAClist" | grep -i ^${MAC_O:0:i} )
SEARCHING_EXITCODE=$?

y ahora, si grep te devuelve algo diferente de cero, quiere decir que no ha encontrado nada.
en caso contrario (CERO), tomas la cadena SEARCHING_RESULT y la procesas, sin sobrecargar el sistema con llamadas a grep
Código: [Seleccionar]
if [[ "$SEARCHING_EXITCODE" == "0" ]]; do
  MACvendor=$(echo "$SEARCHING_RESULT" | cut -d " " -f 4-22)
  echo ¡MAC encontrada!
  echo -e "\e[1;35m${MACvendor}\e[0m"
  break
fi

PD: fíjate en esta linea:
echo -e "\e[1;35m${MACvendor}\e[0m"
he protegido la variable $MACvendor entre {llaves}, porque está tocando con otros caracteres que no son espacios.
en caso de no protegerse las variables cuando se tocan con otros textos, eso podria llevar a bash a confundirse y a tratar de imprimir el valor de variables que no existen, como por ejemplo:
$MACvendor\
$MACvendor\e
$MACvendor\e[
$MACvendor\e[0
$MACvendor\e[0m
ese efecto no deseado se evita protegiendo la variable con llaves.

PPD: aunque personalmente odio hacer esto y prefiero genrar un código más pesado pero más explicativo, tambien puedes tomar un poco de atajo y evaluar la variable $? directamente, sin pasar por variables temporales. eso si, logicamente, tienes que hacerlo INMEDIATAMENTE DESPUES de ejecutar grep, porque luego el contenido de la variable se va para no volver:

Código: [Seleccionar]
SEARCHING_RESULT=$(echo "$MAClist" | grep -i ^${MAC_O:0:i} )
# SEARCHING_EXITCODE=$? ## comprimiendo...
# if [[ "$SEARCHING_EXITCODE" == "0" ]]; do ## comprimiendo...
if [[ "$?" == "0" ]]; do ## las dos lineas anteriores se convierten en esta. per queda menos explicativo y a la larga se hace pesado.
  MACvendor=$(echo "$SEARCHING_RESULT" | cut -d " " -f 4-22)
  echo ¡MAC encontrada!
  echo -e "\e[1;35m${MACvendor}\e[0m"
  break
fi
« Última modificación: 23-09-2013, 23:42 (Lunes) por alister »

Desconectado geminis_demon

  • Colaborador
  • *
  • Mensajes: 2382
  • Prácticas precisas precisan práctica
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #152 en: 24-09-2013, 01:56 (Martes) »
Citar
PD: fíjate en esta linea:
echo -e "\e[1;35m${MACvendor}\e[0m"
he protegido la variable $MACvendor entre {llaves}, porque está tocando con otros caracteres que no son espacios.
en caso de no protegerse las variables cuando se tocan con otros textos, eso podria llevar a bash a confundirse y a tratar de imprimir el valor de variables que no existen, como por ejemplo:
$MACvendor\
$MACvendor\e
$MACvendor\e[
$MACvendor\e[0
$MACvendor\e[0m
ese efecto no deseado se evita protegiendo la variable con llaves.

Eso no lo sabía. me lo apunto  ;)

Aunque en ese caso en concreto en realidad no hay problema, porque el caracter que hay después de la variable es un caracter especial (\) y como las variables no pueden contener carácteres especiales, bash entiende que ahí termina la variable.

Pero si que me he encontrado con ese problema en algunas ocasiones, y como no sabía que podía protegerlo con las llaves, lo solucionaba así:
Código: [Seleccionar]
echo -e "\e[1;35m$(echo $MACvendor)\e[0m"
 >:D

La luz cree que viaja más rápido que cualquier otra cosa, pero se equivoca; da lo mismo lo rápido que pueda viajar, porque al final, la luz descubre que la oscuridad ha llegado antes que ella, y la está esperando.

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #153 en: 24-09-2013, 02:12 (Martes) »
para matarte a collejas, geminis xD
si, el caso del código de vk no genera problema, pero para no liarle más he tratado de no ser tan específico y transmitir la idea general, que es tener el buen hábito de proteger las variables.

no siempre es buena idea protegerlas con "comillas" porque eso se interpreta como un parametro suelto, y realmente algunas veces quieres juntar una variable con una constante, para que sean un solo parámetro.

por ejemplo, esta manera de proteger variables fallaria:

tar cjvf "$RUTA_VARIABLE"/archivo.tar.gz    otra/ruta/constante

porque muchas versiones de bash le pasaran a tar la idea de que "$RUTA_VARIABLE" es un parametro y que /archivo.tar.gz es otro parametro diferente.

esto me dió quebraderos de cabeza cuando aprendía bash.

solucion? lo que comentaba. protegeras entre llaves:

tar cjvf ${RUTA_VARIABLE}/archivo.tar.gz    otra/ruta/constante

y si tienes dudas que ${RUTA_VARIABLE} pueda llegar a contener espacios en algun momento ,pero quieres que sea toda la ruta tratada como un parametro, entonces si que pones las comillas, pero envolviendolo TODO, no solo la variable:

tar cjvf "${RUTA_VARIABLE}/archivo.tar.gz"    otra/ruta/constante

por eso vereis que en mi código añado de forma compulsiva las variables de esta "${manera}", siempre, para no tener problemas de escape o sobre-expansion de variables.

vk496

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #154 en: 24-09-2013, 22:07 (Martes) »
Gracias @alister por tus recomendaciones, he estado toqueteando e intentandoresucir el código...

He probado a usar lo que me dejaste, pero no he conseguido que el filtro sea rápido, me sigue funcionando igual que lo que puse yo al principio (posiblemente lo este haciendo mal)

Lo que si que me si cuenta, es que cuando coloco $SEARCHING_RESULT fuera del bucle, el análisis es instantáneo, pero por alguna razón, no llega a encontrar nunca la MAC, sin embargo, cuando la meto dentro, aunque funcione lento, la encuentre sin problemas...

Supongo que encontrare la forma de hacerme con el código correcto en algunos días (malditos exámenes, siempre jodiendo! :P )

Salu2

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #155 en: 25-09-2013, 01:11 (Miércoles) »
no, no creo que lo hagas mal, incluso aunque hayamos reducido, estamos lanzando un grep sobre una buena pedazo de base de datos.
vamos, que un camino de rosas no va a ser. bash tiene sus limitaciones.
$SEARCHING_RESULT fuera del bucle solo se ejecutaria una vez y fallaria siempre. piénsalo, intenta emularlo mentalmente, comando por comando.
cuando tengas una percepcion sensorial mas completa de las estructuras de control, verás esas cosas mas rapidamente.

no pases penas porque el script va lento, es un script en bash y tiene estas limitaciones.
si te sirve de consuelo, hace dos años programé una especie de escaner y evaluador de seguridad automático de cámaras IP, que tarda la reostia en cada ejecución debido a la enoooorme cantidad de procesos y calculos que desparrama.

vk496

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #156 en: 25-09-2013, 22:25 (Miércoles) »
Hoy, mientras mi profesor de historia articulaba palabras sin ningun sentido, me vino una inspiración para conseguir acelerar el proceso de busqueda del Vendor, aquí lo dejo..  ;D

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


MAC_O="002233445566"
MAC_A="001122334455"

MAClist=$(cat ~/manuf | sed 's/\t/ /g' | awk '{ gsub("-", "", $1); gsub(":", "", $1); gsub("/44", "", $1); gsub("/40", "", $1); gsub("/36", "", $1); gsub("/32", "", $1); gsub("/25", "", $1); gsub("/24", "", $1); gsub("/16", "", $1); gsub(/[ ]+/," "); print }')
i=6

while [ $i -le 12 ]; do

SEARCHING_RESULT_o=$(echo "$MAClist" |grep -i ^${MAC_O:0:i}|perl -pi -e 's/#/-/g')
SEARCHING_EXITCODE_o=$?
lineas_o=$(echo "$SEARCHING_RESULT_o" | grep -c "")
if [ "$lineas_o" = 1 ]; then
if [ "$SEARCHING_EXITCODE_o" = 0 ]; then
FABRICANTE_MAC_O="$(echo "$SEARCHING_RESULT_o"|cut -d " " -f 2-22))"
echo $FABRICANTE_MAC_O
fi
fi

SEARCHING_RESULT=$(echo "$MAClist" |grep -i ^${MAC_A:0:i}|perl -pi -e 's/#/-/g')
SEARCHING_EXITCODE=$?
lineas=$(echo "$SEARCHING_RESULT" | grep -c "")
if [ "$lineas" = 1 ]; then
if [ "$SEARCHING_EXITCODE" = 0 ]; then
FABRICANTE_MAC_FALSA=$(echo "$SEARCHING_RESULT"|cut -d " " -f 2-22)
echo $FABRICANTE_MAC_FALSA
break
fi
fi

if [ $i -eq 12 ]; then
echo unknown
fi

let i=i+1
done

Aunque no es instantaneo, la velocidad aumenta muy notablemente.

Salu2

alist3r

  • Visitante
Re: ChaMAC 0.7 : Cambia todas tus MAC
« Respuesta #157 en: 26-09-2013, 11:53 (Jueves) »
ole, con perl incrustado y todo!
felicidades!
tengo que probarlo con calma, pero confio en tu palabra :D

vk496

  • Visitante
Re: ChaMAC 0.8 : Cambia todas tus MAC
« Respuesta #158 en: 26-09-2013, 18:44 (Jueves) »
Bueno, aquí os dejo la 0.8 con la principal novedad las OUI (lo de mostrar el fabricante)...

Jamas creería que algo tan simple de unas cuantas lineas llegaría a ser tan complejo... jajajjaja  ;D

Salu2


alist3r

  • Visitante
Re: ChaMAC 0.8 : Cambia todas tus MAC
« Respuesta #159 en: 26-09-2013, 18:48 (Jueves) »
bienvenido al mundo de bash xDDD

//FINAL Y MÁS DOS RESPUESTAS