Portfolio

Mes Projets

Réalisations académiques et personnelles en développement et réseaux.

Java

Client Serveur TCP UDP
Java SE Sockets Multithreading

Client / Serveur TCP & UDP

Sockets, multithreading, portail d'authentification

Architecture complète client-serveur en Java : portail d'authentification, modules TCP et UDP indépendants, et gestion multithreadée des connexions simultanées.

Objectifs

  • Serveur multi-clients avec threads dédiés
  • Transmission TCP et UDP
  • Portail d'authentification obligatoire
  • Interface console claire

Technologies

  • Java SE — Sockets, DatagramSocket
  • Multithreading (Runnable / Thread)
  • Flux I/O et gestion d'exceptions

01 Structure du projet

Le projet est organisé en trois parties : le serveur, le client, et un portail de login. Chaque protocole (TCP, UDP) a ses propres classes. L'application démarre par une authentification avant de lancer les modules réseau.

Structure du projet

02 Portail d'authentification

Le client affiche un écran de connexion demandant identifiant et mot de passe. Ces informations sont envoyées au serveur, qui valide ou refuse l'accès.

JavaLogin.java
Socket socket = new Socket("127.0.0.1", 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
    new InputStreamReader(socket.getInputStream()));

System.out.print("Identifiant : ");
String user = sc.nextLine();
System.out.print("Mot de passe : ");
String pass = sc.nextLine();

out.println(user + ":" + pass);
String response = in.readLine();
if ("OK".equals(response)) {
    System.out.println("Connexion autorisée !");
} else {
    System.out.println("Accès refusé.");
}

03 TCP — Serveur & Client

Le serveur TCP écoute sur un port et lance un thread par client. Le client envoie des messages textuels et reçoit les réponses. Chaque échange est journalisé.

Console TCP

04 UDP — Serveur & Client

L'implémentation UDP repose sur des datagrammes indépendants. Le serveur reçoit et renvoie des paquets sans connexion persistante.

Test UDP

05 Multithreading

Pour éviter les blocages, le serveur crée un thread par client TCP ou par paquet UDP, permettant des échanges simultanés.

06 Sécurité d'accès

Aucun client non authentifié ne peut établir de communication. Une fois connecté, l'utilisateur accède à l'interface réseau.

Morpion Android
Java Android Android Studio UI/UX

Jeu de Morpion Android

Interface Android, logique de jeu, intégration réseau

Application Android complète de Morpion développée en Java sous Android Studio. Grille interactive, détection des victoires, gestion des scores et connexion serveur.

Fonctionnalités

  • Grille interactive & feedback visuel
  • Détection victoires / égalités
  • Reset de partie & gestion des scores
  • Connexion à un serveur

UX / UI

  • Écrans simples et lisibles
  • Toasts et états utilisateurs clairs
  • Compatibilité émulateur / device réel

01 Gestion des clics

JavaMainActivity.java
public void onCellClick(View view) {
    Button cell = (Button) view;
    if (!cell.getText().toString().equals("") || gameOver) return;

    cell.setText(currentPlayer);
    checkForWin();

    if (!gameOver) {
        currentPlayer = (currentPlayer.equals("X")) ? "O" : "X";
        status.setText("Au tour de " + currentPlayer);
    }
}

02 Vérification des victoires

JavacheckForWin()
private void checkForWin() {
    for (int i = 0; i < 3; i++) {
        if (board[i][0].equals(board[i][1]) && board[i][1].equals(board[i][2])
                && !board[i][0].equals("")) {
            status.setText("Le joueur " + board[i][0] + " a gagné !");
            gameOver = true; return;
        }
        if (board[0][i].equals(board[1][i]) && board[1][i].equals(board[2][i])
                && !board[0][i].equals("")) {
            status.setText("Le joueur " + board[0][i] + " a gagné !");
            gameOver = true; return;
        }
    }
    // Diagonales
    if (board[0][0].equals(board[1][1]) && board[1][1].equals(board[2][2])
            && !board[0][0].equals("")) {
        status.setText("Le joueur " + board[0][0] + " a gagné !");
        gameOver = true;
    }
}

03 Démo

🛡️

Cybersécurité

SOC Open Source
Wazuh Suricata Zeek pfSense Shuffle IRIS

SOC Open Source

Projet tuteuré BUT R&T — IUT de Roanne 2025–2026

Conception et déploiement d'une infrastructure SOC (Security Operations Center) complète reposant exclusivement sur des outils open source. Détection d'intrusion, centralisation des logs, corrélation des événements et automatisation de la gestion des incidents dans un environnement entièrement virtualisé.

Objectifs

  • Surveiller le trafic réseau en temps réel
  • Détecter des comportements malveillants
  • Centraliser et corréler les journaux de sécurité
  • Visualiser les alertes via des dashboards
  • Automatiser la gestion des incidents

