Problème pour obtenir l'@ IP [C] - C - Programmation
Marsh Posté le 25-03-2004 à 15:47:33
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);
Marsh Posté le 25-03-2004 à 15:59:14
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...
Marsh Posté le 25-03-2004 à 17:05:50
SoWhatIn22 a écrit : c'est limite comme question. |
on oublie pas son pote sizeof ok ?
char nom[30];
gethostname(nom, sizeof nom);
Marsh Posté le 30-03-2004 à 12:58:57
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.****.****.****
====================================
Marsh Posté le 30-03-2004 à 13:07:10
int main()
pas de bcopy -> memcpy/memmove
ta variable ssa ne sert à rien
Marsh Posté le 25-03-2004 à 15:34:31
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.