convertir l’hôte en ip par sockaddr_in gethostname, etc.

J’ai besoin d’aide pour convertir hostname en ip et l’insérer dans sockaddr_in-> sin_addr pour pouvoir affecter char. Par exemple, je saisis: localhost et cela me donne 127.0.0.1

J’ai trouvé le code, mais je ne sais pas pourquoi il me donne de mauvais numéros

//--- #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  //--- ///CZY WPISANO HOST struct in_addr inaddr; inaddr.s_addr = inet_addr(argv[1]); if( inaddr.s_addr == INADDR_NONE) //if sHost is name and not IP { struct hostent* phostent = gethostbyname( argv[1]); if( phostent == 0) bail("gethostbyname()"); if( sizeof(inaddr) != phostent->h_length) bail("problem z inaddr"); // error something wrong, puts(argv[1]); inaddr.s_addr = *((unsigned long*) phostent->h_addr); //strdup( inet_ntoa(inaddr)); srvr_addr = inet_ntoa(adr_srvr.sin_addr); puts(srvr_addr); } 

J’ai aussi écrit mon propre code mais je ne sais pas comment transférer des données de sockaddr à sockaddr_in:

 ///CZY WPISANO HOST if(argv[1][0]>=(char)'a' && argv[1][0]h_addr_list; } 

adr_srvr est un type char *

J’ai vraiment besoin d’aide, merci!

Essayez quelque chose comme ça:

  struct hostent *he; struct sockaddr_in server; int socket; const char hostname[] = "localhost"; /* resolve hostname */ if ( (he = gethostbyname(hostname) ) == NULL ) { exit(1); /* error */ } /* copy the network address to sockaddr_in structure */ memcpy(&server.sin_addr, he->h_addr_list[0], he->h_length); server.sin_family = AF_INET; server.sin_port = htons(1337); /* and now you can connect */ if ( connect(socket, (struct sockaddr *)&server, sizeof(server) ) { exit(1); /* error */ } 

J’ai écrit ce code directement de ma mémoire, je ne peux donc pas en garantir le fonctionnement, mais je suis presque sûr que tout devrait bien se passer.

Ce script shell comstack le code C correct, qui, je crois, fera ce que vous voulez:

 rm -f 1; cat > 1.c < #include  #include  #include  #include  #include  #include  void do_one(char *the_name,int port_number) { int my_socket; char **pointer_pointer; char answer[INET_ADDRSTRLEN]; struct hostent *returned_host; struct sockaddr_in outgoing_address; printf("==========\n"); printf("destination : %s:%d\n",the_name,port_number); returned_host=gethostbyname(the_name); if(returned_host==NULL) { fprintf(stderr,"error %d\n",h_errno); return; } printf("host's official name: %s\n",returned_host->h_name); for(pointer_pointer=returned_host->h_aliases; *pointer_pointer; pointer_pointer++ ) { printf("alias : %s\n",*pointer_pointer); } for(pointer_pointer=returned_host->h_addr_list; *pointer_pointer; pointer_pointer++ ) { inet_ntop(AF_INET,(void *)*pointer_pointer,answer,sizeof(answer)); printf("IP address : %s\n",answer); my_socket=socket(AF_INET,SOCK_STREAM,0); if(my_socket<0) { perror("socket()"); return; } memset(&outgoing_address,0,sizeof(outgoing_address)); outgoing_address.sin_family=AF_INET; outgoing_address.sin_port=htons(port_number); memmove(&outgoing_address.sin_addr, *pointer_pointer, sizeof(&outgoing_address.sin_addr) ); if(connect(my_socket,(struct sockaddr*)&outgoing_address,sizeof(outgoing_address))) { perror("connect()"); return ; } printf("connection established on file descriptor %d\n",my_socket); } } /* do_one() */ int main(void) { do_one("localhost",80); do_one("localhost",81); do_one("127.0.0.1",80); do_one("tiger",80); do_one("www.google.com",80); return 0; } /* main() */ EOD 

La sortie que j'ai obtenue était la suivante:

 ========== destination : localhost:80 host's official name: localhost IP address : 127.0.0.1 connection established on file descriptor 3 ========== destination : localhost:81 host's official name: localhost IP address : 127.0.0.1 connect(): Connection refused ========== destination : 127.0.0.1:80 host's official name: 127.0.0.1 IP address : 127.0.0.1 connection established on file descriptor 5 ========== destination : tiger:80 host's official name: tiger.x441afea5.org alias : tiger IP address : 10.0.0.1 connection established on file descriptor 6 ========== destination : www.google.com:80 host's official name: www.l.google.com alias : www.google.com IP address : 74.125.229.50 connection established on file descriptor 7 IP address : 74.125.229.52 connection established on file descriptor 8 IP address : 74.125.229.48 connection established on file descriptor 9 IP address : 74.125.229.49 connection established on file descriptor 10 IP address : 74.125.229.51 connection established on file descriptor 11 

J'espère que cela t'aides.