Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1137 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs

  Script shell : traitements parallelles.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script shell : traitements parallelles.

n°783674
sky_99
www.core-tx.com
Posté le 17-02-2006 à 22:38:04  profilanswer
 

Bonjour a tous. Un copain jouait a un jeu nommé "street hacker" il y a peu, et dans ce jeu,
il utilisait une fonction ip_scan ou un truc comme ça, qui detectait les hosts up.
Dans le jeu, ça prenait des plombes, et moi je dis qu'il y a moyen de le faire plus rapidement.
 
J'ai donc commencé le script :

Code :
  1. #!/bin/sh
  2. #ip_finder ip_scan v0.1
  3. ip1="192"
  4. ip2="168"
  5. ip3="1"
  6. ip4="1"
  7. while [ $ip4 -lt 255 ]
  8. do
  9. echo "$ip4"
  10. ip_host="$ip1.$ip2.$ip3.$ip4";
  11. cmd_ping="ping -q -w 1 -c 1 $ip_host"
  12. $cmd_ping > /dev/null && echo "$ip_host" >> hosts_up
  13. #$cmd_ping > /dev/null && echo "$ip_host" >>hosts_up || echo "$ip_host" >>hosts_down
  14. #incrementation de la variable dans la boucle
  15. ip4=`expr $ip4 + 1`;
  16. done


 
C'est juste une premiere version (0.1 :D) donc, forcement, ce n'est ni particulierement beau, ni
tres poussé ou quoi que ce soit d'autre... :pfff:  
 
Mais je me disais que pour accelerer le traitement, il faudrait faire des parties de la boucle en paralelle.
J'ai pensé a la utiliser l'operateur &, mais je me demandais si il n'y avait pas une façon de faire des sortes
de threads en scrip shell...
 
Connaissez vous un moyen simple de faire quelquechose qui ressemblerait à un fork() en scrip shell?
de cette maniere, je pourrais scinder ma boucle en N traitements parallelles...
 
merci d'avance!  
(Ps : non, je ne suis pas un Kevin qui veut jouer le script kiddie comme dans un jeu  :lol:  
c'est juste un truc que j'ai décidé de faire comme ça, pour reprendre le script shell...
et dans cette optique, n'importe quel exo est interessant ^^)


---------------
http://www.core-tx.com
mood
Publicité
Posté le 17-02-2006 à 22:38:04  profilanswer
 

n°783727
arsunik
ma tuxitude me beastifie
Posté le 18-02-2006 à 00:28:44  profilanswer
 

Tu peux rajouter des "&" et a la fin du script, tu mets un "wait" pour attendre la fin de tous les processus fils.
 
Cela dit, il existe beaucoup d'outil de scan (nmap par exemple) qui devraient te permettre de faire ça plus proprement et plus rapidement.

n°783731
sky_99
www.core-tx.com
Posté le 18-02-2006 à 00:40:14  profilanswer
 

arsunik a écrit :

Tu peux rajouter des "&" et a la fin du script, tu mets un "wait" pour attendre la fin de tous les processus fils.
 
Cela dit, il existe beaucoup d'outil de scan (nmap par exemple) qui devraient te permettre de faire ça plus proprement et plus rapidement.


J'ai du mal à saisir ? je sais qu'on peut faire $commande 1 & $commande 2, mais je vois mal ce que tu me conseilles de faire ici?
 
Concernant le fait qu'il existe des outils capables de faire ça, c'est surtout pour faire de la programmation shell que je fais ça, comme précisé plus haut ;) J'imagine que ça peut servir , un de ces jours, de savoir faire des "threads" en script shell  :)


---------------
http://www.core-tx.com
n°783755
l0ky
Posté le 18-02-2006 à 09:09:00  profilanswer
 

sinon tu as nmap qui contient tout ce qu'il faut pour faire ca de manière parallèle
http://www.insecure.com

n°783822
arsunik
ma tuxitude me beastifie
Posté le 18-02-2006 à 12:34:47  profilanswer
 

Tu peux faire par exemple :

Code :
  1. { $cmd_ping > /dev/null && echo "$ip_host" >> hosts_up ; } &
  2. wait


n°784022
sky_99
www.core-tx.com
Posté le 19-02-2006 à 00:40:45  profilanswer
 

l0ky a écrit :

sinon tu as nmap qui contient tout ce qu'il faut pour faire ca de manière parallèle
http://www.insecure.com


 
Encore une fois, je le répete, je connais nmap, et je ne fais pas ça pour scanner quoi que ce soit, mais pour faire un script...
C'est surtout pour la programmation shell :| J'aurais peut etre du poster dans programmation, mais c'est ici que la sous section se trouve...
 
ArSunik, tu me donnes une idée , merci  :)  


---------------
http://www.core-tx.com
n°784029
sky_99
www.core-tx.com
Posté le 19-02-2006 à 01:47:13  profilanswer
 

arsunik a écrit :

Tu peux faire par exemple :

Code :
  1. { $cmd_ping > /dev/null && echo "$ip_host" >> hosts_up ; } &
  2. wait



 
Bon, en fait la premiere ligne suffisait, rien de plus ^^
Le wait dans ma boucle, par contre, ramene la situation au stade de départ.
Au final, la boucle, qui prenait jusqu'a 256 secondes auparavant, prend maintenant 5 secondes maxi,
en donnant les bons résultats. Il ne reste plus qu'a ajouter un petit tri sur le fichier de sortie pour tout remettre en ordre, et ça sera parfait  ;)  
Merci a tous :jap:  
 
PS : qu'est ce que c'est sympa le script shell quand meme...
presque aussi sympa a coder que le PHP  :whistle:


---------------
http://www.core-tx.com

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs

  Script shell : traitements parallelles.

 

Sujets relatifs
script avec find et mvscript sar : valeurs min, max et Average du %idle
Script "startup"problème avec mon shell
Agir sur sur un shell depuis un siteAutomatiser le lancement d'un script à interval régulier.
Script pour mettre par defaut une imprimante en noir et blancchangement de user ds un script
[resolu]script bash, problème de jointurePour "echo-iser" un script ?
Plus de sujets relatifs à : Script shell : traitements parallelles.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR