Introducción bash, paso 2 : variables, expresión regular (grep) y pipe (Pagina 1) / Scripts y programación / Foro Wifi-libre.com

El libre pensamiento para un internet libre

No estas registrado.     

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

#1 07-04-2015 02:26:26

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 2,053

Introducción bash, paso 2 : variables, expresión regular (grep) y pipe

Introducción a bash

bash2_1.jpg

Paso 2 : variables, expresiones regulares y el comando "grep"

Seguimos nuestro cursillo.
En nuestro "primer paso" (cf. Introducción a bash - paso 1: Bases, echo y "Hola mundo") hemos aprendido a realizar nuestro primer script en bash.

#!/bin/bash
# primer script en bash copyleft GPL v3 @ wifi.libre.com
echo "Hola mundo"  # zona para comentarios

De paso hemos visto lo que era "bash", lo que era un scriptn bash, como redactarlo lo con su "bang line", como ejecutarlo y hemos conocido al comando "echo" que sirve a escribir en consola.
  Hoy vamos a hablar de dos nociones fundamentales en programación : las variables y las expresiones regulares.
Y acabaremos familiarizándonos con el comando "grep" que permite usar las expresiones regulares Así que con el pipe que nos permite encadenar dos ordenes
  Variables y expresiones regulares son palabras que pueden asustar un poco pero veréis que es muy fácil. wink

Variables

  Creo que la imagen era de 1camaron1 en uno de sus cursos para principiantes en bash : Una variable es como un cajón
     En el cual ponemos cosas.
Una vez que hemos puesto cosas adentro (definir la variable) podremos en nuestro script "abrir el cajón" en cualquier momento para sacar las cosas que están a dentro.
Una variable puede contener lo que queremos. números, letras, símbolos raros. Puede ser también otra orden bash (lo veremos al final) .
  Para definir un variable de forma básica en bash es muy simple: ponemos el nombre que damos a nuestra variable (el cajón) seguido del símbolo "igual" y luego ponemos el valor que asignamos a la variable (los calcetines en el cajón)
  Tomemos un ejemplo con nuestro primer script
  Vamos a llegar al mismo resultado ( escribir "¡Hola mundo!" en consola)  pero usando una variable. smile
  la variable (el cajón) la llamaremos "mensaje" 
  Y su valor será nuestro mensaje de bienvenida "¡Hola mundo!"
Para asignar el valor "¡Hola mundo!" a la variable "mensaje" hacemos así

mensaje="¡Hola mundo!"

  Y  Ahora veamos como hacer para sacar la cosa del cajón, es decir usar el valor de nuestra variable
Para ver el valor de la variable en consola volveremos a usar echo y el símbolo del dolar, es decir $
  Asi se pueden acordar : para ver el valor del variable hay que usar dolares big_smile
entonces es así...

echo $mensage

probamos en consola... primero definimos la variable y luego la invocamos : bash2_2.jpg
  En complemento les he puesto dos tipos de errores. en programación cada símbolo tiene mucha impotencia y es muy fácil equivocarse si no prestamos atención.
  En el ejemplo 4 veís la importancia del símbolo "$" a la hora de llamar la variable para obtener su valor, su contenido. Si no  pongo el símbolo del dolar obtengo "mensaje" en lugar de ¡Hola mundo!
  En el ejemplo 5 tenemos un falló porque nos hemos puesto entre apostrofes el valor de nuestra variable. Si nuestro variable contiene un espacio (y es el caso en "¡Hola mundo!") tenemos que "encerrarla" entre "delimitadores". En bash los "" son una forma para delimitar y nos permiten tener una variable que incluye uno(s) espacio(s)



Expresiones regulares con grep (mediante pipe)

  Una expresión regular puede ser cualquier cadena de símbolos que definimos. Esta cadena, al ser definida como "expresión regular", se podrá emplear para, por ejemplo, buscar coincidencias.
  Grep es un comando fundamental en nuestra panoplia y su función de base es definir y usar expresiones regulares.
  ¿No entendeís a que sirve?
  Tomemos un ejemplo. digamos que quiero saber cual es mi chipset wireless. Una forma de conocer lo es hacer un listado de su hardware  (se hace con lshw)
