Divers

Quelques petites idées trouvées par-ci, par-là ...

Alternatives open-source de vos applications favorites

Le site https://opensource.builders/ regroupe une liste, non exhaustive, d'applications open-source pouvant remplacer une bonne partie des applications propriétaires que nous utilisons tous les jours.

Un moteur de recherche est disponible pour nous aider à trouver notre bonheur.

CSV: gérer correctement les guillemets et les nombres longs

Dans le format CSV, les guillemets et les nombres longs peuvent générer des problèmes d'affichage dans Excel.

Exemple avec le CSV suivant:

Dans Excel, l'affichage ressemble à ceci:

Résultat, la ligne 2 a partiellement disparu, et le nombre sur 13 caractères est affiché au format scientifique.

En réalité, la fin de la ligne 1 et le début de la ligne 2 sont concaténés dans la cellule B.

Pour éviter ces petits désagréments, il est nécessaire:

Pour les chaines contenant des guillemets, de les échapper en les doublant et d'encapsuler toute la chaine avec des guillemets.
Exemple:
"une chaine avec des doubles guillemets ""
devient
"""une chaine avec des doubles guillemets """""

(en bleu, le doublement des guillemets pour l'échappement, en rouge l'encapsulation de toute la chaine)

Pour les nombres longs, il est nécessaire d'encapsuler toute la valeur avec des guillemets et de faire précéder le tout avec le signe "="
Exemple:
1256784962457
devient
="1256784962457"

Après correction, le fichier CSV ressemble à ceci:

Dans Excel:

Le résultat est parfaitement identique aux valeurs d'origine.

Etiquettes: 

Chiffrer un message avec des emoji (émoticônes)

Le site https://codemoji.org/#/encrypt de la fondation Mozilla, permet de chiffrer des messages à l'aide d'emojis.

Vous écrivez votre message, vous choisissez l'emoji qui vous plait pour le chiffrement et le message chiffré est disponible en ligne et une url courte est fournie afin de partager le message chiffré à qui vous voulez.

Des liens de partages automatiques vers les différents réseaux sociaux sont également disponibles.

Petite démonstration en image.

gif animé

Super sympa.

Seule contrainte, ne pas oublier l'emoji qui a servi au cryptage afin de pouvoir déchiffrer le message.

DBeaver: SqlServer: The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]

Depuis la dernière mise à jour de DBeaver en version 21.1.0, je ne peux plus me connecter à ma base de données SqlServer.

La faute à qui, au protocole de sécurité TLS1.0 qui est désormais désactivé dans la nouvelle version 11 de Java.

DBeaver utilisant sa propre version de Java, la dernière mise à jour embarque la version 11 de Java.

Afin de corriger cette "anomalie", il est nécessaire de modifier le fichier java.security dans le dossier jre de DBeaver.

Pour mon installation, il s'agit de C:\Program Files\DBeaver\jre\conf\security

La ligne contenant:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

doit être modifiée comme ceci:

jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

Il suffit juste de supprimer les références aux protocoles TLSv1 et TLSv1.1

La connexion à la base de données SqlServer est à nouveau possible.

Effacer la console

Cette astuce fonctionne dans les consoles bash et python.

En bash

$ echo -e "\033[H\033[J"

En python

>>> print("\033[H\033[J")

Cette commande peut-être utilisée dans des scripts afin d'afficher du contenu à l'écran et le rafraichir à intervalles régulières sans surcharger l'écran.

Etiquettes: 

Faire des tests de requêtes HTTP

Le site https://httpbin.org/ propose tout un tas de méthodes HTTP pouvant servir à tester différents outils de requêtage HTTP.

Vraiment très pratique pour tester des outils comme curl, requests (python) etc ....

Fibonacci

Afficher la suite de Fibonacci en bash, php, python3

En bash:

#!/bin/bash

#set -x

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

function is_int {
        if grep -E -v -q "^-?[0-9]+$" <<< $1; then
                return 1
        fi
        return 0
}

if [ -z $1 ] || ! is_int $1 || (($1 <= 0)); then
        printf "\
Usage: %s nbr_int
    nbr_int: Un nombre entier supérieur à 0\n" $0
        exit 1
