/***********************************************************************************
INCLUDE:
#include <stdio.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
IN:
DomainName :解析的域名
GetAdapterNum: 网卡的编号(0-4)
OUT:
strip: 获取到的IP地址
RETURN:
int xxx:success返回网卡口的数量 fail:返回-1
************************************************************************************/
int GetDomainNameToIP(const char * DomainName,const int GetAdapterNum,char *strip )
{
struct hostent *answer;
char ipstr[16];
int AdapterNum ,i;
answer = gethostbyname(DomainName);
if (answer == NULL)
{
herror("gethostbyname"); //由gethostbyname自带的错误处理函数
}
/*协议族AF_INET为IPv4或者AF_INET6为IPv6 */
printf("Type:%s\n", answer->h_addrtype == AF_INET ? "AF_INET" : "AF_INET6");
for(i=0;(answer->h_addr_list)[i]!= NULL;i++){;}
AdapterNum=i;
if((AdapterNum>=GetAdapterNum)&&((answer->h_addr_list)[GetAdapterNum] != NULL))
{
switch(GetAdapterNum)
{
case 0:
inet_ntop(AF_INET, (answer->h_addr_list)[0], ipstr, 16);
printf("%s\n", ipstr);
memcpy(strip,ipstr, sizeof(ipstr));
break;
case 1:
inet_ntop(AF_INET, (answer->h_addr_list)[1], ipstr, 16);
printf("%s\n", ipstr);
memcpy(strip,ipstr, sizeof(ipstr));
break;
case 2:
inet_ntop(AF_INET, (answer->h_addr_list)[2], ipstr, 16);
printf("%s\n", ipstr);
memcpy(strip,ipstr, sizeof(ipstr));
break;
case 3:
inet_ntop(AF_INET, (answer->h_addr_list)[3], ipstr, 16);
printf("%s\n", ipstr);
memcpy(strip,ipstr, sizeof(ipstr));
break;
case 4:
inet_ntop(AF_INET, (answer->h_addr_list)[4], ipstr, 16);
printf("%s\n", ipstr);
memcpy(strip,ipstr, sizeof(ipstr));
break;
default:
break;
}
}
else
{
return -1;
}
return AdapterNum;
}
#if 1
int main()
{
int ret;
char* strip= (char*)malloc(100);
ret=GetDomainNameToIP("baidu.com",2,strip );
printf("ret=%d,strip=%s \n",ret,strip);
free(strip);
return 0;
}
#endif
转载于:https://my.oschina.net/panyuanyi/blog/271013