[Linux] Obtenir l'adresse IP Local [C] [Résolu]

Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
- - Dernière réponse : ZedMaTrix
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
- 28 oct. 2006 à 00:43
Hello à tous !!


Voilà, il me semble que j'avais posté, je sais plus ( je retrouve plus le poste )...


Donc là je fais une belle petite classe ( enfin tout les fonctions pour que ca marche ) FTP.


Le but est simple : inclure un fichier ftp.h et ftp.c et pouvoir faire tout ce que l'on veux.


Le soucis, c'est que en mode Actif, c'est donc à moi de dire au serveur
où se connecter. Pour celà, je doit lui donner un port coupé en deux (
Partie 1 : Port/256, Partie 2 : Port%256 ), et juste avant l'adresse ip
de ma carte réseau.


Donc moi mon problème est pour récupéré l'adresse de la carte réseau... Je me suis inspiré de ce site mais je me retrouve avec mon adresse de rebouclage... ( 127.0.0.1 )


Pouvez vous m'aider ?

ZedMaTriX
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
17 septembre 2012
1
3
Merci
Salut,

D'accord, j'avais compris que le probleme c'etait de recevoir la
connexion. Pour avoir l'ip, je pense que le mieux est de faire un
getsockname() sur le socket que tu utilises pour la connexion de
controle (socket que tu as connecté sur le port 21 du serveur).

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 91 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_aardman
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
3
Merci
Ok c'est bon !!

Aprés avoir fais le connect(), j'ai fais :

// Calcul la taille de la structure sockaddr_in
lintSze = sizeof (struct sockaddr_in);

getsockname(lintfdSck,(struct sockaddr *)&maPrise, &lintSze);

// Affiche l'adresse IP
printf("Adresse IP : %s\n", inet_ntoa(maPrise.sin_addr));

Parfais ! Merci à toi aardman ! Depuis le temps que je cherchais à faire ca !!

ZedMaTriX

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 91 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ZedMaTrix
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
17 septembre 2012
1
0
Merci
Salut,

En général, quand on fait un serveur on ne se bind pas sur une carte
reseau explicitement, mais sur toutes les interfaces disponibles, en
utilisant l'adresse INADDR_ANY lors du bind().
Commenter la réponse de cs_aardman
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
0
Merci
Ce n'est pas un serveur que je veux faire, mais un client ( désolé je l'avais pas précisé ).

Peux tu me donner un exemple de code, ou plus d'informations pour que je puisse récupérer mon adresse IP local s'il te plait?

ZedMaTriX
Commenter la réponse de ZedMaTrix
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
17 septembre 2012
1
0
Merci
Salut,

J'avais compris, mais dans ton cas ton client joue aussi le role du serveur puisqu'il attend une connexion.
Commenter la réponse de cs_aardman
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
0
Merci
Ouais... on pourrais dire ca oui.

Mais alors expique moi mieux ce que tu veux me dire, car je n'ai pas compris

ZedMaTriX
Commenter la réponse de ZedMaTrix
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
17 septembre 2012
1
0
Merci
Salut,

Quand tu appeles bind(), il faut utiliser l'adresse ip locale
INADDR_ANY, comme ca ton socket sera bindé sur toutes les interfaces
locales disponibles.
Commenter la réponse de cs_aardman
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
0
Merci
HHHooooo !! Merci ! Je vais tester !!!!

ZedMaTriX
Commenter la réponse de ZedMaTrix
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
0
Merci
Heum... Parcontre... j'ai fais ca :

/* Fonction pour retrouver son adresse IP local */
void MonIP ( char rstrMonAdrIP[16] )
{
   
    struct sockaddr_in        maCarte;
   
    int lintSock=0;
   
    // Créer une socket
    lintSock = socket(AF_INET,SOCK_STREAM,0);
   
    /* Remplissage de la structure maPrise */
    maCarte.sin_family = AF_INET;
    maCarte.str_addr.s_addr = htonl(INADDR_ANY);
    maCarte.sin_port = htons(0);
   
    blind(lintSock, (SOCKADDR *)&maCarte, sizeof(maCarte));
}

Mais aprés... je voie pas comment injecter dans le char rstrMonAdrIP l'adresse ip ... ?
( je doit être fatigué )

ZedMaTriX
Commenter la réponse de ZedMaTrix
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
17 septembre 2012
1
0
Merci
Salut,

Ce dont je te parle sert à recevoir la connexion du serveur, pas a trouver ton adresse locale.

Une fois que tu as fait ton bind() (et non blind...) sur INADDR_ANY, tu
peux passer ton socket en mode ecoute avec listen() et ensuite, tu peux
appeler accept() pour recevoir la connexion de ton serveur. Au passage,
il faut choisir un autre port que 0 pour se binder.
Commenter la réponse de cs_aardman
Messages postés
178
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
14 août 2008
0
Merci
Haaa... Non LOL

Ca c'est bon !! :)

Moi mon soucis, c'est de trouver mon IP en local, pour pouvoir envoyer une commande PORT au serveur.
Aprés le listen etc... pas de soucis ;)

ZedMaTriX
Commenter la réponse de ZedMaTrix

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.