Stack technique

  • pfSense + Suricata — pare-feu & IDS réseau
  • Zeek — analyse comportementale du trafic
  • Wazuh — SIEM : collecte, corrélation, dashboards
  • Shuffle — orchestration SOAR & workflows
  • IRIS — ticketing et suivi des incidents
  • VirtualBox — virtualisation de l'infrastructure

01 Architecture de l'infrastructure

L'ensemble du SOC est déployé dans un environnement virtualisé sous VirtualBox, avec une segmentation réseau stricte. La machine attaquante (Kali Linux) est isolée sur un réseau WAN_LOC distinct des machines du SOC (SOC_LAN), forçant tout le trafic offensif à transiter par pfSense — condition indispensable pour que Suricata puisse l'inspecter.

Architecture du SOC déployé

Machines virtuelles

  • pfSense — Pare-feu + Suricata IDS
  • Kali Linux — Machine attaquante (WAN_LOC)
  • Victime — Ubuntu Server cible

 

  • SOC_ZEEK — Capteur réseau Zeek
  • SOC_CORE — Serveur Wazuh SIEM
  • SOC_TOOLS — Shuffle + IRIS

02 Détection d'intrusion avec Suricata

Suricata est intégré directement au pare-feu pfSense en mode Inline IPS, ce qui lui permet d'inspecter et de bloquer le trafic en temps réel. Il utilise un ensemble de règles pour détecter les scans de ports, tentatives d'exploitation, anomalies protocolaires et communications suspectes. Chaque alerte identifie les machines impliquées, le type d'événement et la règle déclenchée.

Alertes Suricata après scan Nmap
SuricataRègle de détection — scan Nmap
# Règle déclenchée lors d'un SYN scan Nmap
alert tcp $EXTERNAL_NET any -> $HOME_NET any (
  msg:"ET SCAN Possible Nmap User-Agent Observed";
  flow:established,to_server;
  http.user_agent; content:"Nmap Scripting Engine";
  classtype:web-application-attack;
  sid:2024364; rev:2;
)

03 Analyse comportementale avec Zeek

Zeek complète Suricata en adoptant une approche comportementale : plutôt que de chercher des signatures, il enregistre toutes les communications réseau dans des journaux structurés au format JSON. Ces fichiers (conn.log, dns.log, http.log, notice.log) donnent une vision détaillée de l'activité et facilitent l'identification des anomalies.

Dashboard ZeekDB dans Wazuh
YAMLossec.conf — Intégration Zeek → Wazuh
<localfile>
  <log_format>json</log_format>
  <location>/opt/zeek/logs/current/*.log</location>
</localfile>

04 Centralisation dans le SIEM Wazuh

Wazuh agrège les logs de tous les composants du SOC. Son moteur de règles analyse les événements et génère des alertes corrélées. Le dashboard permet aux analystes de visualiser l'activité réseau en temps réel : volume d'alertes, IPs sources, ports ciblés, niveaux de criticité. Le projet a généré plus de 6 992 événements lors des phases de test.

SIEM Wazuh — events en temps réel

05 Scénarios d'attaque et détection

Deux scénarios ont été simulés depuis Kali Linux pour valider le fonctionnement du SOC.

Scan réseau (Nmap SYN)

  • 808 connexions rejetées détectées en 1h
  • Alerte "possible port scan activity" générée
  • Visibilité complète dans le dashboard Zeek

Analyse DNS (dig)

  • Requêtes DNS enregistrées par Zeek
  • Règles Wazuh déclenchées sur domaines suspects
  • Corrélation source IP / domaine interrogé
BashCommandes utilisées lors des tests
# Scan SYN furtif ciblant une machine du SOC_LAN
nmap -sS 192.168.10.X

# Analyse des requêtes DNS depuis la machine attaquante
dig wazuh.com

06 Automatisation SOAR — Shuffle & IRIS

Chaque alerte Wazuh peut déclencher automatiquement un workflow Shuffle. Dans le workflow mis en place, une alerte entraîne l'enrichissement de l'événement puis la création automatique d'un ticket dans IRIS — reproduisant le pipeline d'un SOC professionnel : détection → centralisation → orchestration → ticketing.

Workflow Shuffle WAZUH → IRIS
🔍 Suricata / Zeek Détection
📊 Wazuh Centralisation
⚙️ Shuffle Automatisation
🎫 IRIS Ticketing

07 Difficultés rencontrées & solutions

Problème de visibilité réseau

  • Trafic entre VMs ne passait pas par pfSense
  • Suricata ne voyait pas les attaques
  • Solution : segmentation WAN_LOC / SOC_LAN

Limitations VirtualBox

  • Pas de port mirroring sur switch virtuel
  • IDS dédié non viable en standalone
  • Solution : Suricata intégré directement à pfSense