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

Python Discussion :

UDP - Broadcast


Sujet :

Python

  1. #1
    Membre chevronné

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2010
    Messages : 178
    Par défaut UDP - Broadcast
    Bonjour,

    J'aimerais envoyer une trame en broadcast, pour cela:

    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
     
    # -*- coding: cp1252 -*-
    #!/usr/bin/env python
     
    import sys, time
    from socket import *
     
     
    cs = socket(AF_INET, SOCK_DGRAM)
    cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
     
    while 1:
        data = repr(time.time()) + '\n'
        cs.sendto(data, ('192.255.255.255', 50000))
        time.sleep(2)

    C'est super, sa fonctionne !
    Sauf que si je remplace "cs.sendto(data, ('192.255.255.255', 50000))" par "cs.sendto(data, ('255.255.255.255', 50000))", je ne reçois plus rien !

    Je suis preneur de toutes solutions

    Merci !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 707
    Par défaut
    Salut,

    255.255.255.255 est une broadcast address, certes!
    Mais est-ce que côté réseau vous pouvez l'utiliser comme n'importe quelle autre broadcast address?
    Un peu de recherche sur Google vous conduit à Wikipedia - c'est moins ardu que les RFC -, on y trouve:

    A special definition exists for the IP broadcast address 255.255.255.255. It is the broadcast address of the zero network or 0.0.0.0, which in Internet Protocol standards stands for this network, i.e. the local network. Transmission to this address is limited by definition, in that it is never forwarded by the routers connecting the local network to other networks.
    Si vous avez des difficultés à comprendre ce que tout cela signifie, c'est plutôt côté "réseau" qu'il faut aller voir, et cette programmation là n'est pas de la programmation Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2010
    Messages : 178
    Par défaut
    Finalement, j'ai contourné le problème.

    Quelques explications:
    En fait j'ai un système embarqué qui se connecte sur différents wifi (près-config) et récupérè une adresse via DHCP.

    J'ai donc fais un script qui récupère l'adresse de la carte (wlan0) et la broadcast sur le réseau (tous sont en /24).

    Script:

    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
     
    #!/usr/bin/python
     
    import re
    from socket import *
     
    cs = socket(AF_INET, SOCK_DGRAM)
    cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
     
     
    def getifip(ifn):
        import socket, fcntl, struct
        sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        return socket.inet_ntoa(fcntl.ioctl(sck.fileno(),0x8915,struct.pack('256s', ifn[:15]))[20:24])
     
     
    while True:
            data=getifip('wlan0')
            l = re.split('(.*)\.(.*)\.(.*)\.(.*)', data)
            network=l[1]+"."+l[2]+"."+l[3]+".255"
            cs.sendto(data, (network, 50000))
            time.sleep(5)

    Il ne reste plus qu'à la récupérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import socket
     
    UDP_IP = ''
    UDP_PORT = 50000
    sock = socket.socket(socket.AF_INET, # Internet
                         socket.SOCK_DGRAM) # UDP
    sock.bind((UDP_IP, UDP_PORT))
    while True:
        data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
        print "Ip:", data

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. UDP broadcast et multiplateforme
    Par xilebo dans le forum Réseau
    Réponses: 0
    Dernier message: 07/11/2012, 08h55
  2. UDP Broadcast sur internet
    Par ikeas dans le forum Développement
    Réponses: 6
    Dernier message: 26/01/2012, 13h04
  3. [RESOLUT]Broadcast UDP sur le réseau
    Par Vermouth dans le forum Linux
    Réponses: 2
    Dernier message: 02/07/2010, 20h46
  4. Broadcast en UDP
    Par RKOCOCO dans le forum Développement
    Réponses: 3
    Dernier message: 04/02/2009, 14h32
  5. Réponses: 1
    Dernier message: 12/02/2008, 09h29

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