fi

a=0
b=1

while (($b < $1)); do
        printf "%d\n" $b
        ((b=a+b))
        ((a=b-a))
done

printf "b/a = %1.15f\n" $(echo $b/$a | bc -l)

exit 0

En php:

#!/usr/bin/env php

<?php

if(! isset($argv[1]) || ! is_numeric($argv[1]) || intval($argv[1]) <= 0){
        printf("Usage: %s nbr_int
    nbr_int: Un nombre entier supérieur à 0\n", $argv[0]);
        exit(1);
}

$nbr_int = intval($argv[1]);

$a = 0;
$b = 1;

while ($b < $nbr_int) {
        printf("%d\n", $b);
        $b = $a + $b;
        $a = $b - $a;
}

printf("b/a = %1.15f\n", $b/$a);

exit(0);

En python3:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys, argparse

parser = argparse.ArgumentParser(description=u"Calcul et affiche les n premiers nombres de la suite de Fibonacci.")
parser.add_argument("number", help=u"Nombre maximum de calcul de la séquence. Ce nombre doit égal ou supérieur à 2.", type=int)
parser.add_argument("-g", "--display-golden-number", dest="golden", help=u"Afficher le nombre d'or.", action="store_true")
parser.add_argument("--log", default=sys.stdout, type=argparse.FileType('w'), help=u"Fichier où sera enregistré le résultat.")
args = parser.parse_args()

if args.number < 2:
    print(u"Indiquer un nombre supérieur ou égal à 2.")
    sys.exit(1)

a,b = 0,1

while b < args.number:
    print("{:d}".format(b), file=args.log)
    a,b = b,a+b

if args.golden:
    print(u"\nb/a = {:1.15f} (Nombre d'or)".format(b/a), file=args.log)

args.log.close()
sys.exit(0)

infoTous ces scripts prennent en paramètre un nombre entier positif.
En prime, le quotient des deux derniers termes est affiché et représente le nombre d'or si le nombre passé en argument est supérieur ou égal à 1 000 000 (pour la précision du nombre d'or).
Le script Python est un peu plus développé avec une gestion des arguments plus pointue.

Framabin

Framabin

Transmettre des messages chiffrés.

Framabin est un service en ligne de Framasoft, libre et gratuit, qui permet de transmettre des messages, de façon sécurisée (les messages sont chiffrés en utilisant l’algorithme AES 256 bits).

Il est possible de définir une date d'expiration, et une option est diponible afin de supprimer le message dès la première lecture.

Une fois le message créé, 2 urls sont fournies pour le partage et la suppression du message.

Etiquettes: 

Framapic

Framapic

Partagez des images de façon anonyme.

Framapic est un service en ligne de Framasoft, libre et gratuit, qui permet de partager des images, de façon sécurisée (les images sont cryptées sur le serveur).

Il est possible d'y envoyer une image à partir de son poste ou d'une url.

Il est possible de définir une date d'expiration, et une option est diponible afin de supprimer l'image dès le premier accès.

Enfin, un bouton permet de partager le lien de l'image directement sur Twitter et 4 urls sont fournies pour l'affichage, le téléchargement, le partage et la suppression de l'image.

Etiquettes: 

Git: utiliser "git add" avec une liste de fichiers spécifiques

Quand on souhaite exclure des fichiers lors de l'utilisation de "git add", il est possible d'utiliser un fichier ".gitignore" dans lequel on indique tous les fichiers/dossiers que l'on souhaite exclure.

Très pratique quand la liste des fichiers/dossiers à exclure n'est pas très importante.

Mais comment faire quand c'est l'inverse, un dossier contenant de nombreux fichiers, et seulement quelques fichiers à ajouter à un dépôt git.

L'idéal serait de pouvoir utiliser un fichier ".gitaccept"

Voici une petite astuce qui permet de le faire.

$ xargs -a .gitaccept -d '\n' git add

Le principe consiste à utiliser la commande xargs.
La paramètre -a indique le fichier à lire sur l'entrée standard, ce fichier contient la liste des fichiers à ajouter au dépôt git, et le paramètre -d indique le caractère à utiliser comme délimiteur.

