2010-09-17 5 views
2

Fondamentalement, je veux faire un programme presque comme un keylogger. La chose est que je suis en tant qu'administrateur réseau parfois je ne me souviens pas de ce que j'ai fait à une machine sur certains cas, ou à la même époque je fais des howto et des tutoriels pour linux. Je veux enregistrer ce que j'ai fait. Donc, fondamentalement, l'idée de ce programme est: vous tapez le nom du programme, (je l'appelle rat pour le moment)Enregistrement ligne de commande d'entrée et de sortie sur Linux avec C

$ rat 
Welcome everything from now on will be recorded 
recording $ ls 
file1 file2 file3 
recording $ quit 
Bye bye 

Tout ce que vous faites sortirez dans un fichier xml. Quelque chose comme ça

<?xml version='1.0' encoding='UTF-8' ?> 
<rat> 
<command> 
    <input>ls</input> 
    <output>file1 file2 file3</output> 
    <err><err> 
</command> 
</rat> 

je fais des tests avec fp_in = popen(input, "w"); et system, mais d'abord avec popen je ne peux pas changer de répertoire et avec « système je ne peux pas gérer correctement l'entrée et la sortie.

Je vérifiais aussi S'il y a quelque chose que je peux faire pour lancer un plugin, mais je n'ai trouvé aucune information

A certains moments, si je le ressens, je devrais créer un autre shell (qui est bien au-delà de mes capacités actuelles) ou un fork bash sh. Mais cela aurait dû être un droit compliqué.Je suis ouvert à la suggestion par où commencer. Je suis rouillée avec C, donc je relis beaucoup de choses de base. Avec le fichier xml, plus tard, je pensais faire un programme pour stocker ces données et/ou éditer ces données afin que je puisse créer des tutials et howto.

Je peux penser à plusieurs façons d'étendre cela à l'utilisation de l'écran d'impression afin que toutes les images stockées vont à un fichier que vous pouvez télécharger sur un serveur (pour le moment je suis heureux de stocker les données). Ce pourrait être un outil utile.

ps. Je sais que cela peut aussi être utile pour les choses mauvaises.

Répondre

1

La plupart des shells ont un script intégré qui va simplement enregistrer le texte dans et hors de la ligne de commande. Pas tout à fait ce que vous cherchez ... À ma grande surprise script n'est pas un construit, ce qui signifie est un modèle pour construire ce que vous voulez.

La commande script fait presque ce que vous voulez: elle enregistre simplement le texte dans et hors de la ligne de commande.

Si vous faites en sorte que votre invite soit distinctive (de sorte que vous puissiez indiquer de manière fiable la différence entre les commandes shell et tout le reste), vous pouvez post-traiter la sortie script pour atteindre vos objectifs. Alternativement, vous pouvez pirater script pour l'obtenir d'émettre le XML que vous recherchez.

+0

Voici un lien vers 'script': http://linux.die.net/man/1/script – bta

+0

Il semble que la chose shell droite. Je vais devoir enquêter davantage, maintenant je pense au piratage de programmes comme le commandant de minuit pour comprendre comment ils s'attaquent à ce problème. Ils font des choses similaires en se déplaçant dans les répertoires. –

+0

sur un second look script fait beaucoup de ce que je demande –

0

Vous pouvez également essayer d'aborder cela sous un angle différent. Au lieu d'utiliser un shell ordinaire, connectez-vous à la machine en utilisant ssh ou telnet et exécutez vos commandes de cette façon. De nombreux clients ssh/telnet (PuTTY, par exemple) ont une option pour consigner toutes les entrées et sorties de la console pendant la session. Vous devriez être en mesure de post-traiter ce journal pour générer tout type de fichier journal dont vous avez besoin. En fonction de votre configuration, vous n'aurez peut-être même pas besoin d'utiliser une seconde machine (vous devriez être capable de ssh).

+0

'screen' peut également faire de la journalisation. –

6

Il existe déjà la commande script, qui va enregistrer toutes les entrées et sorties dans le terminal, en les écrivant dans une transcription.Je recommanderais de l'utiliser, sauf si vous avez des besoins particuliers qui ne se rencontrent pas. En fait, la plus belle version de script que j'ai vu a été le NetBSD version, donc vous voudrez peut-être examiner cela si la version Linux ne répond pas à vos besoins.

Si vous voulez vous-même écrire, au lieu d'utiliser system, je vous recommandons d'utiliser fork/exec pour créer un seul processus shell qui vous copiez toutes les entrées et sorties dans. Pour avoir une idée de comment cela fonctionne, je vous recommande de regarder le code source pour an existing version of script.

+0

script ouvre un psudo-terminal (le même que xterm, sshd, telnetd, ...), puis épanche le terminal (éventuellement un autre psudo-terminal) avec lequel l'utilisateur interagissait déjà, et enregistre la plupart des événements entre les deux terminaux. – nategoose

+0

Script fait beaucoup de choses, c'est bien. Il enregistre même les espaces blancs et le retour arrière. Je ne pense pas qu'il peut faire le truc en XML, mais c'est sympa. Il gère les transactions en temps réel merci je pense que ma question a été répondue –

+0

Ce n'est malheureusement pas vrai. Le script semble enregistrer uniquement ** la sortie **. Je suis dans une situation où je veux déboguer pourquoi un programme sort de la merde au lieu de ce qui est écrit dessus donc j'ai besoin d'enregistrer à la fois l'entrée et la sortie. Je n'ai pas encore de solution. mise à jour: le 'script' de NetBSD que vous liez semble avoir, merci et +1. – akostadinov