-
Test de connexion internet : Afficher "Connexion réussie" ou "Echec de la connexion" en fonction
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 :
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
Tags : fetch, freebsd.org, test, connexion, nasm, x64, FreeBSD
-
Commentaires