Pour chaque fichier lu dans le fichier ".gitaccept", la commande xargs exécute la commande "git add".

Etiquettes: 

LessPass

LessPass est un outil, en ligne, qui permet de gérer ses différents mots de passe en les calculant, à la demande, à l'aide d'informations fournies, à l'inverse des différents gestionnaires de mots de passe qui eux les enregistrent dans une base.

Le gros avantage de cette solution, tous vos mots de passe sont disponibles n'importe quand, n'importe où, sur n'importe quelle machine et n'importe quel navigateur.

Deux informations importantes ne doivent pas être oubliées.
L'adresse du site web LessPass ainsi que votre mot de passe maître.
Ah oui, il faut quand même se souvenir d'un mot de passe.

Une extension pour Chrome et Firefox est également disponible. Cela évite d'aller sur le site web.

Comment cela fonctionne-t-il ?

Pour fonctionner, l'algorithme a besoin de trois informations:

  1. L'adresse du site sur lequel vous voulez vous connecter
  2. Votre nom d'utilisateur
  3. Le mot de passe maître

A l'aide de ces informations, l'algorithme calcul un mot de passe, de la longueur souhaitée et contenant ou pas des caractères spécifiques.
C'est ce mot de passe qui doit être utilisé pour vous connecter sur le site indiqué.

A utiliser, bien sûr, lors de la création d'un compte, ou alors si le compte est déjà existant, le mot de passe correspondant doit être changé par celui-ci.

LessPass est Open Source. Ce qui signifie que le code est accessible.
Les sources sont disponibles sur GitHub https://github.com/lesspass/lesspass/

LessPass peut également être auto-hébergé. (container docker)

L'algorithme est consultable ici https://github.com/lesspass/core/blob/master/index.js

Grâce à cet outil, fini les mots de passe identiques pour tous les sites sur lesquels vous avez un compte.

Etiquettes: 

Letsencrypt: certbot & dns ovh

Procédure de création/mise à jour des certificats letsencrypt avec certbot et certbot-dns-ovh

Toutes les infos ont été trouvées sur ce site: https://buzut.net/certbot-challenge-dns-ovh-wildcard/

Installations des outils

# apt-get install python3-pip
# python3 -m pip install --upgrade certbot certbot-dns-ovh

Configuration des journaux

Création du fichier "/etc/logrotate.d/certbot" avec le contenu suivant

