域名解析ip

/***********************************************************************************
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值