First article

Par Cinux, le 06 mai 2018Lire la suite

Lire la suite

VLC sous Archlinux

Par Cinux, le 22 août 2017Lire la suite

Si comme moi, après l'installation de vlc, rien ne se passe quand vous le lancez, essayez de lancer la commande 'vlc' dans un terminal afin de voir si l'erreur suivante d'affiche

$ vlc
[0000006181cd9148] core libvlc: Lancement de vlc avec l'interface par défaut. Utilisez « cvlc » pour démarrer VLC sans interface.
[0000006181e1a818] skins2 interface error: no suitable dialogs provider found (hint: compile the qt4 plugin, and make sure it is loaded properly)
[0000006181e1a818] skins2 interface error: cannot instantiate qt4 dialogs provider
Il est fort possible que qt4 ne soit pas installé car il ne l'est pas automatiquement. En effet, si vous tapez :
$ pacman -Qi vlc
Vous constaterez que la lib qt4 est optionnelle car on peut lancer vlc sans interface de commande grace à la commande cvlc. Pour installer qt4 tapez :
$ sudo pacman -Syu qt4
Enjoy....

Debian 9 (Stretch) est là!

Par Cinux, le 22 juin 2017Lire la suite

La dernière version (9) de Debian est sortie. Son nom de code est Stretch. Vous pouvez la télécharger librement à sur le site officiel https://www.debian.org/.
Sinon, si vous êtes déjà sous debian 8 (Jessie) vous pouvez mettre votre système à jour comme ceci:

1) Pour être bien sûre d'être à jour :
apt-get update && apt-get upgrade

2) On modifie le fichier sources.list et on remet la liste des paquets à jour :
sed -i 's|jessie|stretch|' /etc/apt/sources.list && apt-get update

3) On lance le changement de version :
apt-get dist-upgrade

4) On redémarre et on s'éclate!

Netdata - Monitoring

Par Cinux, le 16 mai 2017Lire la suite

Pour monitorer mes serveurs, j'avais l'habitude d'utiliser munin. Munin est efficace et simple mais pas vraiment 'sexy'. J'ai découvert NetData hier grâce à l'article de CitizenZ. Naturellement, je l'ai installé puis testé et j'avoue que c'est vraiment agréable à la lecture. Si vous avez des machines sous Linux ça vaut le coup d'être installé.

A plus!

Récupération de fichiers sous linux

Par Cinux, le 14 mars 2017Lire la suite

Ce qui devait arriver un jour est arrivé! J'ai supprimé par mégarde le fichier KEEPASS contenant tous mes mots de passe et ma dernière sauvegarde date du mois dernier. Ca n'est pas dramatique mais j'aimerais pouvoir récupérer les modifications que j'y ai apporté entre temps. La récupération de données est composées de 2 étapes importantes:

