Citation:
Originally posted by DreamWarrior
Bonjour, pourriez-vous être un peu plus précis sur celui-ci. J'ai lu la page de manuel de gethostbyname et il semble être de retour à une adresse interne format générique. Cela doit être converti en un point notation adresse IP, et je ne sais pas comment le faire.
|
La meilleure solution pour des choses comme cela est de parcourir une source de code. Il ya une tonne de code source sur Internet. Et il ya plusieurs programmes que le format des adresses IP. Mais je suis coincé au bureau en attente d'une technologie de pointe, et je n'ai rien de mieux à faire, alors ...
Code:
#ifdef __STDC__
#define PROTOTYPICAL
#endif
#ifdef __cplusplus
#define PROTOTYPICAL
#endif
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>
#ifdef PROTOTYPICAL
int main(int argc, char *argv[])
#else
main(argc,argv)
char *argv[];
#endif
{
char *mess;
struct hostent *hp;
int dumpall;
dumpall=0;
while(*++argv) {
if(!strcmp(*argv,(char *)"-d")) {
dumpall=!dumpall;
continue;
}
/*
* Call gethostbyname for current argument
*/
if(! (hp = gethostbyname(*argv))) {
switch(h_errno){
case HOST_NOT_FOUND:
mess=(char *)"Not Found";
break;
case TRY_AGAIN:
mess=(char *)"Time Out";
break;
case NO_RECOVERY:
mess=(char *)"No Recovery";
break;
case NO_ADDRESS:
mess=(char *)"No Address";
break;
default:
mess=(char *)"unknown error";
break;
}
printf("%s %s\n", *argv, mess);
} else {
printf("%s %s %s \n", *argv, hp->h_name,
inet_ntoa(*(struct in_addr *)(hp->h_addr)));
if(dumpall) {
printf(" addresses:\n");
while(*(hp->h_addr_list)){
printf(" %s \n",
inet_ntoa(*(struct in_addr *)*(hp->h_addr_list)++));
}
printf(" aliases:\n");
while(*(hp->h_aliases)){
printf(" %s \n",*(hp->h_aliases)++);
}
}
}
}
exit(0);
}
Cela devrait fonctionner avec tout c ou c + + compilateur. Mais j'ai seulement testé sur HP-UX.
Citation:
Originally posted by DreamWarrior
Aussi, pour étendre cela un peu, est-il possible d'obtenir les informations à partir d'un descripteur de fichier qui est une prise de courant. IE si le seul élément d'information que j'ai sur la connexion est le descripteur de fichier, puis-je obtenir le sockaddr_in structure de celle de passer à gethostbyname pour ensuite les convertir en une adresse IP?
Merci!
|
Yow! Nous avons 4 heures le temps de réponse.
Vous ne pouvez pas faire cela portably et il exige habituellement root pouvoir. Regardez le code source de lsof. Il ne fait ce genre de choses.
Mais toutes les structures de prises de courant de ne pas stocker des adresses IP des noms de domaine