Fonction grep sur scan WIFI

Fonction grep sur scan WIFI - Shell/Batch - Programmation

Marsh Posté le 09-02-2014 à 02:30:49    

Salut tout le monde,
 
En m'amusant avec le WIFI, je me suis retrouvé à vouloir sauvegarder la sortie de la commande iwlist dans un fichier pour faire quelques traitements dessus, de la façon suivante: (wlan0 étant le nom de mon interface)

Code :
  1. iwlist wlan0 scanning > Output_Scan.txt


 
Maintenant je souhaiterai extraire les lignes ou apparaissent le terme ESSID, et pour ça j'ai écris le code suivant:

Code :
  1. #!/bin/bash
  2. Scan= "Output_Scan.txt"
  3. echo "ESSID Names:"
  4. while read Line
  5. do echo $Line > tmp.txt
  6. grep -i "ESSID" tmp.txt
  7. done < $Scan
  8. rm tmp.txt
  9. exit 0


 
Je suis sur qu'on peut faire plus propre et efficace, donc auriez vous de suggestions?
 
Et d'ailleurs pourquoi cette syntaxe ne marche pas:

Code :
  1. (...) do grep -i "ESSID" $Line (...)


 
Enfin, est ce que qqun pourrait me dire si on peu chercher une chaine de caractere ou l'autre via un seul appel à grep, genre:

Code :
  1. grep "motA" OU "motB"


 
Merci d'avance pour toute aide,

Reply

Marsh Posté le 09-02-2014 à 02:30:49   

Reply

Marsh Posté le 09-02-2014 à 11:39:25    

:hello: !

 

Tout d'abord, pour extraire les lignes contenant une certaine chaîne de caractères, le grep se suffit à lui-même. Tu peux ainsi écrire ton programme de la manière suivante :

 
Code :
  1. #!/bin/bash
  2. Scan= "Output_Scan.txt"
  3. echo "ESSID Names:"
  4. grep -i "ESSID" $Scan
  5. exit 0
 

Ensuite, pour le grep, je ne connais pas le résultat de la commande iwlist :/

 

Enfin, grep permet de chercher ce que tu veux : la syntaxe est la suivante :

 
Code :
  1. grep -E "motA|motB"
 

:jap:

 

Edit : Tout dépend aussi de ce que tu veux faire : la commande grep va te donner la ligne complète si le mot recherché est présent. À mon avis, tu ne veux garder que les noms des ESSID. Dans ce cas, la commande awk me semble plus appropiée.


Message édité par Soileh le 09-02-2014 à 11:50:57

---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 09-02-2014 à 20:21:05    

Salut Soileh,
 
Tout d'abord merci pour ton feedback
 
Et donc je reviens pour dire que sur base des informations que tu m'as donné et que j'ai pu aussi glaner ailleurs, j'ai pondu ce script qui marche:

Code :
  1. #!/bin/bash
  2. # Script4.sh
  3. # Recherche ESSID
  4. echo "Recherche ESSID :"
  5. fichier=Wifi_List.txt
  6. while read Ligne
  7. do
  8. echo $Ligne > tmp.txt
  9. echo $Ligne | grep "Cell" > /dev/null
  10. if [ $? == 0 ]; then
  11.  echo
  12. fi
  13. grep -iE "ESSID|Channel:|Quality" tmp.txt
  14. done < $fichier
  15. echo
  16. echo "Fin traitement"
  17. echo
  18. rm tmp.txt
  19. exit 0


 
