====== Scripts et Programmes ====== <color red>**Page pas du tout complète pour l'instant ! Je la remplis petit à petit...**</color>\\ Se référer au menu de droite pour avoir un aperçu de ce qui se trouve sur cette page. Voir également la page concernant mes [[contributions et bugfixes]] sur divers projets. ===== Programmes en C ===== ==== SpamEtPan! : SpamAssassin sur compte IMAP distant ==== [[https://svn.speed47.net/viewvc/spametpan/|Disponible sur mon SVN]] (2007-2008)\\ C'est un programme en C qui utilise la librairie [[http://libetpan.sourceforge.net/libetpan/index.html|libEtPan!]] permettant de faire de l'IMAP.\\ SpamEtPan! adapte l'utilisation de SpamAssassin pour qu'elle soit possible sur un compte IMAP distant, contrairement à l'utilisation habituelle de SpamAssassin où celui-ci s'exécute sur la machine qui reçoit les mails. SpamEtPan! doit être lancé régulièrement par cron, il se connecte alors au compte distant configuré, et : * Il parcourt chaque message présent dans la boîte de réception, et les soumets à SpamAssassin... * ...les messages reconnus comme étant clairement du spam sont déplacés dans le répertoire "spam-sure" du serveur * ...les messages reconnus comme étant probablement du spam sont déplacés dans le répertoire "spam-maybe" du serveur * ...les autres messages (non-spam) sont déplacés dans le répertoire "clean" du serveur * Ensuite, il inspecte le contenu du répertoire "learn-spam" du serveur, et passe chacun de ses messages au programme d'apprentissage du filtre bayésien de SpamAssassin : sa-learn, en lui indiquant que ce message est du spam, puis il déplace le message dans le répertoire "spam-sure" du serveur * Enfin, de la même façon il inspecte le contenu "learn-clean" du serveur, pour les messages non-spam, et les déplace dans le répertoire "clean" une fois passés à sa-learn Le nom des répertoires et les seuils de score pour la classification du spam sont configurables. ==== USB Resetter ==== Permet de réinitialiser un port USB sans avoir besoin de décharger les modules USB, ce qui n'est de toutes façons plus possible avec les distributions qui compilent les drivers USB directement dans le noyau au lieu de les proposer en modules séparés. TODO ==== PutFTP ==== [[https://svn.speed47.net/viewvc/putftp/|Disponible sur mon SVN]]. Permet de pouvoir uploader sur un serveur FTP des données en même temps qu'elle sont générées (via un pipe). Exemple d'utilisation : <code shell> tar c /var/www | gzip | aespipe -P ~/.mypass | ./putftp -v /dev/stdin ftpbackup.example.com /home/me/backups wwwdata.tar.gz.aes </code> TODO ===== Scripts en sh/bash/Perl/Python ===== ==== Détecteur d'opcodes avancés (MMX, SSE, ...) dans un binaire ELF ==== [[https://svn.speed47.net/viewvc/scripts/asm.pl?view=markup|Disponible sur mon SVN]]. Il se présente sous la forme d'un script Perl, qui prend un nom de programme en argument. Dans son répertoire se trouvent des fichiers qui listent les opcodes spécifiques à un jeu d'instruction particulier. Pour l'instant, seule les opcodes des fichiers ELF 32 bits sont reconnus, pour les jeux d'instruction suivants : * 808x, 8018x, 8028x, 8038x, 80486 * Pentium, Pentium Pro * 3DNow!, 3DNow! Plus * AMD K6 * MMX, EMMX * SSE, SSE2, SSE3, SSSE3, SSE4-1, SSE4a, SSE4b * Intel VT, AMD-V Pour chaque jeu d'instruction ci-dessus, le script affichera le nombre d'opcodes différents présents dans le programme ELF qui correspondent à ce jeu d'instruction. Exemple : <code> $ ./asm.pl /bin/bash 48 opcodes from a_808x 1 opcodes from b_8018x 15 opcodes from d_8038x 11 opcodes from h_PentiumPro </code> Rien de bien extraordinaire, mais bon, en même temps, c'est juste ''bash'' précompilé sur ma distribution ! Et avec un émulateur NeoGeo compilé à la main ? <code> $ ./asm.pl /usr/local/bin/gngeo 119 opcodes from a_808x 7 opcodes from b_8018x 1 opcodes from c_8028x 14 opcodes from d_8038x 1 opcodes from e_80486 1 opcodes from f_Pentium 20 opcodes from g_MMX 2 opcodes from h_PentiumPro 6 opcodes from j_SSE 1 opcodes from k_SSE2 1 opcodes from l_SSE3 Unknown opcodes: CS, ADDR16, FS, DS, DATA16, ES, ICEBP, SS </code> Voilà qui est déjà plus intéressant. Plus tard, il serait bon de supporter toutes les architectures, et les opcodes associés, peut-être en parsant automatiquement les tables d'opcodes que l'on peut trouver [[http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/?cvsroot=src|ici]], par exemple les opcodes i386 sont [[http://sourceware.org/cgi-bin/cvsweb.cgi/~checkout~/src/opcodes/i386-opc.tbl?rev=1.84&content-type=text/plain&cvsroot=src|là]]. Cela devrait permettre de ne plus du tout avoir d'opcodes inconnus du script. Un jour où je serai motivé peut-être... :) ==== Détecteur d'utilisation de FORTIFY_SOURCE dans les objets ELF ==== [[https://svn.speed47.net/viewvc/scripts/check_fortify_source.pl?view=markup|Disponible sur mon SVN]]. FORTIFY_SOURCE est une fonctionnalité qui a été rajoutée par Red Hat à gcc depuis la version 4.0, et permet d'éviter des cas de dépassement de buffers facilement détectables par le compilateur soit à la compilation, soit pendant l'exécution. Dans ce dernier cas, certaines fonctions potentiellement dangereuses si elles sont mal utilisées sont remplacées par des versions qui font des vérifications supplémentaires, par exemple ''strcpy'' devient ''__strcpy_chk'', voir [[http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html]] pour plus d'infos sur FORTIFY_SOURCE. Ce script permet de détecter dans des objets ELF (binaires ou librairies) la présence de références à ces versions spéciales des fonctions classiques de la libc. C'est utile pour savoir quels packages de votre système font (ou ne font pas !) usage de cette fonctionnalité, qui est désactivée dans ''gcc'' par défaut (il faut utiliser ''-D_FORTIFY_SOURCE=1'' ou ''-D_FORTIFY_SOURCE=2''). C'est aussi supporté avec ''g++'' (depuis 4.1 je crois). C'est un script Perl assez simple qui utilise ''readelf'' pour obtenir la liste des symboles de l'objet ELF. Quelques exemples d'exécution : <code> $ ./check_fortify_source.pl /bin/ls /bin/ls: VULNERABLE $ VERBOSE=1 ./check_fortify_source.pl /bin/ls /bin/ls: VULNERABLE (strcpy vfprintf mempcpy strncpy memcpy readlink memmove printf memset sprintf fprintf) $ ./check_fortify_source.pl /bin/cp /bin/cp: protected </code> Et sur différentes distributions auxquelles j'ai accès au moment où j'écris ces lignes : <code> $ # Ubuntu Karmic (on a server) $ ./check_fortify_source.pl /bin/* /usr/bin/* /usr/sbin/* /usr/sbin/* | awk '{print $2}' | sort | uniq -c 236 no-protection-needed 792 not-elf 1069 protected 131 VULNERABLE $ # Debian Lenny (on a server) $ ./check_fortify_source.pl /{usr/,}{s,}bin/* | awk '{print $2}' | sort | uniq -c 85 no-protection-needed 531 not-elf 42 protected 1082 VULNERABLE $ # RHEL 4 Update 5 (on a server) $ ./check_fortify_source.pl /{usr/,}{s,}bin/* | awk '{print $2}' | sort | uniq -c 192 no-protection-needed 534 not-elf 1884 VULNERABLE $ # Fedora 12 (on a desktop, lots of stuff installed) $ find /{usr/,}{s,}bin/ -type f -print0 | xargs -r0 sudo ./check_fortify_source.pl | awk '{print $2}' | sort | uniq -c 764 no-protection-needed 1151 not-elf 2335 protected 439 VULNERABLE </code> ==== Rsnapshot companion ==== [[https://svn.speed47.net/viewvc/scripts/rsnapshot-companion.sh?view=log|Disponible sur mon SVN]]. Script shell permettant d'utiliser rsnapshot pour faire des backups d'une machine qui n'est pas forcément allumée en permanence. L'intérêt par rapport à une configuration rsnapshot classique, est que si vous avez configuré rsnapshot pour se lancer tous les jours à 3h du matin, et que parfois la machine distante n'est pas disponible (éteinte, plus sur le réseau...), rsnapshot ne retentera jamais avant la prochaine échéance programmée (24h plus tard en général). Avec ce script, à partir du moment où un type de backup est en retard, il réessaiera toutes les 15 minutes (suivant votre configuration en crontab) de faire le backup, jusqu'à ce que celui-ci réussisse. Très pratique pour effectuer des backups automatiques d'ordinateurs portables par exemple, qui ne sont pas toujours connectés sur le réseau local. Il faut paramétrer la crontab pour lancer ce script régulièrement (par exemple toutes les 15 minutes). S'il n'y a rien à faire, il se terminera dans la seconde. A chaque lancement : * Le script vérifiera si l'un des type de backups doit être effectué, par rapport à la dernière fois (backups hourly, daily, weekly, monthly, tels que définis dans votre configuration de rsnapshot) * Si oui, il vérifiera que la machine à sauvegarder est présente sur le réseau * Si oui, il lancera rsnapshot en lui demandant d'effectuer les types de backups qui manquent * Pour chaque type de backup demandé, une fois que rsnapshot s'est terminé correctement, le script marque le backup comme s'étant terminé avec succès ==== Fedora Packages Search ==== [[https://svn.speed47.net/viewvc/fedopkginfo/trunk/|Disponible sur mon SVN]], CGI écrit en Python, l'application [[http://stephane.lesimple.fr/fedora_packages_search.html|vit ici]]. TODO

 
scripts_et_programmes.txt · Last modified: 21/05/2010 18:06 (external edit) · []
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki