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 :

Connection à un serveur avec son IP publique?


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut Connection à un serveur avec son IP publique?
    Bonjour,

    J'ai créé une petite bibliothèque très simple utilisant les socket compatible Windows et Linux. Pour la tester, j'ai créé un programme client et un serveur.
    - Lorsque je lance le serveur et le client sur un seul PC, en demandant au client de s'y connecter en utilisant la boucle locale (127.0.0.1), les deux programmes communiquent bien.
    - Lorsque je fais ce test sur 2 PCs reliés entre eux par réseau local, en donnant au client l'ip locale du PC où le programme serveur est lancé (192.168.0.10), là encore tout se passe parfaitement.

    Par contre, dès que je met mon IP publique (82.125.170.50 par exemple), là impossible de connecter le client sur mon serveur (que les 2 programmes soient lancés sur le même PC ou non). J'ai essayé de configurer/désactiver mon firewall, j'ai testé sous Windows XP Pro, sur Ubuntu, mais rien n'y fait. Ma fonction connect() retourne l'erreur n°10061 pour Windows, et 111 (il me semble) sous Linux. J'ai aussi essayé de changer (pour le serveur) INADDR_ANY par inet_addr ("82.128.70.50"), mais j'ai l'erreur 10049.
    J'ai aussi une Livebox Orange. Là encore j'ai ouvert au niveau du firewall le port 7779 (celui que j'utilise), mais toujours rien. Bref, je ne sais plus quoi faire :S

    Pourriez-vous m'éclairer sur l'origine possible du problème? Une variable à modifier pour signaler au programme serveur que la connection se fera par l'ip publique? Une configuration de l'OS?

    Voici le bout de code (du serveur) paramétrant le socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	[...]
    	m_sockfd = socket (AF_INET, SOCK_STREAM, 0);
     
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons (port); //7779
    	addr.sin_addr.s_addr = INADDR_ANY;
     
    	bind (m_sockfd, (struct sockaddr *) &addr, sizeof (addr));
    	[...]
    Pour le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	[...]
    	socklen_t addrLenght = sizeof (addr);
     
    	m_sockfd = socket (AF_INET, SOCK_STREAM, 0);
     
    	addr.sin_addr.s_addr = inet_addr ("82.128.70.50");
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons (port); // 7779
     
    	connect (m_sockfd, (sockaddr *) &addr, addrLenght);
    	[...]
    Merci d'avance!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Tu as natté sur ta livebox le port 7779 vers ton PC qui fait office de serveur ?

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Ce n'est visiblement pas un problème de C++...

    MAT.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    C'est vrai que le soucis ne vient pas forcément du C++, mais je ne peux pas m'en assurer à 100%, tant que je n'ai pas vu marcher les programme au moins une fois ^^.

    La seule chose qui pourrait me faire douter de mon code, c'est pour la partie serveur, addr.sin_addr.s_addr. Je ne suis pas certain qu'il faille le mettre à INADDR_ANY et pas 82.125.170.50 (toujours pour garder le même exemple). Mais bon, vu qu'en mettant 82. xx . xx . xx j'ai une erreur...

    Je vais me pencher sur la livebox, car en effet, si ça foit aussi bien sous Windows que sous Linux, alors que je suis certain que sous Windows, tout est bien configuré au niveau du firewall, le principal point commun qui pourrait poser problème... C'est la livebox!

    Non pour le moment je n'ai pas changé les règles de NAT. J'ai juste ouvert le port sur le firewall intégré, comme je l'avais ça avec d'autres applis (emule par exemple) pour les faire fonctionner. Mais je vais essayer de creser de ce coté.

    Si un modo passe par là, qu'il n'hésite pas à déménager le sujet, s'il considère que le soucis ne vient en effet pas du code

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Tu as essayé en DMZ?

  6. #6
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Idem... Même erreur :S

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Vérifie avec netstat que tu es bien en LISTEN sur ce port et sur quelle interface .
    (0.0.0.0:7779 pour écoute sur toutes les interfaces)

    Pour ton ip 82.125.170.50, tu ne peux pas "binder" sur ton serveur avec cette ip car cette ip n'est pas attachée à une interface de ton serveur. C'est sur la livebox qu'est attachée cette ip.

  8. #8
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Pour le serveur pas de soucis, donc. En effet, lorsque je lance mon programme, mon firewall logiciel le détecte bien, et l'autorise : je vois dans la liste des connection établies "nom_du_serveur Listening 0.0.0.0:7779 TCP".

    Par contre lorsque je scanne mon port sur internet (sur https://www.grc.com/x/ne.dll?bh0bkyd2 par exemple), voici le résultat :

    Your system has achieved a perfect "TruStealth" rating. Not a single packet — solicited or otherwise — was received from your system as a result of our security probing tests. Your system ignored and refused to reply to repeated Pings (ICMP Echo Requests). From the standpoint of the passing probes of any hacker, this machine does not exist on the Internet. Some questionable personal security systems expose their users by attempting to "counter-probe the prober", thus revealing themselves. But your system wisely remained silent in every way. Very nice.

    7779 Stealth vstat

    The ports you specified have been successfully probed. Their open, closed, or stealth status is displayed in the table above. This Text Summary button provides a textual report that can be printed, copied, and saved:
    Donc visiblement le port est clairement inaccessible par internet...


    Lorsque je coupe mon firewall logiciel, mon port passe à "Closed". Mais biensûr, ça ne marche toujours pas. Mieux, en désactivant AUSSI celui d'orange, le port est marqué OUVERT lorsque le serveur est lancé!! Et malgré ça, toujours la même erreur

  9. #9
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Désolé pour le double post, c'est pour bien séparer le dernier message et celui-ci. Visiblement, j'ai trouvé la réponse : en effet, ça n'était pas le code, mais simplement le fait qu'il est impossible de tester une appli client/serveur en utilisant la même connection internet ! Il faut soit 2 connections différentes, soit faire les tests avec les IP privées. J'ai fait le test avec un ami, et tout marche parfaitement (si on désactive les firewall logiciels, et qu'on autorise le port utilisé sur la Livebox, biensûr)

    Voila, merci de votre aide, et j'espère que ça pourra épargner du temps à d'autres qui se poseront la même question que moi!

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je vois pas en quoi ce serait impossible, à moins d'avoir un routeur configuré de façon fort étrange. D'ailleurs, il m'arrive de me servir de cette particularité pour simuler une connexion via Internet mais en utilisant un seul ordinateur. Je me connecte à mon ip publique depuis mon ordi A, le routeur redirige naturellement vers A qui est en DMZ, et A crois qu'il a affaire à un ordi d'un autre réseau (pratique pour tester les protocoles pouvant filtrer les demandes suivant un masque).

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/05/2014, 15h46
  2. [Batch] Connecter une imprimante avec son IP
    Par KDZCrew dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 17/03/2010, 07h32
  3. [Débutant] connecter un serveur avec des ordinateurs clients
    Par Guispeed4262 dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 10/11/2007, 18h36
  4. Réponses: 3
    Dernier message: 14/11/2005, 16h18
  5. Connecter un serveur avec ADSL et RTC
    Par Sunny dans le forum Développement
    Réponses: 7
    Dernier message: 09/09/2002, 11h15

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