Précédent   Forum des professionnels en informatique > Systèmes > Linux > Réseau
Réseau Vos questions autour des réseaux et télécoms sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2011, 10h32   #1
Invité régulier
 
Inscription : février 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 35
Points : 9
Points : 9
Par défaut Gérer le temps en C ou en shell

Je vous explique mon problème,


J'ai une machine A et une machine B et un boitier.


Le boitier bloque les requêtes de B, les regles de filtrage sont faites avec iptables dans un script.


La problématique : quand A tombe en panne, on switch vers le boitier et le boitier ne DROP plus B (B envoie maintenant les requêtes).


Le code est écrit dans le boitier

Mes hypothèses : on met les requêtes de A dans la QUEUE et on écrit un fichier C dans lequel si le boitier ne reçoit pas de trames de A pendant 2s (exemple) on passe par boitier

Problème technique : j'ai des difficultés à écire cela en C

Peut-on écrire ceci exclusivement en script shell (la condition ne reçoit plus de trames de A au bout de X secondes) car après il n'ya plus qu'à mettre les regles de iptables :
Code :
iptables -I INPUT -s adresse B -j ACCEPT

Merci
albertopisto est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/06/2011, 14h56   #2
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Désolé, mais en ce qui me concerne, je n'ai pas très bien compris ton problème

Tu veux faire un script qui, s'il ne reçoit pas de trames de A pendant un temps donné, modifie les règles de filtrage ?

En gros, ton problème, c'est de savoir si A tombe en rade ?

Est-ce que si A ne répond pas au ping, ça pourrait t'aller ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/06/2011, 16h03   #3
Invité régulier
 
Inscription : février 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 35
Points : 9
Points : 9
Oui si on ne reçoit pas de trames de A les regles de filtrage sont modifiées :

la machine B prend la main et envoie les trames au boitier (avant le boitier bloquait la machine B)

dans le cas général, A envoie des paquets infiniment, donc j'ai pensé de faire une fonction en shell de façon que si le boitier ne reçoit pas de paquets pendant un certain moment (exemple 2secondes) il bascule vers la machine B
albertopisto est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/06/2011, 17h15   #4
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
"Envoyer des paquets", ça ne veut pas dire grand chose pour moi, donc surveiller que A "envoie des paquets", je vois pas trop... faudrait savoir en quoi consiste exactement tes paquets ?

Sinon, tu peux faire un truc tout con et pas propre en shell en pinguant la machine :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/ksh
 
while [ 1 ]
do
        ping -q -c1 -w2 xxx.xxx.xxx.xxx
        if [[ $? -ne 0 ]]
        then
                #AJOUT DES COMMANDES POUR IPTABLES
                exit 1
        else
                sleep 2
        fi
done
A la limite, tu peux également adapter pour remettre les bonnes règles si jamais le ping de A revient... mais bon, faudrait peut-être mieux se tourner vers des outils fait pour ça ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 08h32   #5
Invité régulier
 
Inscription : février 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 35
Points : 9
Points : 9
Merci pour la réponse avec le ping !

en fait la machine A envoie constamment des données (trames , bits) au boitier

donc ma solution est de dire si le boitier ne reçoit pas de données au bout de 2s cela veut dire que la machine A est en panne (ensuite on fait les commandes iptables)

je vais essayer la solution avec les ping, mais cela veut dire que le boitier envoie constamment des ping


j'ai des questions concernant le script

que signifie : $? le nombre de paramètre en sortie ?
exit 1, on sort du while,?
albertopisto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h42   #6
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
$? c'est le code retour du ping : s'il ne vaut pas 0, c'est que quelque chose cloche.

exit 1 : on sort du script avec un code retour à 1


Pour ce qui est du script, oui, il va envoyer des pings toutes les 2 secondes... si je devais faire ça, j'augmenterais le temps personnellement (peut-être une vérif toutes les 30 secondes) mais sinon, ça ne me choque pas plus que ça non plus (j'ai peut-être tord).

Citation:
...si le boitier ne reçoit pas de données au bout de 2s...
si tu arrives à traduire ça en script, tu peux parfaitement l'utiliser, mais sans plus d'infos, je ne vois pas comment t'aiguiller sur le sujet !
tu pourrais très bien mettre un outil qui analyse le trafic, mais cela me semble plus lourd à utiliser qu'un bête ping...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h20   #7
Invité régulier
 
Inscription : février 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 35
Points : 9
Points : 9
merci pour la réponse

pour le ping je ne pourrai finalement pas utiliser cette méthode car la machine pourra dans des cas renvoyer un ping alors qu'elle ne fonctionne plus apparemment


en fait l'idée est dans un script (ou un fichier c mais c'est plus difficile) de faire :

le boitier reçoit à l'infini des données, trames et donc bits en provenant de la machine A sans interruption

le programme consisterait donc au boitier : si il ne reçoit plus de données (bits) de A pendant un certain temps, alors A ne fonctionne plus et il switch à la machine B

apparemment on peut faire cela en langage C (select, signaux, timer??? ) mais l'intérêt du script est directement après la condition de basculement on peut écrire la règle iptable pour la machine B
albertopisto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h42   #8
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Je pense qu'on a compris ce que tu veux faire, essaye d'être plus précis : tu parles du C, si tu veux programmer un truc pour surveiller des trames en C, vas sur le forum C/C++

Si tu fais un programme en C, tu peux toujours utiliser la fonction system dans ton programme pour lancer un script qui modifierait les règles de routage en fonction du besoin.

Si tu veux le faire en script, il faut savoir exactement en quoi consiste tes connexions (et bits n'est pas une info suffisante !). Si les packets arrivent sur ta machine et sont utilisés par un process, ça me semble pas évident de positionner un intermédiaire qui vérifie que ça arrive bien. Autant voir directement avec ce qui traite les packets ?
Ou peut-être avec le status de netstat ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h28.


 
 
 
 
Partenaires

Hébergement Web