linux ip 域名解析,基于Linux,URL解析以及获取域名的IP地址。

int util_resolv_domain_name(const char* domain_name,char* ipv4_addr,char* ipv6_addr,int*result_ind)

{struct addrinfo *answer,hints,*addr_info_p;intret;struct sockaddr_in *sinp4;struct sockaddr_in6 *sinp6;char*addr;if( result_ind )

{*result_ind=0;

}

memset(&hints, 0, sizeof(hints));

hints.ai_family=AF_UNSPEC;

hints.ai_socktype=SOCK_STREAM;

hints.ai_flags=AI_PASSIVE;/** The getaddrinfo() function allocates and initializes a linked list of addrinfo structures, one for each network address that matches node and service, subject to any

restrictions imposed by hints, and returns a pointer to the start of the list in res. The items in the linked list are linked by the ai_next field.

**/ret= getaddrinfo(domain_name, NULL, &hints, &answer);if ( !ret ) {for (addr_info_p = answer; addr_info_p != NULL; addr_info_p = addr_info_p->ai_next) {if(addr_info_p->ai_family ==AF_INET) {

sinp4= (struct sockaddr_in *)addr_info_p->ai_addr;/** The inet_ntoa() function converts the Internet host address in, given in network byte order, to a string in IPv4 dotted-decimal notation. The string is returned in a

statically allocated buffer, which subsequent calls will overwrite.

**/addr= inet_ntoa( sinp4->sin_addr);if( ipv4_addr ) {

strcpy(ipv4_addr,addr);

}if( result_ind ) {*result_ind=(*result_ind)|IPv4_EXIST_FLAG;

}

}else if(addr_info_p->ai_family ==AF_INET6) {

sinp6= (struct sockaddr_in6 *)addr_info_p->ai_addr;if( ipv6_addr ) {

sprintf(ipv6_addr

,"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",sinp6->sin6_addr.s6_addr[0]

,sinp6->sin6_addr.s6_addr[1]

,sinp6->sin6_addr.s6_addr[2]

,sinp6->sin6_addr.s6_addr[3]

,sinp6->sin6_addr.s6_addr[4]

,sinp6->sin6_addr.s6_addr[5]

,sinp6->sin6_addr.s6_addr[6]

,sinp6->sin6_addr.s6_addr[7]

,sinp6->sin6_addr.s6_addr[8]

,sinp6->sin6_addr.s6_addr[9]

,sinp6->sin6_addr.s6_addr[10]

,sinp6->sin6_addr.s6_addr[11]

,sinp6->sin6_addr.s6_addr[12]

,sinp6->sin6_addr.s6_addr[13]

,sinp6->sin6_addr.s6_addr[14]

,sinp6->sin6_addr.s6_addr[15]

);

}if( result_ind ) {*result_ind=(*result_ind)|IPv6_EXIST_FLAG;

}

}

}

freeaddrinfo(answer);

}else{return -1;

}return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值