Script shell : traitements parallelles.

Script shell : traitements parallelles. - Linux et OS Alternatifs

Marsh Posté le 17-02-2006 à 22:38:04    

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
Reply

Marsh Posté le 17-02-2006 à 22:38:04   

Reply

Marsh Posté le 18-02-2006 à 00:28:44    

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.

Reply

Marsh Posté le 18-02-2006 à 00:40:14    

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
Reply

Marsh Posté le 18-02-2006 à 09:09:00    

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

Reply

Marsh Posté le 18-02-2006 à 12:34:47    

Tu peux faire par exemple :

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


Reply

Marsh Posté le 19-02-2006 à 00:40:45    

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
Reply

Marsh Posté le 19-02-2006 à 01:47:13    

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
Reply

Sujets relatifs:

Leave a Replay

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