Ups... Obtenemos esta cosa muy larga en consola:

ATTENTION: ce programme devrait être lancé en tant que super-utilisateur.
profezorapplestruff       
    description: Computer
    bits: 64 bits
    fonctionnalités: vsyscall32
  *-core
       description: Motherboard
       identifiant matériel: 0
     *-memory
          description: Mémoire système
          identifiant matériel: 0
          taille: 3840MiB
     *-cpu
          produit: Intel(R) Celeron(R) CPU  N2840  @ 2.16GHz
          fabriquant: Intel Corp.
          identifiant matériel: 1
          information bus: [email protected]
          taille: 1415MHz
          capacité: 1415MHz
          bits: 64 bits
          fonctionnalités: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer rdrand lahf_lm 3dnowprefetch ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms cpufreq
     *-pci
          description: Host bridge
          produit: Atom Processor Z36xxx/Z37xxx Series SoC Transaction Register
          fabriquant: Intel Corporation
          identifiant matériel: 100
          information bus: [email protected]:00:00.0
          version: 0e
          bits: 32 bits
          horloge: 33MHz
          configuration: driver=iosf_mbi_pci
          ressources: irq:0
        *-display
             description: VGA compatible controller
             produit: Atom Processor Z36xxx/Z37xxx Series Graphics & Display
             fabriquant: Intel Corporation
             identifiant matériel: 2
             information bus: [email protected]:00:02.0
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: vga_controller bus_master cap_list rom
             configuration: driver=i915 latency=0
             ressources: irq:108 mémoire:d0000000-d03fffff mémoire:c0000000-cfffffff portE/S:f080(taille=8)
        *-storage
             description: SATA controller
             produit: Intel Corporation
             fabriquant: Intel Corporation
             identifiant matériel: 13
             information bus: [email protected]:00:13.0
             version: 0e
             bits: 32 bits
             horloge: 66MHz
             fonctionnalités: storage ahci_1.0 bus_master cap_list
             configuration: driver=ahci latency=0
             ressources: irq:104 portE/S:f070(taille=8) portE/S:f060(taille=4) portE/S:f050(taille=8) portE/S:f040(taille=4) portE/S:f020(taille=32) mémoire:d0916000-d09167ff
        *-usb
             description: USB controller
             produit: Atom Processor Z36xxx/Z37xxx Series USB xHCI
             fabriquant: Intel Corporation
             identifiant matériel: 14
             information bus: [email protected]:00:14.0
             version: 0e
             bits: 64 bits
             horloge: 33MHz
             fonctionnalités: xhci bus_master cap_list
             configuration: driver=xhci_hcd latency=0
             ressources: irq:103 mémoire:d0900000-d090ffff
        *-generic
             description: Encryption controller
             produit: Atom Processor Z36xxx/Z37xxx Series Trusted Execution Engine
             fabriquant: Intel Corporation
             identifiant matériel: 1a
             information bus: [email protected]:00:1a.0
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: bus_master cap_list
             configuration: driver=mei_txe latency=0
             ressources: irq:107 mémoire:d0500000-d05fffff mémoire:d0400000-d04fffff
        *-multimedia
             description: Audio device
             produit: Atom Processor Z36xxx/Z37xxx Series High Definition Audio Controller
             fabriquant: Intel Corporation
             identifiant matériel: 1b
             information bus: [email protected]:00:1b.0
             version: 0e
             bits: 64 bits
             horloge: 33MHz
             fonctionnalités: bus_master cap_list
             configuration: driver=snd_hda_intel latency=0
             ressources: irq:109 mémoire:d0910000-d0913fff
        *-pci:0
             description: PCI bridge
             produit: Intel Corporation
             fabriquant: Intel Corporation
             identifiant matériel: 1c
             information bus: [email protected]:00:1c.0
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: pci normal_decode bus_master cap_list
             configuration: driver=pcieport
             ressources: irq:16 portE/S:e000(taille=4096) mémoire:d0800000-d08fffff
           *-network
                description: Ethernet interface
                produit: RTL8101E/RTL8102E PCI Express Fast Ethernet controller
                fabriquant: Realtek Semiconductor Co., Ltd.
                identifiant matériel: 0
                information bus: [email protected]:01:00.0
                nom logique: eth0
                version: 07
                numéro de série: f0:76:1c:46:46:64
                taille: 100Mbit/s
                capacité: 100Mbit/s
                bits: 64 bits
                horloge: 33MHz
                fonctionnalités: bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
                configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3LK-NAPI duplex=full firmware=rtl8106e-1_0.0.1 06/29/12 ip=192.168.2.100 latency=0 link=yes multicast=yes port=MII speed=100Mbit/s
                ressources: irq:106 portE/S:e000(taille=256) mémoire:d0804000-d0804fff mémoire:d0800000-d0803fff
        *-pci:1
             description: PCI bridge
             produit: Intel Corporation
             fabriquant: Intel Corporation
             identifiant matériel: 1c.1
             information bus: [email protected]:00:1c.1
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: pci normal_decode bus_master cap_list
             configuration: driver=pcieport
             ressources: irq:17 portE/S:1000(taille=4096) mémoire:d0700000-d07fffff
           *-network DÉSACTIVÉ
                description: Interface réseau sans fil
                produit: QCA9565 / AR9565 Wireless Network Adapter
                fabriquant: Qualcomm Atheros
                identifiant matériel: 0
                information bus: [email protected]:02:00.0
                nom logique: wlan0
                version: 01
                numéro de série: 4c:bb:58:0f:ba:aa
                bits: 64 bits
                horloge: 33MHz
                fonctionnalités: bus_master cap_list rom ethernet physical wireless
                configuration: broadcast=yes driver=ath9k driverversion=3.16.0-33-generic firmware=N/A latency=0 link=no multicast=yes wireless=IEEE 802.11bgn
                ressources: irq:17 mémoire:d0700000-d077ffff mémoire:d0780000-d078ffff
        *-pci:2
             description: PCI bridge
             produit: Intel Corporation
             fabriquant: Intel Corporation
             identifiant matériel: 1c.2
             information bus: [email protected]:00:1c.2
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: pci normal_decode bus_master cap_list
             configuration: driver=pcieport
             ressources: irq:18 portE/S:2000(taille=4096) mémoire:d0600000-d06fffff
           *-generic
                description: Unassigned class
                produit: RTS5229 PCI Express Card Reader
                fabriquant: Realtek Semiconductor Co., Ltd.
                identifiant matériel: 0
                information bus: [email protected]:03:00.0
                version: 01
                bits: 32 bits
                horloge: 33MHz
                fonctionnalités: bus_master cap_list
                configuration: driver=rtsx_pci latency=0
                ressources: irq:105 mémoire:d0600000-d0600fff
        *-isa
             description: ISA bridge
             produit: Atom Processor Z36xxx/Z37xxx Series Power Control Unit
             fabriquant: Intel Corporation
             identifiant matériel: 1f
             information bus: [email protected]:00:1f.0
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: isa bus_master cap_list
             configuration: driver=lpc_ich latency=0
             ressources: irq:0
        *-serial NON-RÉCLAMÉ
             description: SMBus
             produit: Intel Corporation
             fabriquant: Intel Corporation
             identifiant matériel: 1f.3
             information bus: [email protected]:00:1f.3
             version: 0e
             bits: 32 bits
             horloge: 33MHz
             fonctionnalités: cap_list
             configuration: latency=0
             ressources: mémoire:d0914000-d091401f portE/S:f000(taille=32)
ATTENTION: les informations sont potentiellement incomplètes ou erronées, vous devriez lancer ce programme en tant que super-utilisateur.

Ahora voy a usar grep.
grep nos permite definir expresiones regulares y escribir en consola la liñas dónde se encuentra la expresión regular.
busco información sobre el chipset Wireless, así que voy a elegir como expresión regular "Wireless"
Así obtendré en consola la liñas que contienen como expresión regular "Wireless" y no perderé el tiempo en buscar en este largo "stdout" (así se lama lo se que ve en consola) el modelo de mi chipset wifi

lshw | grep Wireless

Notáis el uso de la barra vertical.
  Se llama "pipe" (tubería) y permite encadenar ordenes.
Se ejecuta lshd y el resultado se manda al comando grep.
Así que en lugar de tener el resultado de lshd (el texto tan largo) tendremos el resultado de grep (la liña que contenga la expresión regular definida : Wireless )   
El pipe permite de cierto modo alimentar a grep para que busque y encontré expresiones regulares.

bash2_3.jpg

  Con lo que habéis visto podéis ya hacer cosas.
En inició dije que podíamos  asignar  una orden como valor a una variable.
Y sabemos que con el pipe podemos encadenar ordenes. Una variable puede ser varias ordenes,
Para acabar este capituló vamos a darle jugo al asunto relacionándolo con nuestro famoso ataque pixie dust por el simple hecho de declarar en una variable unas ordenes encadenas con une pipe.
Para poner ordenes en una variable y que se ejecuten necesitamos utilizar los delimitadores ' ' en lugar de " " como anterioramente

lo sabemos, en nuestro pixie dust, necesitamos un reaver modificado para obtener le "authkey". No se puede obtener con reaver normal, es solo para esta dichosa authkey que necesitamos un reaver modificado. tongue
Pues, la vamos a pillar al vuelo así.

authkey=`sudo timeout 2s reaver -i wlan0mon -b XX:XX:XX:XX.XX:XX -vv -n -g 1 | grep -i auth | cut -d ':' -f2-`

He definido una variable llamada hotkey con los delimitadores ` ` lo que hace que puedo poner comandos
  En el primer pipe es un comando reaver (tengo revaer mod instalado) limitado a dos segundos de ejecución con "timeout -2s"
                                     su resultado se manda al comando grep
  En el segundo pipe tengo un comando grep con expresión regular authkey
         entonces obtendría sola la linea que contiene "authkey" (hemos puesto -i así que puede ser con maysuculas) 
                      algo asi : [P] AuthKey : 56:78:90:09:09:09(...)"
                                     que no ponemos en consola pero que mandamos al comando cut
En nuestro ultimo pipe tenemos cut -d ':' -f2- dónde
 

  • cut - es un comando que permite recortar

  • -d ':' - empleamos cut con el opcion "d" . Es decir Delimitador. Y nuestro delimitador es el simbolo ":" (dos puntos verticales):. esto significa que cut va a dividir la linea en trozos (campos) delimitados por el simbolo ":"

  • -f2- : Es para definir los trozos (campos o field en ingleś) que guardamos. Aqui con  -f2 le decimos de guardar desde el campo 2. Y con f2- le decimos de pillar todo lo que viene despuès el campo 2 .
    Lo que nos da -f2-   

la idea al final es que tendremos una variable que tenga la liña con la auth key (pillada con grep) de la cual guardaremos todo menos lo que se encuentra antes de los primeros dos puntos verticales (comando cut)

bash2_4.jpg

la idea no es nada buena pero les permite ver que con dos coitas podéis ya lograr algo como empezar un script para lanzar pixiewps.
En este caso arriamos la misma operación para cada elemento que falta. Declarar una variable PKE que definimos ejecutando tshark.sh de Spawn y su contenido esta depurado para guardar las cadenas que nos interesan. Y repetimos la operación para PKR etc...
Hay muchas formas de llegar a sus fines con bash. En el próximo paso veremos más y será ya algo más "script"  que podría ser útil. wink

Desconectado

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

Temas similares

Tema Respuestas Vistas Ultimo mensaje
Hola! por Ike
1 5 Ayer 23:54:48 por kcdtv
RouterScan linux por juandiegomu
3 29 Ayer 22:06:44 por kcdtv
7 849 Ayer 17:35:28 por kcdtv
1 17 Ayer 11:25:21 por Koala
2 51 Ayer 02:07:10 por kcdtv

Pie de página

Información del usuario

Ultimo usuario registrado: Ike
Usuarios registrados conectados: 0
Invitados conectados: 5

Estadisticas de los foros

Número total de usuarios registrados: 356
Número total de temas: 616
Número total de mensajes: 4,220

Máx. usuarios conectados: 45 el 12-04-2016 12:02:20