2010-02-24 15 views
3

Le outil nmap a une telle fonction - lorsque vous effectuez une analyse [#nmap -A -T4 localhost] et appuyez sur « Entrée » - il affiche sorte de statut information "Timing: Environ 6,17% fait"bash pour imiter de façon répétée sur une pression de touche proceess

Question - comment puis-je forcer cette touche à plusieurs reprises sans toucher un clavier dans la coquille? Ps: essaie simplement de trouver une solution de rechange pour un bogue dans la fonction proc_open de php, quand stdout d'un processus est retourné seulement après la fermeture de stdout pipe, et l'émulation pty de php ne fonctionne pas sur fbsd.

Question classée. Problème résolu avec le « attendre » utilitaire

#!/usr/local/bin/expect 

spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost 
expect arting {sleep 3; send \r} 
while {1} { 
     expect eof { 
      send_user "finished\n"; 
      exit; 
     } "done;" { 
      sleep 3; 
      send \r; 
      continue; 
     } 

} 
+0

Souffrez-vous d'une mise en mémoire tampon de sortie? Essayez fflush() peut-être? –

+0

yup, essayé sans la moindre chance – johnrembo

+0

Puisque vous avez utilisé une solution basée sur les attentes, donnez à Douglas le bonus approprié en choisissant sa réponse comme étant celle qui a aidé. C'était bien que vous ayez ajouté votre solution à la question - merci de faire cela. –

Répondre

3

probablement plus facile à utiliser expect.

1

Peut-être que le programme ultime 'yes man' fera ce dont vous avez besoin - le programme est appelé 'oui' et génère à plusieurs reprises la même ligne d'entrée encore et encore.

yes ok | recalcitrant.php 

Ceci enverra 'ok' plus la nouvelle ligne au PHP récalcitrant fréquemment. Il est limité par la vitesse à laquelle le programme récepteur lit ses entrées. Il est disponible dans les utilitaires GNU et sur la plupart des autres plates-formes Unix.

Si vous avez besoin de renseignement dans le traitement, bien que, le Tcl-fondé « expect »

+0

non - celui-ci ne fonctionne pas non plus. J'essaie maintenant de creuser plus profondément dans le monde "attendez" – johnrembo

+0

@johnrembo: en toute honnêteté, je ne suis pas très surpris qu'il ne fasse pas ce dont vous avez besoin. En effet, je ne pense pas l'avoir souvent trouvé utile. Néanmoins, il existe et s'il fait ce dont vous avez besoin, il n'y a rien de plus simple. Mais si vous avez besoin d'une adaptabilité dans la sortie, alors "attendez" est probablement ce dont vous avez besoin. –

+0

et encore - j'ai trouvé l'utilité "oui" assez utile (bien, pas pour ce cas particulier) - ne peut pas imaginer comment je ne savais pas d'existence de tels jusqu'à présent (oui, utilisait une tasse de coppe placé sur le touche "entrée") – johnrembo

1

Note, vous pouvez vous débarrasser de la boucle infinie:

spawn /usr/local/bin/nmap -A -T4 -p 21-100 localhost 
expect arting {sleep 3; send \r} 
expect { 
    "done;" { 
     sleep 3 
     send \r 
     exp_continue 
    } 
    eof 
} 
puts "finished" 

Êtes-vous sûr que vous avez besoin les sleep s? Ils peuvent généralement être évités en utilisant -regexp correspondant à la commande expect.

Astuce Astuce: en cours de développement, utilisez exp_internal 1 pour voir comment vos modèles correspondent à la sortie de la commande.

+0

glenn, merci pour les astuces – johnrembo