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.
@+
