Test de connexion internet : Afficher "Connexion réussie" ou "Echec de la connexion" en fonction

Introduction

On rentre dans l'exécution des processus parents/enfants encore une fois.
L'exécution d'une commande permettant de vérifier si on accède à internet doit afficher un résultat, quel que soit le cas de figure (êtes-vous connectés à internet ou non)

Créez le programme check_internet.asm :


Code source : check_internet.asm

section .data
command db '/bin/sh', 0
arg1 db '-c', 0
arg2 db 'fetch -q -o /dev/null https://www.freebsd.org 2>/dev/null', 0
argv dq command, arg1, arg2, 0
envp dq 0

success_msg db 'Connexion réussie', 10, 0
success_msg_len equ $ - success_msg

failure_msg db 'Échec de la connexion', 10, 0
failure_msg_len equ $ - failure_msg

section .bss
wstatus resq 1

section .text
global _start

_start:
mov rax, 2 ; sys_fork
syscall

test rax, rax
jz child_process

; Processus parent
mov rdi, rax ; PID de l'enfant
mov rsi, wstatus ; Pointeur vers le statut
xor rdx, rdx ; Options
mov rax, 7 ; sys_wait4
syscall

; Vérifier le code de retour
mov rax, [wstatus]
and rax, 0xFF00
shr rax, 8

test rax, rax
jnz connection_failure

; Afficher le message de succès
mov rax, 4 ; sys_write
mov rdi, 1 ; stdout
mov rsi, success_msg
mov rdx, success_msg_len
syscall
jmp exit_program

connection_failure:
; Afficher le message d'échec
mov rax, 4 ; sys_write
mov rdi, 1 ; stdout
mov rsi, failure_msg
mov rdx, failure_msg_len
syscall

exit_program:
mov rax, 1 ; sys_exit
xor rdi, rdi ; Code de sortie 0
syscall

child_process:
mov rax, 59 ; sys_execve
mov rdi, command
mov rsi, argv
mov rdx, envp
syscall

; Si execve échoue, sortir avec un code d'erreur
mov rax, 1 ; sys_exit
mov rdi, 1 ; Code de sortie 1 (erreur)
syscall

Assembler

nasm -f elf64 check_internet.asm -o check_internet.o

Linker

ld check_internet.o -o check_internet

Lancer le programme

./check_internet


↑ Haut de page