Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1633 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu][Socket] connaitre l'IP de connexion

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][Socket] connaitre l'IP de connexion

n°1975285
darkiller6​66
Posté le 19-03-2010 à 16:26:20  profilanswer
 

Bonjour a tous,
je suis en train de faire un serveur ftp mais j'ai un probleme avec le mode "passif".

Code :
  1. void    xbind(int skt, struct sockaddr_in *sin)
  2. {
  3.   int   port;
  4.   port = my_getnbr("8080" );
  5.   sin->sin_addr.s_addr = htonl(INADDR_ANY);
  6.   sin->sin_family = AF_INET;
  7.   sin->sin_port = htons(port);
  8.   if (bind(skt, (struct sockaddr *)sin, sizeof(struct sockaddr )) == -1)
  9.     {
  10.       my_puterror("Bind error!\n" );
  11.       exit(EXIT_FAILURE);
  12.     }
  13. }


Comme vous pouvez le voir, j'écoute toutes les connexion avec "INADDR_ANY", mais je n'arrive pas a savoir sur quelle connexion se connecte mon client (je ne sais pas si je m'exprime assez bien). Y a-t-il une fonction pour connaitre la connexion utilisée par mon client une fois que accept() m'a retourne mon file descriptor?


Message édité par darkiller666 le 01-04-2010 à 23:18:45
mood
Publicité
Posté le 19-03-2010 à 16:26:20  profilanswer
 

n°1975396
ptitchep
Posté le 19-03-2010 à 21:24:32  profilanswer
 

Salut
Je ne suis pas sûr d'avoir compris mais je tente:

Citation :

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
[...]
The argument addr is a pointer to a sockaddr structure.  This structure
is filled in with the address of the peer socket, as known to the  com‐
munications  layer.   The  exact format of the address returned addr is
determined by the  socket’s  address  family  (see  socket(2)  and  the
respective protocol man pages).  The addrlen argument is a value-result
argument: it should initially contain the size of the structure pointed
to  by  addr; on return it will contain the actual length (in bytes) of
the address returned.  When addr is NULL nothing is filled in.


---------------
deluser --remove-home ptitchep
n°1975424
darkiller6​66
Posté le 19-03-2010 à 22:37:57  profilanswer
 

Bien essaye ^^ mais c'est pas ca.
accept() remplit bien ma structure avec l'adresse de mon client.
Exemple:
-serveur en écoute sur 127.0.0.1; 192.168.0.1; 10.0.0.6
-client dont l'IP est 10.0.0.9.
Si j'accepte la connexion il va me remplir la structure avec l'IP de mon client donc => 10.0.0.9;
En revanche je veux savoir si il passe par 127.0.0.1, 192.168.0.1 ou  10.0.0.6  dans mon serveur

n°1975473
ptitchep
Posté le 20-03-2010 à 12:09:32  profilanswer
 

Ok, je n'avais pas compris...
Ce que tu veux savoir c'est l'interface réseau utilisée?
Je ne sais pas si ce code est bon, je ne suis pas expert en réseau mais je suis tombé la dessus:
http://www.developpez.net/forums/d [...] ce-reseau/
En tout cas cela donne au moins une piste.
Avec ça, tu dois pouvoir faire une association socket/interface et donc obtenir ce que tu souhaites.


---------------
deluser --remove-home ptitchep
n°1975530
darkiller6​66
Posté le 20-03-2010 à 20:02:05  profilanswer
 

ok merci je test et je te previens

n°1980221
darkiller6​66
Posté le 01-04-2010 à 23:18:11  profilanswer
 

darkiller666 a écrit :

ok merci je test et je te previens


Code :
  1. struct hostent *cur_info;
  2.   char  *str;
  3.   je fais mes connexions ...;
  4.   while ((cur_info = gethostent()) != NULL)
  5.     {
  6.       str = inet_ntoa(*(struct in_addr *)cur_info->h_addr_list[0]);
  7.       str = cur_info->h_addr_list[0];
  8.       printf("%s\n",str);
  9.     }


 
gethostent() m'a liste toutes les interfaces presentes et inet_ntoa(...) m'a donne l'IP de l'interface correspondante.
 
D'un cote quand on y pense, gethostent ne fait (que) lire le fichier /etc/hosts, d'ou son nom  :) .
En tout cas merci pour tout.


Message édité par darkiller666 le 01-04-2010 à 23:22:17

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu][Socket] connaitre l'IP de connexion

 

Sujets relatifs
[Résolu] IE et erreurs JS incompréhensibles[Résolu][SQL/ACCESS] Problème COUNT / GROUP BY
[Résolu] Création d'une page html pour email, largeur zone texte ?[Résolu]Création d'une page html pour email, léger soucis avec outlook
[résolu] C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T[Résolu] Erreur avec ereg_replace
[RESOLU] [JS] Echanger deux imagessocket synchrone asynchrone
[résolu] Parcourir un objet? 
Plus de sujets relatifs à : [Résolu][Socket] connaitre l'IP de connexion


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR