IPとドメイン名の相互変換
2614 ワード
プログラミングではドメイン名がホストに直接アクセスできないことを知り,IPアドレスに変換する必要がある.しかし、一部のビジネス要件では、IPアドレスをドメイン名に変換する必要があります.
Linuxの下で、IPとドメイン名の相互変換のC言語は実現します:
Linuxの下で、IPとドメイン名の相互変換のC言語は実現します:
#include
#include
#include
#include
#include
// IP
void getIpByHostName(char *hostname);
// IP
void getHontNameByIp(char *ip);
/**
*
*/
// typedef struct hostent {
// char * h_name; //
// char ** h_aliases; //
// int h_addrtype; //
// int h_length; //
// char ** h_addr_list; //
// } hostent;
void getIpByHostName(char *hostname) {
struct hostent * host; // hostent
struct in_addr in;
struct sockaddr_in addr_in;
extern int h_errno;
if((host = gethostbyname(hostname))!=NULL) {
memcpy(&addr_in.sin_addr.s_addr,host->h_addr,4); // 、
in.s_addr=addr_in.sin_addr.s_addr;
printf("host name is %s
", hostname);
printf("IP length: %d
", host->h_length);
printf("Type: %d
", host->h_addrtype);
printf("IP : %s
", inet_ntoa(in));
}
else {
printf("host name is :%s
",hostname);
printf("error : %d
",h_errno);
printf("%s
", hstrerror(h_errno));
}
}
void getHontNameByIp(char *ip) {
struct hostent *host;
struct in_addr in;
struct sockaddr_in addr_in;
extern int h_errno;
if((host=gethostbyaddr(ip, sizeof(ip), AF_INET))!=NULL){
memcpy(&addr_in.sin_addr.s_addr, host->h_addr, 4);
in.s_addr = addr_in.sin_addr.s_addr;
printf("Host Name is %s
", host->h_name);
printf("Ip length %d
", host->h_length);
printf("Type is %d
", host->h_addrtype);
printf("Ip is %s
", inet_ntoa(in));
}
else {
printf("error %d
", h_errno);
printf("%s
", hstrerror(h_errno));
}
}
int main(int argc, char const *argv[]) {
char hostname1[] = "www.ansore.net"; //
char hostname2[] = "www.123qwdferwerfsdfataewfar.net"; //
char ip[] = "139.129.35.50";
getIpByHostName(hostname1);
printf("--------------------------------------------------------
");
getIpByHostName(hostname2);
printf("--------------------------------------------------------
");
getHontNameByIp(ip);
return 0;
}