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/Web Python Discussion :

Python socket problème d'adresse ip


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Python socket problème d'adresse ip
    Bonjour,
    Avec le module socket de python, j'ai écrit deux programmes très simples qui permettent une communication client/serveur entre deux ordinateurs. J'exécute ces programmes sur des ordinateurs tournant sous Windows

    programme serveur :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # Le serveur attend la connexion d'un client, pour entamer un dialogue avec lui
    import socket
    from time import time
     
    HOST = '192.174.0.56' # adresse ip du serveur
    PORT = 50000
    CODE = 'utf8'
     
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    try :
        mySocket.bind((HOST, PORT))
    except socket.error :
        print("La liaison du socket à l'adresse choisie a échoué.")
        raise
     
    while 1 :
        print("Serveur prêt, en attente de requêtes ...")
        mySocket.listen(5)
     
        connexion, adresse = mySocket.accept()
        print(f"Client connecté, adresse IP {adresse[0]}, port {adresse[1]}")
     
        connexion.send(bytes("Vous êtes connecté au serveur. "+\
                             "Envoyez vos messages.", CODE))
     
        clientMsg = connexion.recv(1024).decode(CODE)
        while 1 :
            print("C>", clientMsg)
            if clientMsg.lower() == "stop" or clientMsg == "" :
                serverMsg = '__STOP'
                connexion.send(bytes(serverMsg, CODE))
                break
            serverMsg = str(time())
            print('S>', serverMsg)
            # le serveur répond en affichant le temps
            connexion.send(bytes(serverMsg, CODE))
            clientMsg = connexion.recv(1024).decode(CODE)
     
        connexion.send(bytes("Au revoir !", CODE))
        print("Connexion interrompue.")
        connexion.close()
    programme client :
    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
    24
    25
    26
    27
    import socket, sys
     
    HOST = '192.174.0.56' # adresse ip du serveur
    PORT = 50000
    CODE = 'utf8'
     
    connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    try :
        connexion.connect((HOST, PORT))
    except socket.error :
        print("La connexion a échoué.")
        sys.exit()    
    print("Connexion établie avec le serveur.")
     
    serverMsg = connexion.recv(1024).decode(CODE)
     
    while 1 :
        if serverMsg == "__STOP" :
            break
        print("S>", serverMsg)
        clientMsg = input("C> ")
        connexion.send(bytes(clientMsg, CODE))
        serverMsg = connexion.recv(1024).decode(CODE)
     
    print("Connexion interrompue.")
    connexion.close()
    Ces deux programmes fonctionnent très bien lorsque le client et le serveur sont deux ordinateurs qui sont connectés en réseau local dans la même maison. Cependant, si je veux que le client et le serveur puissent être dans deux maisons différentes, il faut qu'ils communiquent par internet. Pour cela, j'ai cru comprendre qu'il fallait remplacer l'adresse ip HOST par l'adresse internet de l'ordinateur qui exécute le programme serveur. J'ai récupéré cette dernière adresse grâce au site internet https://www.whatismyip.com/
    Supposons par exemple que l'adresse ip internet de l'ordinateur qui exécute le programme serveur soit 98.124.101.65
    Lorsque j'exécute le programme serveur avec cette dernière adresse, python lève l'exception suivante :
    OSError: [WinError 10049] L’adresse demandée n’est pas valide dans son contexte
    Que dois-je faire pour que les deux ordinateurs puissent communiquer via internet ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Que dois-je faire pour que les deux ordinateurs puissent communiquer via internet ?
    Configurer votre box internet pour autoriser l'accès via un port déterminé.
    Pas grand chose a voir avec la programmation Python...

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Configurer votre box internet pour autoriser l'accès via un port déterminé.
    - W
    Sinon, est-ce que je peux modifier le port utilisé dans mon programme et prendre par exemple le port 80 ou 110 ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Sinon, est-ce que je peux modifier le port utilisé dans mon programme et prendre par exemple le port 80 ou 110 ?
    Vous pouvez toujours modifier le port utilisé par le serveur.
    Le client ne pourra pas passer à travers le boîtier qui vous relie à Internet (et l'atteindre) pour autant.

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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Premièrement, l'erreur levée par python dit que "l'adresse demandée n'est pas valide" mais ne mentionne pas le port utilisé.
    Deuxièmement, le seul port que je choisit dans le programme est le port utilisé par le serveur. Vous me parlez du port utilisé par ma box internet mais il me semble que je n'ai aucun contrôle sur ce paramètre.
    Je n'ai donc pas vraiment saisit la nature du problème :
    1) Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    2) Comment puis-je savoir quel port je dois débloquer sur ma box internet ?
    3) Suis-je obligé de débloquer un nouveau port ? Il ne serait pas plus sécurisé d'utiliser un port déjà libre ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Je n'ai donc pas vraiment saisit la nature du problème
    Pour faire de la programmation réseau, il faut se donner la peine de comprendre comment fonctionne un réseau (et vous avez toute une rubrique qui y est consacrée).

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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Avez vous "pris la peine" de lire mon post jusqu'au bout ? Vous ne répondez pas à ces questions
    Citation Envoyé par LeVicThor Voir le message
    1) Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    2) Comment puis-je savoir quel port je dois débloquer sur ma box internet ?
    3) Suis-je obligé de débloquer un nouveau port ? Il ne serait pas plus sécurisé d'utiliser un port déjà libre ?
    Par ailleurs, sachez que je "prend la peine" de me documenter sur le fonctionnement des réseaux. Mais je pense que vous êtes conscient que si je viens poser des questions ici, c'est qu'il y a des choses que je n'ai pas compris malgré mes recherches, ce n'est pas pour qu'on me conseille d'aller chercher tout seul autre part.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Mais je pense que vous êtes conscient que si je viens poser des questions ici, c'est qu'il y a des choses que je n'ai pas compris malgré mes recherches, ce n'est pas pour qu'on me conseille d'aller chercher tout seul autre part.
    Programmer votre boîtier d'accès à internet n'est pas un sujet Python. Et comment le faire, il faut ouvrir la documentation (du boîtier qu'il n'y a que vous à connaître). Si on cherche un peu comment faire pour une livebox, on trouve ce genre d'article.

    Et accessoirement, ici c'est pas une hotline ou on se doit de répondre à tous vos tracas: il vous appartient de vous former avant de poster vos questions dans le bon forum de la bonne rubrique.
    (et bricoler son boîtier internet n'est pas un sujet de programmation Python).

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

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    l'erreur levée par python dit que "l'adresse demandée n'est pas valide" mais ne mentionne pas le port utilisé.
    Deuxièmement, le seul port que je choisit dans le programme est le port utilisé par le serveur. Vous me parlez du port utilisé par ma box internet mais il me semble que je n'ai aucun contrôle sur ce paramètre.
    Citation Envoyé par LeVicThor Voir le message
    Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    Je parle clairement du langage python là. Et si vous me répondez en me disant d'aller lire la documentation du module socket (ce que j'ai déjà fait), alors permettez moi de douter de l'utilité de ce forum.

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 574
    Points : 2 017
    Points
    2 017
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Et si vous me répondez en me disant d'aller lire la documentation du module socket (ce que j'ai déjà fait), alors permettez moi de douter de l'utilité de ce forum.
    Vous savez, on voit passer ici tellement de demandes exotiques, pour ne pas dire farfelues...

    Entre celui qui veut qu'on code à sa place, celui qui ne pige pas une erreur pourtant évidente dans son code (il poste l'erreur d'ailleurs généralement!) et autres, on en voit passer des vertes et des pas forcément plus mûres.

    Ceci dit, je comprend votre réaction.

    Certains contributeurs du forum ont tendance à ranger tous les problèmes évoqués dans la même case estampillée "n'a pas bossé son sujet", c'est comme ça. Sûrement par habitude, après tant de sollicitations...

    Faut juste ne pas ranger tout le monde dans le même panier

    Moi, je vous aiderais bien si je savais comment solutionner le soucis que vous rencontrez. Mais voilà

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Je parle clairement du langage python là. Et si vous me répondez en me disant d'aller lire la documentation du module socket (ce que j'ai déjà fait), alors permettez moi de douter de l'utilité de ce forum.
    Les sockets ne sont pas spécifiques à Python: c'est une fonctionnalité du système à laquelle la bibliothèque socket donne accès au programmeur Python.

    La documentation est dans les manuels Linux traitant des appels systèmes.

    Après pour pouvoir lire/comprendre ce genre de documentation il faut avoir pris le temps de comprendre comment fonctionne (TCP)/IP (aka the Internet). Puis s'intéresser à comment c'est mis en œuvre sur votre réseau local et comment fonctionne une connection IP.

    Un client va essayer d'établir une connexion (socket.connect) avec une application lambda sur un PC donné en fournissant l'adresse IP du système et le numéro de port auquel un service/programme a été démarré pour recevoir la requête (socket.bind(...)).

    Le PC sur lequel a été démarré le service peut avoir plusieurs interfaces et plusieurs adresses IP (il a déjà localhost=127.0.0.1) et le bind précise l'interface sur laquelle on écoute les requêtes en donnant l'adresse IP correspondante.

    Ca c'est le basique qu'on doit avoir appris avant de se lancer dans la programmation avec le réseau (et les sockets).

    Du coup, la question:
    Citation Envoyé par LeVicThor Voir le message
    Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    n'a aucun rapport avec la programmation Python et montre que vous maîtrisez mal ce qu'est un réseau IP, les sockets et comment ça fonctionne.

    Je suis désolé mais "programmer" c'est un métier et c'est compliqué: regardez le nombre de rubriques et de spécialités qu'il y a sur ce site! Il y a plein de choses à plus ou moins maîtriser pour coder sereinement quoi que ce soit (surtout quand on fait de la programmation réseau).

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

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Un client va essayer d'établir une connexion (socket.connect) avec une application lambda sur un PC donné en fournissant l'adresse IP du système et le numéro de port auquel un service/programme a été démarré pour recevoir la requête (socket.bind(...)).

    Le PC sur lequel a été démarré le service peut avoir plusieurs interfaces et plusieurs adresses IP (il a déjà localhost=127.0.0.1) et le bind précise l'interface sur laquelle on écoute les requêtes en donnant l'adresse IP correspondante.
    Comme je l'ai expliqué dans mon premier post, la communication s'établi correctement lorsque je connecte le client à l'adresse localhost du serveur et lorsque je le connecte à l'adresse ip locale (192.174.0.56) du serveur. Cependant, il est impossible de connecter le client à l'adresse ip internet (98.124.101.65) du serveur.
    Pouvez-vous s'il vous plait m'éclairer sur le message d'erreur "L’adresse demandée n’est pas valide dans son contexte" qu'affiche python lorsqu'il lève l'exception OSError ?

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Pouvez-vous s'il vous plait m'éclairer sur le message d'erreur "L’adresse demandée n’est pas valide dans son contexte" qu'affiche python lorsqu'il lève l'exception OSError ?
    Est ce que l'adresse 98.124.101.65 est une des adresses IP du système où a été démarré le serveur?
    Pour le reste, j'ai essayé de vous expliquer mais sans un minimum de formation, vous ne comprenez pas les réponses qu'on vous donne.

    C'est comme ça: on ne peut aider que ce qui ont essayé de comprendre comment ça fonctionne et qui n'ont pas tout compris. Pour ceux qui débarquent un beau matin ignorants qu'il y a des bases à connaître, on perd son temps...

    Et en plus, ignorant l'étendue de leur ignorance, ils vous insultent tout habitués qu'ils sont à consommer plutôt qu'a bosser.

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

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je ne vous ai jamais insulté (je vous ai par ailleurs salué avant de vous présenter mon problème), en l'occurrence c'est plutôt vous qui vous permettez de me qualifier hautainement d'ignorant.

    Effectivement, je suis en train d'apprendre les bases des notions de réseau (bien vu ) et vous pouvez sans doute voir sur mon profil que je ne suis pas professionnel mais simplement un étudiant qui programme sur son temps libre : ces petits scripts étaient seulement un essai pour mettre en pratique ce que j'ai commencé à apprendre sur des articles en ligne. Mais si le fait que j'interroge des personnes plus expérimentées (je vois que vous avez été professionnel) montre selon vous que je ne bosse pas, alors permettez moi de vous demander ce que vous foutez sur ce forum à répondre à des étudiants ignorants.

    Concernant votre propos sur la "consommation" des connaissances, je suis désolé de vous apprendre que quelqu'un qui étudie dans une école d'informatique n'a pas besoin de votre site internet car il suit déjà des cours donnés par des professeurs qualifiés. En revanche, les débutants passionnés qui ont le malheur de passer par ici en espérant acquérir des connaissances sont selon vous des fainéants plus habitués à "consommer" qu'à travailler. Dans les deux cas, venir ici est donc une perte de temps.

    Merci de m'avoir éclairé sur la grande utilité de ce site internet et sur votre incroyable talent à transmettre votre passion. Je m'en vais donc voir ailleurs.
    Au revoir, et bonne continuation

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    En revanche, les débutants passionnés qui ont le malheur de passer par ici en espérant acquérir des connaissances sont selon vous des fainéants plus habitués à "consommer" qu'à travailler. Dans les deux cas, venir ici est donc une perte de temps.
    Manifestement vous n'avez pas pris le temps de comprendre ce qu'est une adresse IP.
    Les tutos sont gratuits: si vous n'avez pas envie de prendre le temps d'apprendre, et que vous déboulez ici en disant "je veux comprendre", c'est que vous n'avez aucune idée de la complexité des tas de notions à maîtriser (vous ignorez l'étendue de votre ignorance).

    Citation Envoyé par LeVicThor Voir le message
    Merci de m'avoir éclairé sur la grande utilité de ce site internet et sur votre incroyable talent à transmettre votre passion.
    Si votre passion ne vous motive pas assez pour ouvrir un tuto et y passer du temps...

    Il y a tellement de choses à savoir pour "programmer" que l'essentiel est dans la maîtrise de son ignorance: on n'en saura jamais assez et on fera avec le peu qu'on sait... ne serait-ce que pour connaître ses limites et pour pouvoir échanger dans des forums de discussions (sinon on parle dans le vide de trucs qu'on ne sait même pas donné la peine de connaître un peu).

    Et hélas (pour vous), c'est le cas pour toutes les techniques. Essayez de faire de la plomberie ou de l'électricité sans connaître les bases et vos limites...

    C'est plus risqué que de taper (des âneries) sur un clavier, vous seriez beaucoup plus prudent dans ce que vous vous lanceriez à faire... Allez demander de l'aide dans un site professionnel, on vous expliquera qu'il sera plus prudent de faire faire par un pro.

    C'est comme çà.

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

  16. #16
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par LeVicThor Voir le message
    (...)
    je vais pas rentrer trop dans les détails du pourquoi/comment ça marche (je l'ai fait pendant +15 ans, maintenant j'ai d'autres priorités et une motivation à le faire décroissante ; je préfère m'abstenir plutôt que d'envoyer chier les jeunes ou jouer la carte de la périmétrie aka "ça ne concerne pas directement Python, veuillez vous adresser au service concerné", ou pire, risquer d'être inutilement condescendant)

    si tu ne veux pas te casser la tête tu bind tout sur localhost (127.0.0.1), les données ne sortent pas de ta carte réseau, et ça doit fonctionner, tu peux ensuite utiliser un tool comme wireshark par exemple pour voir les données réseau transiter, mais ce sera difficile de faire la différence entre ce qui provient du client et ce qui provient du serveur (vu que les deux IP seront les mêmes)

    si tu veux tester "grandeur nature" le chemin des données va alors être différent, ça sort de ton ordi, ça passe par ta box internet, ça va sur internet où c'est routé, ça revient sur ta box, ça revient à ton ordi.

    note que pour que la dernière étape puisse se faire tu dois donc avoir sur ta box internet un port ouvert (de préférence >= 1024), il est donc question de configurer ta box internet pour lui permettre de faire une redirection des données qui arrivent d'internet sur le port X pour les renvoyer vers ton ordi avec son IP privée (192.174.0.56 à priori) sur un port Y (qui peut être le même que le port X mais pas obligatoirement), et ça pour la simple raison que si le port n'est pas ouvert la connexion TCP ne peut pas s'établir (la box agit comme un firewall)

    ainsi tu bind ton serveur sur 192.174.0.56 (ou plus classiquement sur 0.0.0.0 pour écouter sur toutes les interfaces réseau), et ton client tente de se connecter sur l'ip internet de ta box (98.124.101.65 donc, en imaginant qu'elle soit fixe, sinon il faut l'attaquer par son nom DNS)

    aussi, cas de figure hypothétique, si tu utilises un VPN public, il y a de bonnes chances que le trafic ne revienne pas, puisque le fournisseur VPN n'est pas au courant (et ne permettra pas) que le trafic qui arrive sur son port X soit redirigé vers chez toi.

  17. #17
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 465
    Points : 43 273
    Points
    43 273
    Par défaut
    vous ignorez l'étendue de votre ignorance
    Pas nécessaire de faire une remarque désobligeante comme celle-ci.

    Un peu d'humilité, avant de savoir on est tous ignorant. Ce n’est pas en faisant ce type de réponse que les choses avancent.

    Si votre passion ne vous motive pas assez pour ouvrir un tuto et y passer du temps...
    Réponse valable dans l'autre sens, si tu ne veux pas passer de temps à aider, quel que soit le niveau du demandeur, personne ne t'oblige à faire une réponse, qui de toute façon ne servira pas.


    @LeVicThor :
    De ce que je comprends, ton soft fonctionne en interne sur un réseau local,

    Si tu veux communiquer via internet avec une machine derrière une box, un port doit être ouvert sur la box de destination, port relié à la machine concernée sur le réseau local distant, c'est ce qu'on appelle le NAT.
    Pour ton programme c'est transparent, tu appelles l'ip de la box du destinataire, à sa charge de faire les réglages sur sa box en conséquence.
    Si tu communiques sur un serveur directement sur Internet, tu n'auras pas cette contrainte.

    Il existe aussi l'UPnP qui permet l'ouverture automatique de port sur une box, mais c'est complexe à mettre en œuvre (mais pas forcément impossible, il y a peut-être des modules Python pour le faire simplement), et l'UPnP n'est pas forcément activé chez le destinataire.

    Tu as d'autres solutions comme passer par un serveur mandataire, comme dans les solutions P2P.

    Je regarderais plutôt du coté de l'UPnP ou de l'ouverture de port manuel.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour vos deux réponses, c'était très clair. Je vais essayer de les mettre en pratique.

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

Discussions similaires

  1. [Modbus RTU] Problème d'adresse
    Par virginoue dans le forum Autres langages
    Réponses: 1
    Dernier message: 16/05/2006, 08h33
  2. [socket] Problème avec les options
    Par gangsoleil dans le forum Développement
    Réponses: 3
    Dernier message: 13/07/2005, 13h11
  3. [Socket] Problème de lecture flux danss communication
    Par tooney dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/06/2005, 11h08
  4. [Thread][socket]Problème de fermeture d'un thread
    Par meda dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 04/11/2004, 01h03
  5. socket : problème avec GetHostByName
    Par SteelBox dans le forum Réseau
    Réponses: 25
    Dernier message: 19/08/2003, 13h49

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