1) Arrêter d'écrire sur la partition concernée par la perte de données.
2) récupérer les données (si rien n'a été écrit par dessus).

afin de ne plus écrire sur votre partition concernée par la perte de fichiers, il faut la démonter afin d'éviter que des écriture se fassent sur les données perdues. On peut éventuellement la remonter en lecture seule pour accéder à certains fichiers si besoin mais cette étape est optionnelle. Pour se faire, on quitte tout pour se loger en root puis on tape :

ATTENTION: Dans tous les exemples ci-dessous, /dev/sdaX est la partition surlaquelle se trouvent les données à restaurer.

$ umount /dev/sdaX # pour la démonter
$ mount -o ro /dev/sdaX/ /mnt/tmp # pour la monter en lecture seule.
Ceci étant fait, vous pouvez passer à la phase de récupération. Si foremost n'est pas installé sur votre distribution, vous pouvez récupérer la dernière version sur http://foremost.sourceforge.net/ ou l'installer avec votre gestionnaire de paquet. Pour les systèmes basés sur Debian, on tapera:

$ apt update
$ apt install foremost 
Pour connaître la liste des fichiers qu'il est possible de restaurer, tapez :

sudo foremost -w -i /dev/sdaX -o /recovery/foremost
L'option -w indique à foremost de lister tout ce qui est récupérable dans le fichier audit.txt dans le répertoire de sortie.(dans notre cas /recovery/foremost/). Par défaut, foremost permet de récupérer tous les types de fichiers listés dans la manpage (pour plus de détails tapez : man foremost). Pour récupérer les images .jpg par exemple, On tapera alors:

$ foremost -t jpg -i /dev/sdaX -o /recovery/foremost
Et si c'est un type de fichier non reconnu par défaut, comment faire???
En installant foremost, un modèle de fichier de configuration est installé en /etc/foremost.conf. Il contient déjà pas mal de types additionnels qui sont tous commentés par défaut. Pour les activer il faut dé-commenter la ligne en supprimant le '#' en début de ligne.
Si toute fois, le type de fichier que vous tentez de restaurer ne figure pas dedans il est possible de l'ajouter. Pour récupérer un fichier KEEPASS, j'ai trouvé les informations concernant le type de fichier à l'adresse https://gist.github.com/msmuenchen/9318327, et je les ai ajouté à la fin du fichier de conf /etc/foremost.conf comme suit:

#---------------------------------------------------------------------
# KEEPASS FILES
#---------------------------------------------------------------------
#  type    Case      size            Header                   footer
    kdbx    y           5000000     \x03\xD9\xA2\x9A    \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0


Il ne reste plus qu'à lancer foremost avec la configuration que nous avons mise en place :
$ foremost -t kdbx -c /etc/foremost.conf -i /dev/sdaX -o /restore/foremost
Les fichiers récupérés seront alors placés dans /restore/foremost/kdbx/

La restauration de fichier ne fonctionne malheureusement pas toujours et n'est pas une solution à envisager. Il faut mettre en place une politique de sauvegarde sérieuse afin de se prémunir contre toute perte de données.

Ping? uins!

Par Cinux, le 04 mars 2017Lire la suite

Un petit script pour tester les adresses d'un réseau local qui répondent au ping:


#!/bin/bash
HOST=1
while [ $HOST -lt 255 ]; do
        ping -c 1 -q -w 1 192.168.1.$HOST > /dev/null
        RESULT=$(echo $?)
        if [ $RESULT -eq 0 ]; then
                echo "192.168.1.$HOST"
        fi
HOST=$(expr $HOST + 1) done

Si vous souhaitez afficher les adresses qui ne répondent pas au ping, vous pouvez remplacer le 0 par 1 dans le test if [ $RESULT -eq 0 ].

ExplainShell.com

Par Cinux, le 27 février 2017Lire la suite

Le site ExplainShall.com propose une explication détaillée des commandes de shell. Vous vous dites sans doute qu'il existe des tonnes de sites qui vous expliquent comment marche le shell mais je trouve ce projet particulièrement intéressant dans sa philosophie.

En effet, lorsque vous tapez une commande shell dans la barre de recherche du site, il vous affiche les explications détaillées sur la commande tapée. C'est un projet intéressant!

Debian 9 est gelée!

Par Cinux, le 12 février 2017Lire la suite

https://tuxicoman.jesuislibre.net/2017/02/freeze-de-debian-9.html
On va enfin passer au noyau 4.9 ^^

C++ La fonction getaddrinfo(...)

Par Cinux, le 10 février 2017Lire la suite

J'utilisais habituellement la fonction gethostbyname2() pour récupérer l'adresse IP d'un nom de domaine pour mes softs en C++. En relisant la man page je suis tombé sur ceci:
" gethostbyname*(), gethostbyaddr*(), herror() et hstrerror() sont déconseillées. Les applications devraient utiliser getaddrinfo(3), getnameinfo(3) et gai_strerror(3) à la place."
La fonction getaddrindo() permet de récupérer des informations une ou plusieurs machines distantes. Voyons en premier lieu, les différents prototypes dont nous aurons besoin:

/************* P R O T O *************/
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int getaddrinfo(const char *nodename, const char *servname,
                const struct addrinfo *hints, struct addrinfo **res);

void freeaddrinfo(struct addrinfo *ai);

const char* gai_strerror(int ecode);

struct addrinfo {
  int     ai_flags;              // AI_PASSIVE, AI_CANONNAME, ...
  int     ai_family;            // AF_xxx
  int     ai_socktype;       // SOCK_xxx
  int     ai_protocol;         // 0 (auto) or IPPROTO_TCP, IPPROTO_UDP 

  socklen_t  ai_addrlen;        // length of ai_addr
  char   *ai_canonname;       // canonical name for nodename
  struct sockaddr  *ai_addr;  // binary address
  struct addrinfo  *ai_next;    // next structure in linked list
};
/******************* E N D   C O D E *****************/


La fonction getaddrinfo():
Elle retourne 0 si elle réussi et un code d'erreur en cas de problème (voir man getaddrinfo).
  • const char* nodename est le nom de l'hôte. Il peut être une IP de la forme 123.123.123.123 ou un nom de domaine comme un.exemple.com.
  • const char* servname est le nom du service. Il s'agit typiquement d'un port, mais on peut aussi lui passer des chaînes de caractères comme ftp, http... Ce paramètre peut être NULL.
  • struct addrinfo* hints pointe sur une structure addrinfo qui indique les critères de sélection des structures d'adresses de sockets renvoyées dans la liste pointée par res. Si hints n'est pas NULL, il doit pointer sur une structure addrinfo dont les membres ai_family, ai_socktype, et ai_protocol indiquent les critères limitant l'ensemble d'adresses de sockets renvoyées par getaddrinfo().
  • struct addrinfo** res pointe sur une liste de structures addrinfo qui auront été créé par la fonction grâce aux paramètres passés via 'hints'.

    Exemple:
    #include <itostream>
    #include <string.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netdb.h>
    #include <arpa/inet.h>
    
    int main() 
    {
        const  std::string       hostname = "qwant.com";
        struct addrinfo          hints; 
        struct addrinfo         *addrLst;
        struct sockaddr_in       sin;
    
        memset(&hints, 0, sizeof(hints)); // initialisation à 0 de la structure
        // On paramètre ensuite hints
        hints.ai_family     =   AF_INET; // AF_INET6 pour de l'ipv6
        hints.ai_socktype   =   SOCK_STREAM; // On est en TCP. Pour l'UDP on utilisera SOCK_DGRAM
        hints.ai_protocol   =   0;
        hints.ai_addr       =   NULL;
        hints.ai_canonname  =   NULL;
        hints.ai_next       =   NULL;
    
    
        int info = getaddrinfo(hostname.c_str(), NULL, &hints, &addrLst);
        if (info != 0) // On vérifie que tout se soit bien passé
        {
            // gai_strerror prend en arg le code d'erreur. 
            std::cout << hostname.c_str() << " : " <<  gai_strerror(info) <<  std::endl; 
            return 1;
        }
    
         // On stock l'adresse du serveur dans sin pour pouvoir l'utiliser au format sockaddr_in
        sin.sin_addr    = *(struct sockaddr_in*)info_retv->ai_addr; 
        sin.sin_family  = AF_INET;
    
        std::cout << "IP du serveur = " << inet_ntoa(sin.sin_addr) << std::endl; 
    
        freeaddrinfo(addrLst);    // On n'oublie pas de rendre la mémoire au système 
        return 0;
    }
  • Shred - Contrer la restauration de données

    Par Cinux, le 30 décembre 2016Lire la suite

    Il peut arriver que l'on enregistre un fichier sensible sur une clé usb ou sur un disque dur, et que l'on souhaite s'assurer que personne ne puisse les données que l'on a effacé. (Si si... Avec une bonne dose de savoir faire et un peu de patience il est possible de récupérer certaines données effacées d'un disque.)
    Le problème réside dans le fait que lorsque vous supprimez un fichier, le système de fichier supprime en réalité les informations sur ce fichier (nom, adresse mémoire, taille etc.) de son index, mais pas les données. de ce fait elles sont toujours sur le disque mais on ne les voit pas.

    Shred est un logiciel sous license GPLv3+, compris dans le paquet debian "coreutils". Il permet d'écrire des donnée aléatoires sur un périphérique ou à la place d'un fichier (plusieurs fois) pour brouiller les pistes, on peut remplir l'emplacement mémoire de '0' et même effacer le fichier. Ainsi la commande ci dessous aura pour effet d'écrire des données aléatoires à la place du fichier toto.txt (3 fois par défaut), puis shred remplira l'espace de données avec des '0' (option -z), et finira par effacer le fichier (option -u).

    $ shred -z -u toto.txt

    Pour plus d'infos, consultez la documentation officielle, ou tapez man shred dans un shell

    page 1 sur 2 suivante