IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau Discussion :

Gérer le temps en C ou en shell


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    iptables -I INPUT -s adresse B -j ACCEPT

    Merci

  2. #2
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    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 ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    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

  4. #4
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    "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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    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,?

  6. #6
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    $? 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).

    ...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...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    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

  8. #8
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    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 ?

Discussions similaires

  1. Gérer le temps sur access
    Par Bluman dans le forum Modélisation
    Réponses: 6
    Dernier message: 13/05/2008, 15h35
  2. Gérer le temps d'exécution d'une requête.
    Par Soisy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/09/2007, 09h06
  3. Comment gérer le temps en C#?
    Par Mickey.jet dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/07/2006, 14h54
  4. gérer un temps limite
    Par gouigoui dans le forum Flash
    Réponses: 4
    Dernier message: 12/06/2006, 17h14
  5. Comment vous faites pour gérer votre temps?
    Par implosion dans le forum Emploi
    Réponses: 12
    Dernier message: 10/01/2006, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo