Comment trouver le mot de passe d’un ZIP avec fcrackzip

Comment trouver le mot de passe d’un ZIP avec fcrackzip

Un fichier zip demande un mot de passe que vous n’avez pas ? fcrackzip est votre ami 🙂

Il arrive, souvent, de tomber sur des fichiers ZIP dont l’ouverture se fait via un mot de passe, et c’est très frustrant de tomber sur ce type de fichier si vous avez pas LE fameux sésame.

fcrackzip est un petit utilitaire libre, puissant et très facile à utiliser, il est développé et maintenu par Marc Lehmann. L’attaque du fichier ZIP peut se faire soit via un dictionnaire ou par brute force.

L’installation est très simple avec un simple apt-get

1
apt-get install fcrackzip

Vous pouvez aussi télécharger les fichiers sources et compiler vous même.

l’utilisation se fait selon la syntaxe suivante

1
fcrackzip option fichier.zip

Voici les options indispensables que vous devez connaître (toutes les options)

-h : Vous donne la version et l’aide
-v : Mode verbeux
-b : En mode Brute Force. Il tentera toutes les combinaisons possibles selon vos spécifications.
-D : utilisation d’un dictionnaire. Dans ce cas, on utilise un fichier qui doit contenir un mot de passe par ligne et doit être classé par ordre alphabétique
-c : nous spécifions les caractères à utiliser lors du brute-force, cela peut être une ou une combinaison de ce qui suit :

  • a = tous les caractères minuscules [a-z]
  • A = tous les caractères majuscules [A-Z]
  • 1 = tous les caractères numériques [0-9]
  • ! = inclure les caractères suivant [!:$%&/()=?{[]}+*~#]
  • : = inclure un ou plusieurs caractères spécifiques.

Pour utiliser fcrackzip avec un dictionnaire de mots, il faut utiliser l’option -D (–dictionary)

1
fcrackzip -D -p listeMots.txt monFichier.zip

Il va de soit qu’il faut un dictionnaire de bonne qualité, complet et assez bien fourni pour que cela fonctionne.

Pour l’utiliser en mode Brute-Force, il faut bien choisir les types de caractères et la longueur des mots de passe que nous voulons utiliser, plus vous mettez de type caractère plus l’attaque sera longue. il est de même si le nombre de caractère d’un mot de passe est élevé.
Il ne faut pas oublier l’option -b pour brute-force

Exemples de syntaxes

Tous les exemples si dessous sont en mode verbeux (-v) et test de dézip (-u pour unzip)

1
fcrackzip -b -c aaaaa -v -u monFichier.zip
1
fcrackzip -b -c a -v -u -l 5 monFichier.zip

Ces deux syntaxes sont identiques, ici seuls les mots de passe de 5 caractères en minuscules seront testés

1
fcrackzip -b -c aA -v -u -l 3-6 monFichier.zip

Les mots de passe entre 3 et 6 caractères contenant des minuscules et majuscules seront testés

1
fcrackzip -b -c aA1 -v -u -l 3-6 monFichier.zip

Les mots de passe entre 3 et 6 caractères contenant des minuscules, majuscules et chiffres seront testés

1
fcrackzip -b -c aA1! -v -u -l 3-6 monFichier.zip

Les mots de passe entre 3 et 6 caractères contenant des minuscules, majuscules, chiffres et les caractères spéciaux [!:$%&/()=?{[]}+*~#] seront testés

1
fcrackzip -b -c aA:.? -v -u -l 3-6 monFichier.zip

Les mots de passe entre 3 et 6 caractères contenant des minuscules, majuscules et caractères spéciaux “.” et “?” seront testés

Dès fois en vidéo c’est plus parlant : tuto vidéo

Voilà, à vous de jouer maintenant

nohup et scp, comment détacher un processus du terminal

nohup et scp, comment détacher un processus du terminal

Aller, un petit billet pour vous parler des commandes nohup et scp et donner une solution à un problème que j’ai rencontré.

Il m’arrive souvent de vouloir transférer des fichiers volumineux d’un serveur à un autre et qui ne se trouvent pas sur le même réseau, plusieurs solutions existent, mais je parlerai ici de la commande SCP.
En résumé, le SCP (Secure Copy Protocol) permet de transférer en toute sécurité des fichiers entre deux machines via le protocole sécurisé SSH.

Le souci c’est que plus les fichiers sont lourds, plus le temps de transfert augmente, et si vous avez une connexion merdique, comme c’est mon cas, le temps d’attente s’allonge considérablement, et pendant ce temps vous ne pouvez pas fermer le terminal ou éteindre la machine, car le processus du scp et lié à celui du shell qui l’a lancé.

nohup et scp

Vous allez me dire, rien de plus simple, la commande nohup permet justement de détacher le processus fils du processus père.
Ok, nous pouvons utiliser la commande nohup dans ce cas de figure, mais pas en utilisation standard, car la scp demande un mot de passe.

Pour plus de clarté voici un exemple concret

Imaginons que j’ai un fichier nommé “MonFichierTresLourd” que je veux transférer à un serveur “zenzla@chezmoi” et plus exactement dans le répertoire “/media/fichier”

En temps normal, j’utilise la commande scp seule

1
2
scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier
zenzla@chezmoi password:

Ici, il me demande le mot de passe pour me connecter au serveur distant qui est zenzla@chezmoi

Maintenant, si j’utilise la commande scp avec une utilisation standard de nohup

1
nohup scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier

Dans ce cas, je n’aurais pas la main pour saisir le mot de passe :(, même en arrêtant le processus avec Ctrl+z

La solution est donc de jouer avec les redirections des flux comme le démontre la commande si dessous

1
2
3
4
5
6
nohup scp -r MonFichierTresLourd  zenzla@chezmoi:/media/fichier > nohup.out 2>&1
zenzla@chezmoi password: <--- Saisir le mot de passe

Ctrl+z
.......
bg

Explication
Nous redirigeons la sortie standard (1) vers le fichier nohup.out ainsi que la sortie des erreurs (2), cela vas nous permettre de saisir le mot de passe demandé,
mais le terminal n’est toujours pas libre, il faut donc arrêter (non le tuer) le processus en faisant un Ctrl+z puis le mettre en arrière-plan (background) en saisissant bg

Voilà votre terminal est libre !!
Pour vous assurer que la copie des fichiers tourne bien en arrière plan, utilisez la commande jobs

Vous pouvez maintenant éteindre votre machine et rentrer chez vous grâce à nohup et scp

Erreur de communication avec gpg-agent dans Enigmail

Erreur de communication avec gpg-agent dans Enigmail

Il y a deux trois jours en lançant mon Thunderbird, un message d’erreur s’est affiché m’indiquant que ce dernier avait rencontré des problèmes avec gpg-agent. “erreur de communication avec gpg-agent”

Voici le message en entier

GnuPG a rapporté une erreur de communication avec gpg-agent (un composant de GnuPG).

Ceci est une erreur d’installation ou de configuration qui empêche Enigmail de fonctionner correctement et qui ne peut pas être corrigée automatiquement.

Nous vous conseillons vivement de consulter notre page de support sur notre site internet à l’adresse https://enigmail.net/faq.

En effet il était impossible d’envoyer des messages chiffrés et/ou signés, la lecture et le déchiffrement des messages eux fonctionne bien.

En cherchant un peu sur le web, j’ai découvert que ce problème vient du fait que certaines versions de Gnome Keyring détournent la connexion à l’agent GPG – gpg-agent- (ils interceptent toutes les communications entre gpg ou gpgsm et gpg-agent) en définissant la variable d’environnement GPG_AGENT_INFO pour qu’elle pointe vers le processus Gnome Keyring. ce dernier filtre alors toute communication avec gpg-agent.

Solution de l’erreur de communication avec gpg-agent

Il existe plusieurs solutions à cette erreur de communication avec gpg-agent, mais la plus simple à mettre en œuvre est la suivante:

créez un répertoire “autostart” dans le répertoire .config (il n’est pas nécessaire d’être connecté en root)

1
mkdir -p ~/.config/autostart

Copiez le fichier “/etc/xdg/autostart/gnome-keyring-gpg.desktop” dans ce répertoire

1
cp /etc/xdg/autostart/gnome-keyring-gpg.desktop ~/.config/autostart/.

Éditez ce fichier avec votre éditeur de texte préféré, pour ma part c’est vi

1
vi ~/.config/autostart/gnome-keyring-gpg.desktop

Et ajoutez la ligne suivant à la fin du fichier

1
X-GNOME-Autostart-enabled=false

Redémarrer la machine pour que la nouvelle config soit prise en compte.

Pour moi cette solution a réglé le problème, si ce n’est pas le cas pour vous, une autre solution propose d’ajouter les lignes ci-dessous en plus de la précédente.

1
2
Hidden=true
NoDisplay=false

[MAJ le 21/04/2016]

Solution pour Debian 8

Dans le cas Icedove (Thunderbird sur Debian)

– Ouvrir Icedove/Thunderbird
– Supprimer Enigmail dans les Plugins/Add-ons puis fermer Icedove/Thunderbird
– Ouvrir le gestionnaire de paquets Synaptic, rechercher enigmail, l’installer selon la procédure habituelle
– Relancer Icedove

Merci (Khrys)

Cet article vous a aidé ? n’hésitez pas à le partager !! 😛

Disque dur RAW : récupération des données

Disque dur RAW : récupération des données

Ce billet et plus un retour d’expérience qu’un tutoriel.

J’avais besoin pour mon serveur maison d’ajouter un disque dur pour tester un script d’analyse de données, et en fouillant dans mon bazar, j’ai trouvé un ancien disque SATA de 500Go, exactement ce dont j’ai besoin. En le branchant sur une machine sous Ubuntu pour prendre connaissance de son contenu, paffff impossible de le monter :

1
Error mounting /dev/sdb1 at /media/: Command-line `mount -t "ntfs" –o

J’avais beau tester toutes les commandes habituelles ; Testdisk, fsck, SMART etc.. Mais rien à faire, en fouillant un peu sur le net, j’ai lu sur un forum, que si le disque dur est en NTFS, les outils les plus adaptés pour le réparer seront sur Windows 0_o, j’étais septique, mais vu que sur Linux je n’arrivais pas à résoudre le problème, et que le seul tuto trouvé sur unbuntu-fr utilisé une VM Windows, je me suis dis pourquoi pas.

De ce pas j’ai rebooté ma machine sur Windows, et en effet le disque dur se monte bien, mais une fenêtre s’ouvre en me demandant de formater le disque, ce que je ne voulais pas faire.

Et c’est en allant sur la gestion des « disques durs » que j’ai vu le tag RAW sur le disque

Disque dur RAW
Disque dur RAW

Disque dur RAW c’est quoi 

Un disque dur en RAW est un disque dont les données sont inaccessibles pour Windows (Linux aussi dans mon cas), la cause de ce problème peut être divers ;  corruption du système de fichier (FS), attaque de virus ou trojan

Une fois le disque dur interne ou externe est en mode « RAW », vous ne serez plus en mesure d’accéder aux partitions et de ce fait ni à votre ordinateur. Le seul correctif proposé par Windows est formatage, mais dans ce cas vous prenez le risque d’effacer définitivement vos données.

Que faire alors ?

Testdisk, pourtant privilégié pour résoudre ce problème n’a rien donné, que ce soit sur Windows ou Linux. Même constat pour les autres applications dont certaines sont très exotiques et que j’ai testé uniquement sur une machine virtuelle pour parer à une éventuelle casse.

GetDataBack le sauveur.

Parmi tous les logiciels testés, seul GetDataback et plus précisément GetDataBack for NTFS m’a donné satisfaction, j’ai pu, avec ce logiciel, visualiser l’ensemble des données présent dans le disque dur  RAW, après quelques heures d’analyse.

Dans mon cas il n’y avait rien d’intéressant, à part deux ou trois photos que je veux récupérer, mais pour les copier il fallait une licence GetDataBack, chose que je n’ai pas bien évidement.

Je me suis dit alors que si GetDataBack a pu accéder aux données du disque dur RAW, un outil comme « chkdsk » qui est nativement installé sur Windows peu le faire.

Et en effet, c’était le cas, et voici comment faire :

Quand vous branchez votre disque dur RAW, retenez la lettre de montage, dans mon cas c’est la lettre “I” (i)

Montage disque
Montage disque

Puis lancez  l’ « Invite de commande »  Windows comme suite : cliquez sur démarrer –> tapez « cmd » dans le champ de recherche.

Invite de commandes
Invite de commandes

Puis tapez les commande suivantes :

1
chkdsk I: /F

I = a la lettre de montage de mon disque dur

L’analyse peut durer un sacrée moment, plus de 10 heure dans mon cas, mais l’attente est récompensée par un disque dur qui fonctionne comme au premier jour.

Une dernière chose, mais vu que vous êtes arrivé là vous devez en être conscient, n’oubliez jamais de sauvegarder vos données :), c’est l’une des bases d’une bonne hygiène numérique.

Solution firmware: failed to load brcm/bcm43xx-0.fw sur Debian 8

Solution firmware: failed to load brcm/bcm43xx-0.fw sur Debian 8

failed to load brcm/bcm43xx-0.fw

Lors d’une nouvelle installation de Debian 8 sur un pc portable, il m’était impossible de me connecter en Wifi, ce dernier ne trouvant aucun réseau actif.
En cherchant un peu dans les logs de démarrage avec “dmesg” j’ai trouvé que c’est le firmware de la carte wifi qui était absent.

1
failed to load brcm/bcm/bcm43xx-0.fw (-2)

Ce firmware n’étant pas libre, et donc non disponible dans les dépôts Debian par défaut lors d’une installation standard.

résoudre le problème failed to load brcm/bcm43xx-0.fw

Apparemment, en cherchant sur le net, je me suis rendu compte que je n’étais pas le seul à rencontrer ce bug, ce qui est rassurant en même temps :P. Mais la solution la plus claire que j’ai pu trouver est celle du Wiki de Debian

Et donc, pour résoudre ce problème “failed to load brcm/bcm43xx-0.fw” il nous faut ajouter le dépôt “nom-free” à la source liste de Debian, pour cela ouvrez le fichier /etc/apt/sources.list avec votre éditeur de texte préféré, pour moi c’est vi

1
vi /etc/apt/sources.list

puis ajouter la ligne suivant à la fin de ce fichier

1
deb http://http.debian.net/debian/ jessie main contrib non-free

faite une mise-à-jour de la liste des dépôts

1
apt-get update

Puis installez les paquets linux-headers appropriés et broadcom-sta-dkms, cela installera aussi le paquet recommandé wireless-tools.

1
apt-get install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

DKMS compilera le module wl adapté à votre système.

Maintenant pour éviter les conflits, il faut décharger les modules qui peuvent nous compliquer l’installation

1
modprobe -r b44 b43 b43legacy ssb brcmsmac

On charge le module wl

1
modprobe wl

Rebooter le système pour une prise en charge des modification apportée

1
reboot

Et le tour est joué :)!! Je capte à nouveau les réseaux wifis disponibles.

Vous pouvez trouver la liste des périphériques pris en charge par le module wl dans le lien du wiki de Debian donné plus haut.

BIND DNS : query (cache) ‘*/IN’ denied

BIND DNS : query (cache) ‘*/IN’ denied

Ce matin en regardant les logs de mon serveur nouvellement réinstallé, je vois des milliers de lignes liées à BIND DNS :

1
2
3
4
5
...
09-Oct-2015 22:23:29.076 client 74.125.181.49#32935: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:29.086 client 74.125.181.54#38723: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:39.833 client 62.34.202.138#51968: query (cache) 'www.site.fr/A/IN' denied
...

Dans un premier temps, je pensais à une attaque du mon serveur, mais en cherchant bien sur le net, je n’étais pas le seul a être touché par ce problème lié à BIND9 les fameux “Faille DOS DNS”.
Et c’est bien ce que m’a confirmé l’outil dnstop, outil de monitoring de requêtes DNS, avec la commande

1
dnstop eth0

Dans mon cas, le serveur BIND DNS refuse bien les requêtes, d’où la mention “denied”, donc même si cela engendrait des kilomètres de ligne dans les fichiers logs, le serveur n’en souffre pas.

Oui mais comment faire pour bloquer tous ce raffut bind dns ?

J’ai pensé alors à fail2ban qui est un formidable outil pour bannir les IP trop encombrantes.
Mais cela s’avère une très mauvaise solution, car en général dans ce type d’attaques, les IP sont celles des victimes voir même de moteurs de recherche, et non celles des assaillants.
Bannir l’IP d’un moteur de recherche, ce n’est jamais bon.

Sécuriser sont serveur BIND DNS

Ce qu’il faut vérifier dans un premier temps, c’est si le serveur BIND DNS n’est pas récursif.

Avec la commande suivante

1
dig @IP_DU_SERVEUR SOA fr.

Si vous voyez dans les flags la mention “ra”, c’est que le serveur est récursif. (ra = recursion available)
Attention, vous devez faire ce test depuis l’extérieur de votre réseau local.

1
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

Pour corriger cela il faut ajouter à la fin du fichier de configuration de BIND les lignes suivantes

1
vi /etc/bind/named.conf.options

ajoutez

1
allow-recursion { 127.0.0.1; IP_DU_SERVEUR;};

Ce qui limite l’utilisation de BIND DNS au serveur lui même.

Ensuite ajoutez la ligne

1
allow-query-cache { 127.0.0.1; IP_DU_SERVEUR;};

Et cela pour interdire l’utilisation du cache de notre serveur
Ajoutez enfin

1
2
additional-from-cache no;
recursion no;

redémarrer bind pour la prise en compte des modifications

1
/etc/init.d/bind9 restart

Ref. Blog de bortzmeyer, Système Linux

DNS mail de GANDI, les configurations dans ISPConfig

DNS mail de GANDI, les configurations dans ISPConfig

Hello,

Généralement quand j’écris un article c’est justement pour y revenir après et ne pas oublier ce que j’ai fait pour le truc que j’ai bidouillé fonctionne. Et c’est le cas pour celui-ci.
En résumé, j’ai un domaine, dont le site est hébergé par mon serveur dédié, mais je veux que la gestion des e-mails reste chez Gandi, pour des raisons pratiques.
J’avais fait l’erreur il y a quelques mois, ou j’ai changé les DNS d’un site pour pointer sur mon serveur, mais de ce fait les mails Gandi ne fonctionnaient plus, car dans les DNS il faut configurer les DNS mail de GANDI

DNS mail de GANDI dans ISPConfig

Il va de soi que nous parton du fait que le site est maintenant hébergé chez vous avec la bonne config DNS.

Pour garder la gestion des DNS mails chez Gandi, vous devez modifier les paramètres DNS du votre site que je nommerais pour l’exemple “domain.tld”
Pour modifier les DNS aller sur l’onglet DNS -> DNS Zones puis cliquez sur le domaine domain.tld. Vous allez tomber sur la config DNS du site, cliquez ensuite sur “Enregistrement”

DNS mail de Gandi
DNS mail de Gandi

Ici il nous faudra ajouter quatre enregistrements CNAME et deux MX nécessaires aux DNS mail de GANDI

Ajoutons les quatre enregistrements CNAME

Cliquez sur CNAME, et ajouter les infos suivantes

1er enregistrement CNAME pour le POP
Nom d’hôte : pop
Nom d’hôte cible : access.mail.gandi.net. (Le point final est important)
TTL : 10800

Puis valider

Deuxième enregistrement CNAME pour le Webmail.
Nom d’hôte : webmail
Nom d’hôte cible : agent.mail.gandi.net.
TTL : 10800

Troisième enregistrement CNAME pour le SMTP
Nom d’hôte : smtp
Nom d’hôte cible : relay.mail.gandi.net.
TTL : 10800

Le dernier enregistrement pour le imap
Nom d’hôte : imap
Nom d’hôte cible : access.mail.gandi.net.
TTL : 10800

Maintenant les enregistrements MX, et pour que cela fonctionne il faut que ses enregistrements pointent sur GANDI
Il faut donc modifier celui qui est déjà enregistré en cliquant dessus et modifier comme suite:

Nom d’hôte : domain.tld. (votre domaine sans oublier le “.”)
Nom d’hôte du serveur mail : spool.mail.gandi.net.
Priorité : 10
TTL : 10800

Nous y ajoutons un enregistrement MX en cliquant sur +MX avec comme paramètres

Nom d’hôte : domain.tld. (votre domaine sans oublier le “.”)
Nom d’hôte du serveur mail : sfb.mail.gandi.net.
Priorité : 50
TTL : 10800

Et voilà, en ajoutant les DNS mail de GANDI, c’est maintenant ce dernier qui gère vos mails, et non plus votre serveur dédié.

Suppression accidentelle d’une partition GNU/Linux

Suppression accidentelle d’une partition GNU/Linux

Comment récupérer une partition supprimée par erreur via l’interface des gestions des disques de Windows.

Une mésaventure au dénouement heureux !! Ça fait cliché, mais cela résume bien ma situation.
En voulant rendre service à une amie, dont le disque dur externe « WD » n’était plus reconnu sur son PC, ni sur le mien d’ailleurs, que ce soit sur Ubuntu ou Windows, j’ai supprimé par erreur ma partition Ubuntu sur laquelle je travaille à plein temps.

Donc, vous l’avez compris, je suis en Double boot, une partition Windows 7 et une partition GNU/Linux sous Ubuntu.
Cette suppression accidentelle est due au fait que j’ai vue dans la « Gestion des disques » sous W7 une partition sans aucune lettre attribuée (exp c :, d : etc..) et sans vraiment réfléchir je l’ai supprimé O_o.

Suppresion de ma partition Ubuntu
Suppresion de ma partition Ubuntu

Je me suis rendu compte en même temps que je cliquais sur « supprimer le volume… » que c’était ma partition Ubuntu que je supprimé, mais le mal était fait.

La partition suprimmée
la partition n’est plus reconnue

Voilà pour le contexte, maintenant le fond du sujet :
Comment récupérer cette partition Ubuntu supprimée ?

Ce qui est important à retenir, c’est que j’ai supprimé la partition uniquement (c’est déjà assez ^^), mais je ne l’ai pas formaté, car si je l’avais formaté, la récupération aurait été nettement plus compliqué, voire très compliqué.

Via les screens précédents, vous pouvez remarquer que ma partition est dans une partition logique. /dev/sda3, et la partition qui manque est /dev/sda7

Nous allons utilisez la commande fdisk via un LiveCD, ou Live USB.
Dans le terminal tapez

1
2
sudo fdisk /dev/sda
Command (m for help):

Si vous voulez avoir de l’aide sur cette commande mettez “m”, sinon “n” pour new

1
Command (m for help): n

A ce moment là il vous sera demander le choix des secteurs, comme nous voulons la plus large partition possible en faites “entrée”. fdisk ne touchera pas les partition déjà montées, mais uniquement les partitions libres.

1
2
3
4
5
First sector (15130080-15131635, default 15130080): <-- entrée
Using default value 15130080
Last sector, +sectors or +size{K,M,G} (15130080-15131635, default 15131635): <-- entrée
Using default value 15131635
Command (m for help):

Pour valider notre commande mettez : “w” pour Write

1
Command (m for help): w

Et là, comme par magie, ma partition supprimée réparait : /dev/sda7

Ensuite nous remontons les fichiers systèmes (filesystems)

1
2
3
sudo mount /dev/sda7 /mnt
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
sudo chroot /mnt

Nous réinstallons le GRUB

1
2
grub-install /dev/sda
update-grub

Puis redémarrer le machine.

Si au démarrage, le Grub ne vous propose plus de booter sur Windows, pas de panique, il suffit de le réparer avec Boot-Repair, pour cela vous pouvez suivre le tuto réparer le Grub avec Boot-Repair

Et voilà!! tous est entré dans l’ordre

Cependant, un petite remarque : En générale, quand vous lancez fdisk, il est demandé quelle type de partition nous voulons, étendue “e” ou primaire “p”, dans notre cas vue que la partition est déjà dans une partition étendue (voir les screen plus haut), et qu’il est impossible de monter une partition étendue dans une partition étendue, le choix se fait automatiquement.

Si cette article vous a dépanné, n’hésitez pas à la partagé ^^

SQL : la valeur la plus proche de la moyenne.

SQL : la valeur la plus proche de la moyenne.

Lors des exercices que je propose lors des formations en langage SQL que j’effectue pour « 2IC Formation » (un peu de pub ne fait pas de mal), il m’arrive de demander aux stagiaires de me trouver une requête sur une interrogation qui me passe par la tête.
Et cet après-midi, il faut dire que j’étais inspiré.

Voici une des tables de l’exercice, table bien connue par ceux qui ont déjà fait du SQL.

Table pour exercice SQL
Table pour exercice SQL

J’ai donc demandé : “le nom et le salaire de l’employer ayant le salaire le plus proche du salaire moyen”. Vache comme question.

Pour trouver la bonne requête, il faut y aller étape par étape.

En premier lieu, je calcule le salaire moyen avec AVG

1
2
3
4
5
6
7
8
SELECT AVG(SAL)
FROM emp;
+-------------+
| AVG(SAL)    |
+-------------+
| 2073.214286 |
+-------------+
1 ROW IN SET (0.01 sec)

Donc le salaire moyen est 2073.21. Nous pouvons constater via la table donnée plus haut, que la personne que nous recherchons est Clark avec un salaire de 2450.00.
Mais là c’est trop facile, il faut la requête qui nous trouvera ce résultat.

Le salaire le plus proche du salaire moyen, est le salaire dont la différence avec le salaire moyen est la plus petite.

Le reflex pour un débutant et de faire ce type de syntaxe:

1
2
3
4
5
6
7
8
SELECT ename, sal, sal-avg(sal)  
FROM emp;
+-------+--------+--------------+
| ename | sal    | sal-avg(sal) |
+-------+--------+--------------+
| SMITH | 800.00 | -1273.214286 |
+-------+--------+--------------+
1 ROW IN SET (0.00 sec)

Evidemment, cette syntaxe est fausse, car d’une part elle renvoie une seule ligne, et cela est due à la fonction AVG, qui calcule la moyenne une seule fois, c’est logique.
Et d’autre part, nous remarquons la valeur est négative, ce qui est encore une fois logique, vue qu’il existe des salaires inférieurs au salaire moyen.

Donc pour avoir la liste des tous les salaires et la différence avec le salaire moyen, il faut calculer celui-ci pour chaque ligne de la table, pour cela je remplace AVG(sal) par une requête.
Et pour ne plus avoir de valeurs négatives, je prends la valeur absolue de la différence avec la fonction ABS.

Voyons la syntaxe :
Note : le “as difference” nous sert à renommer la colonne du résultat.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT ename, sal, ABS(sal-(SELECT avg(sal) FROM emp)) AS difference FROM emp;
+--------+---------+-------------+
| ename  | sal     | difference  |
+--------+---------+-------------+
| SMITH  |  800.00 | 1273.214286 |
| ALLEN  | 1600.00 |  473.214286 |
| WARD   | 1250.00 |  823.214286 |
| JONES  | 2975.00 |  901.785714 |
| MARTIN | 1250.00 |  823.214286 |
| BLAKE  | 2850.00 |  776.785714 |
| CLARK  | 2450.00 |  376.785714 |
| SCOTT  | 3000.00 |  926.785714 |
| KING   | 5000.00 | 2926.785714 |
| TURNER | 1500.00 |  573.214286 |
| ADAMS  | 1100.00 |  973.214286 |
| JAMES  |  950.00 | 1123.214286 |
| FORD   | 3000.00 |  926.785714 |
| MILLER | 1300.00 |  773.214286 |
+--------+---------+-------------+
14 ROWS IN SET (0.00 sec)

Donc ici, nous avons bien la différence entre le salaire et le salaire moyen des tous les employés, il nous reste à trouver la plus petite différence.
Pour cela, dans un premier temps il faut ordonner la colonne “difference” du plus petit au plus grand (ordre ascendant) avec ORDER BY et de prendre uniquement la première ligne avec LIMIT.

la syntaxe est :

1
2
3
4
5
6
7
8
9
10
SELECT ename, sal, ABS(sal-(SELECT avg(sal) FROM emp)) AS difference  
FROM emp
ORDER BY difference ASC
LIMIT 1;
+-------+---------+------------+
| ename | sal     | difference |
+-------+---------+------------+
| CLARK | 2450.00 | 376.785714 |
+-------+---------+------------+
1 ROW IN SET (0.00 sec)

Il y a une autre syntaxe, ou le Group By se fait directement sur la requête qui calcule la différence;

1
2
3
4
5
6
7
8
9
SELECT ename, sal FROM emp
ORDER BY ABS(sal-(SELECT AVG(sal) FROM emp)) ASC
LIMIT 1;
+-------+---------+
| ename | sal     |
+-------+---------+
| CLARK | 2450.00 |
+-------+---------+
1 ROW IN SET (0.00 sec)

Et voilà, facile non?

De cet exemple nous pouvons déduire que pour construire une requête, il faut le faire étape par étape, et de prendre le temps de la réflexion.

Vous avez aimé cet article ? Alors partagez-le ^^

Vie privée : L’empreinte de votre navigateur vous trahit

Vie privée : L’empreinte de votre navigateur vous trahit

Nous le savons !! Lorsque nous naviguons sur internet, nous laissons énormément de trace comme ; notre adresse IP, les sites que nous consultons, le temps que nous restons sur une page etc…

Par exemple, lorsque vous surfez sur un site internet et que vous n’avez pas pris la peine de vous déconnecter de vos comptes Facebook, Google etc…, non seulement vous donnez les informations précédemment cités, mais vous laissez surtout votre identités.

En effet, quand les sites vous proposent le « J’aime » de Facebook ou le «+1 » de Google+, vous êtes identifiés même si vous ne cliquez pas sur ces boutons.

Vous allez alors me dire ; « il suffit de se déconnecter ou naviguer en mode privé pour surfer plus tranquillement ».

C’est déjà un bon début, mais naviguer en mode privé ne vous protège pas, car votre navigateur envoi beaucoup d’autres informations en plus de votre adresse IP comme le démontre cette page de chez l’hollandais volant

Votre navigateur donne ;

  • Votre OS et sa version, c’est-à-dire notre système d’exploitation comme Windows et GNU/Linux.
  • Le nom de Navigateur et sa version par exemple : Chrome, 32.0.1700.107 ou Firefox, 21.0
  • Si Java est installé, et sa version
  • Si Flash est installé et sa version
  • Si les Cookies sont activés
  • La taille de votre écran

Comme le démontre ce screen

Les traces de votre navigateur
Les traces de votre navigateur

Donc, même si vous prenez la précaution de surfer en mode privé, ou en vous déconnectant de tous vos comptes, et en supprimant les cookies, vous restez plus au moins identifiable par les infos que votre navigateur envois.

Comment maîtriser ces données ?

Il est possible de modifier ou bloquer l’envoi de ces informations ;

Désactivation du JavaScript

En désactivant le JavaScript, seul votre OS et votre navigateur peuvent être identifiés, le reste n’est pas accessible.
Désactiver le JavaScript via le navigateur, n’est pas forcement la bonne solution, car il provoquerait le disfonctionnement de tous les sites ayant des fonctionnalités majeur en JavaScript. L’idéale serait donc de l’activer au cas par cas. C’est ce que vous propose l’extension NoScript, qui bloque par défaut, tous les scripts des sites que vous visitez, et vous laisse la possibilité de les débloqués.

NosScript est sous licence libre GNU 2.0.

Le même screen avec la désactivation du Javascript, vous remarquerez que seul l’OS, le navigateur et l’adresse IP sont donnés, le reste est inaccessible.

Les traces du navigateur sans Javascript
Les traces du navigateur sans Javascript

Extension « User agent switcher »

Ce module ne bloque pas l’envoie des informations de votre navigateur, mais les modifies selon vos désirs. En effet, si vous êtes sur Windows 7 avec Firefox comme navigateur, vous pouvez demander à « User agent switcher » de dire que vous êtes sur une tablette Android et que votre navigateur est Chrome par exemple.

Il est très simple d’utilisation et bien sûr il est sous licence libre GNU 3.0

Le même screen avec le JavaScript désactivé en plus de l’extension « User agent switcher », j’ai mis dans ce dernier OS=Tablette Android et le navigateur=Chrome.

De ce fait seule l’adresse IP est connue, le reste est soit indétectable soit faut.

Plus de trace avec NoScript et User agent Switch
Plus de trace avec NoScript et User agent Switch

 

Si vous vous ne voulez plus que votre adresse IP apparaisse, dans ce cas c’est un autre histoire, il faut utiliser TOR ou un VPN.

Module « Ghostery »

Le module Ghostery, est l’un des plus connu, et permet des traquer les mouchards que vous rencontrez lorsque vous naviguez sur le net.
Le seul Hic, c’est qu’il n’est pas libre, donc je m’y attarde pas.  Même si le projet d’ouvrir le code est encours de réflexion (une réflexion qui dure !! qui dure !!).

Pour plus d’infos sur la protection de votre vis privée, je vous rappel que la 3ème édition du café vie privée se déroulera @numaparis le 22 février.

Vous avez aimé cet article ? Alors partagez-le ^^