Cita:
Originalmente publicado por DreamWarrior
Oye, ¿podría ser un poco más específico en este caso. He leído la página del manual para gethostbyname y parece estar regresando un formato genérico de direcciones internas. Que debe convertirse en un punto de notación dirección IP, y no sé cómo hacerlo.
|
La mejor solución para cosas como esta es para navegar por algunos de código fuente. Hay un montón de código fuente en Internet. Y hay varios programas que el formato de direcciones IP. Pero yo estoy atrapado en la oficina en espera de una tecnología, y no tengo nada mejor que hacer, así que ...
Código:
#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);
}
Esto debería funcionar con cualquier C o C + + compilador. Pero yo sólo probado en HP-UX.
Cita:
Originalmente publicado por DreamWarrior
Además, para ampliar esto un poco, es posible obtener la información a partir de un descriptor de archivo que es un socket. Es decir, si la única pieza de información que tengo sobre la conexión es el descriptor de archivo, puede obtener la estructura sockaddr_in de que para pasar a continuación a gethostbyname convertir en un IP?
Gracias!
|
Yow! Tenemos tiempo de respuesta de 4 horas.
No se puede hacer que portably y normalmente requiere que el poder de root. Mira el código fuente de lsof. Que hace cosas por el estilo.
Pero todos los zócalos de las estructuras de dirección IP no almacenar los nombres de dominio