/var/log/letsencrypt/*.log {
    monthly
    rotate 6
    compress
    delaycompress
    notifempty
    missingok
    create 640 root adm
}

Création des clés API OVH

Pour que le script puisse vérifier que le domaine vous appartient, il doit avoir l'autorisation de modifier des enregistrements TXT dans les DNS.

Il faut donc créer les clés API avec une date de validité illimitée et pour plus de sécurité, avec une restriction au niveau de l'adresse IP du serveur où sera exécuté le script.

Les droits doivent être renseignés de cette manière:

    GET /domain/zone/*
    PUT /domain/zone/*
    POST /domain/zone/*
    DELETE /domain/zone/*

Une fois les clés créées, il est nécessaire de créer un fichier INI pour y stocker les différentes clés générées.

Créer le fichier ~/.secrets/certbot/ovh.ini avec le contenu suivant:

dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = xxx
dns_ovh_application_secret = xxx
dns_ovh_consumer_key = xxx

Ne pas oublier de fixer les droits sur le fichier :

# chmod 600 ~/.secrets/certbot/ovh.ini

Génération des certificats

Par exemple, pour mon domaine

# certbot certonly --dns-ovh --dns-ovh-credentials ~/.secrets/certbot/ovh.ini -d quennec.fr -d *.quennec.fr

Automatiser le renouvellement

A renseigner dans crontab pour un contrôle tous les lundi à 9:00 et une mise à jour si nécessaire.

00 9 * * 1 /usr/local/bin/certbot certonly --dns-ovh --dns-ovh-credentials /root/.secrets/certbot/ovh.ini --non-interactive --agree-tos --email mon@email.fr -d quennec.fr -d *.quennec.fr && systemctl reload nginx

Configuration vhost nginx

Modifier le fichier vhost correspondant au domaine pour y intégrer les directives liées au certificat letsencrypt.

server {
    listen 443 ssl;
    server_name quennec.fr www.quennec.fr;
    ...
    ssl_certificate /etc/letsencrypt/live/quennec.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/quennec.fr/privkey.pem;
    ...
}

Ninja Cookie

Marre de cliquer à tout bout de champ sur les bandeaux cookies.

Cette extension, Ninja Cookie, pour Firefox et Chrome se charge à votre place de les refuser automatiquement.

Pour Firefox: https://addons.mozilla.org/fr/firefox/addon/ninja-cookie/

Pour Chrome: https://chrome.google.com/webstore/detail/ninja-cookie/jifeafcpcjjgnlcnk...

Site officiel du projet: https://ninja-cookie.com/fr/

Table ASCII (0, 127)

ascii
Table ASCII ( 0 - 127 )

       Décimal   Octal   Hex  Binaire   Caractère
       -------   -----   ---  --------    ------
         000      000    00   00000000      NUL    (Null char.)
         001      001    01   00000001      SOH    (Start of Header)
         002      002    02   00000010      STX    (Start of Text)
         003      003    03   00000011      ETX    (End of Text)
         004      004    04   00000100      EOT    (End of Transmission)
         005      005    05   00000101      ENQ    (Enquiry)
         006      006    06   00000110      ACK    (Acknowledgment)
         007      007    07   00000111      BEL    (Bell)
         008      010    08   00001000       BS    (Backspace)
         009      011    09   00001001       HT    (Horizontal Tab)
         010      012    0A   00001010       LF    (Line Feed)
         011      013    0B   00001011       VT    (Vertical Tab)
         012      014    0C   00001100       FF    (Form Feed)
         013      015    0D   00001101       CR    (Carriage Return)
         014      016    0E   00001110       SO    (Shift Out)
         015      017    0F   00001111       SI    (Shift In)
         016      020    10   00010000      DLE    (Data Link Escape)
         017      021    11   00010001      DC1    (XON)(Device Control 1)
         018      022    12   00010010      DC2    (Device Control 2)
         019      023    13   00010011      DC3    (XOFF)(Device Control 3)
         020      024    14   00010100      DC4    (Device Control 4)
         021      025    15   00010101      NAK    (Negative Acknowledgement)
         022      026    16   00010110      SYN    (Synchronous Idle)
         023      027    17   00010111      ETB    (End of Trans. Block)
         024      030    18   00011000      CAN    (Cancel)
         025      031    19   00011001       EM    (End of Medium)
         026      032    1A   00011010      SUB    (Substitute)
         027      033    1B   00011011      ESC    (Escape)
         028      034    1C   00011100       FS    (File Separator)
         029      035    1D   00011101       GS    (Group Separator)
         030      036    1E   00011110       RS    (Request to Send)(Record Separator)
         031      037    1F   00011111       US    (Unit Separator)
         032      040    20   00100000       SP    (Space)
         033      041    21   00100001        !    (exclamation mark)
         034      042    22   00100010        "    (double quote)
         035      043    23   00100011        #    (number sign)
         036      044    24   00100100        $    (dollar sign)
         037      045    25   00100101        %    (percent)
         038      046    26   00100110        &    (ampersand)
         039      047    27   00100111        '    (single quote)
         040      050    28   00101000        (    (left opening parenthesis)
         041      051    29   00101001        )    (right closing parenthesis)
         042      052    2A   00101010        *    (asterisk)
         043      053    2B   00101011        +    (plus)
         044      054    2C   00101100        ,    (comma)
         045      055    2D   00101101        -    (minus or dash)
         046      056    2E   00101110        .    (dot)
         047      057    2F   00101111        /    (forward slash)
         048      060    30   00110000        0
         049      061    31   00110001        1
         050      062    32   00110010        2
         051      063    33   00110011        3
         052      064    34   00110100        4
         053      065    35   00110101        5
         054      066    36   00110110        6
         055      067    37   00110111        7
         056      070    38   00111000        8
         057      071    39   00111001        9
         058      072    3A   00111010        :    (colon)
         059      073    3B   00111011        ;    (semi-colon)
         060      074    3C   00111100        <    (less than sign)
         061      075    3D   00111101        =    (equal sign)
         062      076    3E   00111110        >    (greater than sign)
         063      077    3F   00111111        ?    (question mark)
         064      100    40   01000000        @    (AT symbol)
         065      101    41   01000001        A
         066      102    42   01000010        B
         067      103    43   01000011        C
         068      104    44   01000100        D
         069      105    45   01000101        E
         070      106    46   01000110        F
         071      107    47   01000111        G
         072      110    48   01001000        H
         073      111    49   01001001        I
         074      112    4A   01001010        J
         075      113    4B   01001011        K
         076      114    4C   01001100        L
         077      115    4D   01001101        M
         078      116    4E   01001110        N
         079      117    4F   01001111        O
         080      120    50   01010000        P
         081      121    51   01010001        Q
         082      122    52   01010010        R
         083      123    53   01010011        S
         084      124    54   01010100        T
         085      125    55   01010101        U
         086      126    56   01010110        V
         087      127    57   01010111        W
         088      130    58   01011000        X
         089      131    59   01011001        Y
         090      132    5A   01011010        Z
         091      133    5B   01011011        [    (left opening bracket)
         092      134    5C   01011100        \    (back slash)
         093      135    5D   01011101        ]    (right closing bracket)
         094      136    5E   01011110        ^    (caret cirumflex)
         095      137    5F   01011111        _    (underscore)
         096      140    60   01100000        `
         097      141    61   01100001        a
         098      142    62   01100010        b
         099      143    63   01100011        c
         100      144    64   01100100        d
         101      145    65   01100101        e
         102      146    66   01100110        f
         103      147    67   01100111        g
         104      150    68   01101000        h
         105      151    69   01101001        i
         106      152    6A   01101010        j
         107      153    6B   01101011        k
         108      154    6C   01101100        l
         109      155    6D   01101101        m
         110      156    6E   01101110        n
         111      157    6F   01101111        o
         112      160    70   01110000        p
         113      161    71   01110001        q
         114      162    72   01110010        r
         115      163    73   01110011        s
         116      164    74   01110100        t
         117      165    75   01110101        u
         118      166    76   01110110        v
         119      167    77   01110111        w
         120      170    78   01111000        x
         121      171    79   01111001        y
         122      172    7A   01111010        z
         123      173    7B   01111011        {    (left opening brace)
         124      174    7C   01111100        |    (vertical bar)
         125      175    7D   01111101        }    (right closing brace)
         126      176    7E   01111110        ~    (tilde)
         127      177    7F   01111111      DEL    (delete)
Etiquettes: 

TestDisk & PhotoRec

TestDisk & PhotoRec sont deux utilitaires qui permettent de récupérer des données effaçées sur des supports tels que des cartes mémoires et des clés usb.

Disponibles pour Linux, Mac et Windows.

Pour le téléchargement et la documentation complète: http://www.cgsecurity.org/wiki/Main_Page

Pour une meilleur sécurité, il est préférable d'utiliser ces utilitaires sur une copie du support à analyser.

Pour ce faire, l'utilitaire dd disponible sous Linux fera très bien l'affaire.

Pour connaitre le fichier /dev/xxx correspondant au support à analyser, la commande dmesg sous Linux permet de fournir l'information après avoir, bien sûr, inséré le support dans l'ordinateur.

Ou alors, à l'aide du fichier /proc/partitions:

# cat /proc/partitions
major minor  #blocks  name

   8        0  976762584 sda
   8        1     194560 sda1
   8        2    1000448 sda2
   8        3          1 sda3
   8        5  975564800 sda5
 253        0  975560704 dm-0

Pour effectuer une image du support:

# dd if=/dev/sdx of=/tmp/image.dd

Attention, avec la commande dd, de ne pas inverser les fichiers des paramètres if et of. Les conséquences sont terribles et irréversibles.

Pour installer TestDisk et PhotoRec sous Linux:

# sudo apt-get update

# sudo apt-get install testdisk

Pour les autres systèmes, il est possible de le télécharger ici: http://www.cgsecurity.org/wiki/TestDisk_Download

Pour analyser l'image du support et rechercher les fichiers effaçés avec l'utilitaire testdisk:

# testdisk /tmp/image.dd

TestDisk permet de restaurer des fichiers à partir d'une liste créée suite à une analyse.

Pour analyser l'image du support et rechercher les fichiers effaçés avec l'utilitaire photorec:

# photorec /tmp/image.dd

PhotoRec permet la restauration de tous les fichiers trouvés. Le nombre de fichiers restaurés est plus important qu'avec l'utilitaire TestDisk.

Plus d'info pour TestDisk: http://www.cgsecurity.org/wiki/TestDisk

Plus d'info pour PhotoRec: http://www.cgsecurity.org/wiki/PhotoRec

Etiquettes: 

Utiliser les moteurs de recherche sur un site en particulier

Sur tous les moteurs de recherche (Google, Bing, QWant ...), il existe une fonction bien particulière qui permet d'effectuer des recherches sur un site en particulier (le site doit être indexé par le ou les moteurs de recherche bien sûr).

Pour cela, il suffit d'indiquer dans la zone de recherche, en plus du ou des termes recherchés, la mention "site:monsite.fr"

Exemple avec Google:

Pour lister toutes les pages d'un site indexées par le moteur de recherche, il suffit d'indiquer seulement la mention "site:monsite.fr"

Exemple avec QWant:

Il existe d'autres fonctions mais celles-ci sont vraiment les plus intéressantes.

Visioconférence en toute liberté

Le site meet.jit.si propose de la visioconférence libre et opensource.

Le service est utilisable en ligne via un navigateur, aucune installation sur les postes clients n'est nécessaire.

Il est également possible de créer son propre serveur mee.jit.si en téléchargeant les sources à cette adresse https://jitsi.org/jitsi-meet/

Sur le site meet.jit.si il est possible, via l'icone (en haut à droite) de configurer différents paramètres tels que son profil (pseudo et adresse mail), connecter son agenda Google et/ou Microsoft et la langue d'utilisation.

Comment créer une nouvelle visioconférence, tout simplement en saisissant un nom personnalisé dans la zone de texte "Démarrer une nouvelle réunion" ...

... et cliquer sur créer.

C'est tout bête.

Cette action génère une adresse HTTP du style https://meet.jit.si/MaNouvelleRéunion

Vous l'aurez compris, le nom de votre réunion est tout simplement ajouté à l'url principale https://meet.jit.si/

Partant de ce principe, il est extrêmement facile de générer des visioconférences en automatique.
Il faut tout de même penser à créer un nom de réunion pas trop facile à deviner pour éviter que n'importe qui s'invite à la réunion.

Pour cela, autant générer un nom de réunion avec des outils tels que:

En Bash

$ uuidgen
8eabdf78-6841-4f6f-9e35-bddd06b0c774

En Python

>>> import uuid
>>> print(uuid.uuid4())
d201619e-2245-4fba-bed2-57b5c2326f04

Une fois la réunion créée, il est possible de modifier les options de la réunion via les icones en bas à droite

Via l'icone , il est possible de modifier les options de sécurité de la réunion.

Il est possible d'activer le mode "lobby" qui permet d'autoriser les personnes à accéder à la réunion qu'après y avoir été autorisé.
Il est possible également de créer un mot de passe pour l'accès à la réunion.

L'icone , permet d'inviter des participants

tout simplement en copiant le lien HTTP de la réunion, en envoyant des mails ou en contactant un numéro de téléphone avec un code pin.

Il est même possible d'embarquer la réunion dans une iframe.

Enfin, l'icone permet d'accéder à différentes options

Comme options intéressantes il y a notamment la possibilité d'enregistrer la réunion, de couper les micros de tous les participants...

La barre d'icones en bas au milieu , permet de couper son micro, de couper sa vidéo et de quitter la réunion.

Pour terminer, la barre d'icones en bas à gauche permet de discuter avec tous les participants via un chat, de partager son écran et de lever la main si on souhaite intervenir.

L'outil est vraiment très complet et surtout très facile à utiliser.

A consommer sans modération.