Citat:
Ursprungligen postat av DreamWarrior
Hej, kan ni vara lite mer specifik på denna. Jag läste mannens sida för gethostbyname och det verkar vara att returnera en generell inre adressformatet. Som måste omvandlas till en dot notation IP-adress, och jag vet inte hur man gör det.
|
Den bästa lösningen för att saker som detta är att bläddra i några källkod. Det finns en ton av källkod på Internet. Och det finns flera program som format IP-adresser. Men jag är instängd på kontoret och väntar på en teknik, och jag inte har något annat att göra, så ...
Kod:
#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);
}
Detta borde arbeta med något C eller C + + kompilator. Men jag bara testats på HP-UX.
Citat:
Ursprungligen postat av DreamWarrior
Dessutom, för att förlänga en bit, är det möjligt att få information från en fil deskriptor som är en socket. Det vill säga om den enda uppgift jag har om anslutningen filen deskriptor, kan jag få sockaddr_in struktur från att övergå till gethostbyname att sedan omvandla en IP?
Tack!
|
Yow! Vi har 4 timmars svarstid.
Du kan inte göra det portably och det oftast kräver root-behörighet. Titta på källkoden för lsof. Det gör sådana saker.
Men alla uttag strukturer lagra IP-adress inte domännamn