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

C++ Discussion :

[RESEAU] Diffusion multicast sur interface différent


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 82
    Par défaut [RESEAU] Diffusion multicast sur interface différent
    OS : Linux

    Bonjour,

    J'ai écrit un serveur multicast, en me basant sur des exemples trouvés sur le net, en c++ sur linux, j'initialise le socket de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        /*
         * initialisation du socket d'emission
         */
        memset(&sock_w, 0, sizeof(sock_w));
        sock_w.sin_family = AF_INET;
        sock_w.sin_port = htons(PORT);
        sock_w.sin_addr.s_addr = inet_addr(GROUP);
    Dans GROUP, je met la valeur 224.0.0.1 (J'ai choisi l'IP en fonction de ceci : 224.0.0.0 -> 224.0.0.255 link-local multicast addresses
    (for machines connected at the lowest level of topology)) et le port 33600 par exemple, ensuite
    avec un client je récupérre les données envoyées...
    Voici l'initialisation du client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        /*
         * initialisation du socket de reception
         */
        memset(&sock_r, 0, sizeof(sock_r));
        sock_r.sin_family = AF_INET;
        sock_r.sin_port = htons(PORT);
        sock_r.sin_addr.s_addr = htonl(INADDR_ANY);
    Du côté serveur, j'utilise également un configuration de TTL à 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unsigned char ttl = 1;
     
        setsockopt(sdw, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl));
    Ce que j'aimerais faire c'est diffuser uniquement sur une interface réseau spécifique ; eth0 ou eth1...
    Par contre je ne sais pas du tout comment faire pour canaliser tout ces message dans l'interface...

    En effet, qu'elle group ip faudrait-il utiliser et comment le définir, faut-il fixer le TTL avec une autre valeur ?
    Il y a pas mal de configurations os il me semble...

    S'agit-il d'un style de configuration comme ceci (trouvé sur le web):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
    Ou l'IP broadcast 192.168.1.255 devrait-être utilisé afin de destiner les messages à cette interface ?
    Dans ce cas uniquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        /*
         * initialisation du d'emission
         */
        memset(&sock_w, 0, sizeof(sock_w));
        sock_w.sin_family = AF_INET;
        sock_w.sin_port = htons(PORT);
        sock_w.sin_addr.s_addr = inet_addr("192.168.1.255");
    D'avance merci pour vos lumières ;-),

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    D'apès ce que j'ai compris,

    tu écrit un client multicast et un serveur multicast
    Le serveur multicast tourne sur une machine avec plusieurs interfaces

    Citation Envoyé par MAGNUM_HEAD Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        /*
         * initialisation du socket d'emission
         */
        memset(&sock_w, 0, sizeof(sock_w));
        sock_w.sin_family = AF_INET;
        sock_w.sin_port = htons(PORT);
        sock_w.sin_addr.s_addr = inet_addr(GROUP);
    Cela me semble correct pour le client si GROUP vaut effectivement "224.0.0.1" ou toute autre adresse multicast

    Citation Envoyé par MAGNUM_HEAD Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        /*
         * initialisation du socket de reception
         */
        memset(&sock_r, 0, sizeof(sock_r));
        sock_r.sin_family = AF_INET;
        sock_r.sin_port = htons(PORT);
        sock_r.sin_addr.s_addr = htonl(INADDR_ANY);
    Cela me semble correct pour le serveur

    Citation Envoyé par MAGNUM_HEAD Voir le message
    Ce que j'aimerais faire c'est diffuser uniquement sur une interface réseau spécifique ; eth0 ou eth1...
    Par contre je ne sais pas du tout comment faire pour canaliser tout ces message dans l'interface...
    Je pense que cette fonctionnalité ne concerne que le serveur. En effet, en multicast, le client n'a pas à savoir ou se situe le serveur.

    Si tu ne veux écouter que sur 1 seul interface (admettons que tu choisisses eth1 avec admettons eth0=192.168.10.1 et eth1=10.10.20.54)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        /*
         * initialisation du socket de reception
         */
        memset(&sock_r, 0, sizeof(sock_r));
        sock_r.sin_family = AF_INET;
        sock_r.sin_port = htons(PORT);
        sock_r.sin_addr.s_addr = inet_addr("10.10.20.54");
    Une petite limitation toutefois, tu ne peux choisir que 1 interface spécifique ou tous les interfaces simultanément. Tu ne peux pas choisir 2 interfaces parmi 4 par exemple.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Diffusion fichier sur reseau adHoc
    Par habanas dans le forum Protocoles
    Réponses: 0
    Dernier message: 06/08/2014, 17h38
  2. [HTML][débutante] Map ou Onclick sur image ? Différent ?
    Par khany dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 08/12/2004, 14h05
  3. faire un group by sur les différents niveau de code
    Par speed034 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/10/2004, 16h10
  4. [Reseau][General] Port et interface
    Par fadoua dans le forum Développement
    Réponses: 2
    Dernier message: 12/03/2004, 10h43
  5. [] [Réseau] Transfert fichier sur un FTP
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/02/2003, 17h33

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