2 janeqi1987 janeqi1987 于 2015.06.10 16:12 提问

centos上通过dns方式调用gethostbyname函数获取IP地址,还需要哪些设置吗?

对端IP地址可能会改变,想通过dns方式来获取对端IP地址。即在本地文件中配置对端网址,通过该网址获取到IP。我写了如下代码,ping www.baidu.com有回复报文,但是程序却得到IP地址,还需要什么配置吗?请高手指导下,谢谢!
int main(int argc, char **argv)
{
char **pptr = NULL;
struct hostent *hptr = NULL;
char str[32] = {0};
char *dns_data = NULL;
char *filename = "/home/qshy/dns_test.c";

//读取配置文件数据(即对端网址)
if (-1 == read_dns(filename, &dns_data))
{
    printf("read_dns failed.\n");
    return -1;
}

if((hptr = gethostbyname(dns_data)) == NULL)
{
    printf(" gethostbyname error for host:%s\n", dns_data);
    printf("error:%s\n", strerror(errno));
    free(dns_data);
    return 0;
}

free(dns_data);
//printf("official hostname:%s\n",hptr->h_name);
//for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)
//    printf(" alias:%s\n",*pptr);

switch(hptr->h_addrtype)
{
    case AF_INET:
    case AF_INET6:
        pptr=hptr->h_addr_list;
        for(; *pptr!=NULL; pptr++)
            printf(" address:%s\n",
                   inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
        //printf(" first address: %s\n",
        //           inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));
    break;

    default:
        printf("unknown address type\n");
    break;
}

free(dns_data);

return 0;

}

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.06.10 22:54

是没有获取到ip地址吧?可以查看一下错误信息,是不是网络问题或者防火墙

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
linux 环境下 用gethostbyname函数获取 DNS的服务器列表 名称 IP
#include #include //gethostbyname//#include //struct in_addr()#include void getHostName(){ struct hostent *myhost; char ** pp; struct in_addr addr; myhost = gethostbyname("www.sohu.com");  printf(
gethostbyname 和 gethostbyname_r(可重入的)得到dns信息
使用这个东西,首先要包含2个头文件: #include #include struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.com","wpc"等等。 传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。 struct hostent {
使用gethostname()和gethostbyname()获取IP地址和计算机名
使用gethostname()和gethostbyname()获取IP地址和计算机名,记录一下,省得老忘。   int CNetTestDlg::GetLocalHostName( CString& sHostName ) // 获取机器名 { char szHostName[256]; int nRetCode; nRetCode = gethostname(szHostNa
Linux下的网络函数gethostbyname/gethostbyaddr会访问DNS吗?
gethostbyname、gethostbyaddr在解析的时候,系统默认到 /etc/hosts 文件中匹配,再到DNS服务器解析,这个顺序是可以改的,只要修改 /etc/host.conf 里的  host 和 bind 的顺序即可,我们可以做个试验: 在DNS服务器配置
iOS 使用gethostbyname() 解析域名得到IP
解析域名得到IP 参考:http://www.cocoachina.com/bbs/read.php?tid-142713-page-1.html #include #include -(NSString *) getIPWithHostName:(const NSString *)hostName { const char *hostN= [hostNam
使用lwip的DNS功能查询域名对应的IP地址
<br />lwip提供了从域名查询其IP地址的功能,提供该功能的函数为:<br /><br /> err_t netconn_gethostbyname(const char *name, struct ip_addr *addr)<br /><br /> 定义和实现分别在lwip/src/include/lwip/api.h和lwip/api/api_lib.c中<br /><br /> 但是需要注意的是在使用该函数前需要做两件事情:<br /> 1. 在用户配置文件lwipopts.h中打开D
LWIP 实现DNS域名解析
使用EDP协议,需要用到域名解析功能,所以把LWIP的DNS添加上去了,走了写弯路,写出来,给大家借鉴下: 1. 先把宏定义添加上去 #ifndef LWIP_DNS #define LWIP_DNS                        1 #endif 2. 在系统初始化调用 dns_init(); 3. 在while(1)之前或者在你认为需要调用的地方调用d
名字与地址转换 (gethostbyname、getservbyname、getaddrinfo、getnameinfo等)
转自:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/06/2625584.html 本章讲述在名字和数值地址间进行转换的函数:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务器名字和端口号间进行转换。   1.域名系统 域
VC++根据域名获取IP地址GetHostByName()
#include #include #pragma comment(lib,"ws2_32.lib") int main () { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData
LWIP之DNS域名解析(二)
(一)交代了下DNS.C文件的代码,那么在(二)中我再补充下 DNS.h的代码,并做简要说明。 之后是netdb.h的代码和netdb.c的代码! 代码已经注释完。 代码中可能加了注释后,可能会出现一些类似这种代码,是因为我编辑时,出现的插入,在csdn提供的编写环境里,会自动添加一些语句。 大家可以根据经验,手动剔除掉,如果大家想直接复制粘贴代码的话。。。 #ifndef