Bonjour,
Je voudrais tester la connectivité pour une machine, de sorte que si une machine B ne reçoit pas des des données (dans mon exemple des ping) d'une machine A au bout de 5s alors je pourrai exécuter des commandes (dans mon cas des règles de filtrage)
Pour se faire je pense utiliser la fonction select, voici mon code :
je mets les paquets reçu de la machine B dans la NFQUEUE(iptables)
et fd = nfq_fd(h) et le descripteur de la socket pour le lien entre la NFQUEUE et le programme utilisateur
Quand la machine B envoie des pings à A, il passe par la NFQUEUE et sont traités dans ce programme, mais on ne peut recevoir les paquets que pendant 5s et apres il sort de la boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 fd = nfq_fd(h); fd_set rfds; struct timeval tv; int retval; /* Surveiller stdin (fd 0) en attente d'entrées */ FD_ZERO(&rfds); FD_SET(fd, &rfds); /* Pendant 5 secondes maxi */ tv.tv_sec = 5; tv.tv_usec = 0; retval = select(fd+1, &rfds, NULL, NULL, &tv); while(retval){ if ((rv = recv(fd, buf, sizeof(buf), 0)) && rv >= 0) { printf("pkt received\n"); nfq_handle_packet(h, buf, rv);} retval = select(fd+1, &rfds, NULL, NULL, &tv); }
Je pense que c'est une erreur de paramètres qui fait que recv=0 tout le remps
Ce que je veux, c'est quand j'arrête de pinger, le programme sort du while au bout de 5s pour que je puisse exécuter de nouvelles commandes
Actuellement, il sort automatiquement au bout de 5s même quand il reçoit toujours des ping
Merci
Partager