Problème d'IP Client avec les winsock

Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007 - 26 févr. 2007 à 23:41
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007 - 27 févr. 2007 à 22:59
Boujour a tous.

Je m'interesse en ce moment aux socket sous windows et j'ai un petit probleme actuellement. J'aimerais savoir comment récupérer l'IP d'un client qui se connecte au serveur. En tenant compte que je ne veux pas l'IP d'un hypothétique ROUTEUR (sinon je ne poserais pas de question). Voici le code :

#include <stdio.h>
#include <winsock.h>
#pragma comment(lib, "ws2_32.lib")

char buffer[32]; // pas top... juste pour les tests.

int main()
{
  WSADATA WSAData;
  WSAStartup(MAKEWORD(2,0), &WSAData);
  SOCKET sock;
  SOCKET csock;
  SOCKADDR_IN sin;
  SOCKADDR_IN csin;
  sock = socket(AF_INET, SOCK_STREAM, 0);
  sin.sin_addr.s_addr      = INADDR_ANY;
  sin.sin_family                = AF_INET;
  sin.sin_port                  = htons(1234);
  bind(sock, (SOCKADDR *)&sin, sizeof(sin));
  listen(sock, 0);
  while(1)
  {
    int sinsize = sizeof(csin);
    if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
    {
      sprintf(buffer, "IP = %s\r\n", inet_ntoa(csin.sin_addr)); // on récupère l'adresse du client
      send(csock, buffer, strlen(buffer), 0);
      printf("Client connecté : %s", buffer);
      shutdown(csock, 2);
    }
  }
  return 0;
}

Lorsque je tente des accès depuis l'exterieur par mon IP publique, le serveur m'indique l'IP de mon routeur (ma freebox en fait, soit 192.168.0.254). Les tests de connection sont fais en utilisant telnet fournit avec windows. Je voudrais que le serveur m'indique ma vraie IP, celle que m'attribue mon hebergeur.

@+

19 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
27 févr. 2007 à 08:38
Salut !

As-tu essayé une de mes sources qui te permet de récupérer ton IP internet ?
Si non, voilà l'url :
http://www.cppfrance.com/code.aspx?ID=29467

Tiens-moi au courant.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 08:48
Moi je comprends pas le problème, l'IP locale n'est pas présente sur le réseau
Qu'entends-tu par 'accès depuis l'exterieur'. Sur quelle machine s'exécute ton programme et depuis quelle machine te connectes-tu?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 10:56
Tout d'abord merci pour vos réponses.
J'appelle "accès depuis l'exterieur" une connection depuis internet (et non depuis mon réseau local).

Sinon yoyo269, j'ai deja regardé ta source qui se base sur une requete HTTP vers une fichier PHP. Mais j'aimerais résoudre ce problème directement depuis le code du serveur sans appeller de scripts distants... Et la il y a un hic =>  Il me sort l'ip du routeur (192.168.0.1) au lieu de mon IP internet, celle du client (82.236.***.***)

Dans ton travail en fait, il me faudrait savoir comment dans son mécanisme interne, PHP récupère l'IP du client (mais en plus simple )

J'éspère avoire été assez clair cette fois .
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
27 févr. 2007 à 11:14
Et bien Cphil51, php n'a rien avoir là-dedans.
Ce qui permet d'avoir ton IP internet, c'est le fait que le serveur soit extérieur à ton installation.
Et là c'est très simple. Autrement avec un routeur et en local, je te souhaite bien du courage.
Ma solution est on ne plus simple je pense et très rapide.
Si tu veux je te file le code php pour que tu fasses toi-même ta page php, aucun souci.
En tous cas, si tu trouves une autre méthode, poste ta source sur cppfrance, ça intéressera bcp de monde à mon avis.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 12:47
Tu veux récupérer l'IP du client non? Et tu récupères l'IP du serveur?
Normalement il n'y a aucun problème pour connaitre l'IP du client, tu aura toujours l'IP publique, parce que c'est la seule qui est routable.

Je m'y connais pas en socket, mais tu es sur que csin.sin_addr est l'adresse du client?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 12:59
oui csin.sin_addr contient (normalement) l'IP du client mais il doit y avoir un probleme au niveau du protocole. Il doit y avoire un magnière de traverser le routeur sans problème je pense. Je vais faire des recherches... mais ca fais deja un aprèm. que je planche la dessus :(
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 13:02
T'es sur que 192.168.0.254 est pas l'adresse locale du serveur?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
27 févr. 2007 à 13:06
Oui c'est bien ça vecchio, on récupère l'adresse IP de la personne qui vient de se connecter (être acceptée), donc celle du client.
Bon courage Cphil51, à mon avis t'es pas sorti de l'auberge !!! lol

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 13:14
J'ai essayé. En me connectant de chez moi: 192.168.0.254
De l'extérieur: la bonne adresse.

Si tu me donnes ton IP, on peut faire un test

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 13:22
merci des encouragement lool

Mon serveur est sur ma machine (192.168.0.3). 192.168.0.254 c'est la freebox.
Sinon est-ce que quelqu'un connait NAT? Est ce que ca aurait un rapport avec mon problème?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 13:29
J'ai fait un essai et j'ai bien obtenu mon IP (pas la freebox)

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 13:31
Ca a l'air de marcher en fin de compte. Le probleme ce situe surement sur la facon dont sont traité les packets... Je pense qu'ils ne sortent pas de chez moi mais qu'ils sont reconnus par le routeurs et renvoyés directement...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 13:33
C'est bien ce que je disais, tu te connectes pas vraiment de l'extérieur

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 13:35
Donc le problème n'en était pas un. Merci quand même
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
27 févr. 2007 à 13:40
Comme je le disais avant, il vaut (faut ?) mieux passer par l'extérieur c'est plus simple et plus fiable.
Peut-être que l'on peut faire autrement mais moi j'avais déjà cherché pas mal et j'en étais arrivé à ma page php.
As-tu une contrainte qui t'interdit d'accéder à un serveur externe pour avoir ton IP internet, ou c'est toi qui intimement n'en veut pas ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 févr. 2007 à 13:48
En l'occurence je crois pas que ce soit son problème: ce n'est pas grave d'avoir une ip locale si effectivement il se connecte depuis le serveur
C'est bien il VAUT mieux

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 20:54
En fait je ne veut pas dépendre d'un serveur tout simplement. Je pense
que ce n'est pas une solution durable. Si un jour le serveur disparait
ou ne renvoie plus l'IP, que devient le super programme que tu a fait?
Tu serais obligé de publier un patch (et ca soule :p)
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
27 févr. 2007 à 22:36
lol ! C'est un point de vu.
Moi je suis chez free, la page php que je consulte c'est la mienne, donc pas de souci.
Franchement avant que ça crashe !!!
Mais bon...c'est vous qui voyez.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
Cphil51 Messages postés 87 Date d'inscription jeudi 22 juin 2006 Statut Membre Dernière intervention 24 septembre 2007
27 févr. 2007 à 22:59
Pas forcément un crash. Peut être qu'un jour tu voudras te faire héberger ailleurs...

Bonne soirée.
0
Rejoignez-nous