Maintenant pour pouvoir le tester je copie un extrait de la commande iwlist (à sauvegarder dans un un fichier Wifi_List.txt):
 

          Cell 01 - Address: 00:02:CF:61:BC:45
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=44/70  Signal level=-66 dBm  
                    Encryption key:on
                    ESSID:"H4CKm3"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 22 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=0000012e8070b40a
                    Extra: Last beacon: 2568ms ago
                    IE: Unknown: 00074C415253534F4E
                    IE: Unknown: 010582848B962C
                    IE: Unknown: 030106
                    IE: Unknown: 2A0103
                    IE: Unknown: 32080C1218243048606C
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD0408002800
          Cell 02 - Address: 10:FE:ED:E6:5D:BC
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=36/70  Signal level=-74 dBm  
                    Encryption key:on
                    ESSID:"Honeypot2"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=000000239da9b6cb
                    Extra: Last beacon: 2284ms ago
                    IE: Unknown: 0009486F6E6579706F7432
                    IE: Unknown: 010882848B960C121824
                    IE: Unknown: 030106
                    IE: Unknown: 2A0102
                    IE: Unknown: 32043048606C
                    IE: Unknown: 2D1AEF111BFFFFFF00000000000000000000000000000406E6E70D00
                    IE: Unknown: 331AEF111BFFFFFF00000000000000000000000000000406E6E70D00
                    IE: Unknown: 3D1606050500000000000000000000000000000000000000
                    IE: Unknown: 341606050500000000000000000000000000000000000000
                    IE: Unknown: DD180050F2020101850003A4000027A4000042435E0062322F00
                    IE: Unknown: DD0900037F01010000FF7F
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
          Cell 03 - Address: 00:9C:02:0F:9E:3A
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=70/70  Signal level=-34 dBm  
                    Encryption key:on
                    ESSID:"Toto"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s
                              11 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=0000017d54dd8daf
                    Extra: Last beacon: 432ms ago
                    IE: Unknown: 001B48502D5072696E742D33412D50686F746F736D6172742036353230
                    IE: Unknown: 010802040B0C12161824
                    IE: Unknown: 03010B
                    IE: Unknown: 2A0100
                    IE: Unknown: 2D1A0055010200050039010400580200007B01040058020000330102
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: 32043048606C
                    IE: Unknown: 3D160B000100000000000000000000000000000000000000
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
          Cell 04 - Address: 00:25:9C:D7:8E:07
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=61/70  Signal level=-49 dBm  
                    Encryption key:off
                    ESSID:"linksys"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=00000004527fbb01
                    Extra: Last beacon: 468ms ago
                    IE: Unknown: 00076C696E6B737973
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 03010B
                    IE: Unknown: 2A0104
                    IE: Unknown: 2F0104
                    IE: Unknown: 32040C121860
                    IE: Unknown: DD06001018020004
          Cell 05 - Address: 70:54:D2:56:FB:19
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=68/70  Signal level=-42 dBm  
                    Encryption key:on
                    ESSID:"SecureGuest"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=0000000da1956a6b
                    Extra: Last beacon: 816ms ago
                    IE: Unknown: 000B5365637572654775657374
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 03010B
                    IE: Unknown: 2A0100
                    IE: Unknown: 2F0100
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: 32040C121860
                    IE: Unknown: 2D1AFC181BFFFF000000000000000000000000000000000000000000
                    IE: Unknown: 3D160B080400000000000000000000000000000000000000
                    IE: Unknown: DD090010180201F02C0000
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00

 
Maintenant à tout hasard que pensez vous du script que j'ai écris?
 
Nouvel étape maintenant, essayer la même chose mais avec sed et awk...
 
@+

Reply

Marsh Posté le 10-02-2014 à 15:31:04    

En fait je trouve ton script très "bizarre". Tu as du texte en mémoire, et au lieu de le traiter directement, tu l'écris dans un fichier, que tu vas ensuite remonter en mémoire pour le parser, puis que tu vas détruire.
 
Pourquoi ne traites-tu pas directement les données en mémoire ?
Par exemple :

Code :
  1. echo "$Ligne" | grep -iE "ESSID|Channel:|Quality"


 
Pareil, tester le code retour d'un grep pour voir si on doit faire l'action ou pas, je n'aime pas ça, car je ne trouve pas ca lisible, et en plus ca fait plein de lignes de code :) En ce qui me concerne, je préfère le "grep -c" :
 

Code :
  1. [[ $(echo "$Ligne" | grep -c "Cell" ) -gt 0 ]] && echo


 
Enfin, comme suggéré plus haut, si tu souhaites réagencer les données ou extraire des morceaux de lignes, le awk sera plus adapté, et te permettra de te passer complètement de la boucle.

Reply

Marsh Posté le 12-02-2014 à 22:00:27    

Salut nukolau,
 
Merci pour le feedback, j'ai alors réécris le script sur base de tes conseils:

Code :
  1. #!/bin/bash
  2. # Script6.sh
  3. # Recherche ESSID
  4. echo
  5. echo "Wireless scan in progress ..."
  6. iwlist wlan0 scanning > ScanOutput.txt
  7. echo "Scan done"
  8. echo
  9. echo "Liste réseaux :"
  10. echo
  11. fichier=ScanOutput.txt
  12. while read Ligne
  13. do
  14. echo $Ligne | grep -iE "ESSID|Channel:|Quality"
  15.         [[ $(echo "$Ligne" | grep -c "Cell" ) -gt 0 ]] && echo
  16. done < $fichier
  17. echo
  18. echo "Fin traitement"
  19. echo
  20. exit 0


 
Merci encore pour vos retours,
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed