Programmation réseau via socket en C

Dans ce monde informatique ultra-connecté, il est crucial de savoir comment envoyer et recevoir des données à distance, grâce aux sockets. Dans cet article, nous verrons qu’une socket est essentiellement une “prise” numérique qu’on attache à une adresse locale ou distante afin d’établir une connexion. Nous explorerons aussi l’architecture et les appels systèmes qui nous permettront de construire non seulement un client, mais aussi un serveur en langage C.

Lire la suite

Guide CTF : Wonderland de TryHackMe

Wonderland est un défi de capture du drapeau (CTF, “capture the flag” en anglais), créé par NinjaJc01 et disponible gratuitement sur TryHackme. Dans ce guide CTF, nous allons tomber dans le terrier du pentesting et atterrir dans un étrange pays des merveilles, celui de la cybersécurité !

Lire la suite

Adresses IPv4, routage et masques de sous-réseau

Parmi les adresses IP des systèmes connectés à Internet, les adresses IPv4 sont actuellement les plus répandues. Comment peuvent-elles identifier de façon unique tous les objets connectés ? Comment facilitent-elles le routage des données d’un côté à l’autre de ce vaste réseau ? Et pourquoi sont-elles progressivement remplacées par les adresses IPv6 ? C’est ce que nous allons voir dans cet article.

Lire la suite

Envoyer et intercepter un signal en C

À force d’être confrontés à des segfaults ou a des erreurs de bus, on se sera déjà familiarisé avec l’idée d’un signal informatique. On reçoit un SIGSEGV ou un SIGBUS qui met fin à notre programme sans préavis, sans explications et sans autre recours. Mais qu’est-ce qu’un signal véritablement ? Est-ce juste le bâton de police du système d’exploitation ? Et comment peut-on envoyer, bloquer ou même intercepter un signal depuis notre propre programme ? C’est ce que nous allons explorer dans cet article.

Lire la suite

Threads, mutex et programmation concurrente en C

Par souci d’efficacité ou par nécessité, un programme peut être construit de façon concurrente et non séquentielle. Grâce à sa programmation concurrente et `a l’aide de ses processus fils ou de ses threads et de ses mutex, il pourra effectuer plusieurs tâches simultanément.

Lire la suite

Errno et la gestion d'erreur en C

Détecter les erreurs dans un programme ainsi que leur cause, c’est la base de tout développement informatique. Mais quand une fonction ou un appel système d’une bibliothèque externe échoue, comment peut-on comprendre ce qu’il s’est passé ? Ces fonctions renvoient généralement une valeur de -1 ou NULL, mais elles stockent aussi la raison de leur échec dans errno.

Lire la suite

Pipe : une méthode de communication inter-processus

Par défaut, il est difficile de faire communiquer deux processus entre eux. Comme on l’a vu dans un précédent article, même les processus pères et fils ne partagent pas le même espace mémoire. Il nous faut donc des moyens d’établir une communication inter-processus. Et l’un de ces mécanismes de communication, c’est le pipe.

Lire la suite

Manipuler un fichier à l'aide de son descripteur en C

Les appels systèmes disponibles en C pour créer ou ouvrir un fichier, le lire, y écrire et le supprimer font toutes usage d’un descripteur de fichier. Avant de pouvoir manipuler des fichiers, nous devons donc découvrir comment le système d’exploitation gère ses références à ces fichiers.

Lire la suite

Créer et tuer des processus fils en C

Que ce soit pour exécuter un autre programme depuis le notre ou pour exécuter une partie de notre programme en parallèle, il est souvent très utile de créer des processus fils. On peut ensuite patiemment attendre qu’ils finissent leur tâches, ou même, si l’on se sent particulièrement meurtrier, les tuer prématurément !

Lire la suite

Pourquoi je n'écris plus d'articles sur les projets de 42

Suite à un échange avec l’équipe pédagogique de l’école 42, j’ai décidé de retirer tous les articles en lien direct avec les projets de 42.

Lire la suite