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

  FORUM HardWare.fr
  Programmation
  C

  [C] Problème pour obtenir l'@ IP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Problème pour obtenir l'@ IP

n°684011
damiraptor
Posté le 25-03-2004 à 15:34:31  profilanswer
 

Je suis sous linux et je voudrais simplement afficher l'adresse IP de ma machine sans donner de paramètres. Le code suivant compile mais me renvoie une erreur de segmentation qui apparemment viendrait d'une incompatibilité avec gethostname. Aidez moi svp.
 
 

Code :
  1. #include <stdio.h>
  2. #include <netdb.h>
  3. #include <arpa/inet.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. int main(){
  7.   struct hostent *hp;
  8.   struct in_addr ad;
  9.   char* nom;
  10.   gethostname(nom, 30);
  11.   printf("%s\n", nom);
  12.   hp = gethostbyname(nom);
  13.   bcopy(hp->h_addr, &ad.s_addr, sizeof(ad.s_addr));
  14.   printf("IP Address = %s\n", inet_ntoa(ad));
  15.   return(0);
  16. }

mood
Publicité
Posté le 25-03-2004 à 15:34:31  profilanswer
 

n°684039
SoWhatIn22
Posté le 25-03-2004 à 15:47:33  profilanswer
 

c'est limite comme question.
prend un bouquin de C et lis correctement les docs...
pour faire très simple:
 
char nom[30];
gethostname(nom,30);

n°684055
damiraptor
Posté le 25-03-2004 à 15:56:59  profilanswer
 

ok merci du conseil
ca marche :D

n°684059
Moktar1er
No one replies...
Posté le 25-03-2004 à 15:59:14  profilanswer
 

bah oui, c'est logique, quand tu fais "char* nom" tout bêtement, tu déclare juste un pointeur, et tu n'as donc pas l'éspace nécessaire pour y loger les données de ta chaîne... quand tu fais "char nom[30]" là tu demandes de la place pour ranger 30 caractères...

n°684108
Taz
bisounours-codeur
Posté le 25-03-2004 à 17:05:50  profilanswer
 

SoWhatIn22 a écrit :

c'est limite comme question.
prend un bouquin de C et lis correctement les docs...
pour faire très simple:
 
char nom[30];
gethostname(nom,30);
 

:non: on oublie pas son pote sizeof ok ?
 
 
char nom[30];
gethostname(nom, sizeof nom);

n°687273
steboulay
Posté le 30-03-2004 à 12:58:57  profilanswer
 

Voila un ptit bout de code ki te donnera ton ip local + le nom réseau de ta machine :  
 
 
#include <stdio.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <netdb.h>  
#include <string.h>  
 
 
#define MAXHOSTNAME 32  
/* longueur max de son propre nom de machine */  
#define PORT_DIST 0x6198
 /* numéro de port distant avec lequel on va tenter de  
dialoguer */  
 
/* on va ici mettre les deux extremites de la liaison sur la meme machine */  
struct hostent *infohost();  
void adresSock();  
 
 
main()  
{  
int ip;  
/* descripteur du socket */  
 
struct sockaddr_in sa; /* structure adresse socket */  
int ssa;  
/* taille de la structure sa */  
struct hostent *hp;  
/* resultat de la recherche du nom */  
/* recherche des infos sur la machine qui heberge le programme */  
hp = infohost();  
 
/* lecture des adresses dans la socket */  
adresSock(ip);  
 
/* mise à zero de la structure sa */  
ssa = sizeof(sa);  
memset(&sa, 0, ssa);  
 
/* copie de l'adresse dans la structure sa */  
bcopy((char *)hp->h_addr, (char *)&sa.sin_addr, hp->h_length);  
sa.sin_family = hp->h_addrtype;  
 
/* copie du numero de port dans la structure sa */  
sa.sin_port = htons(PORT_DIST);  
adresSock(ip);  
}  
 
/* infohost : recherche et affichage d'informations sur la machine hote */  
struct hostent *infohost() {  
char host[MAXHOSTNAME+1]; /* tableau pour accueillir le nom de machine sur lequel  
tourne ce programme +1 à cause du fin de caractère . */  
 
struct hostent *hp;  
/* resultat de la recherche du nom */  
char *adrIPp;  
struct in_addr adrIP;  
gethostname(host, MAXHOSTNAME);  
printf("nom de la machine sur lequel tourne ce programme : %s\n", host);  
if((hp=gethostbyname(host))==NULL)  
{  
fprintf(stderr, "machine non identifiee par gethostbyname\n" );  
exit(1);  
}  
adrIP.s_addr=*(int *)hp->h_addr;  
adrIPp =(char *)inet_ntoa(adrIP);  
printf("adresse IP de cette machine : %s\n", adrIPp);  
return(hp);  
}  
 
/* adresSock : lecture des adresses dans la socket */  
void adresSock(int ip)
{  
struct sockaddr_in sa;  
/* structure adresse socket */
}  
 
====================================
nom de la machine sur lequel tourne ce programme : ***
adresse IP de cette machine : 10.****.****.****
====================================

n°687283
Taz
bisounours-codeur
Posté le 30-03-2004 à 13:07:10  profilanswer
 

int main()  
 
pas de bcopy -> memcpy/memmove
 
ta variable ssa ne sert à rien
 


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

  [C] Problème pour obtenir l'@ IP

 

Sujets relatifs
Probleme htmlUn probleme avec unserialize( )
Problème pour signer une applet : pb avec jarsignerprobleme avec la couleur de fond d'un DIV...
Probleme avec cette merd... de easy php/ myadminprobleme avec iostream.h dans visual.net
Help : Probleme PHP : tableaux et variables!Probleme au niveau des classes...
Problème de connection à une base de données Oracle[C]problème read sur port série
Plus de sujets relatifs à : [C] Problème pour obtenir l'@ IP


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